基于FPGA的电子抢答器的程序设计设计.docx
《基于FPGA的电子抢答器的程序设计设计.docx》由会员分享,可在线阅读,更多相关《基于FPGA的电子抢答器的程序设计设计.docx(18页珍藏版)》请在冰豆网上搜索。
![基于FPGA的电子抢答器的程序设计设计.docx](https://file1.bdocx.com/fileroot1/2023-5/15/b8f0dfa4-42a2-4771-a1d2-4ef05cda6136/b8f0dfa4-42a2-4771-a1d2-4ef05cda61361.gif)
基于FPGA的电子抢答器的程序设计设计
基于FPGA的电子抢答器的程序设计
摘要
随着科学技术日新月异,文化生活日渐丰富,在各类竞赛、抢答场合电子抢答器已经作为一种工具得到了较为广泛的应用。
顾名思义,电子抢答器是一种通过抢答者的指示灯显示、数码显示和警示显示等手段准确、公正、直观地判断出最先获得发言权选手的设备。
此次设计有4组抢答输入,每组设置一个抢答按钮供抢答者使用。
电路具有第一抢答信号的鉴别和锁存功能。
当第一抢答者按下抢答开关时,该组指示灯亮以示抢答成功。
同时,电路也具备自锁功能,保证能够实现在一路成功抢答有效后,其他三路均不能抢答。
本设计基于VHDL语言,采用FPGA为控制核心,并结合动手实践完成,具有电路简单、操作方便、灵敏可靠等优点。
该四路抢答器使用VHDL硬件描述语言进行编程,分为七个模块:
判断模块,锁存模块,转换模块,扫描模块,片选模块,定时报警模块和译码模块。
编程完成后,使用QuartersII工具软件进行编译仿真验证。
关键词:
VHDL,FPGA,四路抢答器,仿真
郑州轻工业学院
课程设计任务书
题目基于FPGA的电子抢答器的程序设计
专业班级电子信息工程10-1班学号姓名
主要内容、基本要求、主要参考资料等:
主要内容:
抢答器是在竞赛、文体娱乐活动(抢答活动)中,能准确、公正、直观地判断出抢答者的机器。
要求学生使用硬件描述语言(Verilog或者VHDL)设计基于FPGA的电子抢答器的源程序。
实现如下功能:
设计一个四路抢答器;在一路成功抢答有效后,其他三路均不能抢答,并且将抢答成功的一路用指示灯显示出来。
基本要求:
1、学会quartusII的使用,掌握FPGA的程序设计方法。
2、掌握硬件描述语言语法。
4、程序设计完成后要求在quartusII中实现功能仿真。
主要参考资料:
1、褚振勇.FPGA设计及应用(第三版)[M].西安电子科技大学出版社.2012,4
2、陈怀琛.MATLAB及在电子信息课程中的应用[M].北京:
电子工业出版社.2008,1
完成期限:
2013.6.21—2013.6.25
指导教师签名:
课程负责人签名:
2013年6月18日
1概述
1.1设计背景
现场可编程门阵列(简称FPGA)是20世纪80年代中期出现的高密度可编程逻辑器件,采用SRAM开关元件的FPGA是易失性的,每次重新加电,FPGA都要重新装入配置数据。
突出优点是可反复编程,系统上电时,给FPGA加载不同的配置数据,即可令其完成不同的硬件功能。
这种配置的改变甚至可以在系统的运行中进行,实现系统功能的动态重构。
“在系统可编程”(简称ISP)是指对器件、电路或整个电子系统的逻辑功能可随时进行修改或重构的能力,支持ISP技术的可编程逻辑器件称为在系统可编程逻辑器件,它不需要专门的编程器,利用计算机接口和一根下载电缆就可以对器件编程了。
本设计针对电子技术综合实验的要求,利用EDA技术中quartusII作为开发工具,设计了一款基于FPGA的智力竞赛抢答器。
1.2抢答器现状
在进行智力竞赛抢答题比赛时,各参赛者考虑后都想抢先答题。
如果没有合适的设备,有时难以分清他们的先后,使主持人感到为难。
为了使比赛能顺利进行,需要有一个能判断抢答先后的设备,我们将它称为智力竞赛抢答器。
在许多抢答竞赛、文体娱乐活动,为了准确、公正、直观地判断出第一抢答者,通常需要设置一台这样的抢答器,通过指示灯显示出第一抢答者。
1.3本论文主要完成的工作
本课程设计基于VHDL语言,采用FPGA为控制核心,并结合动手实践完成,具有电路简单、操作方便、灵敏可靠等优点。
设计四路抢答器使用VHDL硬件描述语言进行编程,分为七个模块:
判断模块,锁存模块,转换模块,扫描模块,片选模块,定时报警模块和译码模块。
编程完成后,使用QuartersII工具软件进行编译仿真验证。
系统达到要求:
在一路成功抢答有效后,其他三路均不能抢答,并且将抢答成功的一路用指示灯显示出来。
1.4设计心得
通过这次课程设计,帮助我们加深理解FPGA程序设计方法,学会quartusII软件的使用,了解简单多功能抢答器组成原理,掌握在quartusII中实现功能仿真的方法,相应地提高动手能力和排障能力,并且良好地巩固已学的理论知识,将硬件描述语言语法与实践相结合。
通过分析多功能抢答器各单元电路之间的关系及相互影响,从而能正确设计、计算定时计数的各个单元电路。
2开发工具简介
2.1VHDL语言简介
VHDL的英文全名是Very-High-SpeedIntegratedCircuitHardwareDescriptionLanguage,诞生于1982年。
1987年底,VHDL被IEEE和美国国防部确认为标准硬件描述语言。
自IEEE公布了VHDL的标准版本,IEEE-1076之后,各EDA公司相继推出了自己的VHDL设计环境,或宣布自己的设计工具可以和VHDL接口。
此后VHDL在电子设计领域得到了广泛的接受,并逐步取代了原有的非标准的硬件描述语言。
1993年,IEEE对VHDL进行了修订,从更高的抽象层次和系统描述能力上扩展VHDL的内容,公布了新版本的VHDL,即IEEE标准的1076-1993版本。
现在,VHDL和Verilog作为IEEE的工业标准硬件描述语言,又得到众多EDA公司的支持,在电子工程领域,已成为事实上的通用硬件描述语言。
有专家认为,在新的世纪中,VHDL于Verilog语言将承担起大部分的数字系统设计任务。
VHDL主要用于描述数字系统的结构,行为,功能和接口。
除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。
VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可是部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。
在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。
这种将设计实体分成内外部分的概念是VHDL系统设计的基本点
VHDL语言目前在数字设计领域已为广大设计者所接受,众多CAD厂商纷纷使自己新开发的电子设计软件与VHDL兼容,VHDL语言成了电子设计工程师必须掌握的工具。
在目前,CPU和可编程逻辑器件已经成为数字系统的硬件基础,从事数字系统的设计必须掌握可编程逻辑器件的设计方法,而VHDL语言作为可编程逻辑器件设计时最重要的输入方法,为所有可编程逻辑器件厂商所支持。
应用VHDL进行工程设计的优点是多方面的。
一、与其他的硬件描述语言相比,VHDL具有更强的行为描述能力,从而决定了他成为系统设计领域最佳的硬件描述语言。
强大的行为描述能力是避开具体的器件结构,从逻辑行为上描述和设计大规模电子系统的重要保证。
二、VHDL丰富的仿真语句和库函数,使得在任何大系统的设计早期就能查验设计系统的功能可行性,随时可对设计进行仿真模拟。
三、VHDL语句的行为描述能力和程序结构决定了他具有支持大规模设计的分解和已有设计的再利用功能。
符合市场需求的大规模系统高效,高速的完成必须有多人甚至多个代发组共同并行工作才能实现。
四、对于用VHDL完成的一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动的把VHDL描述设计转变成门级网表。
五、VHDL对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必管理最终设计实现的目标器件是什么,而进行独立的设计。
2.2FPGA开发过程与应用
随着现场可编程逻辑器件越来越高的集成度,加上不断出现的I/O标准、嵌入功能、高级时钟管理的支持,使得现场可编程逻辑器越来越广泛。
2.2.1FPGA发展历程及现状
从Xilinx公司推出了世界上第一片FPGA(现场可编程逻辑芯片),FPGA已经历几十年的发展。
从最初的一千多可利用门,发展到90年代的几十万个可利用门,到十一世纪又陆续推出了几千万门的单片FPGA芯片。
FPGA使用灵活,适用性强,特别适用于复杂逻辑的设计,有利用电子系统小型化,而且其开发周期短、开发投入少、芯片价格不断降低,促使FPGA越来越多地取代了ASIC的市场。
2.2.2FPGA工作原理
FPGA采用了逻辑单元阵列LCA(LogicCellArray)这样一个概念,内部包括可配置逻辑模块CLB(ConfigurableLogicBlock)、输出输入模块IOB(InputOutputBlock)和内部连线(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.2.3FPGA开发流程
FPGA开发流程可以分为如下几步:
①设计输入,设计输入主要包括原理图输入、状态图输入、波形图输入以及某种硬件描述语言,比如说是VHDL、Verilog的源程序。
它是利用这些输入去描述一个电路的功能。
②功能仿真,功能仿真就是利用相关仿真工具对相关电路进行功能级别仿真,也就是说对你的输入设计的逻辑功能进行相关的模拟测试。
在功能上面来了解电路是否能够达到预期要求。
这里的功能仿真纯粹是模拟性质的,不会设计的任何具体器件的硬件特性。
③综合,综合就是行为或者功能层次表达的电子系统转换成低层次门级电路的网表。
④布局布线,就是将综合后的网表文件针对某一个具体的目标器件进行逻辑映射。
此时应该使用FPGA厂商提供的实现与布局布线工具,根据所选芯片的型号,进行芯片内部功能单元的实际连接与映射。
⑤时序验证,就是要使得时序仿真过程中,建立与保持时间要符合相关的制约,以便数据能被正确的传输。
使仿真既包含门延时,又包含线延时信息。
能较好地反映芯片的实际工作情况。
⑥生成SOF等文件,此文件可以通过调试器把它下载到系统中间去。
而FPGA设计流程的其他步骤基本上由相关工具去完成,因此只要自己设置好相关参数,不要人为干预太多。
而验证的话就需要用户花费大量的时间去完
成。
2.3QuartusII软件
QuartusII是Altera提供的FPGA/CPLD开发集成环境,Altera是世界最大可编程逻辑器件供应商之一。
QuartusII在21世纪初推出,是Altera前一代FPGA/CPLD集成开发环境MAX+plusII的更新换代产品,其界面友好,使用便捷。
在QuartusII上可以完成设计输入、HDL综合、布线布局(适配)、仿真和下载和硬件测试等流程,它提供了一种与结构无关的设计环境,使设计者能方便地进行设计输入、快速处理和器件编程。
Altera的QuartusII提供了完整的多平台设计环境,能满足各种特定设计的需要,也是单芯片可编程系统(SOPC)设计的综合性环境和SOPC开发的基本设计工具,并为Altera DSP开发包进行系统模型设计提供了集成综合环境。
QuartusII设计工具完全支持VHDL、Verylog的设计流程,其内部嵌有VHDL、Verilog逻辑综合器。
QuartusII也可以利用第三方的综合工具,如LeonardoSpectrum、SynplifyPro、FPGAComplierII,并能直接调用这些工具。
同样,QuartusII具备仿真功能,同时也支持第三方的仿真工具,如ModelSim。
此外,QuartusII与MATLAB和DSPBuilder结合,可以进行基于FPGA的DSP系统开发,是DSP硬件系统实现的关键EDA工具。
QuartusII包括模块化的编译器。
编译器包括的功能模块有分析/综合器(Analysis&Synthesis)、适配器(Filter)、装配器(Assembler)、时序分析器(TimingAnalyzer)、设计辅助模块(DesignAssistant)、EDA网表文件生成器(EDANetlistWriter)和编辑数据接口(ComplierDatabaseInterface)等。
可以通过选择StartComplication来运行所有的编译器模块,也可以通过选择Start单独运行各个模块。
还可以通过选择ComplierTool(Tools菜单),在ComplierTool窗口中运行该模块来启动编辑器模块。
在ComplierTool窗口中,可以打开该模块的设置文件或报告文件,或打开其他相关窗口。
QuartusII编译设计的主控界面显示了QuartusII自动设计的各主要处理环节和设计流程,包括设计输入编辑、设计分析与综合、适配、编程文件汇编(装配)、时序参数提取以及编程下载几个步骤。
图1QuartusII设计流程
3系统设计
3.1系统设计要求
抢答器是在竞赛、文体娱乐活动(抢答活动)中,能准确、公正、直观地判断出抢答者的机器。
本设计使用硬件描述语言VHDL设计基于FPGA的电子抢答器的源程序。
要求实现如下功能:
设计一个四路抢答器;在一路成功抢答有效后,其他三路均不能抢答,并且将抢答成功的一路用指示灯显示出来。
3.2系统设计方案
3.2.1系统硬件设计方案
本设计分为硬件设计和软件设计,这两者相互结合,不可分离;从时间上看,硬件设计的绝大部分工作量是在最初阶段,到后期往往还要做一些修改。
只要技术准备充分,硬件设计的大返工是比较少的,软件设计的任务贯彻始终,到中后期基本上都是软件设计任务。
图2硬件设计流程
3.2.2系统软件设计方案
软件设计和硬件电路设计应结合进行,哪些功能由硬件完成,哪些任务由软件完成,在硬件电路设计基本定型后,也就基本上决定下来了。
软件任务分析环节是为软件设计做一个总体规划。
从软件的功能来看可分为两大类:
一类是执行软件,它能完成各种实质性的功能,如测量,计算,显示,输出控制和通信等,另一类是监控软件,它是专门用来协调各执行模块和操作者的关系,在系统软件中充当组织调度角色的软件。
这两类软件的设计方法各有特色,执行软件的设计偏重算法效率,与硬件关系密切,千变万化。
软件任务分析时,应将各执行模块一一列出,并为每一个执行模块进行功能定义和接口定义(输入输出定义)。
在各执行模块进行定义时,将要牵扯到的数据结构和数据类型问题也一并规划好。
各执行模块规划好后,就可以监控程序了。
首先根据系统功能和键盘设置选择一种最适合的监控程序结构。
相对来讲,执行模块任务明确单纯,比较容易编程,而监控程序较易出问题。
这如同当一名操作工人比较容易,而当一个厂长就比较难了。
图3软件设计流程
3.3.3系统原理详述
图4具有完整抢答器功能的结构图
根据对系统设计要求的分析可知,系统的输入信号有:
各组的抢答按钮S0,S1,S2,S3输入,复位信号CLEAR用于控制整个系统清0,按下该复位键系统清0,抬起该复位键抢答开始。
在主持人将系统复位并使抢答有效开始后,S0,S1,S2,S3任何第一抢答者按下抢答按钮,对应的输入引脚接高电位1,电路记忆下第一抢答者身份,并封锁其他各组的按钮,即其他任何一组按键都不会使电路响应,完成抢答过程。
系统的输出信号有:
四组抢答成功与否的指示灯控制信号输出口LEDA、LESB、LEDC、LEDD,当任何第一抢答者成功抢答后指示灯亮起。
本系统应具有的功能有:
第一抢答信号的鉴别和锁存功能,指示灯显示第一抢答者功能。
根据分析我们可以把该四路抢答器设计分为判断模块,锁存模块,扫描模块等部分,依据各模块功能编写相应的源程序,并对相应的程序进行编译以及时序仿真。
若正确就进行到下一个模块的编写,若错误就修改直至编译成功。
系统的具体工作原理如下:
抢答锁存模块主要实现抢答过程中的抢答功能,并且能实现当有一路抢答按键按下时,该路抢答信号将其余抢答信号封锁的功能。
在这个模块输入端有WARN输入(以时间控制系统的WARN输出信号为信号源)、一个和时间控制系统公用的CLEAR端、4人抢答输入信号端S0,S1,S2,S3和一个时钟信号端CLK,这个时钟信号是个高频信号,用以扫描S0,S1,S2,S3是否有信号输入。
输出端有对应于S0,S1,S2,S3编号的4个指示灯LED和4线2进制输出端STATES(用于锁存当前的状态),还有一个STOP端用于指示S0,S1,S2,S3按钮状态。
在此模块中高频时钟信号一直作用,此时,若主持人按下CLEAR即为开始抢答信号,所有输出端都自动清零。
在有效时间范围内只要有人抢答,STOP就有高电平输出至时间控制系统的
STOP端以控制时间的停止,并且对应的LED指示灯点亮,STATES锁存输出以显示优先抢答人的组号,并锁定输入端S以阻止系统响应其他抢答者的信号。
4电路程序设计及仿真
4.1抢答锁存模块设计
该模块主要实现抢答过程中的抢答功能。
在系统复位并使抢答有效开始后,当S0,S1,S2,S3任意一路第一抢答者按下抢答按钮,对应的输入引脚接高电位1,电路记忆下第一抢答者身份,信号输入并进行锁存,其他任何一组按键都不会使电路响应,完成抢答过程。
4.1.1VHDL源程序
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYLOCKIS
PORT(CLK,CLEAR:
INSTD_LOGIC;
WARN:
INSTD_LOGIC;
S0,S1,S2,S3:
INSTD_LOGIC;
STATES:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
STOP:
OUTSTD_LOGIC;
LED:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDLOCK;
ARCHITECTUREONEOFLOCKIS
SIGNALG:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
PROCESS(CLEAR,CLK,S0,S1,S2,S3)
BEGIN
IFCLEAR='1'THENG<="0000";LED<="0000";STOP<='0';
ELSIFCLK'EVENTANDCLK='1'THEN
IFWARN='0'THEN
IF(S3='1')ANDNOT(G(0)='1'ORG
(1)='1'ORG
(2)='1')THEN
G(3)<='1';LED(3)<='1';
ELSIF(S2='1')ANDNOT(G(0)='1'ORG
(1)='1'ORG(3)='1')THEN
G
(2)<='1';LED
(2)<='1';
ELSIF(S1='1')ANDNOT(G(0)='1'ORG
(2)='1'ORG(3)='1')THEN
G
(1)<='1';LED
(2)<='1';
ELSIF(S0='1')ANDNOT(G
(1)='1'ORG
(2)='1'ORG(3)='1')THEN
G(0)<='1';LED(3)<='1';
ENDIF;
STOP<=G(0)ORG
(1)ORG
(2)ORG(3);
ENDIF;
ENDIF;
CASEGIS
WHEN"0001"=>STATES<="0001";
WHEN"0010"=>STATES<="0010";
WHEN"0100"=>STATES<="0011";
WHEN"1000"=>STATES<="0100";
WHENOTHERS=>STATES<="0000";
ENDCASE;
ENDPROCESS;
ENDARCHITECTUREONE;
4.1.2抢答锁存电路的模块
在这个模块中主要实现抢答过程中的抢答功能,并且能实现当有一路抢答按键按下时,该路抢答信号将其余个绿抢答封锁的功能。
在这个模块输入端有WARN输入(以时间控制系统的WARN输出信号为信号源)、一个和时间控制系统公用的CLEAR端、4人抢答输入信号端S0,S1,S2,S3和有一个时钟信号端CLK,这个时钟信号是个高频信号,用以扫描S0,S1,S2,S3是否有信号输入。
输出端有对应于S0,S1,S2,S3编号的4个指示灯LED和4线2进制输出端STATES(用于锁存当前的状态),还有一个STOP端用于指示S0,S1,S2,S3按钮状态。
图5抢答锁存电路的模块
4.2仿真
图6仿真图
由图中可看出在复位信号CLEAR从高电平降到低电平后,抢答器开始正常工作,此时抢答开始。
在此之前S0抢答无效。
而S2作为第一抢答者最先抢答,这时开始报警,数码管输出显示1,说明A最先抢答。
总结
一周的FPGA课程设计很快就过去了,其中真是有苦更有甜,苦的是我在第一次独自设计一个应用型设备时的不熟悉和不知所措,甜的是经过一周的时间我通过回顾课本知识、询问同学老师和上网学习收获到了很多专业方面的知识更加锻炼了我的动手能力和专业技能。
记得大二下学期第一次上EDA程序设计课的时候,我对硬件设计语言是那么的难以上手,通过杜老师一学期细致的讲解,配合实验课程让我对EDA相关知识、VHDL编程、quartusII软件、MAX_PLUSⅡ软件有了更深的理解和更熟练的掌握。
本次我的课程设计为四路竞赛抢答器,根据电路的特点,我采用层次化结构化设计,将此项设计任务分成部分模块,分别对各个模块进行编程,然后再将各模块合起来编译,这一步一步的加深了我们对于层次化设计的理解和对VHDL设计流程的熟悉。
在设计的过程中,遇到问题我们尽量独立思考,查找资料,到自己不能解决的时候就和同小组同学研究讨论,或者向指导老师请教。
这样的经历不仅提高了我们独立发现问题、分析问题、解决问题的能力,又很好地培养了交流合作的精神。
通过这次课程设计,进一步加深了我对EDA技术的了解,让我更加明确VHDL的设计流程,并产生了更加浓厚的兴趣。
特别是当每一个模块程序调试成功时,内心的满足感真的无法形容。
这次经历更让我懂得了理论与实际相结合是十分重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,使理论服务于实际,才能真正为社会服务。
在设计的过程中我们不可避免的遇到各种问题,因为这毕竟第一次做的,难免会不尽善尽美。
同时在设计的过程中发现了自己不少不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢