在VHDL中制作显示月份数和月份的日历?

时间:2013-09-21 17:44:52

标签: calendar vhdl fpga encoder decoder

问题:制作显示月份编号和月份日期的日历? 在组合和顺序VHDL结构中写两个?

我是这个VHDL的新手,周一我有一个测验..任何人都知道从哪里开始以及如何开始用VHDL编写编程? 任何帮助将不胜感激..

由于

1 个答案:

答案 0 :(得分:0)

这可以帮助您开始完成作业。它接受月份的二进制值1-12,如果是闰年,则输出该月份的天数。这是在没有时钟(组合/异步逻辑)的情况下完成的。

我认为您可以采用这一点并确定使用顺序语句根据您的分配要求创建替代实现的最佳方法。

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity Days_In_Month is
   port (
      I_MONTH         : in  unsigned(3 downto 0);
      I_LEAP_YEAR     : in  std_logic;
      O_DAYS_IN_MONTH : out unsigned(4 downto 0)
      );
end entity Days_In_Month;

architecture Days_In_Month_combinatorial of Days_In_Month is

   signal month_30d : std_logic;
   signal month_28d : std_logic;
   signal month_31d : std_logic;
   signal month_29d : std_logic;

begin

   month_30d <= '1' when I_MONTH = 9 or
                         I_MONTH = 4 or
                         I_MONTH = 6 or
                         I_MONTH = 11
                    else '0';

   month_28d <= '1' when I_MONTH = 2 and
                         I_LEAP_YEAR = '0'
                    else '0';
   month_29d <= '1' when I_MONTH = 2 and
                         I_LEAP_YEAR = '1'
                    else '0';
   month_31d <= '1' when month_30d = '0' and
                         month_28d = '0' and
                         month_29d = '0'
                    else '0';

   O_DAYS_IN_MONTH <= to_unsigned(30,O_DAYS_IN_MONTH'length) when month_30d = '1' else
                      to_unsigned(28,O_DAYS_IN_MONTH'length) when month_28d = '1' else
                      to_unsigned(29,O_DAYS_IN_MONTH'length) when month_29d = '1' else
                      to_unsigned(31,O_DAYS_IN_MONTH'length) when month_31d = '1'
                      else to_unsigned(0,O_DAYS_IN_MONTH'length);                   

end architecture Days_In_Month_combinatorial;