还剩35页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
摘要20世纪90年代,国际上电子和计算机技术较先进的国家,一直在积极探索新的电子电路设计方法,并在设计方法、工具等方面进行了彻底的变革,取得了巨大成功在电子技术设计领域,可编程逻辑器件(如CPLD、FPGA)的应用,已得到广泛的普及,这些器件为数字系统的设计带来了极大的灵活性这一切极大地改变了传统的数字系统设计方法、设计过程和设计观念,促进了EDA技术的迅速发展本次设计在EDA__平台QUARTUSⅡ
7.2上利用VHDL语言设计矩阵键盘控制接口电路要求设计一个4×9矩阵键盘,一共有三个模块,分别为扫描电路模块、时钟产生模块、键盘译码电路和按键标志位产生电路扫描模块中是为了产生扫描__,来利用扫描__来扫描键盘中是否有按键按下键盘译码电路和按键标志位产生电路也是为了配合扫描模块来扫描电路中是否有按键按下,而且还要求它来产生按键标志__,以便和外部电路握手时钟产生电路是为了产生不同频率的__,来驱动上面两个电路的运转通过对课题的分析研究,掌握了VHDL语言编程方法,同时也增强了个人的学习能力和动手能力关键词FPGA/CPLD;矩阵键盘;仿真AbstractMorecountrieswhichh__eadvan__delectronicandcomputertechnologyamongtheInternationalfieldh__ebeenactivelyexploringnewelectroniccircuitdesignmethodanddesignmethod.Andthey__desomecompletelyrefor__tioninthedesignmethodsandthetoolsthathasachievedahugesuc__sssin__the1990s.IntheElectricalTechnologyDesignfieldprogram__blelogicdevi__suchas:CPLDFPGA’sadhibitionh__ebeenalreadypopularized.Allthosedevi__s__deagreatflexibilitytothedesignofthedigitalsystem.Andalsochangedthetraditionaldigitalsystem’designmethodsdesignpro__dureandthedesigncon__ptimmensely.Anditisgreatlyenhan__dthedevelopmentoftheEDA.CircuitdesigningthatQUARTUSⅡdevelopingplatforminEDA__kesuseofVHDLlanguagedesign__trixkeyboardinte_____circuiton
7.2originallytime.Requirementistodesigna__trixkeyboard4×9atotalofthreemodulesnamely:scanningcircuitmoduleclockgenerationmodulethekeyboarddecodercircuitandthekeyflaggenerationcircuit.Scannermoduleistogeneratescanningsignalstothescanningsignaltoscanthekeyboardbuttonpresswhetherthere.Keyboarddecodingcircuitandbuttonflaggeneratingcircuitisconnectedtothescanningmoduletoscanthecircuitiftherearekeypressedbutalsorequiresittogeneratekeysignsandsignalsandexternalcircuittoshakehands.Clockgeneratingcircuitistogeneratesignalsofdifferentfrequencytodrivetheoperationoftheabovetwocircuits.Throughthe____ysisandresearchoftheissueknowabouttheVHDLlanguageprogrammingmystudyandpracti__abilitywasimprovedatthesametime.Keywords FPGA/CPLD;__trixkeyboard;Simulation目录TOC\o1-3\h\z\u
1.绪论
11.1FPGA概况
11.2本课题的研究意义2本章小结
22.VHDL语言介绍与QuartusII
7.232-Bit软件介绍
32.1VHDL语言的介绍3语言概述3语言的优点4利用VHDL语言设计数字系统的特点6VHDL语言的基本结构
72.2QuartusII
7.232-Bit软件介绍及其用法7软件介绍7软件的用法10本章小结
133.矩阵键盘接口电路的原理与总体设计
143.1矩阵键盘接口电路的原理
143.2总体设计16本章小结
164.各模块的设计及仿真
174.1键盘扫描电路
174.2键盘译码电路和按键标志位产生电路
194.3时钟产生模块
244.4键盘接口电路顶层电路实现27本章小结28结论29致谢30____31附录程序
321.绪论
1.1FPGA概况早期的可编程逻辑器件只有可编程只读存储器PROM、紫外线可擦除只读存储器EPROM和电可擦除只读存储器E2PROM三种由于结构的限制,它们只能完成简单的数字逻辑功能其后出现了一类结构上稍复杂的可编程芯片,即可编程逻辑器件PLD,它能够完成各种数字逻辑功能典型的PLD由一个“与”门和一个“或”门阵列组成,而任意一个组合逻辑都可以用“与—或”表达式来描述,所以PLD能以乘积和的形式完成大量的组合逻辑功能这一阶段的产品主要有PAL可编程阵列逻辑和GAL通用阵列逻辑PAL由一个可编程的“与”平面和一个固定的“或”平面构成,或门的输出可以通过触发器有选择地被置为寄存状态PAL器件是现场可编程的,它的实现工艺有反熔丝技术、EPROM技术和E2PROM技术还有一类结构更为灵活的逻辑器件是可编程逻辑阵列PLA,它也由一个“与”平面和一个“或”平面构成,但是这两个平面的连接关系是可编程的PLA器件既有现场可编程的,也有掩膜可编程的在PAL的基础上又发展了一种通用阵列逻辑GAL、GenericArrayLogic,如GAL16V
8、GAL22V10等它采用了E'PROM工艺,实现了电可擦除、电可改写,其输出结构是可编程的逻辑宏单元,因而它的设计具有很强的灵活性,至今仍有许多人使用这些早期的PLD器件的一个共同特点是可以实现速度特性较好的逻辑功能,但其过于简单的结构也使它们只能实现规模较小的电路为了弥补这一缺陷,20世纪80年代中期,Altera和Xilinx分别推出了类似于PAL结构的扩展型CPLDComplexProgram__bleLogicDvi__和与标准门阵列类似的FPGAFieldProgram__bleGateArray,它们都具有体系结构和逻辑单元灵活、集成度高以及适用范围宽等特点这两种器件兼容了PLD和通用门阵列的优点,可实现较大规模的电路,编程也很灵活与门阵列等其他ASICApplicationSpecificIC相比,它们又具有设计__周期短、设计制造成本低、__工具先进、标准产品不需测试、质量稳定以及可实时在线检验等优点,因此被广泛应用于产品的原型设计和产品生产(一般在10000件以下)之中几乎所有应用门阵列、PLD和中小规模通用数字集成电路的场合均可应用FPGA和CPLD器件
[1]
[2]
1.2本课题的研究意义近年来EDA技术在电子领域引发的技术__,推动着电子技术的迅猛发展,为世人所瞩目,而FPGA为代表的可编程逻辑器件的应用,更是受到业内人士的普遍__伴随着大规模集成电路和计算机技术的高速发展,在设计工业自动化,仪器仪表,计算机设计与应用、通信、国防等领域的电子系统中,FPGA技术的含量正以惊人的速度提升将尽可能大的完整的电子系统在单一FPGA芯片中实现已成为现实,电子类新技术项目的__也更多地依赖于FPGA技术的应用作为FPGA研究课题之一的矩阵键盘控制接口电路的设计,在FPGA设计中是一个经常被提到的话题,就像是利用PFGA设计数字中一样,虽然简单,但是却是一个很有研究意义的话题,涉及到怎么样才能是FPGA资源更加充分利用,现在很多电子产品都涉及到按键,小的有__按键,大的有N*N的矩阵键盘,__按键由于案件的个数少,也就没必要考虑资源的利用问题了而矩阵键盘,由于按键多,对整个系统的影响大,所以肯定要考虑资源的利用问题,而且还要考虑一下电路里面的时序问题本次设计要求设计一个4*9矩阵键盘,也就是行为4,列为9,一共可以设计36个按键其中设计方法为一般判断键盘中有没有按键按下是通过航线送入扫描__,然后从列线中读取状态得到的,其方法是依次给行线送入低电平,检查列线的输入如果列线__趣味高电平,则代表低电平__所在的行中无按键按下,反之,则有,则在低电平__所在的行和出现低电平的交叉处有按键按下一共有三个模块,分别为扫描电路模块、时钟产生模块、键盘译码电路和按键标志位产生电路扫描模块中是为了产生扫描__,来利用扫描__来扫描键盘中中是否有按键按下键盘译码电路和按键标志位产生电路是为了配合扫描模块来扫描电路中是否有按键按下,而且还要求它来产生按键标志__,以便和外部电路握手时钟产生电路是为了产生不同频率的__,来驱动上面两个电路的运转在设计完各个模块后,还要对每个模块进行仿真,在仿真的过程中要对参数精心设计,要不然看不出结果的本章小结本章首先介绍了FPGA的发展史,主要介绍了一下FPGA的发展年代,以及是怎么样发展起来的在第二节里面介绍了以下本文的研究意义,在研究意义里面介绍了一下矩阵键盘的设计方法以及本次设计的主要设计模块最后介绍了一下各个模块的作用和特点
2.VHDL语言介绍与QuartusII
7.232-Bit软件介绍
2.1VHDL语言的介绍VHDL语言概述VHDL语言的英文全名是VeryHighSpeedIntegratedCircuitHardwareDescriptionLanguage,即超高速集成电路硬件描述语言HDL发展的技术源头是在HDL形成发展之前,已有了许多程序设计语言,如汇编、C、Pascal、Fortran、Prolog等这些语言运行在不同硬件平台和不同的操作环境中,它们适合于描述过程和算法,不适合作硬件描述CAD的出现,使人们可以利用计算机进行建筑、服装等行业的辅助设计,电子辅助设计也同步发展起来在从CAD工具到EDA工具的进化过程中,电子设计工具的人机界面能力越来越高在利用EDA工具进行电子设计时,逻辑图、分立电子原件作为整个越来越复杂的电子系统的设计已不适应任何一种EDA工具,都需要一种硬件描述语言来作为EDA工具的工作语言这些众多的EDA工具软件__者,各自推出了自己的HDL语言HDL发展的社会根源是美国国防部电子系统项目有众多的承包公司,由于各公司技术路线不一致,许多产品不兼容,他们使用各自的设计语言,使得甲公司的设计不能被乙公司重复利用,造成了信息交换困难和维护困难美国__为了降低__费用,避免重复设计,国防部为他们的超高速集成电路提供了一种硬件描述语言,以期望VHDL功能强大、严格、可读性好__要求各公司的合同都用它来描述,以避免产生歧义由__牵头,VHDL工作小组于1981年6月成立,提出了一个满足电子设计各种要求的能够作为工业标准的HDL1983年第3季度,由IBM公司、TI公司、Intermetrics公司签约,组成__小组,工作任务是提出语言版本和__软件环境1986年IEEE标准化组织开始工作,讨论VHDL语言标准,历时一年有余,于1987年12月通过标准审查,并宣布实施,即IEEESTD1076-1987[LRM87]1993年VHDL重新修订,形成了新的标准,即IEEESTD1076-1993[LR__3]从此以后,美国国防部实施新的技术标准,要求电子系统__商的合同文件一律采用VHDL文档即第一个__VHDL标准得到__、实施和普及HDL语言在国外有上百种高等学校、科研单位、EDA公司都有自己的HDL语言现选择较有影响的作简要介绍Canden__公司是一家著名的EDA公司,财力雄厚该公司的VerilogHDL于1983年由GateWayDesignAuto__tic公司的PhilMoorby首创他在1984-1985年间成功设计了Verilog-XL仿真器,于1986年提出了快速门级仿真的XL算法,使VerilogHDL语言变得更加丰富和完善,从而受到了EDA工具设计公司的青睐19__年Canden__公司__了GDA公司,VerilogHDL语言从此变为Canden__公司的“私有财产”成为Canden__公司的EDA设计环境上的硬件描述语言经过Canden__公司的努力,VerilogHDL于1995年成为IEEE标准,也是民间公司第一个硬件描述语言标准,即VerilogHDL1364-1995由于VerilogHDL语言从C语言发展来,所以有C语言基础的设计人员能够较快入门ALTERA公司是一家半导体器件公司,其CPLD器件在世界市场上占主导地位这家公司不仅是硬件生产厂商,也是EDA工具__商,它的EDA工具__X+plusII、Quartus由于人机界面友好、易于使用、性能优良,而受到FPGA、CPLD器件设计人员的欢迎运行在__X+plusII环境下的VHDL语言具有C语言设计风格,好学好用,因此被众多用户使用HDL语言来自不同地方,由不同语言演变而来,为了各平台之间相互转换,又推出了EDIFElectronicDesignInterchangeFor__t它不是一种语言,而是用于不同数据格式的EDA工具之间的交换设计数据VHDL语言的优点传统的硬件电路设计方法是采用自下而上的设计方法,即根据系统对硬件的要求,详细编制技术规格书,并画出系统控制流图;然后根据技术规格书和系统控制流图,对系统的功能进行细化,合理地划分功能模块,并画出系统的功能框图;接着就进行各功能模块的细化和电路设计;各功能模块电路设计、调试完成后,将各功能模块的硬件电路连接起来再进行系统的调试,最后完成整个系统的硬件设计采用传统方法设计数字系统,特别是当电路系统非常庞大时,设计者必须具备较好的设计经验,而且繁杂多样的原理图的阅读和修改也给设计者带来诸多的不便为了提高__的效率,增加已有__成果的可继承性以及缩短__周期,各ASIC研制和生产厂家相继__了具有自己特色的电路硬件描述语言HardwareDescriptionLanguage,简称HDL但这些硬件描述语言差异很大,各自只能在自己的特定设计环境中使用,这给设计者之间的相互交流带来了极大的困难因此,__一种强大的、标准化的硬件描述语言作为可相互交流的设计环境已势在必行于是,美国于1981年提出了一种新的、标准化的HDL,称之为VHSIC(VeryHighSpeedIntegratedCircuit)HardwareDescriptionLanguage,简称VHDL这是一种用形式化方法来描述数字电路和设计数字逻辑系统的语言设计者可以利用这种语言来描述自己的设计思想,然后利用电子设计自动化工具进行仿真,再自动综合到门级电路,最后用PLD实现其功能综合起来讲,VHDL语言具有如下优点1VHDL语言功能强大,设计方式多样VHDL语言具有强大的语言结构只需采用简单明确的VHDL语言程序就可以描述十分复杂的硬件电路同时它还具有多层次的电路设计描述功能此外,VHDL语言能够同时支持同步电路、异步电路和随机电路的设计实现这是其他硬件描述语言所不能比拟的VHDL语言设计方法灵活多样,既支持自顶向下的设计方式,也支持自底向上的设计方法;既支持模块化设计方法也支持层次化设计方法2VHDL语言具有强大的硬件描述能力VHDL语言具有多层次的电路设计描述功能,既可描述系统级电路,也可以描述门级电路;描述方式既可以采用行为描述、寄存器传输描述或者结构描述,也可以采用三者的混合描述方式同时,VHDL语言也支持惯性延迟和传输延迟,这样可以准确地建立硬件电路的模型VHDL语言的强大描述能力还体现在它具有丰富的数据类型VHDL语言既支持标准定义的数据类型,也支持用户定义的数据类型,这样便会给硬件描述带来较大的自由度3VHDL语言具有很强的移植能力VHDL语言很强的移植能力主要体现在对于同一个硬件电路的VHDL语言描述,它可以从一个模拟器移植到另一个模拟器上、从一个综合器移植到另一个综合器上或者从一个工作平台移植到另一个工作平台上去执行4VHDL语言的设计描述与器件无关采用VHDL语言描述硬件电路时设计人员并不需要首先考虑选择进行设计的器件这样做的好处是可以使设计人员集中精力进行电路设计的优化,而不需要考虑其他的问题当硬件电路的设计描述完成以后VHDL语言允许采用多种不同的器件结构来实现5VHDL语言程序易于共享和复用VHDL语言采用基于库library的设计方法在设计过程中,设计人员可以建立各种可再次利用的模块,一个大规模的硬件电路的设计不可能从门级电路开始一步步地进行设计,而是一些模块的累加这些模块可以预先设计或者使用以前设计中的存档模块,将这些模块存放在库中,就可以在以后的设计中进行复用
[3]利用VHDL语言设计数字系统的特点当电路系统采用VHDL语言设计其硬件时,与传统的电路设计方法相比较,具有如下的特点
(1)采用自上而下的设计方法即从系统总体要求出发,自上而下地逐步将设计的内容细化,最后完成系统硬件的整体设计在设计的过程中,对系统自上而下分成三个层次进行设计第一层次是行为描述所谓行为描述,实质上就是对整个系统的数学模型的描述一般来说,对系统进行行为描述的目的是试图在系统设计的初始阶段,通过对系统行为描述的仿真来发现设计中存在的问题在行为描述阶段,并不真正考虑其实际的操作和算法用何种方法来实现,而是考虑系统的结构及其工作的过程是否能到达系统设计的要求第二层次是RTL方式描述这一层次称为寄存器传输描述(又称数据流描述)如前所述,用行为方式描述的系统结构的程序,其抽象程度高,是很难直接映射到具体逻辑元件结构的要想得到硬件的具体实现,必须将行为方式描述的VHDL语言程序改写为RTL方式描述的VHDL语言程序也就是说,系统采用RTL方式描述,才能导出系统的逻辑表达式,才能进行逻辑综合第三层次是逻辑综合即利用逻辑综合工具,将RTL方式描述的程序转换成用基本逻辑元件表示的文件(门级网络表)此时,如果需要,可将逻辑综合的结果以逻辑原理图的方式输出此后可对综合的结果在门电路级上进行仿真,并检查其时序关系应用逻辑综合工具产生的门级网络表,将其转换成PLD的编程码点,即可利用PLD实现硬件电路的设计由自上而下的设计过程可知,从总体行为设计开始到最终的逻辑综合,每一步都要进行仿真检查,这样有利于尽早发现设计中存在的问题,从而可以大大缩短系统的设计周期
(2)系统可大量采用PLD芯片由于目前众多制造PLD芯片的厂家,其工具软件均支持VHDL语言的编程所以利用VHDL语言设计数字系统时,可以根据硬件电路的设计需要,自行利用PLD设计自用的ASIC芯片,而无须受通用元器件的限制
(3)采用系统早期仿真从自上而下的设计过程中可以看到,在系统设计过程中要进行三级仿真,即行为层次仿真、RTL层次仿真和门级层次仿真这三级仿真贯穿系统设计的全过程,从而可以在系统设计的早期发现设计中存在的问题,大大缩短系统设计的周期,节约大量的人力和物力
(4)降低了硬件电路设计难度在传统的设计方法中,往往要求设计者在设计电路之前写出该电路的逻辑表达式或真值表(或时序电路的状态表)这一工作是相当困难和繁杂的,特别是当系统比较复杂时更是如此而利用VHDL语言设计硬件电路时,就可以使设计者免除编写逻辑表达式或真值表之苦,从而大大降低了设计的难度,也缩短了设计的周期
(5)主要设计文件是用VHDL语言编写的源程序与传统的电路原理图相比,使用VHDL源程序有许多好处其一是资料量小,便于保存其二是可继承性好当设计其他硬件电路时,可使用文件中的某些库、进程和过程等描述某些局部硬件电路的程序其三是阅读方便阅读程序比阅读电路原理图要更容易一些,阅读者很容易在程序中看出某一电路的工做原理和逻辑关系而要从电路原理图中推知其工作原理则需要较多的硬件知识和经验VHDL语言的基本结构一个完整的VHDL语言程序通常包含实体Entity、构造体Architecture、配置Configuration、程序包Package和库Library5个部分前4个部分是可分别编译的源设计单元实体用于描述所设计的系统的外接口__;构造体用于描述系统内部的结构和行为;程序包存放各种设计模块都能共享的数据类型、常数和子程序等;配置用于从库中选取所需单元来组成系统设计的不同版本;库存放已经编译的实体、构造体、程序包和配置库可由用户生成或由ASIC芯片制造商提供,以便于在设计中为大家所共享
2.2QuartusII
7.232-Bit软件介绍及其用法QuartusII
7.2软件介绍QuartusII设计软件提供完整的多平台设计环境,能够直接满足特定设计需要,为可编程芯片系统SOPC提供全面的设计环境QuartusII软件含有FPGA和CPLD设计所有阶段的解决方案(图
2.1)图
2.1QuartusII软件含有FPGA和CPLD设计所有阶段的解决方案此外,QuartusII软件为设计流程的每个阶段提供QuartusII图形用户界面、EDA工具界面以及命令行界面可以在整个流程中只使用这些界面中的一个,也可以在设计流程的不同阶段使用不同界面本章介绍适用于每个设计流程的选项图形用户界面设计流程(图
2.2)图
2.2图形用户界面设计流程QuartusII软件包括一个模块化编译器编译器包括以下模块(标有星号的模块表示在完整编译时,可根据设置选择使用)分析和综合分区合并*适配器汇编器*标准时序分析器和TimeQuest时序分析器*设计助手*EDA网表写入器*HardCopy®网表写入器*EDA工具与QuartusII软件配合使用时的基本设计流程1创建新工程并指定目标器件或器件系列2指定与QuartusII软件一同使用的EDA设计输入、综合、仿真、时序分析、板级验证、形式验证以及物理综合工具,为这些工具指定其他选项3使用标准文本编辑器建立VerilogHDL或者VHDL设计文件,也可以使用MegaWizard插件管理器建立宏功能模块的自定义变量4使用QuartusII支持的EDA综合工具之一综合您的设计,并生成EDIF网表文件.edf或VerilogQuartus映射文件.vqm5(可选)使用QuartusII支持的仿真工具之一对您的设计进行功能仿真6在QuartusII软件中对设计进行编译运行EDA网表写入器,生成输出文件,供其他EDA工具使用7(可选)使用QuartusII支持的EDA时序分析或者仿真工具之一对设计进行时序分析和仿真8(可选)使用QuartusII支持的EDA形式验证工具之一进行形式验证,确保Quartus布线后网表与综合网表一致9(可选)使用QuartusII支持的EDA板级验证工具之一进行板级验证10(可选)使用QuartusII支持的EDA物理综合工具之一进行物理综合11使用编程器和Altera硬件对器件进行编程QuartusII软件的用法在建立新设计时,应重视考虑QuartusII软件提供的设计方法,包括自上而下或自下而上的渐进式设计流程以及基于模块的设计流程不管是否使用EDA设计输入和综合工具,都可以使用这些设计流程自上而下与自下而上的设计方法比较QuartusII软件同时支持自上而下和自下而上的编译流程在自上而下的编译过程中,一个设计人员或者工程负责人在软件中对整个设计进行编译不同的设计人员或者IP提供者设计并验证设计的不同部分,工程负责人在设计实体完成后将其加入到工程中工程负责人从整体上编译并优化顶层工程设计中完成的部分得到适配结果,当设计的其他部分改动时,其性能保持不变自下而上的设计流程中,每个设计人员在各自的工程中对其设计进行优化后,将每一个底层工程集成到一个顶层工程中渐进式编译提供导出和导入功能来实现这种设计方法作为底层模块设计人员,您可以针对他们的设计,导出优化后的网表和一组分配(例如LogicLock区域)然后,工程负责人将每一个设计模块作为设计分区导入到顶层工程中在这种情况下,工程负责人必须指导底层模块设计人员,保证每一分区使用适当的器件资源在完整的渐进式编译流程中,您应该认识到,如果以前出于保持性能不变的原因而采用自下而上的方法,那么现在可以采用自上而__法来达到同样的目的这一功能之所以重要是出于两方面的原因第一,自上而下流程要比对应的自下而上流程执行起来简单一些例如,不需要导入和导出底层设计第二,自上而下的方法为设计软件提供整个设计的信息,因此,可以进行全局优化在自下而上的设计方法中,软件在编译每一个底层分区时,并不知道顶层设计其他分区的情况,因此,必须进行资源均衡和时序预算自上而下渐进式编译设计流程自上而下渐进式编译设计流程重新使用以前的编译结果,确保只对修改过的设计重新编译,因此能够保持设计性能不变,节省编译时间自上而下的渐进式编译流程在处理其他设计分区时,可以只修改设计中关键单元的布局,也可以只对设计的指定部分限定布局,使编译器能够自动优化设计的其余部分,从而改进了时序在渐进式编译流程中,您可以为设计分区分配一个设计实体实例,然后使用时序逼近布局图和LogicLock功能为分区分配一个器件物理位置,进行完整的设计编译在编译过程中,编译器将综合和适配结果保存在工程数据库中第一次编译之后,如果对设计做进一步的修改,只有改动过的分区需要重新编译完成设计修改后,您可以只进行渐进式综合,节省编译时间,也可以进行完整的渐进式编译,不但能够显著节省编译时间,而且还可以保持性能不变在这两种情况中,QuartusII软件为所选的任务合并所有的分区由于渐进式编译流程能够防止编译器跨分区边界进行优化,因此编译器不会象常规编译那样对__和时序进行大量优化为获得最佳的__和时序结果,建议您记录设计分区的输入和输出,尽量将设计分区数量控制在合理范围内,避免跨分区边界建立过多的关键路径,不要建立太小的分区,如数量少于1000的逻辑单元和自适应逻辑模块ALM分区1设计输入Quartus®II工程包括在可编程器件中最终实现设计需要的所有设计文件,软件源文件和其他相关文件使用修订,可以比较工程多个版本的设置和分配,更快、更有效地满足设计要求使用QuartusII模块编辑器、文本编辑器、MegaWizard®插件管理器和EDA设计输入工具可以建立包括Altera®宏功能模块、参数化模块库(LPM)功能和知识产权(IP)功能在内的设计图
2.3为设计输入流程图
2.3设计输入流程2建立工程单击File菜单中的NewProjectWizard或者运行quartus___p可执行文件建立新工程建立新工程时,指定工程工作目录,分配工程名称,指定顶层设计实体的名称还可以指定在工程中使用的设计文件、其它源文件、用户库和EDA工具,以及目标器件表
2.1列出了一个QuartusII工程的设置文件和工程文件一旦建立了工程,可以在Settings对话框的Files页面中,从工程中添加和删除设计文件以及其他文件在执行分析和综合过程期间,QuartusII软件将按文件在Files页面中显示的顺序来处理文件单击Project菜单中的CopyProject命令,将整个工程__到新的目录下,包括工程设计数据库文件、设计文件、设置文件和报告文件,然后在新目录下,打开该工程如果还没有建立新目录,QuartusII将生成该目录ProjectN__igator显示与当前修订相关的信息并且以图形表示工程层次、文件和设计单元,以及各种菜单命令的快捷键您也可以右键单击信息,__CustomizeColumns命令,自定义ProjectN__igator所显示的信息
[4]
[5]表
2.1QuartusII工程文件文件解说QuartusII工程文件(.qpf)指定用来建立工程和与工程相关修订的QuartusII软件版本QuartusII设置文件(.qsf)包括分配编辑器、平面布局编辑器、Settings对话框、Tcl脚本、QuartusII可执行文件产生的所有修订范围内或者__的分配工程中每个修订有一个QSFSynopsys设计约束文件(.sdc)含有以业界标准Synopsys设计约束格式表示的设计约束和时序分配Synopsys设计约束文件中的约束采用Tcl工具命令语言进行描述,符合Tcl语法规则QuartusII工作空间文件(.qws)包含用户偏好和其他信息,例如窗口位置,窗口中打开文件及其位置QuartusII默认设置文件(.qdf)位于\QuartusIIsystemdirectory\win目录下,包括所有全局默认设置QSF中的设置将替代这些设置本章小结本章开始介绍了VHDL语言的设计分格以及设计中注意的问题,然后又介绍了QuartusII软件的使用方法在这里我再说一下国内发展的战略选择,由于目前IT行业快速发展,以及ASIC合了__ant!和CO-Design,Caden__合了GDA等,形成了几大巨头的局面而各可编程器件厂商,像Xilinx和Altera,也积极与EDA紧密合作,针对目前硬件描述语言的发展和国家芯片制造生产的发展战略,国内如何在原EDA基础薄弱的情况下迅速发展,使EDA成为一个合理,健康而必比可少产业;将基础研究活动与__产生的作用合理地结合,建议开展如下的工作为了实现我国的芯片设计自主化,必须夯实基础,再结合VHDL的基础上,__VerilogHDL设计语言,使硬件设计的底层单元库可以自主研制根据目前芯片系统的发展趋势,对系统级语言进行比较研究,在Superlog,SystemC等语言中作出选则,并进行相关工具的__,以及与相关企业进行合作等深入HDL语言的综合和仿真等模型的研究,努力在与国外合作的基础山,建立自主知识产权的EDA公司积极加入EDA目前正在进行的标准化工作,做到了解、学习、应用、吸收、参与并重__积极加入,重视生产、学习、研发的合作,开展卓有成效的发展模式
3.矩阵键盘接口电路的原理与总体设计
3.1矩阵键盘接口电路的原理在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接这样,一个端口就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些,列线通过电阻接正电源,并将行线所接的FPGA的I/O口作为输出端,而列线所接的I/O口则作为输入这样,当按键没有按下时,所有的输出端都是高电平,代表无键按下行线输出是低电平,一旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键按下了行列式键盘的电路原理如图
3.1所示(为了说明问题以4*4为例)图
3.1行列式键盘的电路原理如图设置扫描__为keydrv3~keydrv0,列线按键输入__keyin3~keyin0与按键位置的关系如表
3.1所示表
3.1扫描__和列线按键输入__与按键之间的关系表keydrv3~keydrv0keyin3~keyin0对应的按键111011101110121011301114111051101110161011701118101111109110101011A0111B1110C01111101D1011E0111F
3.2总体设计系统结构的总体设计图
3.2键盘接口电路结构图由行列式键盘原理就可以知道,要正确的完成键盘输入工作必须有按键扫描电路产生keydrv3~keydrv0__同时还必须有按键译码电路从keydrv3~keydrv0__和keyin3~keyin0__中译码出按键的值此外,一般还需要一个按键发生__用于和其他模块接口,通知其他模块键盘上有按键动作发生,并可以从键盘上读取按键的键值由于各个模块需要的时钟频率是不一样的,因此时钟产生模块就是用于产生各个模块需要的时钟__因此得到接盘接口电路的结构如上图所示
[6]
[7]本章小结本章首先介绍了一下矩阵键盘的设计思路,总体来说行线输出是低电平,一旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键按下了最后介绍了一下4*9键盘的总体设计思路
4.各模块的设计及仿真
4.1键盘扫描电路键盘扫描电路是用于产生keydrv3~keydrv0__,其变化的顺序依次是1110-----1101-----1011-----0111-----……周而复始地扫描其停留在某个状态的时间大约为10ms更短的停留时间是没有必要的,因为人按键的时间大约为10ms,不可能有更快的按键动作发生;另外,更短的停留时间还容易采集到抖动__,会干扰判断而太长的停留时间则会使某些较快的按键东走丢失键盘扫描电路的外部接口电路如图
4.1所示,其中clk_scan是周期为10ms的扫描时钟,keydrv为输出到键盘的扫描__,宽度为4位图
4.1键盘扫描电路的外部接口电路图其VHDL描述如下LIBRARYieee;--EntityDeclarationENTITYkey_scanIS--{{ALTERA_IO_BEGIN}}DONOTREMOVETHISLINE!PORTclk_scan:INSTD_LOGIC;--扫描时钟,周期10mskeydrv:OUTSTD_LOGIC_VECTOR3DOWNTO0--输出扫描__;--{{ALTERA_IO_END}}DONOTREMOVETHISLINE!ENDkey_scan;--ArchitectureBodyARCHITECTUREkey_scan_architectureOFkey_scanISCONSTANTs0:STD_LOGIC_VECTOR3DOWNTO0:=1110;--定义状态机编码CONSTANTs1:STD_LOGIC_VECTOR3DOWNTO0:=1101;CONSTANTs2:STD_LOGIC_VECTOR3DOWNTO0:=1011;CONSTANTs3:STD_LOGIC_VECTOR3DOWNTO0:=0111;SIGNALpresent_state:STD_LOGIC_VECTOR3DOWNTO0;--状态机现态SIGNALnext_state:STD_LOGIC_VECTOR3DOWNTO0;--状态机次态BEGIN--状态更新进程PRO__SSclk_scanBEGINIFclk_scaneventandclk_scan=1thenpresent_state=next_state;ENDIF;ENDPRO__SS;--状态译码PRO__SSpresent_stateBEGINCASEpresent_stateISWHENs0=next_state=s1;WHENs1=next_state=s2;WHENs2=next_state=s3;WHENs3=next_state=s0;--多余状态处理WHENOTHERS=next_state=s0;ENDCASE;ENDPRO__SS;--输出译码keydrv=present_state;ENDkey_scan_architecture;以上程序采用一个状态机来实现扫描电路该状态机是一个one-hot状态机,并且输出值就是状态机的状态,没有通过一个逻辑电路来做输出译码这样的好处是得到的输出__比较“干净”,没有毛刺其仿真波形如图
4.2所示图
4.2键盘扫描电路仿真图从图
4.2中很容易发现present_state的值的变化是随着扫描__key_scan的上升沿的到来而变化的,也就是key_scan每来一个脉冲,相应的present_state的值就变化一次很容易发现keydrv的值的变化顺序为1110---1101---1011---0111,也就是每个key_scan来一个脉冲时,保证keydrv相邻的值只有一个变化,这样为了防止产生不必要的毛刺present_state值和keydrv值是相同的,只不过一个用的二进制,一个用的是十进制,所以它的变化为14—13—11—
74.2键盘译码电路和按键标志位产生电路键盘译码电路是从keydrv3~keydrv0和keyin3~keyin0__中译码出按键的键值的电路,它的真值表就是以前行扫描__、列扫描与按键位置的关系图按键标志位产生电路是产生按键标志位__keypressed的电路由于这两个电路关系紧密,因此放入同一个模块中实现其外部接口图如图
4.3所示其中clk为局__,它是由FPGA芯片的外部晶振给出的clk在系统中的频率是最高,其他时钟都是它的分频产生keydrv为键盘扫描__,keyin为键盘输入__,keyvalue为键值(代表按键所在的位置),keypressed表示有一个按键被按下,每发生一次按键动作,keypressed就输出一个宽度为全局时钟周期的正脉冲该__用于与其他模块握手,负责通知其他模块键盘是否有按键发生其他模块在keypressed有效时,可以读取键值图
4.3键盘译码电路的外部接口其VHDL实现如下LIBRARYieee;ENTITYkeydecoderISPORTclk:INSTD_LOGIC;--全局时钟clk_scan:INSTD_LOGIC;--扫描时钟keyin:INSTD_LOGIC_VECTOR8DOWNTO0;--键盘输入keydrv:INSTD_LOGIC_VECTOR3DOWNTO0;--扫描__keyvalue:OUTSTD_LOGIC_VECTOR8DOWNTO0;--键值keypressed:OUTSTD_LOGIC--有按键按下;ENDkeydecoder;ARCHITECTUREkeydecoder_architectureOFkeydecoderIS--TEMP=keyinkeydrv;SIGNALtemp:STD_LOGIC_VECTOR12DOWNTO0;SIGNALtemp_pressed:STD_LOGIC;SIGNALkeypressed_asy:STD_LOGIC;SIGNALq1q2q3q4q5q6:STD_LOGIC;BEGINtemp=keyinkeydrv;--译码进程参见附录程序--按键标志产生电路pro__ssclk_scanbeginifclk_scaneventandclk_scan=1thenq1=temp_pressed;q2=q1;q3=q2;q4=q1;endif;keypressed_asy=q1orq2orq3orq4;endpro__ss;--同步化keypressed_asypro__ssclkbeginifclkeventandclk=1thenq5=keypressed_asy;q6=q5;endif;keypressed=q5andnotq6;endpro__ss;ENDkeydecoder_architecture;上面程序是改进的程序,原程序是--同步化有键被按下PRO__SS(clk)BEGINIF(clkeventandclk=1)THENq1=temp_pressed;q2=q1;ENDIF;keypressed=q1andnotq2;ENDPRO__SS;ENDkeydecoder_architecture;在这里先介绍一下没有改进的程序上面程序中有两个进程第一个进程负责译码,值得注意的是WHENOTHEN语句有没有对temp_pressed和keyvalue__赋值,这相当于不改变temp_presed和keyvalue__的值,即实现了锁存输出在不需要锁存输出时,在WHENO-THEN语句中,一定要对所有的case语句中出现的__逐一赋值,以免产生意想不到的结果第二个进程负责把按键同步__同步化与全局时钟同步的并且脉宽为一个周期的脉冲该电路的仿真结果如图
4.4所示图
4.4没有进行去抖动前的仿真图粗看起来,上图仿真结果似乎表明键盘接口电路的设计的要求已经达到了然而仔细地考虑就回发现还有问题存在仿真__keyin是由于按键动作引起的,实际按键动作发生的keyin__,有两点与上图不一样的地方其一,按键是由抖动的,这是因为机械按键本身会引起按键抖动;其二,按键的时间长度是不确定的,可能从50ms到2ms不等一个典型的实际波形如下图所示该图所画的情况是按下“1”键的时间长达80ms是的波形图中keyin1~keyin3端口的输入为高电平,而keyin0波形是一个尖端的不断弹跳的__从图中可以看出,keydrv波形由4个负脉冲组成,每个负脉冲代表扫描电路扫描到按键所在行仅当keydrv波形扫描到“1”键所在行是,keyin0才能为低电平而且,由于按键被按下和键弹起是都有抖动,因此第一个负脉冲的下降沿和最后一个负脉冲的下降沿都有抖动这样造成keypressed__的仿真波形中出现多个正脉冲,由于每次输入一个keypressed脉冲,就代表一个键被按下所以看到这次长达80ms的按键被当成是多次按键了按键长度为80ms的仿真波行如图
4.5所示图
4.5有毛刺的仿真图由图
4.5可以看出当keyin的输入有抖动时,也就是在仿真的时候把keyin0的前几个脉冲的周期设置小一点,这样就法相输出值keypressed出现了多次值,所以就被认为是发生了多次按键,但事实上只发生了一次按键解决上面的问题的方法是重新编写按键发生标志电路,该电路不仅要解决按键抖动导致一次按键被当成多次的问题,同时还要解决按键太长导致一次按键被当成多次的问题考虑这些因素之后,编写的程序应该是阴影部分的程序这个改进的程序与原来程序的不同之处如下多了一个输入__clk_scan,它是用于产生扫描__的时钟,周期为10ms按键__tepm_pressed首先通过clk_scan__的上升延采样通过采样后,抖动噪声被消除采样后得到__被分别延迟1~4个clk_csan周期得到4个__q
1、q
2、q
3、q4这四个__进行或运算得到一个宽度约为80ms并且与全局时钟异步的按键__keypressed_asy原来程序中一个长时间的按键过程有可能被认为是多次按键,通过这种方法使得一个长时间的按键仍然是一次按键把keypressed_asy同步化改进后的程序的仿真波形图如图
4.6所示图
4.6改进后的仿真图通过仿真波形图可以看出,按键的抖动不会影响输出结果;无论一个按键动作持续时间有多久,但任然认为是一个按键
4.3时钟产生模块时钟产生模块是用于扫描时钟的,它的输出供给给键盘扫描模块和按键标志位的产生模块,其外部接口图如图
4.7所示图
4.7时钟产生模块外部接口电路其VHDL实现如下LIBRARYieee;ENTITYclk_genISPORTclk:INSTD_LOGIC;--全局时钟clk_scan:OUTSTD_LOGIC--扫描时钟;ENDclk_gen;ARCHITECTUREclk_gen_architectureOFclk_genIS--做程序仿真时,用这个语句signalcnt:integerrange0to150;--需要下载到芯片上时,替换为下面这个语句signalcnt:integerrange0to119999;begin--计数模块pro__ssclkbeginifclkeventandclk=1thenifcnt=cnthighthencnt=0;elsecnt=cnt+1;endif;endif;endpro__ss;--译码输出pro__sscntclkbeginifclkeventandclk=1then—寄存器锁存输,出目的消除波形上的“毛刺”(小的抖动)ifcnt=cnthigh/2thenclk_scan=1;elseclk_scan=0;endif;endif;endpro__ss;ENDclk_gen_architecture;该程序主要包含有一个计数器模块和一个译码输出模块,该程序是通过计数器模块实现分频的要从12MHZ全局时钟得到100HZ的时钟,必须进行120000倍的分频这么大的分频需要仿真时间很久仿真时一般采用小分频来代替,(在本程序中采用150分频来仿真)以便快速观察到结果等到真正下载到电路上时,就需要采用120000分频了另一点值得注意的是译码器的输出采用了寄存器锁存输出,这是为了消除毛刺多输入的组合逻辑电路中,某些输入__在理想情况下应该同时发生变化,但是由于延迟路径不同造成这些输入__发生的时间有微小的差别(门延迟时间量级),这时得到的输出__就会有毛刺,这些毛刺有可能会给下一级电路带来问题,是的整的系统运行不稳定因此,为保证系统的稳定性一般情况下,都应该给输出__消除毛刺,使得变得干净本程序中,译码器的输入是计数器的输入,计数器各级输出延迟是不一样的,因此译码器的使出clk_scan__波形就会有毛刺(波形如图
4.8所示)图
4.8有毛刺的仿真图很明显的可以看出来无论是在输出clk_scan的上升沿还是下降沿中都会出现一点点的毛刺,解决毛刺的方法有两种设计使得组合逻辑电路的输入每一时刻只能有一个发生变化在本例中就是把计数器从二进制计数器改为格雷码(GrayCode)计数器格雷码计数器的特点是相邻的计数值只有一位不相同,即每次计数值改变时,只有一位__会发生变化这一点就可以保证没有毛刺产生把有毛刺的__通过时钟采样,即通过一个D触发器本例中就是采用了这种方法这种方法的缺点就是__通过一个D触发器后,延迟了一个时钟周期在本例中这种延迟是容许的,然而在有些电路中延迟是不容许的该电路的仿真结果如图
4.9图
4.9没有毛刺的仿真图改进后的仿真图如图
4.9所示,很明显的可以看出来,key_scan是一个很光滑的,没有毛刺的波形
4.4键盘接口电路顶层电路实现键盘接口电路的顶层电路只是把键盘扫描模块、键盘译码且按键标志位产生模块和时钟产生模块连接起来,其结构如图15所示图
4.10键盘接口电路的顶层电路做好了模块化的设计,顶层电路就比较简单了,基本上只是手动连接工作也就是图
4.10所示该电路的仿真波形图如图
4.11所示图
4.11键盘接口电路的顶层电路仿真图整个电路的到此就告一段落了,又该电路的仿真图可以看出keyin的输入值为111111101时,在keydrv分别为
1110、
1101、
1011、0111时keyvalue的输出值分别为
5、
9、
13、17,而这个值正是我们理论上想要得到的值,所以整个设计正确
[8]本章小结本章节介绍行列式矩阵键盘接口电路的实现其中
4.1小结介绍了行列式键盘的扫描电路模块,
4.2介绍了键盘译码电路和按键标志产生电路模块,
4.3介绍了时钟产生模块,
4.4介绍了键盘接口电路顶层电路的实现结论矩阵式键盘是一种常见的输入装置,在日常的生活中,矩阵式键盘在计算机、__、手机、微波炉等各式电子产品上已经被广泛应用各式各样的矩阵键盘控制着各种各样的功能,矩阵键盘控制接口电路是最基本的输入电路,它我们利用软件QuartusII自行设计并修改的键盘输入显示电路是通过VHDL语言的编写并实现了键码的对应显示并且发现了许多问题,比如去按键抖动,这个过程的确很有意思但也非常繁琐,在利用QuartusII进行仿真的时候,要精心的对参数尽心设置,最后才能够仿真出结果本次设计中最为突出的为对键盘译码电路和按键标志位产生电路的设计,主要是去抖动,其中重要一点是按键去抖动电路不仅要解决按键抖动导致一次按键被当成多次的问题,同时还要解决按键太长导致一次按键被当成多次的问题否则,当设计的键盘在实际中应用的时候,就会出现错误所以应该把之前的程序重新编写再重新编写的程序中多了一个输入__clk_scan,它是用于产生扫描__的时钟,周期为10ms按键__tepm_pressed首先通过clk_scan__的上升延采样通过采样后,抖动噪声被消除采样后得到__被分别延迟1~4个clk_csan周期得到4个__q
1、q
2、q
3、q4这四个__进行或运算得到一个宽度约为80ms并且与全局时钟异步的按键__keypressed_asy原来程序中一个长时间的按键过程有可能被认为是多次按键,通过这种方法使得一个长时间的按键仍然是一次按键把keypressed_asy同步化最后消除了按键抖动致谢在本次设计过程中得到了指导老师吴老师的大力支持,在此表示感谢!在毕业设计的过程中,本系的各位老师和__也给予了诸多帮助和支持,在此也表示感谢他们!感谢各位老师多年来的教诲与帮助,也感谢各位同学在学习上的帮助!通过此次的论文,我学到了很多知识,跨越了传统方式下的教与学的体制束缚,在论文的写作过程中,通过查资料和搜集有关的文献,培养了自学能力和动手能力并且由原先的被动的接受知识转换为主动的寻求知识,这可以说是学习方法上的一个很大的突破在以往的传统的学习模式下,我们可能会记住很多的书本知识,但是通过毕业论文,我们学会了如何将学到的知识转化为自己的东西,学会了怎么更好的处理知识和实践相结合的问题再次感谢在大学传授给我知识以及给我帮助和鼓励的老师,同学和朋友,谢谢你们!____
[1]徐惠民,安德宁.数字逻辑设计与VHDL描述.机械工业出版社.2008年1月
[2]蒋璇,臧春华.数字系统设计与PLD应用技术.电子工业出版社.2002年4月
[3]陈赜,朱如琪.在系统可编程技术实践教程.科学出版社.2003年6月
[4]黄正槿,徐坚等.CPLD系统设计技术入门与应用.电子工业出版社.2006年8月
[5]卢毅,赖杰.VHDL与数字电路设计.科学出版社.2006年2月
[6]潘松,黄继业.EDA技术实用教程.科学出版社.2005年1月
[7]赵曙光.可编程逻辑器件原理__与应用.西安电子科技大学出版社.2008年3月
[8]求是科技.CPLD/FPGA应用__技术与工程实践.人民邮电出版社.2007年8月附录程序PRO__SStempBEGINcasetempistemp_pressed=1;temp_pressed=1;temp_pressed=1;temp_pressed=1;temp_pressed=1;temp_pressed=1;temp_pressed=1;temp_pressed=1;temp_pressed=1;temp_pressed=1;temp_pressed=1;temp_pressed=1;temp_pressed=1;temp_pressed=1;temp_pressed=1;temp_pressed=1;temp_pressed=1;temp_pressed=1;temp_pressed=1;temp_pressed=1;temp_pressed=1;temp_pressed=1;temp_pressed=1;temp_pressed=1;temp_pressed=1;temp_pressed=1;temp_pressed=1;temp_pressed=1;temp_pressed=1;temp_pressed=1;temp_pressed=1;temp_pressed=1;temp_pressed=1;temp_pressed=1;temp_pressed=1;temp_pressed=1;whenothers=temp_pressed=0;endcase;endpro__ss;设计输入功耗分析综合仿真时序分析布局布线调试工程更改管理时序逼近包括基于模块的设计、系统级设计和软件__功耗分析PowerPlay功耗分析器PowerPla早期功耗估算器EDA接口EDA网表写入综合分析和综合VHDL、VerilogHDL和AHDL设计助手RTL查看器技术射影查看器渐进式综合基于模块的设计LogicLock窗口时序逼近布局VQM写入约束输入分配编辑器引脚规划器设置对话框时序逼近布局设计分区窗口系统级设计SOPCBuilderDSPBuilder设计输入文本编辑器模块和符号编辑器Megawizard插件管理器调试SignalTap2SignalProbe在系统存储内容编辑器RTL查看器芯片编辑器时序逼近时序逼近布局LogicLock窗口时序优化向导设计空间管理器渐进式编译布局布线适配器分配编辑器时序逼近布局渐进式编译报告窗口资源优化向导设计空间管理器芯片编辑器时序分析TimeQuest时序分析器标准时序分析器报告窗口技术映射查看器仿真仿真器波形编辑器编程汇编器编程器转换编程文件工程更改管理芯片编辑资源属性编辑器更改管路Megawizard插件管理EDA综合工具QuartusII文本编辑器QuartusII符号编辑器QuartusII模块编辑器Megawizard插件管理器生成文件模块符号文件Verloghdl以及Vhdl文件EDIF网表文件文本设计文件模块设计文件至QuartusII综合和分析Keyin3Keyin2Keyin1Keyin0FPGAKeydrv0Keydrv0Keydrv0Keydrv01523467890ABCDEF+5v键盘译码电路按键标志产生电路4*9键盘时钟产生电路扫描电路keyvaluekeypressedclkKeyin[
8..0]Keydrv[
3..0]。