基于FPGA的电子日历控制电路设计VHDL代码Quartus仿真

名称:基于FPGA的电子日历控制电路设计VHDL代码Quartus仿真(文末获取)

软件:Quartus

语言:VHDL

代码功能:

任务及要求

硬件描述语言VHDL是一种用形式化方法描述数字电路和系统的语言。利用这种语言,数字电路系统的设计可以从上层到下层(从抽象到具体)逐层描述自己的设计思想,用一系列分层次的模块来表示复杂的数字系统。然后,利用电子设计自动化(EDA)工具,逐层进行仿真验证。设计一个用于电子时钟的控制电路,功能要求如下    

1.用BCD码输出显示当前日期,显示格式“年月日”及“星期几”

2.月和日可手动调整,星期应随之自动变化;

3.无需考虑闰年。

1. 工程文件

2. 程序文件

3. 程序编译

4. RTL图

5. testbench

6. 仿真图

整体仿真图

大小月判断模块

控制模块

二进制转BCD模块

部分代码展示:

LIBRARY ieee;
   USE ieee.std_logic_1164.all;
   USE ieee.std_logic_unsigned.all;
--万年历
ENTITY calendar IS
   PORT (
      CLK        : IN STD_LOGIC;
      RST        : IN STD_LOGIC;
      --月日调整按键
      day_add    : IN STD_LOGIC;--天加
      day_sub    : IN STD_LOGIC;--天减
      month_add  : IN STD_LOGIC;--月加
      month_sub  : IN STD_LOGIC;--月减
      
  year_h_bcd_H     : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--BCD码-年千位
  year_h_bcd_L     : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--BCD码-年百位
      year_l_bcd_H     : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--BCD码-年十位
  year_l_bcd_L     : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--BCD码-年个位
      month_bcd_H      : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--BCD码-月十位
  month_bcd_L      : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--BCD码-月个位
  day_bcd_H        : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--BCD码-天十位
  day_bcd_L        : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--BCD码-天个位
  week_bcd         : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) --BCD码-星期
   );
END calendar;
ARCHITECTURE behave OF calendar IS
--大小月判断
component month_day IS
   PORT (
      CLK        : IN STD_LOGIC;--时钟
      RST        : IN STD_LOGIC;--复位
      month      : IN STD_LOGIC_VECTOR(3 DOWNTO 0);--月
      day_max    : OUT STD_LOGIC_VECTOR(4 DOWNTO 0)--月最大天数
   );
END component;
--万年历控制模块
component calendar_ctrl IS
   PORT (
      CLK        : IN STD_LOGIC;
      RST        : IN STD_LOGIC;
      --月日调整按键
      day_add    : IN STD_LOGIC;--天加
      day_sub    : IN STD_LOGIC;--天减
      month_add  : IN STD_LOGIC;--月加
      month_sub  : IN STD_LOGIC;--月减
      day_max    : IN STD_LOGIC_VECTOR(4 DOWNTO 0);----月最大天数
      
  year_h     : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);--年高位
      year_l     : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);--年低位
      month      : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--月
  week       : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--星期
      day        : OUT STD_LOGIC_VECTOR(4 DOWNTO 0)--天
   );
END component;
--二进制转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 day_max : STD_LOGIC_VECTOR(4 DOWNTO 0):="00000";
   SIGNAL year_h  : STD_LOGIC_VECTOR(7 DOWNTO 0);
   SIGNAL year_l : STD_LOGIC_VECTOR(7 DOWNTO 0);
   SIGNAL month   : STD_LOGIC_VECTOR(7 DOWNTO 0):="00000000";
   SIGNAL day    : STD_LOGIC_VECTOR(7 DOWNTO 0) :="00000000";
   SIGNAL week    : STD_LOGIC_VECTOR(3 DOWNTO 0);--星期
BEGIN
--大小月判断
U_month_day: month_day
   PORT MAP(
      CLK        =>CLK,--时钟
      RST        =>RST,--复位
      month      =>month(3 DOWNTO 0),--月
      day_max    =>day_max--月最大天数
   );
--万年历控制模块
U_calendar_ctrl: calendar_ctrl
   PORT MAP(
      CLK        =>CLK,--时钟
      RST        =>RST,--复位
      --月日调整按键
      day_add    =>day_add,--天加
      day_sub    =>day_sub,--天减
      month_add  =>month_add,--月加
      month_sub  =>month_sub,--月减
      day_max    =>day_max,----月最大天数
      
  year_h     =>year_h,--年高位
      year_l     =>year_l,--年低位
      month      =>month(3 DOWNTO 0),--月
  week       =>week,--星期
      day        =>day(4 DOWNTO 0)--天
   );
   
 --二进制转BCD码
year_h_BCD: BCD
   PORT MAP(
      clk     =>CLK,--时钟
      binary  =>year_h,--二进制输入
      Tens    =>year_h_bcd_H,--十位
      Ones    =>year_h_bcd_L --个位
   ); 
   
 --二进制转BCD码
year_l_BCD: BCD
   PORT MAP(
      clk     =>CLK,--时钟
      binary  =>year_l,--二进制输入
      Tens    =>year_l_bcd_H,--十位
      Ones    =>year_l_bcd_L --个位
   );
源代码

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值