ОСНОВЫ ЯЗЫКА VHDL 1. Параллельные операторы 2 Параллельные операторы это такие, каждый из которых выполняется при любом изменении сигналов, используемых. - презентация

ОСНОВЫ ЯЗЫКА VHDL 1. Параллельные операторы 2 Параллельные операторы это такие, каждый из которых выполняется при любом изменении сигналов, используемых. - презентация

Презентация на тему: " ОСНОВЫ ЯЗЫКА VHDL 1. Параллельные операторы 2 Параллельные операторы это такие, каждый из которых выполняется при любом изменении сигналов, используемых." — Транскрипт:

1 ОСНОВЫ ЯЗЫКА VHDL 1

2 Параллельные операторы 2 Параллельные операторы это такие, каждый из которых выполняется при любом изменении сигналов, используемых в качестве его исходных данных. Результаты исполнения оператора доступны для других параллельных операторов не ранее, чем будут выполнены все операторы, инициализированные общим событием (а может быть и позже, если присутствуют выражения задержки). В языке VHDL к классу параллельных операторов относятся: :: = | Оператор процесса PROCESS уже рассматривался. Оператор процесса начинает исполняться при изменении сигналов, входящих в список чувствительности (при отсутствии такого списка - безусловно после выполнения всех вложенных операторов), а результаты его исполнения доступны другим параллельным операторам только после исполнения всех операторов, инициируемых теми же событиями, в том числе процессов.

3 Параллельные операторы 3 Параллельное присваивание Параллельное присваивание определено в трех различных формах: ::= [ : ] | [ : ] По синтаксису и правилам исполнения безусловное параллельное присваивание совпадает с последовательным присваиванием сигналу. Варианты различаются по локализации в программе и характеризуются различными условиями исполнения. Безусловное параллельное присваивание. Основные отличия от оператора последовательного присваивания: параллельное присваивание локализуется в общем разделе архитектурного тела, а последовательное - только в теле процесса; последовательное присваивание сигналу выполняется после того, как инициировано исполнение процесса и выполнены все предшествующие операторы в теле процесса; оператор параллельного присваивания выполняется сразу (с точки зрения модельного времени) после изменения сигналов в правой части этого оператора.

4 Параллельные операторы 4 Параллельное присваивание ::= [ : ] | [ : ] Условное присваивание и присваивание по выбору. Операторы во многом сходны с условным оператором и оператором выбора. В отличии от условного оператора и оператора выбора, в которых условие может задавать исполнение последовательности действий, в операторах присваивания возможно только присвоение одного значения. ::= ] « WHEN ELSE » ; Пример 1. Двухвходовой буфер с тремя состояниями на выходе Z_out

5 Параллельные операторы 5 Параллельное присваивание Важно отметить, что если условный оператор IF и оператор выбора CASE не могут выполняться над данными, вырабатываемыми модулями, представленными различными операторами процесса. Пусть, например, три блока (процесса) работают параллельно с выходом на общую шину через буфер с тремя состояниями. Причем выбор подключаемого модуля задается сигналом, подаваемым на порт Chanel_select. Программный модуль, описывающий такой буфер, представлен в примере 3. Пример 3 ENTITY three_charme1 IS PORT ( data_in: IN integer; Channel_select: IN integer RANGE 1 TO 3; z: OUT integer); END three_channel; ARCHITECTURE skeleton OF three_channel IS. SIGNAL datal, data2, data3 : integer; BEGIN WITH Channel_select SELECT z

6 Параллельные операторы 6 Оператор блока Оператор блока BLOCK, подобно оператору PROCESS, является составным оператором, тело которого включаёт несколько операторов, но, в данном случае, параллельных. Эти операторы инициируются не по последовательному, а по событийному принципу, а результаты их исполнения становятся доступны другим операторам как включенным в блок, так и размещенным в других блоках или "индивидуально", только после исполнения всех операторов, инициирован­ных одним событием. Объединение операторов в блоки обеспечивает следующие возможности: структуризация текста описания, т.е. возможность явного и наглядного выделения совокупности операторов, описывающих законченный функциональный узел; возможность объявления в блоке локальных типов, сигналов, подпрограмм и некоторых других локальных понятий; возможность приписывания всем или некоторым операторам блока общих, условий инициализации. ::= : BLOCK [ ( охранное выражение) ] [ IS ] [ ] BEGIN END BLOCK [ ];

7 Параллельные операторы 7 Оператор блока Охранное выражение - это любое выражение логического типа, аргументами которого являются сигналы. Любое изменение сигналов, входящих в охранное выражению, вызывает вычисление значения этого выражения и присвоение полученного значения предопределенной переменной GUARD. Область действия переменной GUARD - все тело блока, и она может использоваться как обычная логическая переменная во вложенных операторах блока. Например, узел выборки данных из тридцатидвухразрядного регистра на восьмиразрядную линию, в котором транслируется байт, указанный двухразрядным кодом номера byte_sel может быть представлен таким блоком: Пример 4 Select_byte: BLOCK (select='1' AND read=1) IS BEGIN dbus

8 Параллельные операторы 8 Оператор блока Охраняемый оператор присваивания использует значение переменной GUARD без явного указания условия в программе. Если GUARD =0, 'то исполнение операторов присваивания, содержащих ключевое слово GUARDED, в таком блоке запрещено. Например, два модуля, подключенные к общей шине, могут быть представлены в одном архитектурном теле таким образом, как в примере 5. Пример 5 ARCHITECTURE guard_example ОF two_block IS SIGNAL data_bus: Std_logic_vector (N-1 DOWNTO 0); -- n определяется в разделе GENERIC проекта two_block; BEGIN unit1: BLOCK ( adr='0 AND read_data='1') SIGNAL data0 : Std_logic_vector (N-1 DOWNTO 0); BEGIN data_bus PROCESS BEGIN END PROCESS; END BLOCK unit1;;. unit2: BLOCK ( adr='1 AND read_data='1') SIGNAL data1: Std_logic_vector (N-1 DOWNTO 0); BEGIN data_bus PROCESS BEGIN END PROCESS; END BLOCK unit2;

9 Описание типовых дискретных устройств 9 Комбинационные логические схемы Известно много способов задания логической функции, из которых наибольшее распространение получили: алгебраическое представление; табличное представление; представление через бинарную декомпозицию; декомпозиция в априорно заданном базисе функций меньшего числа аргументов. Часто способ записи логических функций связан просто с опытом и личными предпочтениями разработчика. Язык VHDL представляет возможности выбора любой исходной формы задания без необходимости ручного перевода из одной формы в другую.

10 Описание типовых дискретных устройств 10 Комбинационные логические схемы Реализация комбинационной логической схемы на основе алгебраической формы записи логической функции интерпретируется оператором присваивания, в правой части которого записывается эквивалентное логическое выражение. Один из простейших способов описания - параллельные операторы присваивания. Программа (пример 6) представляет описание комбинационной логической схемы с двумя выходами, приведенной на рисунке, с использованием параллельных присваиваний. Пример 6 ENTITY simple_logic IS PORT (a,b,c,d: IN std_logic; out1, out2: OUT std_logic); END simple_logic; ARCHITECTURE concurrent OF simple_logic IS SIGNAL a_and_b: std_logic; BEGIN out 1

11 Описание типовых дискретных устройств 11 Комбинационные логические схемы Можно применять также и последовательную форму записи правила функционирования, используя оператор процесса. Архитектурное тело описанного в этой форме устройства, изображенного на рисунке, представлено в примере 7. Здесь важно отметить, что все входные сигналы комбинационной схемы должны быть включены в список чувствительности процесса с тем, чтобы любое их изменение вызывало исполнение оператора присваивания. Кроме того, в данном случае недопустимо a_and_b декларировать как сигнал. Это обязательно переменная, причем ее вычисление задается оператором, предшествующим операторам вычисления результирующих сигналов. В противном случае наблюдается некорректное представление поведения, заключающееся в том, что используются значения не непосредственно полученные в процессе текущего исполнения оператора PROCESS, а значения, вычисленные ранее после предыдущего изменения одного из входных сигналов. Пример 7 ARCHITECTURE sequential OF simple_logic IS -- SIGNAL a and b: std_logic; -- недопустимо в данном контексте BEGIN PROCESS (a,b,c,d) VARIABLE a_and_b: std_logic; BEGIN a_and_b : = a and b; out1

12 Описание типовых дискретных устройств 12 Комбинационные логические схемы Если a_and_b это все-таки сигнал (например, необходимый для передачи информации другим операторам программы или на порты), то следует выделить его вычисление в отдельный процесс или параллельный оператор, как показано в примере 8. Пример 8 ARCHITECTURE two_processes OF simple_logic IS SIGNAL a_and_b: std_logic; BEGIN PROCESS (a,b) BEGIN a_and_b

13 Описание типовых дискретных устройств 13 Комбинационные логические схемы Табличное представление логической функции можно отобразить в VHDL- программе несколькими способами. Первый способ состоит в представлении таблицы истинности логической функции в виде константного битового вектора, каждый i-й компонент которого представляет значения логической функции на наборе, численный эквивалент которого равен значению i. Очевидно, что "вычисление" функции сведется к выборке элемента массива, индекс которого равен численному эквиваленту входной кодовой комбинации. В функции conv_integer (vect), определенной в пакете std_logic_unsigned, аргумент относится к типу bit_vector или std_logic_vector произвольной длины, а возвращаемое значение - численный эквивалент двоичного кода аргумента (беззнаковое целое в диапазоне от 0 до 2 n -1, где n разрядность аргумента). В функции conv_std_logic_vector (arg1, n), определенной в пакете std_logic_arith, оба аргумента целые беззнаковые, а результат - n-разрядный двоичный код (std_logic_vector), являющийся двоичным эквивалентом arg1. Пример 9 содержит архитектурное тело, функционально соответствующее программе примера 6. В этом варианте результат определяется путем прямой выборки значения из таблицы по индексу, формируемому из входных сигналов, с помощью функции conv_integer. Пример 9 ARCHITECTURE table_ presentation OF simple_logic IS TYPE truth_table_4x1 IS ARRAY (0 TO 15) OF std_logic; CONSTANT FUNCTION1: truth_table_4x1 := ('0, '0, '0, '1', '0', '0', '0', '1',1, '0', '0, '1', 1', '1', '0', 1'); CONSTANT FUNCTION2: truth_table_4x1:= ('0, '1, '0, '1', '0', '0', '0', '1',1, '0', '0, '1', 1', '1', '0', 1'); SIGNAL digital_equivalent: integer RANGE 0 TO 15; BEGIN Digital_equivalent

14 Описание типовых дискретных устройств 14 Комбинационные логические схемы Для выхода out1 устройства (см. рисунок) оператор присваивания по выбору, описывающий поведение сигнала во времени, может выглядеть следующим образом: Пример 10 v out1 out1 out1 out1 out1 out1

15 Описание типовых дискретных устройств 15 Комбинационные логические схемы Представление функции в форме бинарного дерева решений основано на последовательном переходе от представления функции большого числа переменных через суперпозицию функций меньшего числа переменных. Теоретической основой метода является разложение Шеннона: Тогда вычисление первого терма разложения записывается как одна возможная альтернатива условного оператора или условного присваивания, а вычисление другого - как противоположная: IF x1='0' THEN z ; ELSE z ; ЕND IF; Подформулы разложения могут быть, в свою очередь, далее разложены:

📎📎📎📎📎📎📎📎📎📎