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

6路抢答器设计VHDL代码Quartus DE2-115开发板

09/12 13:30
456
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

2-2410151QS0940.doc

共1个文件

名称:6路抢答器设计VHDL代码Quartus? DE2-115开发板

软件:Quartus

语言:VHDL

代码功能:

6路抢答器

1、6个按键抢答,裁判控制开始后,开始抢答

2、数码管显示第一个抢答号

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

本代码已在DE2-115开发板验证,DE2-115开发板如下,其他开发板可以修改管脚适配:

DE2-115开发板.png

演示视频:

设计文档:

1.?工程文件

2.?程序文件

3.?程序编译

4.?管脚分配

5.?仿真图

start_signal为启动信号,高电平表示可以抢答,下图中最先抢答的是5号,故数码管信号deg_display显示"10010010"对应5,当start_signal为低电平表示不可以抢答,此时按下没有反应。下一次抢答,第一次抢答者为4号,数码管显示"10011001",对应4.下图alarm表示蜂鸣器信号,高电平响。

部分代码展示:

LIBRARY?ieee;
???USE?ieee.std_logic_1164.all;
ENTITY?state_ctrl?IS
???PORT?(
??????clk_50m???????:?IN?STD_LOGIC;
??????key???????????:?IN?STD_LOGIC_VECTOR(5?DOWNTO?0);--6个抢答按键,所有key都是高电平有效
??????start_signal??:?IN?STD_LOGIC;--启动信号
??????deg_display???:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0);--数码管
??????alarm?????????:?OUT?STD_LOGIC--板子上没有蜂鸣器,用led灯亮模拟
???);
END?state_ctrl;
ARCHITECTURE?trans?OF?state_ctrl?IS
???
???SIGNAL?current_state?:?STD_LOGIC_VECTOR(3?DOWNTO?0)?:=?"0000";
???SIGNAL?next_state????:?STD_LOGIC_VECTOR(3?DOWNTO?0)?:=?"0000";
???
???SIGNAL?display_num???:?STD_LOGIC_VECTOR(2?DOWNTO?0)?:=?"000";
???SIGNAL?control_data??:?STD_LOGIC_VECTOR(7?DOWNTO?0)?:=?"00000000";
BEGIN
------------------------------------状态机----------------------------
???PROCESS?(clk_50m)
???BEGIN
??????IF?(clk_50m'EVENT?AND?clk_50m?=?'1')?THEN
?????????IF?(start_signal?=?'0')?THEN
????????????current_state?<=?"0000";
?????????ELSE
????????????current_state?<=?next_state;
?????????END?IF;
??????END?IF;
???END?PROCESS;
???
???PROCESS?(clk_50m)
???BEGIN
IF?(clk_50m'EVENT?AND?clk_50m?=?'1')?THEN
??????CASE?current_state?IS
?????????WHEN?"0000"?=>--未开始抢答状态
????????????IF?(start_signal?=?'1')?THEN
???????????????next_state?<=?"0001";
????????????ELSE
???????????????next_state?<=?"0000";
????????????END?IF;
?????????WHEN?"0001"?=>--开始抢答状态
????????????IF?(key(0)?=?'1'?OR?key(1)?=?'1'?OR?key(2)?=?'1'?OR?key(3)?=?'1'?OR?key(4)?=?'1'?OR?key(5)?=?'1')?THEN
???????????????next_state?<=?"0010";
????????????ELSE
???????????????next_state?<=?"0001";
????????????END?IF;
?????????WHEN?"0010"?=>--抢答状态
????????????CASE?key?IS
???????????????WHEN?"000001"?=>
??????????????????next_state?<=?"0011";
???????????????WHEN?"000010"?=>
??????????????????next_state?<=?"0100";
???????????????WHEN?"000100"?=>
??????????????????next_state?<=?"0101";
???????????????WHEN?"001000"?=>
??????????????????next_state?<=?"0110";
???????????????WHEN?"010000"?=>
??????????????????next_state?<=?"0111";
???????????????WHEN?"100000"?=>
??????????????????next_state?<=?"1000";
???????????????WHEN?OTHERS?=>
??????????????????next_state?<=?"0010";
????????????END?CASE;
?????????WHEN?"0011"?=>--1号抢答
????????????IF?(start_signal?=?'0')?THEN
???????????????next_state?<=?"0000";
????????????ELSE
???????????????next_state?<=?"0011";
????????????END?IF;
?????????WHEN?"0100"?=>?--2号抢答
????????????IF?(start_signal?=?'0')?THEN
???????????????next_state?<=?"0000";
????????????ELSE
???????????????next_state?<=?"0100";
????????????END?IF;
?????????WHEN?"0101"?=>?--3号抢答
????????????IF?(start_signal?=?'0')?THEN
???????????????next_state?<=?"0000";
????????????ELSE
???????????????next_state?<=?"0101";
????????????END?IF;
?????????WHEN?"0110"?=>--4号抢答
????????????IF?(start_signal?=?'0')?THEN
???????????????next_state?<=?"0000";
????????????ELSE
???????????????next_state?<=?"0110";
????????????END?IF;

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

  • 2-2410151QS0940.doc
    下载

相关推荐