2013-09-21 4 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;