名称:4路倒计时抢答器设计VHDL代码Quartus DE2-115开发板(文末获取)
软件:Quartus
语言:VHDL
代码功能:
4路抢答器设计
要求:
1、具有复位和开始按键
2、主持人按下开始按键后,开始倒计时9~0秒
3、倒计时为0时开始抢答,通过led指示抢答者
4、提前抢答对应的led闪烁报警
本代码已在DE2-115开发板验证,DE2-115开发板如下,其他开发板可以修改管脚适配:
1. 工程文件
2 .程序文件
3 . 程序编译
4. RTL图
5. Testbench
6. 仿真图
整体仿真图
图中,复位后,主持人按下开始按键,开始倒计时9~0秒,倒计时结束前按下key1,表示1号提前抢答,蜂鸣器间隔响,led1闪烁。复位后,主持人重新按下开始键,开始倒计时,倒计时结束后先按下key3,3号抢答成功,led3亮,蜂鸣器响。此时再按下key4不响应。
注:LED低电平亮,蜂鸣器低电平响。
分频模块
系统时钟分频为1Hz和2Hz信号,1Hz用于倒计时,一次1秒。2Hz用于控制LED闪烁和蜂鸣器间隔响。
控制模块
控制模块通过状态机控制提前抢答,正常抢答,倒计时等功能。
显示模块
数码管显示倒计时和台号。
部分代码展示:
LIBRARY ieee; USE ieee.std_logic_1164.all; --抢答器 ENTITY qiangdaqi IS PORT ( clk : IN STD_LOGIC;--时钟 rst_n : IN STD_LOGIC;--复位--SW0 start_n : IN STD_LOGIC;--开始--SW1 key_1 : IN STD_LOGIC;--按键1--key0 key_2 : IN STD_LOGIC;--按键2--key1 key_3 : IN STD_LOGIC;--按键3--key2 key_4 : IN STD_LOGIC;--按键4--key3 LED1 : OUT STD_LOGIC;--LED0 LED2 : OUT STD_LOGIC;--LED1 LED3 : OUT STD_LOGIC;--LED2 LED4 : OUT STD_LOGIC;--LED3 beep : OUT STD_LOGIC;--蜂鸣器--LED4 dis1: out std_logic_vector(7 downto 0);--台号1显示 dis2: out std_logic_vector(7 downto 0);--台号2显示 dis3: out std_logic_vector(7 downto 0);--台号3显示 dis4: out std_logic_vector(7 downto 0);--台号4显示 HEX : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)--数码管 ); END qiangdaqi; ARCHITECTURE behave OF qiangdaqi IS --控制模块 COMPONENT control IS PORT ( clk : IN STD_LOGIC; rst_n : IN STD_LOGIC; start_n : IN STD_LOGIC; key_1 : IN STD_LOGIC; key_2 : IN STD_LOGIC; key_3 : IN STD_LOGIC; key_4 : IN STD_LOGIC; clk_1Hz : IN STD_LOGIC; clk_2Hz : IN STD_LOGIC; LED1 : OUT STD_LOGIC; LED2 : OUT STD_LOGIC; LED3 : OUT STD_LOGIC; LED4 : OUT STD_LOGIC; beep : OUT STD_LOGIC; down_time : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ); END COMPONENT; --分频器 COMPONENT div IS PORT ( clk : IN STD_LOGIC; clk_1Hz : OUT STD_LOGIC; clk_2Hz : OUT STD_LOGIC ); END COMPONENT; --数码管译码 COMPONENT LED7S is Port( din: in std_logic_vector(3 downto 0); dis1: out std_logic_vector(7 downto 0);--台号1显示 dis2: out std_logic_vector(7 downto 0);--台号2显示 dis3: out std_logic_vector(7 downto 0);--台号3显示 dis4: out std_logic_vector(7 downto 0);--台号4显示 y: out std_logic_vector(7 downto 0)); end COMPONENT; SIGNAL clk_1Hz : STD_LOGIC; SIGNAL clk_2Hz : STD_LOGIC; SIGNAL down_time : STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN --调用分频模块 i_div : div PORT MAP ( clk => clk, clk_1Hz => clk_1Hz, clk_2Hz => clk_2Hz ); --调用控制模块 i_control : control PORT MAP ( clk => clk, rst_n => rst_n, start_n => start_n, key_1 => key_1, key_2 => key_2, key_3 => key_3, key_4 => key_4, clk_1Hz => clk_1Hz, clk_2Hz => clk_2Hz, LED1 => LED1, LED2 => LED2, LED3 => LED3, LED4 => LED4, beep => beep, down_time => down_time );
源代码
扫描文章末尾的公众号二维码