• 方案介绍
  • 附件下载
  • 相关推荐
申请入驻 产业图谱

6路抢答器带倒计时计分功能设计VHDL代码Quartus仿真

08/21 09:04
351
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

2-240Z41R12b01.doc

共1个文件

名称:6路抢答器带倒计时计分功能设计VHDL代码Quartus仿真

软件:Quartus

语言:VHDL

代码功能:

6路抢答器带倒计时计分功能

1、设计抢答器组数最多为6组,每组的序号分别为1,2,3, 4,5, 6,启动后方可抢答,按键后组号在LED显示器上显示,同时封锁其他组的按键信号。

2、设置抢答开启控制键,数字抢答器定时为20秒,通过按键启动抢答器后要求20秒倒计时器开始工作。

3、抢答者在20秒内进行抢答,则有效;若在20秒定时到达时,仍无抢答者则定时器自动清零。

4、具有计分功能, 每组每答对一-题计 10分。

FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com

演示视频:

设计文档:

1. 工程文件

2. 程序文件

3. 程序编译

4. RTL图

5. 仿真图

整体仿真图

上图为端口信号定义

上图中,复位后,按下主持人控制按键,此时开始抢答,同时开始计时,图中,2号先抢答,led2变为高电平数码管显示2号,且2号答对(write_kety高电平)。后半段仿真了超时抢答的情况,20秒内没有抢答,后续在抢答也无效。

抢答控制模块

上图为端口信号定义

上图中,复位后,按下主持人控制按键,此时开始抢答,同时开始计时,图中,2号先抢答,led2变为高电平。抢答号为2。后半段仿真了超时抢答的情况,20秒内没有抢答,后续再抢答也无效。

分数控制模块

上图为端口信号定义

上图中,仿真了分数控制模块,write_kety高电平表示答对。当答对时,按下加分按键才能加10分,否则不能加分

数码管显示模块

上图为端口信号定义

上图中,仿真了显示模块,先后显示了抢答号2和6。显示2时,同时显示了分数为20.

显示6时,同时显示了分数为10.

部分代码展示:

LIBRARY?ieee;
???USE?ieee.std_logic_1164.all;
???USE?ieee.std_logic_unsigned.all;
--抢答控制模块
ENTITY?qiandda_ctrl?IS
???PORT?(
??????clk????????:?IN?STD_LOGIC;
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);--正常抢答
??????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,?s_timeout);??--?定义状态
???SIGNAL?current_state?:?State_Type;????--?创建信号??
SIGNAL?qiangda_temp????????:?STD_LOGIC_VECTOR(3?DOWNTO?0);???
SIGNAL?time_cnt????????:?STD_LOGIC_VECTOR(7?DOWNTO?0);??--20秒计数
BEGIN
???--状态机--
???PROCESS?(clk,reset_n)
???BEGIN
?IF?(reset_n?=?'0')?THEN--复位
????????current_state?<=?idle;--开始抢答
????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号抢答
???????????????ELSIF?(time_cnt?=?"00000000")?THEN--20秒
??????????????????current_state?<=?s_timeout;--超时
???????????????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?s_timeout?=>
current_state?<=?idle?;
????????????WHEN?OTHERS?=>
???????????????current_state?<=?idle;
?????????END?CASE;
??????END?IF;
???END?PROCESS;

点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=1033

  • 2-240Z41R12b01.doc
    下载

相关推荐