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

数字钟设计VHDL代码Quartus实验箱

05/16 13:08
421
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

2-25051319405C10.doc

共1个文件

名称:数字钟设计VHDL代码Quartus  实验箱

软件:Quartus

语言:VHDL

代码功能:数字钟

FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com

本代码已在实验箱验证,实验箱如下,其他开发板可以修改管脚适配:实验箱 (1).jpg

演示视频:

设计文档:

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

  • 2-25051319405C10.doc
    下载

相关推荐