[an error occurred while processing this directive]
|
Я не понял про "последовательные конструкции" - как это их нет? Просто вместо указания события в списке чувствительности процесса указываются более конкретные вещи, такие как клок, асинхронный сброс, разрешение и прочие "свойства" того типа, которым объявлена переменная. Смысл в том, что типом при определении переменной является имя модуля (который может быть написан на любом языке). DFF, NODE и прочее являются хоть и примитивами, но модулями. Тот же NODE это есть просто соединение входа с выходом, а DFF - это вход на выход через flip-flop. Никто не остановит меня от определения переменной как массива арифметико-логических устройств например... Для понимания это может сразу сложновато, но открывает много удобных возможностей.
На мой взгляд такой подход гораздо более универсален, чем просто переменная типа "сигнал" (ну пусть даже верилоговские скупые reg и wire), с которым потом еще разбирайся, на что он и зачем реагирует.
Функции есть, то есть в роли функций могут выступать те-же любые модули. Я в праве написать (my_out1, my_out2) = my_module(my_input1, my_input2); Или a=DFF(in,my_clk);
То есть модуль это есть универсальная конструкция. И я его могу подключить как экземпляр, могу вызвать как функцию, а могу определить переменную типа модуль.
Вот например простенькое описание автомата (чисто последовательная (не комбинаторная) конструкция):
my_fsm : MACHINE WITH STATES (S0, S1, S2);my_fsm.clk=clock;
my_fsm.reset=reset;case (my_fsm) is
when S0 =>
if (input[]==12) then
my_fsm = S1;
elsif (input[]==15) then
my_fsm = S2;
end if;
when S1 =>
if (ack[0]) then
my_fsm = s0;
end if;
when S2 =>
if (ack[1]) then
my_fsm = s0;
end if;
when others =>
my_fsm = s0;
end case;
E-mail: info@telesys.ru