1、1基于 FPGA 的多路数字抢答器的设计摘要:本文主要介绍了以 FPGA 为基础的八路数字抢答器的设计,首先对各模块的功能进行分配,此次设计主要有七个模块,依次为分频模块、抢答模块、加减分模块、倒计时模块、设置倒计时模块、蜂鸣器模块和数字显示模块。主持人按下开始键可以实现抢答开始,选手号的显示,加减分模块,积分的显示,积分的重置,并启动倒计时模块;若有选手犯规或者倒计时记到五秒,停止倒计时,开启蜂鸣器,并为进入加减分模块做准备。此次设计程序用 Quartus II12.0 为软件开发平台,用 Verilog 语言来编写,使用模块化编程思想,自上向下,通过寄存器变量来控制各个模块的运行。本次设计
2、采用 FPGA 来增强时序的灵活性,由于 FPGA 的 I/O 端口资源丰富,可以在此基础上稍加修改可以增加很多其他功能的抢答器,因此后期可塑性很强,因为核心是 FPGA 芯片,外围电路比较简单,可靠性强 、运算速度高,因此便于维护,并且维护费用低。关键词:FPGA、抢答器、倒计时、犯规报警、加减分、显示目 录第一章 绪论. 1第二章 FPGA 原理及相关开发工具软件的介绍 32.1 FPGA 的简介. .32.1.1 FPGA 的发展与趋势. 32.1.2 FPGA 的工作原理及基本特点 42.1.3 FPGA 的开发流程. 52.1.4 FPGA 的配置. 62.2 软件介绍. 72.2.
3、1 Verilog HDL 的介绍 7Comment U1: 子标题用宋体小四号黑体22.2.2 Quartus II软件.8第三章 数字抢答器系统设计方案和主要模块 113.1 功能描述及设计架构 .113.2 抢答器程序流程图以及各模块代码分析 133.2.1 抢答器程序结构及主程序流程图 133.2.2 秒分频模块 .153.2.3 倒计时以及倒计时剩 5S时报警模块 .173.2.4 倒计时显示及倒数计时设置显示模块.203.2.5 选手号显示及违规报警模块.263.2.6 倒计时设置模块.303.2.7 顶层模块.353.3 硬件电路 .373.31 按键电路图. 383.32 数码
4、管显示电路图. 383.32 蜂鸣器电路图.39第四章 管脚分配及功能.40第五章 总 结. .41参考文献 .43第一章 绪论1.1 课题研究背景随着社会的发展,各种竞赛比赛日益增多,抢答器以它的方便快捷、直观反映首先取得发言权的选手等优点,深受比赛各方的辛睐,市场前景一片大好。另一方面随着电子科技的发展,抢答器的功能以及实现方式也越来越多,产品的可靠性以及准确性也越来越强。能够实现多路抢答器功能的方式有很多种,3主要包括前期的数字电路、模拟电路以及数字电路与模拟电路组合的方式,但是这种方式制作过程比较复杂,并且可靠性准确性不高,研发周期也比较长。目前对于抢答器的功能描述,如涵盖抢答器、选手
5、答题计时、限时抢答以及犯规组号抢答器具有抢答自锁,暂停复位、电子音乐报声、灯光指示、自动定时等功能,还有工作模式的切换和时间设定,对于这些随着科学技术的发展,肯定还要得到进一步的改进。发展趋势一般都要趋向于智能化,并且设计更加合理化。1.2 研究内容及意义通过抢答器的使用,可以在各类比赛中特别是抢答环节,直观明了的看出是哪一组抢到了题目,比起通过肉眼来判断,更加的精确,同时也少了不必要的纷争,使得比赛更加的公平、公开、公正。抢答器的这些优点使得它在比赛中得以广泛的应用。抢答器经过发展从最初的只有几个三极管、可控硅、发光管等组成, 能通过发光管的指示辨认出选手号码;到现在使用高速处理芯片和集成数
6、字电路;从起初单片机到现在的ARM 和 FPGA,技术手段进一步成熟,同时技术的发展也为抢答器增加了很多更加贴近比赛的新功能,如选手号码显示、倒计时、选手得分显示等等。这类抢答器制作并不复杂,但是准确度和可靠性都比较可观,并且易于安装和维护。第二章 FPGA 原理及相关开发工具软件的介绍2.1 FPGA 的简介2.1.1 FPGA 的发展与趋势现场可编程门阵列 FPGA(FieldProgrammable Gate Array) ,它是在PAL、GAL、CPLD 等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服
7、了原有可编程器件门电路数有限的缺点。目前以硬件描述语言(Verilog 或 VHDL)所完成的电路设计,可以经过简单的综合与布局,快速的烧录至 FPGA 上进行测试,是现代 IC 设计验证的技术主流。这些可编辑元件可以被用来实现一些基本的逻辑门电路(比如4AND、OR、XOR、NOT)或者更复杂一些的组合功能比如解码器或数学方程式。在大多数的 FPGA 里面,这些可编辑的元件里也包含记忆元件例如触发器(Flipflop)或者其他更加完整的记忆块。系统设计师可以根据需要通过可编辑的连接把 FPGA 内部的逻辑块连接起来,就好像一个电路试验板被放在了一个芯片里。一个出厂后的成品 FPGA 的逻辑块
8、和连接可以按照设计者而改变,所以 FPGA 可以完成所需要的逻辑功能。FPGA 一般来说比 ASIC(专用集成芯片)的速度要慢,无法完成复杂的设计,而且消耗更多的电能。但是他们也有很多的优点比如可以快速成品,可以被修改来改正程序中的错误和更便宜的造价。厂商也可能会提供便宜的但是编辑能力差的 FPGA。因为这些芯片有比较差的可编辑能力,所以这些设计的开发是在普通的 FPGA 上完成的,然后将设计转移到一个类似于 ASIC 的芯片上。另外一种方法是用 CPLD(复杂可编程逻辑器件备) 。2.1.2 FPGA 的工作原理及基本特点FPGA 采用了逻辑单元阵列 LCA(Logic Cell Array
9、)这样一个概念,内部包括可配置逻辑模块 CLB(Configurable Logic Block) 、输出输入模块IOB(Input Output Block)和内部连线(Interconnect)三个部分。FPGA 的基本特点主要有: 1)采用 FPGA 设计 ASIC 电路,用户不需要投片生产,就能得到合用的芯片。2)FPGA 可做其它全定制或半定制 ASIC 电路的中试样片。 3)FPGA 内部有丰富的触发器和 IO 引脚。 4)FPGA 是 ASIC 电路中设计周期最短、开发费用最低、风险最小的器件之一。 5) FPGA 采用高速 CHMOS 工艺,功耗低,可以与 CMOS、TTL 电
10、平兼容。 可以说,FPGA 芯片是小批量系统提高系统集成度、可靠性的最佳选择之一。FPGA 是由存放在片内 RAM 中的程序来设置其工作状态的,因此,工作时需要对片内的 RAM 进行编程。用户可以根据不同的配置模式,采用不同的编程方5式。 加电时,FPGA 芯片将 EPROM 中数据读入片内编程 RAM 中,配置完成后,FPGA 进入工作状态。掉电后,FPGA 恢复成白片,内部逻辑关系消失,因此,FPGA 能够反复使用。FPGA 的编程无须专用的 FPGA 编程器,只须用通用的EPROM、PROM 编程器即可。当需要修改 FPGA 功能时,只需换一片 EPROM 即可。这样,同一片 FPGA,
11、不同的编程数据,可以产生不同的电路功能。因此,FPGA的使用非常灵活。2.1.3 FPGA 的开发流程FPGA 开发流程可以分为如下几步:设计输入,设计输入主要包括原理图输入、状态图输入、波形图输入以及某种硬件描述语言,比如说是 Verilog、VHDL 的源程序(此次设计主要是使用 Verilog) 。它是利用这些输入去描述一个电路的功能。功能仿真,功能仿真就是利用相关仿真工具对相关电路进行功能仿真,也就是对你的输入设计的逻辑功能进行相关的模拟测试。从功能上来了解电路是否能够达到预期要求。这里的功能仿真纯粹是模拟性质的,不会设计的任何具体器件的硬件特性。综合,综合就是行为或者功能层次表达的电
12、子系统转换成低层次门级电路的网表。布局布线,就是将综合后的网表文件针对某一个具体的目标器件进行逻辑映射。此时应该使用 FPGA 厂商提供的实现与布局布线工具,根据所选芯片的型号,进行芯片内部功能单元的实际连接与映射。时序验证,就是要使得时序仿真过程中,建立与保持时间要符合相关的制约,以便数据能被正确的传输。使仿真既包含门延时,又包含线延时信息。能较好地反映芯片的实际工作情况。生成 SOF 等文件,此文件可以通过调试器把它下载到系统中间去。而FPGA 设计流程的其他步骤基本上由相关工具去完成,因此只要自己设置好相关参数,不要人为干预太多。而验证的话就需要用户花费大量的时间去完成。62.1.4 F
13、PGA 的配置FPGA 有多种配置模式:并行主模式为一片 FPGA 加一片 EPROM 的方式;主从模式可以支持一片 PROM 编程多片 FPGA;串行模式可以采用串行 PROM 编程FPGA;外设模式可以将 FPGA 作为微处理器的外设,由微处理器对其编程。如何实现快速的时序收敛、降低功耗和成本、优化时钟管理并降低 FPGA 与 PCB 并行设计的复杂性等问题,一直是采用 FPGA 的系统设计工程师需要考虑的关键问题。如今,随着 FPGA 向更高密度、更大容量、更低功耗和集成更多 IP 的方向发展,系统设计工程师在从这些优异性能获益的同时,不得不面对由于 FPGA 前所未有的性能和能力水平而
14、带来的新的设计挑战。例如,领先 FPGA 厂商Xilinx 最近推出的 Virtex-5 系列采用 65nm 工艺,可提供高达 33 万个逻辑单元、1,200 个 I/O 和大量硬 IP 块。超大容量和密度使复杂的布线变得更加不可预测,由此带来更严重的时序收敛问题。此外,针对不同应用而集成的更多数量的逻辑功能、DSP、嵌入式处理和接口模块,也让时钟管理和电压分配问题变得更加困难。幸运地是,FPGA 厂商、EDA 工具供应商正在通力合作解决 65nm FPGA 独特的设计挑战。不久以前,Synplicity 与 Xilinx 宣布成立超大容量时序收敛联合工作小组,旨在最大程度地帮助系统设计工程师
15、以更快、更高效的方式应用 65nm FPGA 器件。设计软件供应商 Magma 推出的综合工具 Blast FPGA 能帮助建立优化的布局,加快时序的收敛。最近 FPGA 的配置方式已经多元化! FPGA 主 要 生 产 厂 商 :1、Altera 2、Xilinx 3、Actel 4、Lattice 其中 Altera 和 Xilinx 主要生产一般用途 FPGA,其主要产品采用 RAM 工艺。Actel 主要提供非易失性 FPGA,产品主要基于反熔丝工艺和 FLASH 工艺。72.2 软件介绍2.2.1 Verilog HDL 的介绍Verilog HDL 是在 1983 年有 GDA(G
16、ateWay Design Automation)公司首创的一种硬件描述语言,用于数字电子系统设计。该语言可以让设计者进行各种级别的逻辑设计,进行数字逻辑系统的仿真验证、时序分析、逻辑综合。它是目前应用最广泛的一种硬件语言。Verilog HDL 作为一种硬件描述语言,用于从算法级、门级到开关级的多种抽象设计层次的数字系统建模。被建模的数字系统对象的复杂性可以介于简单的门和完整的电子数字系统之间。数字系统能够按层次描述,并可在相同描述中显式地进行时序建模。Verilog HDL 语言具有下述描述能力:设计的行为特性、设计的数据流特性、设计的结构组成以及包含响应监控和设计验证方面的时延和波形产生
17、机制。所有这些都使用同一种建模语言。此外,Verilog HDL 语言提供了编程语言接口,通过该接口可以在模拟、验证期间从设计外部访问设计,包括模拟的具体控制和运行。2.2.2 Quartus II 软件此次设计所使用的软件是 Quartus II12.0,使用语言为 verilog HDL。Quartus II 是 Altera 提供的 FPGA/CPLD 开发集成环境,Altera 是世界最大可编程逻辑器件供应商之一。Quartus II 在 21 世纪初推出,是 Altera 前一代 FPGA/CPLD 集成开发环境 MAX+plus II 的更新换代产品,其界面友好,使用便捷。在 Qu
18、artus II 上可以完成设计输入、HDL 综合、布线布局(适配) 、仿真和下载和硬件测试等流程,它提供了一种与结构无关的设计环境,使设计者能方便地进行设计输入、快速处理和器件编程。Altera 的 Quartus II 提供了完整的多平台设计环境,能满足各种特定设计的需要,也是单芯片可编程系统(SOPC)设计的综合性环境和 SOPC 开发的基本设计工具,并为 Altera DSP 开发包进行系统模型设计提供了集成综合环境。Quartus II 设计工具完全支持 VHDL、Verylog 的设计流程,其内部嵌有8VHDL、Verilog 逻辑综合器。Quartus II 也可以利用第三方的综
19、合工具,如Leonardo Spectrum、Synplify Pro、FPGA Complier II,并能直接调用这些工具。同样,Quartus II 具备仿真功能,同时也支持第三方的仿真工具,如ModelSim。此外,Quartus II 与 MATLAB 和 DSP Builder 结合,可以进行基于FPGA 的 DSP 系统开发,是 DSP 硬件系统实现的关键 EDA 工具。Quartus II 包括模块化的编译器。编译器包括的功能模块有分析/综合器(Analysis & Synthesis) 、适配器(Filter) 、装配器(Assembler) 、时序分析器(Timing An
20、alyzer) 、设计辅助模块(Design Assistant) 、EDA 网表文件生成器(EDA Netlist Writer)和编辑数据接口(Complier Database Interface)等。可以通过选择 Start Complication 来运行所有的编译器模块,也可以通过选择 Start 单独运行各个模块。还可以通过选择 Complier Tool(Tools 菜单) ,在 Complier Tool 窗口中运行该模块来启动编辑器模块。在 Complier Tool 窗口中,可以打开该模块的设置文件或报告文件,或打开其他相关窗口。图七中所示的上排是 Quartus II
21、编译设计主控界面,它显示了 Quartus II 自动设计的各主要处理环节和设计流程,包括设计输入编辑、设计分析与综合、适配、编程文件汇编(装配) 、时序参数提取以及编程下载几个步骤。在图七下排的流程框图,是与上面的 Quartus II 设计流程相对照的标准的 EDA 开发流程。图 2.1:Quartus II 设计流程9第三章 数字抢答器系统设计方案和主要模块3.1 功能描述及设计架构此次设计设计了一个基于 FPGA 芯片的数字抢答器:本抢答器有十三个按键以及主频时钟作为输入端,其中八个输入端为八个选手的抢答按键,剩下五个按键分别为主持人开始按键、主复位按键、倒计时复位按键、显示切换按键、
22、倒计时设置按键。有三个数码管进行显示,其中一个显示抢答者组号,另外两个个用来显示抢答剩余时间和显示抢答时间的设置,因为要复用这两个数码管,所以要用按键做一个显示切换。用蜂鸣器来提示是否有人犯规抢答,抢到题目时选手号用数码管显示该选手号,蜂鸣器也用作时间剩余五秒时的提示。开始抢答时,主持人宣布抢答开始,并按下开始抢答按键,各选手开始抢答,其中任意一组抢到题目,则电路进行自锁,其它各组再按按键即为无效,抢到题目后蜂鸣器响,作答结束后依据回答答案是否正确有主持人选择进入加减分模块,每个选手初始分数为五分,答对一道加一分,错一道减一分,不抢答则分数不加不扣。图 3.1 抢答器功能示意图抢答器的具体功能
23、如下:1.抢答开始按键 sk,此按键有主此人操控,在主持人宣布抢答开始后,按下此按键,各选手方可开始进行抢答,并显示相应选手号和回答剩余时蜂鸣器报警模块设置倒计时显示模块抢 答 器LED 倒计时显示模块选手号显示模块抢答模块时钟信号、重置信号抢答开始信号、各选手抢答信号选手分数显示模块10间,当抢答时间剩余 5s,给予响铃提示;2.如果主持人没有按下开始键而选手抢答,则视为犯规,并显示违规选手号和错误码,给予响声提示;3. 主持人按结束键,可进行新一轮的抢答;4. 抢答时间结束且无人抢答时,执行相应操作;5. 可通过按键设置抢答时间和回答时间,抢答器具备限时抢答功能,限时时间可以自行设置为 0
24、-99 秒。6.当主持人对分数进行加减完毕之后,在对应的数码管上显示抢答者的分数,然后进入下一轮抢答。 (该模块是创新模块) 。此次设计以 FPGA 为基础设计数字抢答器,根据主要的功能设计要求,该设计主要包括抢答输入按键、数码管显示、加减分、倒计时和 FPGA 系统。抢答器的结构示意图如下:FPGA时钟信号按键输入电路数码管显示电路倒计时显示电路图 3.2:抢答器结构示意图设计中 FPGA 最小系统电路为 FPGA 可以正常工作时的基本电路,由时钟和复位电路组成(此次设计主控电路采用开发板的电路,只做了外围电路) 。按键输入电路有十三个按键组成,选手号数码显示管有一个八段共阳极数码管组成。倒
25、计时显示电路两个八段共阳共阳极数码管组成组成。113.2 抢答器程序流程图以及各模块分析3.2.1 抢答器程序结构及主程序流程图本次设计中程序设计采用 verilog HDL 语言进行编程,总体编程思路采用模块化编程方式,主要分为四个模块,一个主控制及按键输入模块,一个倒计时模块和蜂鸣器模块,一个抢答组号及积分显示模块,分别对这四个子模块进行独立编程设计,由于 verilog HDL 语言是一种并行运行的语言,所以可以在同一个频率时钟脉冲下进行各模块的编写,最终在把各个模块整合在一起,所以 FPGA 的高速性能体现的尤为明显。3.2.2整体电路框图如下SK开始抢答判断蜂鸣器 倒计时设置选手号显
26、示 分数显示加减分判断倒数计时显示12图 3.3: 主程序流程图分频产生 1s 时钟模块设计思路:由主频时钟 clk1(主频时钟为 50MHZ) ,通过分频产生 1HZ 的时钟,这个时钟主要是供秒计时显示用,即用于倒数计时显示模块综合后的端口配置图倒计时以及倒计时剩 5S 时报警模块设计思路:主要是做一个简单的倒计时算法,倒计时的时间由倒计时设置模块给出,倒计时设置模块把设置后的时间用寄存器 hour1 存起来,最后赋给倒计时的 hour。其次是做一个剩余五秒的报警,即当剩余五秒时,用一个 if 语句做判断,随后实现报警提示综合后的端口配置图倒计时显示及倒数计时设置显示模块设计思路:用于倒计时
27、显示模块及倒数计时设置模块显示。这个模块要使硬件复用,即两个数码管既要显示倒计时的时间也要显示倒计时的设置时间。在此,13用按键 kqh 做了一个显示的切换,用 if-else 实现。未按下切换键则用于倒计时的正常显示,若按下切换键则用于倒计时的设置显示。综合后的端口配置图选手号显示及违规报警模块设计思路:显示选手号码以及选手违规时报警。这里也是要做一个显示的切换,用 if-else 实现。即按下开始键 sk 是正常的,此时正常显示,否则切换到违规时的显示并且报警综合后的端口配置图倒计时设置模块功能介绍:用 if-else 语句做一个简单的倒计时算法,可设置的时间范围是0-99s。将算得的结果
28、用 hour1 存起来,供倒数计时模块的调用,最后将 hour1的值赋给 hour。另外需要注意的是,将倒计时设置的时钟调得小一些,便于更快速度的调好时间。14综合后的端口配置图顶层模块功能介绍:顶层模块主要是端口的定义以及子模块的调用。这里用了一个ALWAYS 语句调用蜂鸣器,因为蜂鸣器有两个功能,分别是违规报警和剩余时间报警,所以在此用 if 语句做判断,实现蜂鸣器的两个不同功能。3.3 硬件电路图主控芯片是采用的是 ALTERA 公司的 cyclone IV 型号为EP4CE30F23C7N。FPGA 的主控电路由于资源问题,直接用学生本人的开发板。以下是一些简单的是外设驱动电路,过于简
29、单所以就不多作介绍,仅将电路图给出3.3.1 按键153.3.2 数码管显示163.3.3 蜂鸣器第四章表:FPGA 开发板对应管脚号及功能表引脚名 FPGA 引脚号 相应功能fmq M20 蜂鸣器K1 H19 一号抢答按键K2 B21 二号抢答按键K3 J22 三号抢答按键K4 H18 四号抢答按键K5 F19 五号抢答按键K6 D20 六号抢答按键K7 D19 七号抢答按键K8 D17 八号抢答按键CLK1 T22CLK2 G150MHZ 的时钟40MHZ 的时钟17daorst N7kqh N6kt T1rst G14SK F15倒计时设置复位按键显示切换按键倒数计时设置按键倒计时显示复
30、位按键开始抢答按键sm_seg17 J17 选手号数码管 a 段sm_seg16 K17 选手号数码管 b 段sm_seg15 N20 选手号数码管 c 段sm_seg14 N17 选手号数码管 d 段sm_seg13 P20 选手号数码管 e 段sm_seg12 K18 选手号数码管 f 段sm_seg11 K19 选手号数码管 g 段sm_seg10 N20 选手号数码管 p 段sm_bit1 P17 选手号数码管的位选sm_bit21 H20 倒计时数码管的个位sm_bit20 J21 倒计时数码管的十位sm_seg27 V3 倒计时数码管 a 段sm_seg26 G17 倒计时数码管
31、b 段sm_seg25 D7 倒计时数码管 c 段sm_seg24 G9 倒计时数码管 d 段sm_seg23 V4 倒计时数码管 e 段sm_seg22 E7 倒计时数码管 f 段sm_seg21 G8 倒计时数码管 g 段sm_seg20 G11 倒计时数码管 p 段第五章 总结经过这一段时间的努力,终于完成了以 FPGA 为基础的多路数字抢答器的设18计。通过此次设计又一次的巩固了 Verilog 语言,提升了自己编写代码的能力,在程序的仿真过程中也进一步的学会了很多编程方面的知识,当然以现在自己的水准编写出来的东西功能还比较简单,有时候还不得不花费很长的时间来寻找错误,不过经过这一段时
32、间的努力真的已经有了很大的进步。总体来说,编写整个程序问题不大,但是调试的的时候出现了较多问题。但是通过自己在网上查资料,用一些常用的赋值法,最终把一个完整的程序调试出来。此次课程设计收获最大的莫过于学会了很多调试程序的方法。在此次课程设计中,我学会了很多收获了很多。参考文献:1 夏宇闻.Verilog 数字系统设计教程(第二版)M.北京航空航天大学出版社,2008.2 康华光.电子技术基础数字部分(第四版)M.高等教育出版社,2006.3 康华光.电子技术基础模拟部分(第四版)M.高等教育出版社,2006.4 郭来功.基于 FPGA 的串行接口时钟电路的设计J.现代电子技术,2007, (18):42-43.5 李端 张景颖 李跃卿 卜旭辉 王成硕. VHDL 与数字电路设计J. 电气开关 2005(02)6 刘开绪.数字式抢答器的设计与实现J.电子工程师.2005(9)69-717王传新.FPGA 设计基础M.高等教育出版社,2007.8程云长 王莉莉 陈立力.可编程逻辑器件与 VHDL 语言M.科学出版社,2005.9李洪伟 袁斯华.基于 Quartus的 FPGA/CPLD 设计M.电子工业出版社,2006.10张洪润 张亚凡.FPGA/CPLD 应用设计 200 例M.北京航空航天大学出版社,2009