VHDL语言设计竞赛抢答器毕业论文
随着电子技术的发展,现在的抢答器功能越来越强,可靠性和准确性也越来越高。以前的抢答器大部分都是基于传统数字电路组成的。制作过程复杂,而且准确性与可靠性不高,成品面积大,安装、维护困难。由于近年来电子技术发展迅速,逐渐出现用现场可编程门阵列(简称FPGA)制作抢答器,使得电子系统的设计者利用EDA(电子设计自动化)软件,就可以独立设计自己的专用集成电路(ASIC)器件。制作过程简单,而且安装、维护简单。
1.1 选题的现实意义
抢答器控制系统是学校、政府机关、金融单位、广播电视系统或党委、工会、团委、企事业单位等部门举办竞赛问答、各种知识测试、娱乐活动中经常使用的重要基
如数码管显示抢答成功者的信息,或者通过声音来判别成功抢答的选手。随着现代科 |
.专业.专注.
2语言、软件介绍
2.1FPGA
2.1.1FPGA 简介
FPGA(Field-ProgrammableGateArray),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点[2]。目前以硬件描述语言(Verilog或VHDL)所完成的电路设计,可以经过简单的综合与布局,快速的烧录至FPGA上进行测试,是现代IC设计验证的技术主流。这些可编辑元件可以被用来实现一些基本的逻辑门电路(比如AND、OR、XOR、NOT)或者更复杂一些的组合功能比如解码器或数学方程式。在大多数的FPGA里面,这些可编辑的元件里也包含记忆元件例如触发器(Flip-flop)或者其他更加完整的记忆块。
图1FPGA内部结构框图
现场可编程门阵列FPGA作为集成度和复杂程度最高的可编程ASIC,主要由与阵列、或阵列、输入缓冲电路、输出宏单元等组成,是ASIC的一种新型门类,它建立在创新的发明构思和先进的EDA技术之上。运算器、乘法器、数字滤波器、二维卷积器等具有复杂算法的逻辑单元和信号处理单元的逻辑设计都可选用FPGA实现。它采用SRAM开关元件的FPGA是易失性的,每次重新加电,FPGA都要重新装入配置数据。突出优点是可反复编程,系统上电时,给FPGA加载不同的配置数据,即可令其完成不同的硬件功能。这种配置的改变甚至可以在系统的运行中进行,实现系统功能的动态重构。传统
的数字逻辑设计使用TTL电平和小规模的数字集成电路来完成逻辑电路图。使用这些
标准的逻辑器件已经被证实是最便宜的手段,但是要求做一些布线和复杂的电路集成.专业.专注.
板(焊接调试)等工作,如果出现错误,改动起来特别麻烦。因此,采用传统电子设计方案人员的很大一部分工作主要集中在设备器件之间物理连接、调试以及故障解决方面。正是因为FPGA的EDA技术使用了更高级的计算机语言,电路的生成基本上是由计算机来完成,将使用户能较快地完成更复杂的数字电路设计,由于没有器件之间的物理连接,因此调试及故障排除更迅速、有效[3]。
2.1.2传统FPGA的不足与改进
在现今的数字系统设计中,以“嵌入式微控制器+FPGA”为核心的体系结构因其强大的处理能力和灵活的工作方式而被广泛采用。嵌入式微控制器的优势在于将微处理器内核与丰富多样的外围接口设备紧密结合,在提供强大的运算、控制功能的同时,降低了系统成本和功耗,因而适合作为数字系统的控制核心;
FPGA的优势在于超高速、丰富的逻辑资源以及用户可灵活配置的逻辑功能,适用于逻辑接口功能多种多样、灵活可变的场合。将二者结合形成优势互补,如有需要,再配以适当的专用芯片(例如
音视频编解码器、数字调制解调器等)。这种体系结构适用于大多数复杂数字系统的 |
可能地提高FPGA配置的效率和灵活性。实践证明,该方案可行、实用,达到了设计目的。
2.1.3FPGA 工作原理
FPGA采用了逻辑单元阵列LCA(LogicCell Array)这样一个概念,内部包括可配置逻辑模块CLB(ConfigurableLogic Block)、输出输入模块IOB(InputOutput Block)和内部连线(Interconnect)三个部分。FPGA的基本特点主要有:
1)采用FPGA设计ASIC电路,用户不需要投片生产,就能得到合用的芯片。 2)FPGA可做其它全定制或半定制ASIC电路的中试样片。
3)FPGA 内部有丰富的触发器和I/O引脚。
.专业.专注.
4)FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小的器件之一。
5)FPGA 采用高速CHMOS工艺,功耗低,可以与CMOS、TTL电平兼容。
可以说,FPGA芯片是小批量系统提高系统集成度、可靠性的最佳选择之一。
FPGA是由存放在片内RAM中的程序来设置其工作状态的,因此,工作时需要对片内的RAM进行编程。用户可以根据不同的配置模式,采用不同的编程方式。
加电时,FPGA芯片将EPROM中数据读入片内编程RAM中,配置完成后,FPGA进入工作状态。掉电后,FPGA恢复成白片,内部逻辑关系消失,因此,FPGA能够反复使用。FPGA的编程无须专用的FPGA编程器,只须用通用的EPROM、PROM编程器即可。当需要修改FPGA功能时,只需换一片EPROM即可。这样,同一片FPGA,不同的编程数据,可以产生不同的电路功能。因此,FPGA的使用非常灵活。
2.1.4FPGA 配置模式
FPGA 有多种配置模式:并行主模式为一片FPGA加一片EPROM的方式;主从
外设模式可以将FPGA 作为微处理器的外设,由微处理器对其编程。 |
FPGA前所未有的性能和能力水平而带来的新的设计挑战。
2.1.5FPGA 系统设计流程
一般说来,一个比较大的完整的项目应该采用层次化的描述方法:分为几个较大的模块,定义好各功能模块之间的接口,然后各个模块再细分去具体实现,这就是TOPDOWN(自顶向下)的设计方法。目前这种高层次的设计方法已被广泛采用。高层次设计只是定义系统的行为特征,可以不涉及实现工艺,因此还可以在厂家综合库的支持下,利用综合优化工具将高层次描述转换成针对某种工艺优化的网络表,使工艺转化变得轻而易举。CPLD/FPGA系统设计的工作流程如图2-2所示。
流程说明: |
.专业.专注.
入方式(框图、状态图等),这种输入方式具有直观、容易理解的优点。
3).将以上的设计输入编译成标准的VHDL文件。
4).进行代码级的功能仿真,主要是检验系统功能设计的正确性。这一步骤适用于大型设计,因为对于大型设计来说,在综合前对源代码仿真,就可以大大减少设计重复的次数和时间。一般情况下,这一仿真步骤可略去。
5).利用综合器对VHDL源代码进行综合优化处理,生成门级描述的网络表文件,这是将高层次描述转化为硬件电路的关键步骤。综合优化是针对ASIC芯片供应商的某一产品系列进行的,所以综合的过程要在相应的厂家综合库的支持下才能完成。
6).利用产生的网络表文件进行适配前的时序仿真,仿真过程不涉及具体器件的硬件特性,是较为粗略的。一般的设计,也可略去这一步骤。
系统划分①
VHDL 代码或图形方式输入②
适配前时序仿真⑥
适配器⑦
适配后仿真模型⑧ | 器件编程文件⑧ | 适配报告⑧ |
适配后时序仿真 | CPLD/FPGA 实现 | ASIC 实现 |
图2CPLD/FPGA系统设计流程
7).利用适配器将综合后的网络表文件针对某一具体的目标器件进行逻辑映射操作,包括底层器件配置、逻辑分割、逻辑优化和布局布线。
8).在适配完成后,产生多项设计结果:(a)适配报告,包括芯片内部资源利用
.专业.专注.
情况,设计的布尔方程描述情况等;(b)适配后的仿真模型;(c)器件编程文件。根据适配后的仿真模型,可以进行适配后时序仿真,因为已经得到器件的实际硬件特性(如时延特性),所以仿真结果能比较精确的预期未来芯片的实际性能。如果仿真结果达不到设计要求,就修改VHDL源代码或选择不同速度和品质的器件,直至满足设计要求。
最后将适配器产生的器件编程文件通过编程器或下载电缆载入到目标芯片CPLD/FPGA中。
2.2VHDL 语言
2.2.1VHDL 语言简介
VHDL的英文全名是Very-High-SpeedIntegrated Circuit Hardware Description Language,诞生于1982年。1987年底,VHDL被和美国国防部确认为标准硬件描述语言。自IEEE公布了VHDL的标准版本,IEEE-1076(简称87版)之
后,各EDA 公司相继推出了自己的VHDL 设计环境,或宣布自己的设计工具可以和VHDL |
新的世纪中,VHDL于Verilog语言将承担起大部分的数字系统设计任务。
VHDL语言是一种用于电路设计的高级语言。它在80年代的后期出现。最初是由美国国防部开发出来供美军用来提高设计的可靠性和缩减开发周期的一种使用范围较小的设计语言[5]。
VHDL的英文全写是:VHSIC(VeryHigh Speed Integrated Circuit)HardwareDescriptionLanguage.翻译成中文就是超高速集成电路硬件描述语言。因此它的应用主要是应用在数字电路的设计中。目前,它在中国的应用多数是用在FPGA/CPLD/EPLD的设计中。当然在一些实力较为雄厚的单位,它也被用来设计ASIC。
VHDL主要用于描述数字系统的结构,行为,功能和接口。除了含有许多具有硬件
特征的语句外,VHDL 的语言形式和描述风格与句法是十分类似于一般的计算机高级语 |
.专业.专注.
既涉及实体的内部功能和算法完成部分。在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。这种将设计实体分成内外部分的概念是VHDL系统设计的基本点[6]。
2.2.2VHDL 系统设计的特点
与其他硬件描述语言相比,VHDL具有以下特点:
功能强大、设计灵活。VHDL具有功能强大的语言结构,可以用简洁明确的源代码来描述复杂的逻辑控制。它具有多层次的设计描述功能,层层细化,最后可直接生成电路级描述。VHDL支持同步电路、异步电路和随机电路的设计,这是其他硬件描述语言虽不能比拟的。VHDL还支持各种设计方法,既支持自底向上的设计,又支持自顶向下的设计;既支持模块化设计,又支持层次化设计。
支持广泛、易于修改。由于VHDL已经成为IEEE标准所规范的硬件描述语言,目前大多数EDA工具几乎都支持VHDL,这为VHDL的进一步推广和广泛应用奠定了基础。在硬件电路设计过程中,主要的设计文件是用VHDL编写的源代码,因为VHDL易读和
强大的系统硬件描述能力。VHDL 具有多层次的设计描述功能,既可以描述系统级 |
独立于器件的设计、与工艺无关。设计人员用VHDL进行设计时,不需要首先考虑选择完成设计的器件,就可以集中精力进行设计的优化。当设计描述完成后,可以用多种不同的器件结构来实现其功能。
很强的移植能力。VHDL是一种标准化的硬件描述语言,同一个设计描述可以被不同的工具所支持,使得设计描述的移植成为可能。
易于共享和复用。VHDL采用基于库(Library)的设计方法,可以建立各种可再次利用的模块。这些模块可以预先设计或使用以前设计中的存档模块,将这些模块存放到库中,就可以在以后的设计中进行复用,可以使设计成果在设计人员之间进行交流和共享,减少硬件电路设计。
2.2.3 VHDL 系统优势 (1)与其他的硬件描述语言相比,VHDL具有更强的行为描述能力,从而决定了他
.专业.专注.
成为系统设计领域最佳的硬件描述语言。强大的行为描述能力是避开具体的器件结构, |
从逻辑行为上描述和设计大规模电子系统的重要保证。
(2)VHDL丰富的仿真语句和库函数,使得在任何大系统的设计早期就能查验设计系统的功能可行性,随时可对设计进行仿真模拟。
(3)VHDL语句的行为描述能力和程序结构决定了他具有支持大规模设计的分解和已有设计的再利用功能。符合市场需求的大规模系统高效,高速的完成必须有多人甚至多个代发组共同并行工作才能实现。
(4)对于用VHDL完成的一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动的把VHDL描述设计转变成门级网表。
(5)VHDL对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必管理最终设计实现的目标器件是什么,而进行独立的设计[8]。
2.3EDA
EDA(Electronic Design Automation,电子设计自动化)是90年代发展起来的
平台上,用相关软件完成设计工作,然后由计算机自动完成逻辑编译、化简、优化、 |
2)如果某一过程存在错误,查找和修改十分不便。
3)设计过程中产生大量文档,不易管理。
4)对于集成电路设计而言,设计实现过程与具体生产工艺直接相关,因此可移植性差。
5)只有在设计出样机或生产出芯片后才能进行实测。
EDA技术有很大不同:
1)采用硬件描述语言作为设计输入。
2)库(Library)的引入。
3)设计文档的管理。
4)强大的系统建模、电路仿真功能。 | |
6)全方位地利用计算机自动设计、仿真和测试技术。 | |
.专业.专注.
7)对设计者的硬件知识和硬件经验要求低。
8)高速性能好。
9)纯硬件系统的高可靠性。
2.4.1Quartus II 简介
QuartusII 是Altera公司的综合性PLD开发软件,支持原理图、VHDL、VerilogHDL以及AHDL(AlteraHardware DescriptionLanguage)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。
QuartusII 可以在XP、Linux以及Unix上使用,除了可以使用Tcl脚本完成设计流程外,提供了完善的用户图形界面设计方式。具有运行速度快,界面统一,功能集中,易学易用等特点[10]。
Quartus II 支持Altera 的IP核,包含了LPM/MegaFunction宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。对第
三方EDA工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三
方EDA工具。
.专业.专注.
此外,QuartusII 通过和DSPBuilder 工具与Matlab/Simulink相结合,可以方便地实现各种DSP应用系统;支持Altera的片上可编程系统(SOPC)开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。
MaxplusII 作为Altera的上一代PLD设计软件,由于其出色的易用性而得到了广泛的应用。目前Altera已经停止了对MaxplusII 的更新支持,QuartusII 与之相比不仅仅是支持器件类型的丰富和图形界面的改变。Altera在QuartusII 中包含了许多诸如SignalTapII、ChipEditor 和RTLViewer 的设计辅助工具,集成了SOPC和HardCopy设计流程,并且继承了MaxplusII 友好的图形界面及简便的使用方法[11]。
AlteraQuartus II 作为一种可编程逻辑的设计环境,由于其强大的设计能力和直观易用的接口,越来越受到数字系统设计者的欢迎。
Altera的QuartusII 可编程逻辑软件属于第四代PLD开发平台。该平台支
Quartus 平台与Cadence、ExemplarLogic、 MentorGraphics、Synopsys 和 |
1).QuartusII 支持其他公司所提供的EDA工具接口。
2).提供了与结构无关的可编程逻辑设计环境。
3).提供丰富的库单元供设计者调用,其中包括74系列的全部器件和多种特殊的逻辑功能器件。
4).软件支持硬件描述语言设计输入选项,包括VHDL、VerilogHDL 和Altera自己的硬件描述语言AHDL。
.专业.专注.
3设计思路与系统结构
作为现代集成电路设计的重点与热点,FPGA设计一般采用自顶向下、由粗到细、逐步求精的方法。设计最顶层是指系统的整体要求,最下层是指具体的逻辑电路实现[12]。自顶向下是将数字系统的整体逐步分解为各个子系统和模块,若子系统规模较大则进一步分解为更小的子系统和模块,层层分解,直至整个系统中各子模块关系合理、便于设计实现为止。本文运用EDA中的OuartusII作为软件开发平台,设计了一款基于FPGA的智力竞赛抢答器。
3.1课题研究的内容
1)、设计一个可容纳4组参赛的数字式抢答器,每组设一个按钮,供抢答使用。2)、抢答器具有第一信号鉴别和锁存功能,使除第一抢答者外的按钮不起作用。3)、设置一个主持人“复位”按钮。
4)、主持人复位后,开始抢答,第一信号鉴别锁存电路得到信号后,有指示灯显
5)、设置一个计分电路,每组开始预置100分,由主持人记分,答对一次加10分, |
号,显示该台号;对回答问题所用的时间进行计时、显示、超时报警同时具有复位功能和倒计时启动功能。在设计过程中先将系统模块化,然后逐步实现,系统设计原理图如图4。
图4 抢答器系统原理图 |
|
.专业.专注.
3.3电子抢答器的设计
3.3.1功能模块划分
根据对抢答器的功能要求,把要设计的系统划分为六个功能模块:抢答信号判别模块,锁存模块,转换模块,扫描模块,定时与报警模块,译码与显示模块。
3.3.2功能分析
判断模块:该模块用以判断各选手抢答的先后,记录最先抢答的选手号码并不再接受其它输入信号。
锁存模块:该模块用以锁存最先抢答的选手号码,以便输出显示。
转换模块:该模块用来将抢答选手的信息转换为二进制数,以便译码显示。 扫描模块:该模块主要用来扫描显示数据,扫描频率可以调整,便于动态显示。该模块主要完成两个任务:扫描信号的建立和数码管的选择[13]。
定时与报警模块:该模块用来对选手进行答题限时,答题时间到后输出报警信号。译码与显示模块:对数据进行译码送出数码管显示。该模块主要任务是完成二进
3个数码管经过扫描信号依次点亮[14,15]。 |
FENG模块是抢答判断模块,在各个选手1,2,3,4抢答操作后,将四路信号相与,并送出高电平Q给锁存器,锁存当时的按键状态,由于抢答信号是低电平有效,故相与后的结果可以识别最先抢答选手,由于没有时钟同步,所以锁存的延时时间只是硬件延时时间,从而实现锁存错误的概率接近零。
LOCKB模块是锁存器模块,在任一选手按下按键后锁存,锁存的同时送出AIM信号。clr信号为0时,d1,d2,d3,d4的输出都为0;当c1r信号为1时,将dl赋给q1,d2赋给q2,d3赋给q3,d4赋给q4,同时将alm输出为高电平。
COUNT模块是定时模块,实现答题倒计时,在计满100S后送出报警提示。设计中100S时间用00到99表示,显示分为高位h,底位l,另外还有限时报警sound。设计时先将
低位从9开始逐一自减,当到0时高位自减1,也就是低位每减少1O,高位就减少1。当 |
.专业.专注.
q1,同时将01111111赋值给WX选通数码管;当sel为001时,将d2赋值给q2,同时将1011lll1赋值给WX选通数码管;当sel为011时,将d3赋值给q3,同时将11011111赋值给WX选通数码管。
图5抢答器的顶层原理图
CH41A模块是抢答结果转换模块,将抢答结果转换为二进制数。抢答结果低电平有效,当抢答结果dld2d3d4为Olll时,输出q为0001;当抢答结果dld2d3d4为1011时,输出q为0010;当抢答结果dld2d3d4为1l0l时,输出q为0011;当抢答结果dld2d3d4为111O时,输出q为0100。
SEL模块为片选模块。产生片选信号。此模块相当一个计数器,在时钟下自加。
DISP模块为译码模块,用于将数据转换成段码,以便数码管能正确显示。
.专业.专注.
5电子抢答器的仿真
采用EDA开发T具MAX+PLUSⅡ对各个模块的VHDL源程序及顶层电路进行编译、逻辑综合,并对各个模块以及顶层电路都进行了波形仿真。南于文章篇幅原因,本文给出顶层电路的仿真波形。图3是顶层电路模块整体的仿真波形,CK1为系统时钟,CIK2 为动态扫描时钟,h为主持人控制开始键,高电平有效;
1、2、3、4表示抢答选手号,低电平有效;sound为100S超时报警;qh[3..0]、q1[3..0]为100S 计时显示,qh[3..0]为十位,ql[3..0]为个位;q[7..O]抢答选手的段码。首先由主持人将开始按钮h按下之后,选手1,2,3,4开始抢答,网中是1号选手最先按下,q[7..O]显示段码结果为06(台号显示为1),此时定时器开始T作做减计数,qh[3..0]和ql[3..O]依次减小(为截取整张仿真图。ql[3..0]个位看不清楚),当qh[3..O]和ql[3..O]减到0时说明100S的时间已到,sound信号变成高电平.报警器报警,选手停止答题。结束后主持人可以复位后将开始按钮h按下重新进行下一轮的抢答。仿真
并编译通过,最后通过Byteblaster 编程电缆下载文件,将所设计的内容下载到FI |
图6Ch31a模块仿真波形
此模块为扫描模块,此时sel相当于一个计数器,当sel为000时,输出d1,sel为001时,输出d2,sel为010到110时,输出1111,sel为111时,输出d3。
Ch41a模块:
.专业.专注.
图7 h41a 模块仿真波形
此模块用二进制显示抢答的结果,抢答结果是低电平有效。由仿真图可见,当d1抢答成功时,显示0001,d2抢答成功时,显示0010,d3抢答成功时显示0011,d4抢答成功时显示0100.,无人抢答时显示1111。
Sel模块:
图8 Sel 模块仿真波形 |
图9Count 模块仿真波形
此模块实现倒计时功能,初始时为0000,当上升沿到来时低位从1001开始自减1,减到0000时高位开始从1001自减1,知道最后低位、高位都为0。
Lockb模块:
.专业.专注.
图10Lockb 模块仿真波形
此为锁存模块,主持人按下复位键时,清零。当clk上升沿到来时,将d1赋值
给q1,d2赋值给q2,d3赋值给q3,d4赋值给q4。
Feng模块:
|
Disp模块:
图12Disp模块仿真波形
此为译码模块,将二进制转化成代码段,d为0000时,输出0111111;d为0001
时,输出0000110;d为0010时,输出1011011;d为0011时,输出1001111;d为0100
时,输出1100110;d为0101 时,输出1101101;d为0110 时,d为0111
时,输出0100111;d为1000时,输出1111111;d为1001时,输出1101111;其他
时候为0000000。
.专业.专注.
整个电路的仿真图:
图13顶层电路仿真波形
主持人按下复位键,当有人抢答时,锁存其组号,并开始倒计时。扫描模块将这
些信息转换成段码段后扫描输出。
.专业.专注.
结 论
本文介绍了基于FPGA的智能电子抢答器的设计,本设计使用VHDL语言,对智能抢答器的每一个模块进行分析,设计,编译,并在quartersII软件的支持下,对其进行仿真。通过反复的编译、仿真、检查、修改,证明本次设计的抢答器各项功能复合预定标准。但其中仍存在一些不足之处,请多见谅!
.专业.专注.
致 谢
本设计是在指导老师周广丽老师的精心指导下完成的。周老师有着深厚的理论水平,严谨的治学态度,最可贵的是她会不厌其烦的为我们解决她力所能及的问题。就比如我的一个quartersII的软件她就帮我装了差不多有五遍,可从来都没有一丝的不耐烦。在此我首先向周广利老师致以深深的敬意和由衷的感谢!
在整个设计过程中,我身边的同学,特别是同组的同学们也给予了我很大的帮助,他们帮我解决了很多细节上的问题,使我能够更好更顺利的完成我的毕业设计,谢谢你们!
通过做这次的毕业设计,我学到了很多,无论是理论知识的巩固和进步还是实际操作的掌握,请允许我在此向他们表示诚挚的感谢。 都让我受益匪浅。这些很大程度都得益于曾经帮助过我的老师和同学, |
.专业.专注.
参考 文 献
[1]江国强.EDA技术与应用[M].2006,电子工业出版社.
[2]刘开绪.可编程逻辑器件在抢答器电路设计中的应用[J].沈阳工业大学学 报,2007,29(1):lO3—1O6.
[3]胡丹.基于VHDI的智力竞赛抢答器的设计与实现[J].现代机械,2007,(3):54 —55.
[4]章忠全.电子技术基础实验与课程设计[M].中国电力出版社,1999.
[5]高曙光.可编程逻辑器件原理、开发与应用[M].西安:西安电子科技大学出 版社,2002.
[6]刘开绪.数字式抢答器的设计与实现[J1.电子工程师.2005.9:69—71.[7]阎石.数字电子技术基础[M].北京:高等教育出版社,1999.
[9]刘延文, |
技大学出版社,1997.
[12]常青,陈辉煌.可变成专用集成电路及其应用与设计实践经验.北京:国防工 业出版社,1998.
[13]郭勇.EDA技术基础(第2版)[M].机械工业出版社,2005.314—320.
[14]Enoch O Hwang.Digital Longic and Microprocessor Design with VHDL[M].
Thomson-Engineering,2005.
[15]SudhakarYalamanchili.Introductory VHDL:from simulation to synthesis[M].Prentice Hall,2001.
.专业.专注.
4电子抢答器源程序
各模块VHDL源代码
1)、抢答鉴别模块FENG的VHDL源程序--feng.vhd
LIBRARYIEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY FENG IS
PORT(CP,CLR:INSTD_LOGIC;
Q :OUT STD_LOGIC);
END FENG;
ARCHITECTURE FENG_ARC OF FENG IS
BEGIN
PROCESS(CP,CLR) |
END IF;
END PROCESS;
END FENG_ARC;
2)、片选信号产生模块SEL的VHDL 源程序--sel.vhd
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY SEL IS PORT(CLK:IN STD_LOGIC;
a:OUT INTEGER RANGE 0 TO7);
END SEL;
ARCHITECTURE SEL_ARC OF SEL IS --片选信号产生模块SELBEGIN
PROCESS(CLK)
.专业.专注.
VARIABLE AA:INTEGER RANGE 0 TO 7;
BEGIN
IF CLK'EVENT AND CLK='1'THEN
AA:=AA+1;
END IF;
A<=AA;
END PROCESS;
END SEL_ARC;
3)、锁存器模块LOCKB的VHDL源程序--lockb.vhd
LIBRARYIEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY LOCKB IS
PORT(D1,D2,D3,D4:IN STD_LOGIC;
Q1,Q2,Q3,Q4,ALM:OUT STD_LOGIC); CLK,CLR:IN STD_LOGIC; |
BEGIN
IF CLR='0'THEN
Q1<='0';
Q2<='0';
Q3<='0';
Q4<='0';
ALM<='0'; --模块LOCKB ELSIF CLK'EVENT AND CLK='1'THEN
Q1<=D1;
Q2<=D2; Q3<=D3;
.专业.专注.
Q4<=D4;
ALM<='1';
END IF;
END PROCESS;
END LOCK_ARC;
4)、转换模块CH41A的VHDL源程序--ch41a..vhd
LIBRARYIEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY CH41A IS
PORT(D1,D2,D3,D4:INSTD_LOGIC;
Q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
END CH41A;
ARCHITECTURE CH41_ARC OF CH41A IS --转换模块CH41A
PROCESS(D1,D2,D3,D4)BEGIN |
WHEN "0111"=>Q<="0001";
WHEN"1011"=>Q<="0010";
WHEN"1101"=>Q<="0011";
WHEN"1110"=>Q<="0100";
WHENOTHERS=>Q<="1111";
END CASE;
ENDPROCESS;
END CH41_ARC;
5)、3选1 模块CH31A的VHDL 源程序--ch31a.vhd
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;
.专业.专注.
ENTITYCH31A IS
PORT(SEL:INSTD_LOGIC_VECTOR(2 DOWNTO 0);
D1,D2,D3:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
Q : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
END CH31A;
ARCHITECTURE CH31_ARC OF CH31A IS
BEGIN
PROCESS(SEL,D1,D2,D3)
BEGIN
CASESEL IS
WHEN "000"=>Q<=D1;
WHEN "001"=>Q<=D2;
WHEN "111"=>Q<=D3;
END CASE; WHEN OTHERS=>Q<="1111"; |
--count.vhd
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY COUNT IS
PORT(CLK,EN:IN STD_LOGIC; --倒计时模块COUNT
H,L:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
SOUND:OUT STD_LOGIC);
END COUNT;
ARCHITECTURE COUNT_ARC OF COUNT IS BEGIN
.专业.专注.
PROCESS(CLK,EN)
VARIABLE HH,LL:STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
IFCLK'EVENT AND CLK='1'THEN
IFEN='1'THEN
IFLL=0 AND HH=0 THEN
SOUND<='1';
ELSIF LL=0 THEN
LL:="1001";
HH:=HH-1;
ELSE
LL:=LL-1;
END IF;
SOUND<='0'; ELSE |
H<=HH;
L<=LL;
END PROCESS;
END COUNT_ARC;
7、显示译码模块DISP的VHDL 源程序
--disp.vhd
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITYDISP IS
PORT(D:IN STD_LOGIC_VECTOR(3 DOWNTO 0); Q:OUTSTD_LOGIC_VECTOR(6 DOWNTO 0));
.专业.专注.
ENDDISP;
ARCHITECTURE DISP_ARC OF DISP IS
BEGIN
PROCESS(D)
BEGIN
CASED IS
WHEN"0000"=>Q<="0111111";
WHEN"0001"=>Q<="0000110";
WHEN"0010"=>Q<="1011011";
WHEN"0011"=>Q<="1001111";
WHEN"0100"=>Q<="1100110";
WHEN"0101"=>Q<="1101101";
WHEN"0110"=>Q<="1111101";
WHEN"1000"=>Q<="1111111"; WHEN"0111"=>Q<="0100111"; |
ENDDISP_ARC;
.专业.专注.