赞
踩
名称:基于FPGA的BCD码减法计数器VHDL代码Quartus EDA实验箱(文末获取)
软件:Quartus
语言:VHDL
代码功能:
用VHDL设计一个具有可预置功能的BCD码减法计数器
作为倒计时器,具体要求为
1、该倒计时器可在00分01秒到59分59秒范围内任意设置,其计时间隔为1S;预置后,递减计数, 计时器递减计数到零时计时结束,数码显示器显示00°并停止,发出报警信号(可用LED灯亮表示),表示本次倒计时结束。需重新手动预置并启动后,才能再开始下一次倒计时
2、设置异步复位端,该端有效时,可使计数器立即复位到初始预置状态;设置计数使能端,用以控制计数暂停/继续 3、用4个数码管分别显示分秒计数状态,采用动态扫描方式实现课程设计任务采用EDA实验箱(由指导老师安排)完成。
设计要求
1、设计思路清晰,给出整体设计框图;
2、用VHDL设计各单元电路,完成其功能仿真和编译并
生成低层模块;
3、在 Quartusll中完成顶层设计并编译通过;
4、在 Quartus中完成设计下载并调试电路;
5、写出设计报告
本代码已在EDA实验箱验证,EDA实验箱如下,其他开发板可以修改管脚适配:
1. 工程文件
2. 程序文件
3. 程序编译
4. RTL图
5. 仿真图
分频模块
倒计时模块
显示模块
部分代码展示:
LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY Digital_clock IS PORT ( clk_in : IN STD_LOGIC;--时钟 switch : IN STD_LOGIC; key_1 : IN STD_LOGIC;--设置时间 key_2 : IN STD_LOGIC;--确认 key_3 : IN STD_LOGIC;--设置时分秒 LED : OUT STD_LOGIC; SEL : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);--数码管位选 seg_select : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)--数码管段选 ); END Digital_clock; ARCHITECTURE behave OF Digital_clock IS --模块声明 --显示模块 COMPONENT display IS PORT ( clk : IN STD_LOGIC; countdown_hour_time : IN STD_LOGIC_VECTOR(7 DOWNTO 0); countdown_minute_time : IN STD_LOGIC_VECTOR(7 DOWNTO 0); countdown_second_time : IN STD_LOGIC_VECTOR(7 DOWNTO 0); SEL : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);--数码管位选 seg_select : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) ); END COMPONENT; --倒计时模块 COMPONENT timing IS PORT ( clk_50M : IN STD_LOGIC; clk_1Hz : IN STD_LOGIC; set_time_key : IN STD_LOGIC; confirm_key : IN STD_LOGIC; change_time_key : IN STD_LOGIC; LED : OUT STD_LOGIC; countdown_hour_time : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); countdown_minute_time : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); countdown_second_time : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) ); END COMPONENT; --分频模块 COMPONENT fenping IS PORT ( clk_50M : IN STD_LOGIC; clk_1Hz : OUT STD_LOGIC ); END COMPONENT; --按键消抖 COMPONENT key_jitter IS PORT ( clkin : IN STD_LOGIC; key_in : IN STD_LOGIC; key_negedge : OUT STD_LOGIC ); END COMPONENT; SIGNAL countdown_hour_time : STD_LOGIC_VECTOR(7 DOWNTO 0);--时 SIGNAL countdown_minute_time : STD_LOGIC_VECTOR(7 DOWNTO 0);--分 SIGNAL countdown_second_time : STD_LOGIC_VECTOR(7 DOWNTO 0);--秒 SIGNAL key_1_negedge : STD_LOGIC;--按键下降沿 SIGNAL key_2_negedge : STD_LOGIC;--按键下降沿 SIGNAL key_3_negedge : STD_LOGIC;--按键下降沿 SIGNAL clk_1Hz : STD_LOGIC;--1Hz SIGNAL clk_50M : STD_LOGIC;--50MHz BEGIN clk_50M<= switch and clk_in; --分频模块 fenping_Hz : fenping PORT MAP ( clk_50M => clk_50M, clk_1Hz => clk_1Hz--1Hz ); --按键消抖 key_1_jitter : key_jitter PORT MAP ( clkin => clk_50M, key_in => key_1, key_negedge => key_1_negedge ); --按键消抖 key_2_jitter : key_jitter PORT MAP ( clkin => clk_50M, key_in => key_2, key_negedge => key_2_negedge ); --按键消抖 key_3_jitter : key_jitter PORT MAP ( clkin => clk_50M, key_in => key_3, key_negedge => key_3_negedge ); i_timing : timing PORT MAP ( clk_50M => clk_50M, clk_1Hz => clk_1Hz, set_time_key => key_1_negedge,--设置时间 confirm_key => key_2_negedge,--确认 change_time_key => key_3_negedge,--设置时分秒 LED =>LED, countdown_hour_time => countdown_hour_time,--时 countdown_minute_time => countdown_minute_time,--分 countdown_second_time => countdown_second_time--秒 ); i_display : display PORT MAP ( clk => clk_50M, countdown_hour_time => countdown_hour_time,--时 countdown_minute_time => countdown_minute_time,--分 countdown_second_time => countdown_second_time,--秒 SEL => SEL,--数码管位选 seg_select => seg_select--数码管段选 ); END behave;
扫描文章末尾的公众号二维码
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。