当前位置:   article > 正文

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

bcd码减法器vhdl

名称:基于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实验箱如下,其他开发板可以修改管脚适配:

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;
源代码

 扫描文章末尾的公众号二维码

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/707897
推荐阅读
相关标签
  

闽ICP备14008679号