扫码加入

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

基于FPGA的BCD码减法计数器VHDL代码Quartus EDA实验箱

2025/07/18
837
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

2-24050Q14K0b6.doc

共1个文件

名称:基于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、写出设计报告。

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

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

演示视频:

设计文档:

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;

点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=706

  • 2-24050Q14K0b6.doc
    下载

相关推荐