Проектирование цифровых устройств с использованием ПЛИС (1055366), страница 6
Текст из файла (страница 6)
При использовании условной генерации благодаряконструкции IF генерация выполняется, если условие истинно.Пример конструкции GENERATE:Gen: BLOCK --двоичное деревоBEGINL1: CELL PORT MAP (Top, TBus(1), TBus(2)) ; --Top,Left,RightL2: FOR I IN 1 TO 7 GENERATEL3: FOR J IN 0 TO 2**I-1 GENERATEL5: CELL PORT MAP (TBus(2**I+J-1),TBus((2**I+J)*2-1), TBus(2**I+J)*2);END GENERATE ;END GENERATE ;END BLOCK Gen;2.6.
Последовательные операторыТакие операторы используются для описания алгоритма функционирования параллельных процессов и подпрограмм. Их исполнение происходит в той последовательности, в которой они описаны в программе. Последовательными операторами являются:38• оператор WAIT;• оператор-ловушка ASSERT и оператор сообщения REPORT;• оператор присваивания сигнала;• оператор присваивания переменной;• вызов процедуры;• оператор IF;• оператор CASE;• оператор цикла LOOP;• оператор NEXT;• оператор EXIT;• оператор RETURN;• пустой оператор NULL.Оператор ожидания WAITЭтот оператор дает возможность приостановить исполнениепроцесса или подпрограммы:<ОЖИДАНИЕ> ::=[ <МЕТКА :] WAIT [ON <СПИСОК ЧУВСТВИТЕЛЬНОСТИ> ][UNTIL <УСЛОВИЕ> ] [FOR <ЗАДЕРЖКА> ];Опция ON позволяет описать список сигналов, изменение состояния которых ожидается; опция UNTIL — описать ожиданиесложного события, выраженного в виде условия; опция FOR —описать временнýю задержку.Пример использования оператора WAIT:WAIT ON Clk;Последовательный оператор-ловушка ASSERTЭтот оператор, как и параллельный оператор-ловушка, используется в качестве средства отладки в процессе моделирования:<ЛОВУШКА> ::=[<МЕТКА> :] ASSERT <ВЫРАЖЕНИЕ> [REPORT <СООБЩЕНИЕ>][SEVERITY <ТИП СООСБЩЕНИЯ>];Сообщение будет выдано при ложном значении выражения.Тип сообщения влияет на дальнейший ход моделирования.
Конст39рукция <Тип сообщения> может принимать значения: NOTE,WARNING, ERROR, FAILURE.Оператор сообщения может использоваться независимо отоператора ASSERT:<СООБЩЕНИЕ> ::=[ МЕТКА :] REPORT <СТРОКА СООБЩЕНИЯ>[ SEVERITY <ТИП СООБЩЕНИЯ> ] ;Пример использования операторов ASSERT и REPORT:ASSERT (IRDY_N = '0')REPORT "TARGET DEVICE: FRAME SIGNAL DEASSERTION ERROR.IRDY IS NOT ASSERTED."SEVERITY ERROR;Последовательный оператор присваивания сигналаЭтот оператор служит для изменения значения сигнала и используется внутри процесса.Синтаксис оператора присваивания сигнала:<ПРИСВАИВАНИЕ СИГНАЛА> ::=[ <МЕТКА> :] <СИГНАЛ> <= [ <СПОСОБ ЗАДЕРЖКИ> ] <ОБРАЗЕЦ> ;<СПОСОБ ЗАДЕРЖКИ> ::= TRANSPORT|[REJECT <ВРЕМЯ> ] INERTIAL<ОБРАЗЕЦ> ::=<ВЫРАЖЕНИЕ> [ AFTER <ВРЕМЯ> ]| NULL [ AFTER <ВРЕМЯ> ]Необязательная опция TRANSPORT позволяет описатьтранспортную задержку изменяемого сигнала относительносигнала-образца подобно тому, как сигналы задерживаются влиниях передачи.
Частота срабатывания описанных таким образом устройств бесконечна, а любой импульс передается вне зависимости от его длительности. Если не указан способ задержкиили указано ключевое слово INERTIAL, задержка считаетсяинерционной. Это означает, что устройство, реализующее указанную функцию присваивания, не будет передавать импульс,длительность которого меньше времени переключения схемыустройства. Опция REJECT позволяет описать минимальнуюдлительность импульса сигнала-образца, приводящего к изме40нению сигнала. При импульсах меньшей длительности присваивание не производится.Пример присваивания сигнала:P3 <= P1 AFTER DELAY;OUTPUT_PIN <= TRANSPORT INPUT_PIN AFTER 10 NS;Оператор присваивания переменнойОператор присваивания переменной в языке VHDL подобеноператору присваивания в языках программирования.Синтаксис оператора присваивания переменной:<ПРИСВАИВАНИЕ ПЕРЕМЕННОЙ> ::=[ <МЕТКА> :] <ПЕРЕМЕННАЯ> := <ВЫРАЖЕНИЕ>;Пример присваивания переменной:i := i - 1;Оператор вызова процедурыЭтот оператор служит для исполнения алгоритма, описанного впроцедуре или функции:<ВЫЗОВ ПОДПРОГРАММЫ> ::=[ <МЕТКА> : ] <ИМЯ ПРОЦЕДУРЫ ИЛИ ФУНКЦИИ>[ ( <СПИСОК ФОРМАЛЬНЫХ ПАРАМЕТРОВ>) ];Условный оператор IFУсловный оператор IF позволяет описать устройство, в алгоритме работы которого по результатам проверки заданных условий разрешается исполнение одной (или нуля) групп последовательных операторов.
Выполнение последовательных операторовразрешается, если заданное условие истинно.Синтаксис условного оператора:<УСЛОВНЫЙ ОПЕРАТОР> ::=[ <МЕТКА> :] IF <УСЛОВИЕ> THEN<ПОСЛЕДОВАТЕЛЬНЫЕ ОПЕРАТОРЫ>41{ ELSIF <УСЛОВИЕ> THEN<ПОСЛЕДОВАТЕЛЬНЫЕ ОПЕРАТОРЫ>}[ ELSE<ПОСЛЕДОВАТЕЛЬНЫЕ ОПЕРАТОРЫ>]END IF [ <МЕТКА> ];Пример описания шифратора с помощью условного оператора:LIBRARY ieee;USE ieee.std_logic_1164.ALL;ENTITY encoder ISPORT ( in1 :IN std_logic_vector(7 DOWNTO 0);out1 :OUT std_logic_vector(2 DOWNTO 0));END encoder;ARCHITECTURE behave OF encoder ISBEGINPROCESS (in1)BEGINIFin1(7) = '1' THEN out1 <= "111";ELSIF in1(6) = '1' THEN out1 <= "110";ELSIF in1(5) = '1' THEN out1 <= "101";ELSIF in1(4) = '1' THEN out1 <= "100";ELSIF in1(3) = '1' THEN out1 <= "011";ELSIF in1(2) = '1' THEN out1 <= "010";ELSIF in1(1) = '1' THEN out1 <= "001";ELSIF in1(0) = '1' THEN out1 <= "000";ELSE out1 <= "XXX";END IF;END PROCESS;END behave;Оператор выбора CASEЭтот оператор разрешает исполнение одного из многих альтернативных блоков последовательных операторов.
Выбор блокасреди альтернатив выполняется при совпадении значений выражения и образца.Синтаксис оператора выбора:<ВЫБОР> ::=[ <МЕТКА> : ]CASE <ВЫРАЖЕНИЕ> IS42WHEN <ОБРАЗЕЦ> => <ПОСЛЕДОВАТЕЛЬНЫЕ ОПЕРАТОРЫ>{ WHEN <ОБРАЗЕЦ> => <ПОСЛЕДОВАТЕЛЬНЫЕ ОПЕРАТОРЫ>}END CASE [ <МЕТКА> ] ;Пример использования оператора выбора при описании дешифратора:LIBRARY ieee;USE ieee.std_logic_1164.ALL;ENTITY decoder ISPORT ( inp: IN std_logic_vector(2 DOWNTO 0);outp: OUT std_logic_vector(7 DOWNTO 0));END decoder;ARCHITECTURE behave OF decoder ISBEGINPROCESS (inp) BEGINCASE inp ISWHEN "000" => outp <= "00000001";WHEN "001" => outp <= "00000010";WHEN "010" => outp <= "00000100";WHEN "011" => outp <= "00001000";WHEN "100" => outp <= "00010000";WHEN "101" => outp <= "00100000";WHEN "110" => outp <= "01000000";WHEN "111" => outp <= "10000000";WHEN OTHERS => outp <= "XXXXXXXX";END CASE;END PROCESS;END behave;Оператор цикла LOOPЭтот оператор позволяет описать часть устройства, алгоритмработы которой представляет собой повторяющиеся действия:<ЦИКЛ> ::=[ <МЕТКА> : ][ WHILE <УСЛОВИЕ> | FOR <ИДЕНТИФИКАТОР> IN <ДИАПАЗОН>]LOOP<ПОСЛЕДОВАТЕЛЬНЫЕ ОПЕРАТОРЫ>END LOOP [ <МЕТКА> ];43Пример использования оператора цикла при описании шифратора:LIBRARY ieee;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_arith.conv_std_logic_vector;ENTITY encoder ISPORT ( a, b, c, d, e, f, g, h : IN std_logic;out2, out1, out0 : OUT std_logic);END encoder;ARCHITECTURE behave OF encoder ISBEGINPROCESS (a, b, c, d, e, f, g, h)VARIABLE inputs : std_logic_vector (7 DOWNTO 0);VARIABLE i : INTEGER ;BEGININPUTS := (h, g, f, e, d, c, b, a);i := 7;WHILE i >= 0 AND inputs(i) /= '1' LOOPi := i - 1;END LOOP;IF ( i < 0) THENi := 0;END IF;-- conv_std_logic_vector (i, 3) - функция преобразования-- переменной типа integer в сигнал типа std_logic_vector-- Второй аргумент определяет размер вектора.(out2, out1, out0) <= conv_std_logic_vector (i, 3);END process;END behave;Операторы NEXT, EXIT, RETURN, NULLОператор NEXT применяется для того, чтобы завершить выполнение текущей итерации цикла LOOP:<СЛЕДУЮЩИЙ> ::=[ <МЕТКА>: ] NEXT [ <МЕТКА ЦИКЛА> ] [ WHEN <УСЛОВИЕ> ] ;Текущая итерация цикла завершается, если условие истинноили если конструкция WHEN не используется.Оператор EXIT применяется для того, чтобы остановить выполнение цикла LOOP, в котором этот оператор находится:44<ВЫХОД>::=[ <МЕТКА> : ] EXIT [ <МЕТКА ЦИКЛА> ] [ WHEN <УСЛОВИЕ> ] ;Оператор возврата RETURN используется для завершения выполнения функции или процедуры и возврата результата.ВОЗВРАТ ::=[ МЕТКА : ] RETURN [ ВЫРАЖЕНИЕ ] ;Пример использования оператора EXIT и RETURN при описании настраиваемого конъюнктора:ENTITY AndGate ISGENERIC (N: Natural := 2);PORT ( Inputs: IN Bit_Vector (1 TO N);Result: OUT Bit) ;END entity AndGate ;ARCHITECTURE Behavior OF AndGate ISBEGINPROCESS (Inputs)VARIABLE Temp: Bit;BEGINTemp := '1';FOR i IN Inputs'range LOOPIF Inputs(i) = '0' THENTemp := '0';EXIT;END IF;END LOOP;Result <= Temp AFTER 10 ns;END PROCESS;END BEHAVIOR;Пустой оператор NULL используется для явного указания нато, что никакие действия не выполняются.
Наиболее оправданноиспользование NULL внутри оператора выбора CASE.2.7. Пример описания устройств с тремя состояниями выходовПотребность в устройствах с тремя состояниями выходов связана с использованием магистрально-модульных систем. Реализация выходов с третьим состоянием внутри кристалла ПЛИС со45пряжена с трудностями организации их безотказной работы: необходимо строго соблюдать условие, при котором общей магистралью в каждый момент времени управляет только один элемент(драйвер).