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

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

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

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
    下载

相关推荐