名称:6路抢答器设计VHDL代码Quartus? DE2-115开发板
软件:Quartus
语言:VHDL
代码功能:
6路抢答器
1、6个按键抢答,裁判控制开始后,开始抢答
2、数码管显示第一个抢答号
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
本代码已在DE2-115开发板验证,DE2-115开发板如下,其他开发板可以修改管脚适配:
演示视频:
设计文档:
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
阅读全文
456