名称:百日倒计时控制器设计VHDL代码Quartus DE2-115开发板
软件:Quartus
语言:VHDL
代码功能:
运用EDA软件工具,VHDL语言,在 Quartus II 10.0设计平台上完成百日倒计时控制器设计,通过编译、适配和仿真,最终下载到DE2-115开发装置上运行。要求最大倒计时为100天,时分秒和日8位数码显示,任意时间可调,到时报警。主要内容包括:标准时间计数器、调日调时调分及控制电路等。
本课题可培养学生综合运用现代电子设计技术,包括软件技术、可编程逻辑器件、硬件描述语言,解决IC控制芯片在硬软件设计方面的复杂工程问题。
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
本代码已在DE2-115开发板验证,DE2-115开发板如下,其他开发板可以修改管脚适配:
演示视频:
1. 系统设计
本设计的系统框图如下:
分为按键下降沿检测模块、计时控制模块、数码管显示模块三大部分,按键下降沿检测模块检测调时、调日、调分、启动按键的下降沿,计时控制模块控制初始时间及倒计时,数码管显示模块用于显示。
2. 模块设计
按键下降沿检测模块,因为DE2-115的按键是已经硬件消抖的,故不需写要按键消抖代码,然后按键是按下低电平,所以需要检测下降沿。先用2个触发器将key_in信号打2拍,然后再将两个信号取反相与即可得到按键下降沿。
--打两拍
PROCESS (clk_50M)
BEGIN
IF (clk_50M'EVENT AND clk_50M = '1') THEN
key_in_buf0 <= key_in;
key_in_buf1 <= key_in_buf0;
END IF;
END PROCESS;
key_down <= NOT(key_in_buf0) AND key_in_buf1;--按键下降沿检测
计时控制模块:
模块主要使用状态机控制,状态分为3个,空闲状态、倒计时状态、结束状态。复位后在控制状态,按下启动键后进入倒计时状态,倒计时结束后进入结束状态。在空闲状态下可以通过按键设置起始时间,日按键控制天数加1,加到99回0,时按键控制小时加1,加到23回0,分按键控制分钟加1,加到59回0.在倒计时状态下,时间在1Hz的脉冲信号下按秒递减,直至倒计时到0天0时0分0秒后进入结束状态。结束状态时led指示灯会亮,若要返回重新倒计时则按复位按键。
数码管显示模块:
数码管用于显示倒计时时间,首先将计时控制模块的日、时、分、秒通过Conv_Integer()函数转换为int类型,然后分别求得日、时、分、秒的十位和个位。再通过case语句,将日、时、分、秒的十位和个位对应的8个数码管进行段选赋值,即可使数码管显示数字。
1. 工程文件
2. 程序文件
3. 程序编译
4. RTL图
5. Testbench
6. 仿真图
部分代码展示:
LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_unsigned.all; USE ieee.std_logic_arith.all; --数码管显示模块 ENTITY display IS PORT ( clk : IN STD_LOGIC; day_num : IN STD_LOGIC_VECTOR(7 DOWNTO 0); hour_num : IN STD_LOGIC_VECTOR(7 DOWNTO 0); minute_num : IN STD_LOGIC_VECTOR(7 DOWNTO 0); second_num : IN STD_LOGIC_VECTOR(7 DOWNTO 0); HEX0 : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); HEX1 : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); HEX2 : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); HEX3 : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); HEX4 : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); HEX5 : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); HEX6 : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); HEX7 : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) ); END display; ARCHITECTURE behave OF display IS SIGNAL second_time_one : INTEGER := 0; SIGNAL second_time_ten : INTEGER := 0; SIGNAL minute_time_one : INTEGER := 0; SIGNAL minute_time_ten : INTEGER := 0; SIGNAL hour_time_one : INTEGER := 0; SIGNAL hour_time_ten : INTEGER := 0; SIGNAL day_num_one : INTEGER := 0; SIGNAL day_num_ten : INTEGER := 0; BEGIN
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=1183
745