名称: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
阅读全文
656