2013-09-21 184 views
0

问题:制作日历可以显示月份和月份? 写在组合和顺序VHDL构造?使日历显示VHDL的月份和月份?

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

感谢

+2

我很抱歉,但是这是一个什么样的愚蠢问题? VHDL不是这种用途的编程语言,它是描述HW如何工作的隐藏级语言。你必须有一个与现实老师脱节 – FarhadA

+0

@FarhadA除了上面提到的问题非常模糊,我没有看到这个问题没有错。当然可以用VHDL实现日历并输出到各种接口,例如简单的7段显示器。 – Josh

+0

我的第一个问题是,假设的输入是什么?你的设计如何知道它是哪一天?一旦开机,你需要能够编程日历吗?我的第二个问题是,预期的输出和格式是什么? – Josh

回答

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; 
相关问题