名称:数字钟设计VHDL代码Quartus 实验箱
软件:Quartus
语言:VHDL
代码功能:数字钟
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
本代码已在实验箱验证,实验箱如下,其他开发板可以修改管脚适配:
演示视频:
设计文档:
1、工程文件
2、程序文件
3、程序编译
4、RTL图
5、管脚分配
6、仿真图
整体仿真图
分频模块
计时模块
显示模块
部分代码展示:
LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_unsigned.all; -- 显示模块实体声明 ENTITY display IS PORT ( clk : IN STD_LOGIC; -- 时钟信号 hour_time : IN STD_LOGIC_VECTOR(7 DOWNTO 0); -- 小时时间输入 minute_time : IN STD_LOGIC_VECTOR(7 DOWNTO 0); -- 分钟时间输入 second_time : IN STD_LOGIC_VECTOR(7 DOWNTO 0); -- 秒时间输入 bit_select : OUT STD_LOGIC_VECTOR(5 DOWNTO 0); -- 位选择输出,用于选择显示的位数 seg_select : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) -- 段选择输出,用于选择七段显示器的段 ); END display; -- 显示模块的行为描述 ARCHITECTURE bahave OF display IS -- BCD转换组件声明 COMPONENT BCD IS PORT ( clk : IN STD_LOGIC; binary : IN STD_LOGIC_VECTOR(7 DOWNTO 0); -- 二进制数输入 Tens : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); -- 十位输出 Ones : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) -- 个位输出 ); END COMPONENT; -- 信号声明 SIGNAL second_time_one : STD_LOGIC_VECTOR(3 DOWNTO 0) := "0000"; -- 秒的个位 SIGNAL second_time_ten : STD_LOGIC_VECTOR(3 DOWNTO 0) := "0000"; -- 秒的十位 SIGNAL minute_time_one : STD_LOGIC_VECTOR(3 DOWNTO 0) := "0000"; -- 分的个位 SIGNAL minute_time_ten : STD_LOGIC_VECTOR(3 DOWNTO 0) := "0000"; -- 分的十位 SIGNAL hour_time_one : STD_LOGIC_VECTOR(3 DOWNTO 0) := "0000"; -- 小时的个位 SIGNAL hour_time_ten : STD_LOGIC_VECTOR(3 DOWNTO 0) := "0000"; -- 小时的十位 SIGNAL display_num : STD_LOGIC_VECTOR(3 DOWNTO 0) := "0000"; -- 当前显示的数字 SIGNAL select_bit : STD_LOGIC_VECTOR(15 DOWNTO 0) := "0000000000000000"; -- 位选择计数器 SIGNAL number : STD_LOGIC_VECTOR(2 DOWNTO 0) := "000"; -- 数字选择计数器 SIGNAL time_count : STD_LOGIC_VECTOR(31 DOWNTO 0) := "00000000000000000000000000000000"; -- 未使用的信号 BEGIN -- 将时间转换为十位和个位 U1_BCD: BCD PORT MAP( clk => clk, binary => second_time, Tens => second_time_ten, Ones => second_time_one ); U2_BCD: BCD PORT MAP( clk => clk, binary => minute_time, Tens => minute_time_ten, Ones => minute_time_one ); U3_BCD: BCD PORT MAP( clk => clk, binary => hour_time, Tens => hour_time_ten, Ones => hour_time_one ); -- 位选择过程 PROCESS (clk) BEGIN IF (clk'EVENT AND clk = '1') THEN IF (select_bit = "1111111111111111") THEN -- 当计数器达到8时重置 select_bit <= "0000000000000000"; ELSE select_bit <= select_bit + "0000000000000001"; -- 计数器加1 END IF; END IF; END PROCESS; -- 数字选择过程 PROCESS (clk) BEGIN IF (clk'EVENT AND clk = '1') THEN IF (select_bit = "1111111111111111") THEN IF (number = "101") THEN -- 当数字达到5时重置 number <= "000"; ELSE number <= number + "001"; -- 数字加1 END IF; END IF; END IF; END PROCESS;
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=1519
阅读全文
421