基于fpga的抢答器设计

上传人:第*** 文档编号:33536495 上传时间:2018-02-15 格式:DOC 页数:8 大小:230KB
返回 下载 相关 举报
基于fpga的抢答器设计_第1页
第1页 / 共8页
基于fpga的抢答器设计_第2页
第2页 / 共8页
基于fpga的抢答器设计_第3页
第3页 / 共8页
基于fpga的抢答器设计_第4页
第4页 / 共8页
基于fpga的抢答器设计_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《基于fpga的抢答器设计》由会员分享,可在线阅读,更多相关《基于fpga的抢答器设计(8页珍藏版)》请在金锄头文库上搜索。

1、基于 FPGA 的抢答器设计17:14 抢答器在各类竞赛中的必备设备,有单路输入的,也有组输入方式,本设计以 FPGA 为基础设计了有三组输入(每组三人),具有抢答计时控制,能够对各抢答小组成绩进行相应加减操作的通用型抢答器;现行的抢答器中主要有两种:小规模数字逻辑芯片译码器和触发器来做,另外一种用单片机来做;小规模数字逻辑电路比较复杂,用单片机来做随着抢答组数的增加有时候存在 I/O 口不足的情况;本设计采用 FPGA 来做增强了时序控制的灵活性,同时由于FPGA 的 I/O 端口资源丰富,可以在本设计基础上稍加修改可以设计具有多组输入的抢答器。 功能描述本文设计了一个通用型电子抢答器:三个

2、参赛队,每个队有三个成员,各自可手动按按钮申请抢答权;回到正确加 1 分,回答错误减 1 分,违规抢答减1 分,不抢答不加分不扣分;用 4 位 LED 的左边 2 位显示抢答组号及抢答计时时间,右边 2 位显示相应组的成绩。抢答器具体功能如下:1、可同时进行三组每个小组三人的抢答, 用 9 个按钮Group1_1,Group1_2,Group1_3,Group2_1,Group2_2,Group2_3,Group3_1,Group3_2,Group3_3 表示;2、设置一个抢答控制开关 Start,该开关由主持人控制;只有当主持人按下开始键才能抢答;在按开始按钮前抢答属于违规;3、抢答器具有定

3、时抢答功能,且一次抢答的时间设定为 30 秒。当主持人启动开始键后,用 4 位 LED 数码管左边两位显示 30s 的倒计时;同时红色 LED 灯亮,表明可以抢答。4、抢答器具有锁存与显示功能。即选手按动按钮,锁存相应的组号,并在 4 位 LED 数码管的左边两位显示,同时用一个绿色 LED 指示是否有选手抢答,如果是违规抢答还能用选手蜂鸣器报警提示。抢答实行优先锁存,优先抢答选手的相应组号和成绩一直保持到下一轮抢答开始。5、参赛选手在设定的时间内进行抢答,抢答有效,数码管左边两位显示 ”FX”,如果抢答违规则显示 ”XF”(其中 X 表示组号 13),并保持到下一轮抢答。如果抢答延迟时间已到

4、,无人抢答,本次抢答无效,系统回到主持人按开始前的等待状态,数码管上左边两位显示“FF”。6、当抢答有效后,主持人可以根据抢答选手回答问题正确与否对选手相应组数的成绩进行加减分操作,抢答违规也能减分操作,用 4 位 LED 数码管右边两位显示相应组数的成绩。(注各组初始成绩为 10 分)设计架构本文以 FPGA 为基础设计的电子抢答器,根据设计功能要求,改设计主要包括抢答输入键盘,数码管显示,报警及 FPGA 最小系统。抢答器结构简图如图 1所示。1、FPGA 最小系统电路:FPGA 正常工作时的基本电路,由时钟和复位电路组成。2、键盘输入电路:用 33 矩阵键盘组成 3 个组共 9 个人的抢

5、答按钮。同时包括 Start, Add, Sub 三个由主持人控制的单独按钮。3、显示模块:用移位寄存器 74HC164 驱动 4 位共阴数码管显示;数码管要显示的数据通过 74HC164 串行数据端口输入。4、报警及相关信息显示:蜂鸣器电路和 LED 灯显示相关状态信息指示电路。各模块详细描述1、FPGA 与各个模块的接口本文以 XC3S400 为基础设计的电子抢答器,抢答器实际上是一个人机接口的一个智能设备,该设计中用到的 FPGA 外部 I/O 口及其与外部各个模块连接的网络标识如图 2 所示。图 2.FPGA 的 IO 接口2、按键模块由于按键是机械的动作,按键存在电平抖动,为了消除按

6、键抖动引起的干扰,需要等按键值达到稳定状态时才读取按键的值,也就是说要当按键按下一段时间后,才读取按键值;本设计中抢答开始键(Start)、抢答后各组成绩的加(Add)和减(Sub)按键是以单键的形式输入,按键延迟时间为 20ms,对于抢答组的按键是用 33 阵列键盘实现,row=3b001 以周期为 5.08ms 进行循环左移扫描,扫描完三行的周期为 15.24ms,这个就是说只有当两个按键之间的时间间隔在 15.24ms 之内时才有可能存在一个按钮在比另一个按钮先按,而响应后者;实际操作中,两人按键之间的间隔大于这个时间间隔,因此,不会出现错误响应。同时每个按键后的延迟等待 125.76m

7、s 后此按键值才有效;经过实际测试,键盘具有消抖功能,能够正确检测按键值。按键电路图如图 3 所示。图 3.按键电路图注: Group1_1,Group1_2,Group1_3 分别表示第一参赛小组的三个成员的按钮, 依次类推 Group2_1,Group2_2,Group2_3 和 Group1_1,Group1_2,Group1_3 分别代表第二和第三参赛小组的三个成员;Start、Add、Sub 分别代表抢答开始按键、对小组成绩的加操作和减操作按钮!3、显示模块显示模块由 4 位的 LED 数码管显示抢答组数、是否违规抢答信息、按下抢答键后的抢答时间、各组所得分数等信息;其中数码管左边

8、2 位显示抢答组号及抢答计时时间,右边 2 位显示相应组的成绩。数码管的驱动电路(译码电路)用两片 74164 控制;电路图如图 4 所示。显示数据信息通过 74164 的串行译码传送到数码管对应段,对应位显示;对于数码管显示的时序特别要注意:数码管是采用动态扫描方式显示,所有位扫描显示一次的频率一定要大于相应位数据改变的频率;同时当数码管对于数据改变的同时一定要把相应数据送到数码管进行显示,即数据改变和数据显示要同步;此设计中 4 位数码管动态扫描频率位 190Hz,而数码管要显示的抢答组数、抢答组的成绩等信息的变化频率都是秒级,即几秒钟或者几分钟变化一次,满足数码管显示要求。图 4.显示电

9、路注:数码管为共阴数码管,其中 pin6,pin8,pin9,pin12 依次为位码,其余为段码;4、时钟复位此模块用于生成 FPGA 系统时钟和复位电路,采用有源晶振和低电平复位。系统时钟采用 50MHz,能够满足电路设计要求,电路如图 5 所示。图 5.时钟复位电路5、报警模块报警主要用于响应当没有按开始键之前违规抢答信号;即当违规时蜂鸣器响;同时还增加了一个红色用于显示当按下开始键的信号;即当主持人按下开始按键时,红色 LED 灯亮;同时用一个绿色 LED 灯指示有选手按抢答按钮,选手按键抢答,绿色 LED 闪烁一次。电路图如图 6 所示。图 6.报警和指示软件代码描述软件设计主要采用

10、verilog HDL 语言进行设计,采用状态机对抢答器的各个过程进行控制,设计中采用了层次化和模块化的思想,即顶层模块只有一个控制抢答器的主状态机和模块例化,然后分别用子模块实现数码管显示,成绩多路选择器,成绩的处理模块,按下抢答开始键后的延迟等待模块,按键模块等。程序流程图如图 7 所示。图 7.程序流程图图注: 显示“FF+成绩”中 FF 表示无效状态,成绩表示上一次抢答的那个小组的成绩;显示“FX+成绩”表示抢答小组答题完并进行评分操作后的组号和成绩;显示“XF+成绩”表示违规抢答的那个小组组号及减 1 分后的成绩信息(X 表示1,2,3)。这里“”是为了区分组号和成绩信息,数码管并不

11、显示加号,下同。用 Verilog HDL 分别编写各个模块,然后在 ISE 环境下运行程序,调试成功。最后生成的顶层模块的方块图如图 8 所示。图 8.顶层模块图图注:Line(2:0)和 row(2:0)分别表示参赛小组按键的输入阵列信号和输出扫描阵列信号;start_key,add_key, sub_key,分别代表抢答开始命令,对各组成绩的加、减操作命令;dp,error,push_key 分别表示开始键按下后的信号,违规抢答信号以及参赛组有人按键的响应信号;hc_cp,hc_si 表示显示译码芯片74HC164 的串行时钟和数据信号。问题与解决1、状态机问题在整体调试的时候,当主持人

12、按开始按钮后,程序就死在那里,不能接收抢答信息,由于抢答键盘已单独调试成功,因此怀疑是控制抢答过程的状态机除了问题,指示进入开始状态的红色 LED 灯一直亮着,说明程序的确死在开始状态。再次综合的过程中发现警告提示:状态机的状态量的赋值错误,把二进制标识“b”误写为“h”,这样由于状态机数据宽度小于时间数据数据长度,自动取较小位数据;如 state_start = 4b0010 误写为 state_start = 4h0010,实际就是 state_start = 4b0000,这肯定与前面状态冲突;同时调试过程中也遇到过复位时没有把状态机复位到初始状态的情况。经过此次设计,体会认识到状态机在

13、实际控制中的重要性,以后设计中要学会看综合布线过程中警告信息。2、信号同步的问题在抢答器按下开始键后有一个等待抢答 30s 的延迟时间,当 30s 完成后如果三个小组都没有人按抢答键,那么此次比赛抢答无效,系统自动回到主持人按开始前的系统等待状态;当计时完成 30s 后生成一个高电平的脉冲信号(pulse),由于此脉冲信号高电平持续时间是整个系统的系统时钟(clk),这个时钟周期小于状态机的时钟周期(clk_4),直接用状态机的时钟是检测不到此脉冲信号,需要把此脉冲信号同步到与状态机时钟同步。采用的方法是:首先用一个锁存器(pulse_reg)锁存此脉冲信号(锁存器时钟也为系统时钟),通过锁存

14、器的输出值和原脉冲信号寄存器值就可以检测到脉冲由低电平 0 到高电平 1 的跳变沿,同样用一个与系统时钟同步的锁存器(flag)锁存这个跳变沿,当出现这个跳变沿时 flag=1;而为了让状态机时钟(clk_4)检测到 flag 信号,同时要在状态机时钟检测到后要把 flag 清零,为下一次检测作准备,这时可以当状态机时钟(clk_4)检测到 flag=1b1 后,同时生成一个 flag 的清零信号(flag_rst)flag_rst=1b1;当 flag_rst 为 1 时把 flag 清零。调试信号同步的部分程序如下:reg flag_rst; /生成 flag_rst 信号always (

15、posedge clk_4 or negedge rst_n)beginif(!rst_n)beginflag_rst = 1b0;endelsebeginif(flag = 1b0)flag_rst = 1b0;elsebeginflag_rst = 1b1;endendendalways (posedge clk)beginpulse_reg = pulse;endreg flag; /flag 用来检测 pulse 上升沿always (posedge clk)beginif(!rst_n)flag = 1b0;elsebeginif(pulse_reg = 1b0)&(pulse =

16、1b1)flag = 1b1;else if(flag_rst = 1b1)flag = 1b0;endendreg flag_reg; /生成与 clk_4 同步的用于检测脉冲上升沿信号的 flag 信号always (posedge clk_4)beginflag_reg = flag;end 用 modesim6.0 仿真波形如下:图 9.信号的同步的仿真波形从仿真波形中可以看出当 pulse 高电平时的下一个时钟 flag = 1b1;为了让时钟 clk_4 能够检测到 flag = 1b1,就让 flag 一直保存到 clk_4 上升沿出现,然后在 clk_4 上升沿把 flag 的复位信号 flag_rst 置 1;然后 flag, flag_rst 都清零。改变 pulse 脉冲出现的时间或者 clk_4 的频率都能检测到pulse 的高电平。经过信号同步后,状态机能够检测抢答计时完 30s 后生成

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号