软件:Quartus
语言:VHDL
代码功能:
设计个可容纳6组参赛的数字式抢答器。
1每组设一个按钮,供抢答使用。
2.抢答器具有第一信号鉴别和锁存功能,使除第一抢答者外的按钮不起作用。
3.设置一个主持人“开始¨按钮。主持人复位后,开始抢答,第一信号鉴别锁存电路得到信号后,有指示灯显示抢答组别,扬声器发出2~3秒的音响。
4.设置一个计分电路,每组开始预置100分,由主持人记分,答对一次加10分,答错一次减10分,
提示此设计问题的关键是准确判断出第一抢答者并将其锁存实现的方法可使用触发器或锁存器.在得到第一信号后将输入封锁,使其它组的抢答信号无效。
2)形成第一抢答信号后,用编码、译码及数码显示电路显示第一抢答者的组别,用第一抢答信号推动扬声器。
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
演示视频:
设计文档:
1. 工程文件
2. 程序文件
3. 程序编译
4. RTL图
5. 仿真图
整体仿真图
上图仿真了,主持人开始后,3号最先抢答,蜂鸣器响3秒,led3指示灯亮,通过控制分数,将3号分数加10分。
控制模块
上图为控制模块仿真图,按下主持人开始键后,3号最先抢答,led3亮,蜂鸣器响3秒,输出抢答号为3
计分模块
上图为计分模块仿真图,图中起始分数均为100分(仿真图中省略了个位,因为个位恒为0),1号分数两次加分一次减分,最终为110分。5号四次加分两次减分,最终分数120分
显示模块
上图为显示模块仿真,图上分为HEX1显示抢答者,HEX2~3为抢答者的分数。其中HEX4为分数个位,恒为0.图上可知1号分数100分,2号180分,3号60分,4号30分,5号20分,6号60分。
部分代码展示:
LIBRARY?ieee; ???USE?ieee.std_logic_1164.all; USE?ieee.std_logic_unsigned.all; --抢答控制模块 ENTITY?qiandda_ctrl?IS ???PORT?( ??????clk????????:?IN?STD_LOGIC;--10Hz reset_n????????:?IN?STD_LOGIC; ??????start_p???:?IN?STD_LOGIC;--主持人按键 ??????key_1??????:?IN?STD_LOGIC;--抢答按键,所有key都是高电平有效 ??????key_2??????:?IN?STD_LOGIC;--抢答按键,所有key都是高电平有效 ??????key_3??????:?IN?STD_LOGIC;--抢答按键,所有key都是高电平有效 ??????key_4??????:?IN?STD_LOGIC;--抢答按键,所有key都是高电平有效 ??????key_5??????:?IN?STD_LOGIC;--抢答按键,所有key都是高电平有效 ??????key_6??????:?IN?STD_LOGIC;--抢答按键,所有key都是高电平有效 ???qiangda????:?OUT?STD_LOGIC_VECTOR(3?DOWNTO?0);--正常抢答 beep???????:?OUT?STD_LOGIC;--蜂鸣器 ??????led_1??????:?OUT?STD_LOGIC;--抢答指示led灯,高亮 ??????led_2??????:?OUT?STD_LOGIC;--抢答指示led灯,高亮 ??????led_3??????:?OUT?STD_LOGIC;--抢答指示led灯,高亮 ??????led_4??????:?OUT?STD_LOGIC;--抢答指示led灯,高亮 ??????led_5??????:?OUT?STD_LOGIC;--抢答指示led灯,高亮 ??????led_6??????:?OUT?STD_LOGIC?--抢答指示led灯,高亮 ???); END?qiandda_ctrl; ARCHITECTURE?RTL?OF?qiandda_ctrl?IS ???TYPE?State_type?IS?(idle,?start,?qiangda_1,?qiangda_2,qiangda_3,qiangda_4,qiangda_5,qiangda_6);??--?定义状态 ???SIGNAL?current_state?:?State_Type;????--?创建信号?? SIGNAL?qiangda_temp????????:?STD_LOGIC_VECTOR(3?DOWNTO?0);??? SIGNAL?huida_time??????????:?STD_LOGIC_VECTOR(9?DOWNTO?0)?:=?"0000000000"; BEGIN ???--状态机-- ???PROCESS?(clk,start_p) ???BEGIN ????IF?(start_p?=?'1')?THEN--主持人按键 ????????current_state?<=?start;--开始抢答 ????ELSIF?(clk'EVENT?AND?clk?=?'1')?THEN ?????????CASE?current_state?IS ????????????WHEN?idle?=>--未开始抢答状态 ???????????????IF?(start_p?=?'1')?THEN--主持人按键 ??????????????????current_state?<=?start;--开始抢答 ???????????????ELSE ??????????????????current_state?<=?idle; ???????????????END?IF; ????????????WHEN?start?=>--开始抢答状态 ???????????????IF?(key_1?=?'1')?THEN ??????????????????current_state?<=?qiangda_1;--1号抢答 ???????????????ELSIF?(key_2?=?'1')?THEN ??????????????????current_state?<=?qiangda_2;--2号抢答 ???????????????ELSIF?(key_3?=?'1')?THEN ??????????????????current_state?<=?qiangda_3;--3号抢答 ???????????????ELSIF?(key_4?=?'1')?THEN ??????????????????current_state?<=?qiangda_4;--4号抢答 ???????????????ELSIF?(key_5?=?'1')?THEN ??????????????????current_state?<=?qiangda_5;--5号抢答 ???????????????ELSIF?(key_6?=?'1')?THEN ??????????????????current_state?<=?qiangda_6;--6号抢答 ???????????????ELSE ??????????????????current_state?<=?start; ???????????????END?IF; ????????????WHEN?qiangda_1?=> ???????????????current_state?<=?qiangda_1;--1号抢答 ????????????WHEN?qiangda_2?=> ???????????????current_state?<=?qiangda_2;--2号抢答 ????????????WHEN?qiangda_3?=> ???????????????current_state?<=?qiangda_3;--3号抢答 ????????????WHEN?qiangda_4?=> ???????????????current_state?<=?qiangda_4;--4号抢答 ????????????WHEN?qiangda_5?=> ???????????????current_state?<=?qiangda_5;--5号抢答 ????????????WHEN?qiangda_6?=> ???????????????current_state?<=?qiangda_6;--6号抢答 ????????????WHEN?OTHERS?=> ???????????????current_state?<=?idle; ?????????END?CASE; ??????END?IF; ???END?PROCESS;
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=1055
								
								
								
330