《2022年基于FPGA的抢答器设计与实现.docx》由会员分享,可在线阅读,更多相关《2022年基于FPGA的抢答器设计与实现.docx(8页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精品学习资源抢答器在各类竞赛中地必备设备,有单路输入地 ,也有组输入方式 ,本设计以 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 表示组号 1 3) ,并保持到下一轮抢答 .假如抢答推迟时间已到
4、,无人抢答 ,本次抢答无效 ,系统回到主持人按开头前地等待状态,数码管上左边两位显示“ FF”.6、当抢答有效后,主持人可以依据抢答选手回答疑题正确与否对选手相应组数地 成果进行加减分操作 ,抢答违规也能减分操作,用4 位 LED 数码管右边两位显示相应组数地成果 .(注各组初始成果为 10 分)设计架构本文以 FPGA 为基础设计地电子抢答器,依据设计功能要求,改设计主要包括抢答输入键盘 ,数码管显示 ,报警及 FPGA 最小系统 .抢答器结构简图如图 1所示.1、 FPGA 最小系统电路: FPGA 正常工作时地基本电路,由时钟和复位电路组成 .2、键盘输入电路:用 33 矩阵键盘组成 3
5、 个组共 9 个人地抢答按钮 .同时包括 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=3 b001以周期为 5.08ms 进行循环左移扫描,扫描完三行地周期为 15.24ms,这个就是说只有当两个按键之间地时间间隔在 15.24ms 之内时才有可能存在一个按钮在比另一个按钮先按,而响应后者; 实际操作中 ,两人按键之间地间隔大于这个时间间隔,因此 ,不会
7、显现错误响应.同时每个按键后地推迟等待 125.76ms 后此按键值才有效;经过实际测试,键盘具有消抖功能 ,能够正确检测按键值 .按键电路图如图 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, 而数码管要显示地抢答组数、抢答组地成果等信息地
9、变化频率都是秒级 ,即几秒钟或者几分钟变化一次 ,满意数码管显示要求 .欢迎下载精品学习资源图4.显示电路注:数码管为共阴数码管,其中 pin6,pin8,pin9,pin12依次为位码 ,其余为段码; 4、时钟复位此模块用于生成 FPGA 系统时钟和复位电路 ,采纳有源晶振和低电平复位.系统时钟采纳 50MHz, 能够满意电路设计要求,电路如图 5 所示 .图5.时钟复位电路5、报警模块欢迎下载精品学习资源报警主要用于响应当没有按开头键之前违规抢答信号;即当违规时蜂鸣器响;同时仍增加了一个红色用于显示当按下开头键地信号;即当主持人按下开头按键时,红色 LED 灯亮;同时用一个绿色LED 灯指
10、示有选手按抢答按钮,选手按键抢答 ,绿色 LED 闪耀一次 . 电路图如图 6 所示 .图6.报警和指示软件代码描述软件设计主要采纳verilog HDL语言进行设计 ,采纳状态机对抢答器地各个过程进行掌握 ,设计中采纳了层次化和模块化地思想,即顶层模块只有一个掌握抢答器地主状态机和 模块例化 ,然后分别用子模块实现数码管显示,成果多路挑选器 ,成果地处理模块 ,按下抢答开头键后地推迟等待模块,按键模块等 .程序流程图如图 7 所示.图7.程序流程图图注: 显示“FF+成果 ”中 FF 表示无效状态 ,成果表示上一次抢答地那个小组地成绩;显示 “FX+成果 ”表示抢答小组答题完并进行评分操作后
11、地组号和成果;显示“XF+成果 ”欢迎下载精品学习资源表示违规抢答地那个小组组号及减1分后地成果信息(X 表示 1,2,3) .这里 “ ”是为了区分组号和成果信息 ,数码管并不显示加号 ,下同 .用 Verilog HDL分别编写各个模块,然后在 ISE 环境下运行程序 ,调试胜利 .最终生成地顶层模块地方块图如图8 所示.图8.顶层模块图图注: Line ( 2:0)和 row( 2:0)分别表示参赛小组按键地输入阵列信号和输出扫描阵列信号; start_key,add_key, sub_key,分别代表抢答开头命令,对各组成果地加、减操作命令; dp,error,push_key 分别表
12、示开头键按下后地信号,违规抢答信号以及参赛组有人按键地 响应信号; hc_cp,hc_si 表示显示译码芯片74HC164 地串行时钟和数据信号.问题与解决1、状态机问题在整体调试地时候,当主持人按开头按钮后,程序就死在那里 ,不能接收抢答信息 ,由于抢答键盘已单独调试胜利,因此怀疑是掌握抢答过程地状态机除了问题,指示进入开头状态地红色 LED 灯始终亮着 ,说明程序地确死在开头状态.再次综合地过程中发觉警告提示:状态机地状态量地赋值错误,把二进制标识 “b”误写为 “h”这,样由于状态机数据宽度小于时间数据数据长度 ,自动取较小位数据;如state_start = 4b误00写10为 sta
13、te_start = 4h0实01际0就,是 state_start = 4b0这00肯0定, 与前面状态冲突;同时调试过程中也遇到过复位时没有把状态机复位到初始状态地情形.经过此次设计 ,体会熟悉到状态机在实际掌握中地重要性,以后设计中要学会看综合布线过程中警告信息.2、信号同步地问题在抢答器按下开头键后有一个等待抢答30s 地推迟时间 ,当30s 完成后假如三个小组都没有人按抢答键 ,那么此次竞赛抢答无效,系统自动回到主持人按开头前地系统等待状态; 当计时完成 30s 后生成一个高电平地脉冲信号(pulse) ,由于此脉冲信号高电平连续时间是整个系统地系统时钟(clk) ,这个时钟周期小于
14、状态机地时钟周期(clk_4 ) ,直接用状态机地时钟是检测不到此脉冲信号,需要把此脉冲信号同步到与状态机时钟同步.采纳地方法是:第一用一个锁存器(pulse_reg)锁存此脉冲信号(锁存器时钟也 为系统时钟) ,通过锁存器地输出值和原脉冲信号寄存器值就可以检测到脉冲由低电平0 到高电平 1 地跳变沿 ,同样用一个与系统时钟同步地锁存器(flag)锁存这个跳变沿,当显现这个跳变沿时 flag=1 ;而为了让状态机时钟(clk_4 )检测到 flag 信号 ,同时要在状态机时钟检测到后要把 flag 清零 ,为下一次检测作预备 ,这时可以当状态机时钟(clk_4 )检测到欢迎下载精品学习资源fl
15、ag=1 后b1,同时生成一个flag 地清零信号( flag_rst) flag_rst=1;当b1 flag 清零 .flag_rst 为1 时把欢迎下载精品学习资源调试信号同步地部分程序如下:reg flag_rst ; /生成 flag_rst 信号always (posedge clk_4 or negedge rst_n) beginif (! rst_n) beginflag_rst = 1;b0end else beginif ( flag = 1)b0flag_rst = 1;b0 elsebeginflag_rst = 1;b1 endend endalways (pose
16、dge clk)beginpulse_reg = pulse ;endreg flag; /flag 用来检测 pulse 上升沿always (posedge clk) beginif (! rst_n)flag = 1;b0 elsebeginif ( pulse_reg = 1)b0& ( pulse = 1 )b1)flag = 1;b1else if ( flag_rst = 1)b1 flag = 1;b0end endreg flag_reg; / 生成与 clk_4 同步地用于检测脉冲上升沿信号地flag 信号always (posedge clk_4) beginflag_r
17、eg = flag ;end用 modesim6.0 仿真波形如下:欢迎下载精品学习资源图9.信号地同步地仿真波形从仿真波形中可以看出当pulse 高电平常地下一个时钟fl ag = 1 b;1为了让时钟clk_4 能够检测到 flag = 1就b让1, flag 始终储存到 clk_4 上升沿显现 ,然后在 clk_4 上升沿把flag 地复位信号 flag_rst 置1;然后 flag, flag_rst 都清零 .转变 pulse 脉冲显现地时间或者 clk_4 地频率都能检测到pulse 地高电平 .经过信号同步后 ,状态机能够检测抢答计时完30s 后生成地一个脉冲信号然后回到初状态.
18、时序设计是数字电路电路地主要工作,在设计中肯定要明白信号如何传递,在何时赋值,何时信号值需要转变等,这样才能更好地设计 .在需要转变寄存器值地时刻没有对寄存器进行操作 ,会造成结果地错误 .设计结果依据抢答器功能要求 ,规划程序包括地子模块,并编写 Verilog 代码 ,在硬件电路上调试运行胜利 .操作过程:开头时对 ,整个系统复位(默认每组成果为10 分) ,数码管显示 “FF+10”. 在主持人发出开头抢答地Start 之后 ,参赛队员就可以按自己前面地抢答按钮,同时用数码管左边两位计时抢答时间30s,假如在 30s 内各组都无人抢答,就此次抢答无效,系统自动回到开始前地初状态(数码管显
19、示“FF+成果 ”),等待下一次操作;主持人可依据回答争取与否,以及是否违规抢答 ,打算加减分( Add 为加分掌握 ,Sub 为减分掌握) ,加减操作后系统又回到开头前地等待状态 .设计中 ,哪个组抢答 ,就显示哪个组地信息 .假如抢答没有违规(按开头后抢答)就显示器左边两位显示“FX”;反之 ,就显示 “XF”,X代表组号 1,2,3.依据操作方法 ,以第 1组抢答为例在VX_SP306 开发平台上运行看看数码管显示及整个过程:1、在系统复位后显示 “FF+10”;2、等待主持人按开头状态;3、主持人按开头按钮前第1 组抢答 ,显示“1F+10”减,1 分操作后显示 “1F+09”;回到欢迎下载精品学习资源步骤 2;4、主持人按开头按钮后,显示“30+10”; 30 每秒钟减 1 直到 00;5、在 30s 内第 1 组抢答 ,显示 “F1+10”主,持人依据回答情形进行加、减分操作,显示欢迎下载精品学习资源欢迎下载精品学习资源“ F1分+数 ”;然后回到步骤 2;6、假如在 30s 内没有人抢答 ,显示“FF+10”回,到步骤 2.欢迎下载
限制150内