基于fpga的多路数字抢答器的设计内容摘要:

omplier Tool( Tools 菜单), 9 在 Complier Tool 窗口中运行该模块来启动编辑器模块。 在 Complier Tool 窗口中,可以打开该模块的设置文件或报告文件,或打开其他相关窗口。 图七中所示的上排是 Quartus II编译设计主控界面,它显示了 Quartus II自动设计的各主要处理环节和设计流程,包括设计输入编辑、设计分析与综合、适配、编程文件汇编(装配)、时序参数提取以及编程下载几个步骤。 在图七下排的流程框图,是与上面的 Quartus II设计流程相对照的标准的 EDA开发流程。 图 : Quartus II设计流程 10 第三章 数字抢答器系统设计方案和主要模块 功能描述及设计架构 本次毕业设计设计了一个基于 FPGA芯片的数字抢答器:本抢答器有九个输入端,其中四个输入端为四组选手的抢答按键,四个个分别为主持人加分按键、减分按键、积分重置按键和开始抢答按键和一个时钟信号输入端。 有两个 BCD数码管进行显示,其中一个显示抢答者组号,另外一个用来显示积分,用八个 LED灯来进行抢答时间倒计时。 并有蜂鸣器来提示是否已经有人抢答到题 目,抢到题目时组号数码管显示该组的组号。 开始抢答时,有主持人宣布抢答开始,并按下开始抢答按键,各组开始抢答,其中任意一组抢到题目,则电路进行自锁,其它各组再按按键即为无效,抢到题目后蜂鸣器响,作答结束后依据回答答案是否正确有主持人选择进入加减分模块,每组初始分数为五分,答对一道加一分,错一道减一分,不抢答则分数不加不扣。 11 图 抢答器的具体功能如下: 抢答器功能示意图 设置抢答开始开关按键 inputEN,此按键有主此人操控,在主持人宣布抢答开始后,按下此 按键,各组方可开始进行抢答。 抢答器具备限时抢答功能,限时时间为十秒。 当主持人按下抢答开始按键后,八个LED 灯全亮,并每秒熄灭一个,全部熄灭则算作是无人抢答,此题作废,主持人可以宣布进入下一道题的抢答环节。 抢答器具备锁存功能和现实功能,也就是说当选手抢答时只要按动抢答按键后,锁存相对应的组号,当主持人对分数进行加减完毕之后,在对应的数码管上显示抢答者的分数,然后进入下一轮抢答。 主持人在选手抢答之后,作答完成之后,进入加减分数环节,此时主持人可以按两个按键中的一个,其中一个按键用来 在回答正确之后加分,两外一个用来在回答错误之后减分,主持人之后可选择两个按键之中的一个来完成此环节。 完成加减分环节之后,主持人可以进入下一环节。 关于蜂鸣器,蜂鸣器在选手中任意一人首先按下按键之后,鸣响三秒钟,来宣布此题已经被抢到,并在 BCD数码管上显示该组的组号。 如果倒计时结束之后无人抢答,则蜂鸣器不做反应。 12 此次设计以 FPGA为基础设计数字抢答器,根据主要的功能 设计要求,该设计主要包括抢答输入按键、 BCD数码管显示、 LED倒计时和 FPGA系统。 抢答器的结构示意图如下: 图 :抢答器结构示意图 设计中 FPGA最小系统电路为 FPGA可以正常工作时的基本电路,由时钟和复位电路组成。 按键输入电路有八个按键组成,数码显示管有两个个八段共阳极数码管组成。 LED 倒计时显示电路有八个个红色的 LED灯组成。 抢答器程序流程图以及各模块代码分析 抢答器程序结构及主程序流程图 本次毕业设计中程序设计采用 verilog HDL 语言进行编程,总体编程思路采用模块化编程方式,主要分为三个模块,一个主控制及按键输入模块,一个 LED倒计时模块和 蜂鸣器模块,一个抢答组号及积分显示模块,分别对这三个子模块进行独立编程设计,由于 verilog HDL 语言是一种并行运行的语言,所以可以在同一个频率时钟脉冲 13 下进行各模块的编写,最终在把各个模块整合在一起。 主要程序运行方式采用状态机的方法来实现对抢答器的各个环节的控制。 此次所设计的状态一共有四个状态。 一、等待主持人按键开始抢答,在此状态时会一直检测按键信号,当收到主持人的开始抢答信号进入下一个环节。 二、等待四组抢答按键状态,在此状态时, LED倒计时显示模块将开始显示抢答计时, 如果在规定时间初始化及抢答模块 本次毕业设计中初始化模块主要是为了以后程序的正常运行,在这里进行初始化,给各个后面要用到的寄存器变量赋初值。 主要赋值的对象有抢答标志位、蜂鸣器标志位、蜂鸣器延时标志位、抢答选手 14 标志位、分组分数标志位、组号显示初始值等等。 详细内容见附录。 图 : 主程序流程图 抢答模块是本次设计的重点,原理是:当主持人按下 inputEn按键,启动初始化模块,抢答标志位 EnFlat 发生改变,开始进入抢答时间。 此时各组开始进行抢答,无论哪一组先按下 按键,抢答标志位 EnFlat改变变为 1’ b0,禁止其他各组再次进行抢答;同时选手标志位进行改变,与改组组号相对应,主要适用于后续的加减分模块;显示组号的数码管显示抢到题目的这一组的组号;改变蜂鸣器的标志 15 位,蜂鸣器发声,来告诉大家,此题已经有人抢答,大家不要再次抢答了,也告诉主持人可以进行问题的提问,并且可以进行其他的后续操作。 初始化模块及抢答模块的部分源代码: //初始化模块 always @ (posedge clk)//捕 捉时钟 begin //初始化各按键并开始抢答 begin if(inputEn==1’b0) begin //初始化各个标志位和参数 EnFlat=1’b1。 //倒计时开始时 8个 Led灯全亮 Led1=8’b11111111。 //组号显示静态数码管 (数码管为共阳极 )的控制端 ,有 8位 Led2=8’b11111111。 //分数显示数码管控制端 Led3=8’b11111111。 //蜂鸣器标志位 16 BuClk=1’b0。 //蜂鸣器的控制管脚 ,低电平为发声音 Buzzer=1’b1。 end end //抢答模块 begin if(EnFlat==1’b1) begin //如果按键 1 按下 if(inputL1==1’b0) begin //禁止其他选手抢答 EnFlat=1’b0。 //选手标志位改变,用于加减分数模块 answer=3’ d1。 //静态数码管显示序号 ’1’,及显示选手对应的组号 Led2=8’hf9。 //指示 蜂鸣器发声 17 BuClk=1’b1。 end 加减分数模块 加减分数模块主要是用来对选手的积分进行更改,有主持人控制。 在选手回答完问题,由主持人判定答案是否正确,然后决定是加分还是减分。 加减分模块主要有一个选手标志位,此标志位在抢答模块进行改变,四个分数寄存器来存放分数,最后把各个组的分数放到一个总的寄存器中,主要是为了节省代码。 主要代码如下: //第一组加减分 if(answer ==3’ d1) begin begin if(add) score1=score1+1。 //当主持人判定选手的回答正确时,按下 add键进行加分操作 else if(stu) score1=score11。 //当主持人判定选手的回答错误时,按下 stu键进行减分操作 end score=score1。 //把第一组的分数赋值给分数寄存器 18 end 其他各组与第一组类似,依次类推即可,详细代码,参见附录。 倒计时模块 倒计时模块的主要功能是用来提醒大家赶快进行抢答,当抢答标志位 EnFlat为 1’ b1即开始抢答时,倒计时开 始。 因为所用的实验箱的频率为 48MHz,因此需要现有一个 1Hz的分频,即一个计数模块;计数结束之后进入 LED灯的左移模块,此处主要使用一个左移运算符 来进行倒计时,当然也可以通过其他的算法来实现这个功能,但是应该都没有这一个运算符来的简洁。 还有一种情况,就是没有人进行抢答,遇上这种情况,如果在倒计时结束之后,没有人进行抢答,则抢答标志位,蜂鸣器标志为改变,蜂鸣声结束之后可以进行下一轮操作。 部分源代码如下: //倒计时模块 begin if(EnFlat==1’b1) begin if(t!=32’d48000000)//计时实现 1HZ 分频 t=t+32’d1。 else begin t=32’d0。 19 Led1=8’b111111111’b1。 //Led1左移一个单位,实现一秒的倒计时 响 EnFlat=1’b0。 BuClk=1’b1。 if(Led1==8’b0)//倒计时结束还没有按键按下,则抢答停止且蜂鸣器 end end end 蜂鸣器模块。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。