Описание константы имеет следующий синтаксис:
constant name {,...} : subtype_indication := expression
Например:
constant address_length : integer:=4;
Описание переменной имеет следующий вид:
variable name{,...} : subtype_indication[:=expression];
Например:
variable counter : integer:=7;
Присваивание нового значения переменной:
[label:]name:=expression;
Например:
counter:=counter+1;
Описание сигналов имеет следующий синтаксис:
signal identifier {,...}:subtype_indication [:=expression];
Например:
signal flag1:bit;
signal flag2:bit:='1’;
ПОСЛЕДОВАТЕЛЬНЫЕ ОПЕРАТОРЫ ЯЗЫКА VHDL
Последовательные операторы VHDL могут использоваться в описании процессов, процедур и функций.
Их состав включает: оператор присваивания переменной (:=); оператор назначения сигналу (<=); оператор утверждения (assert); условный (if); выбора (case); цикла (loop); пустой оператор (null); оператор возврата процедуры-функции (return); оператор ожидания (wait), оператор report безусловное занесения информации в отчет, оператор завершения цикла (exit); Оператор прерывания текущей итерации цикла next.
Оператор условия if и оператор выбора case позволяют описывать совокупности действий, некоторые из которых исполняются при возникновении определенных условий.
Исполнение операторов, записанных в теле процесса, приостанавливается, если очередной оператор является оператором ожидания (фактически — оператором приостанова) wait. Прекращения состояния приостанова процесса зависит от условий, определенных в операторе wait.
Операторы повторения loop позволяют сокращенно записывать совокупность однотипных действий.
|
|
Оператор проверки assert служит для выявления специфических ситуаций, которые могут возникать в процессе компиляции и моделирования и выдачи в этих ситуациях сообщения разработчику.
СИНХРОННЫЕ И АСИНХРОННЫЕ ПРОЦЕССЫ И ИХ ОПИСАНИЕ НА ЯЗЫКЕ VHDL
Для описания триггерных схем в VHDL используются операторы wait и if вместе с процессом, использующим аттрибуты переднего или заднего фронтов синхроимпульса .
Ниже приведены примеры создания описаний срабатывания по фронту:
· (clk'event and clk='1') –аттрибут срабатывания по переднему фронту
· (clk'event and clk='0') -- аттрибут срабатывания по заднему фронту
· rising_edge(clock) –вызов функции по переднему фронту
· falling_edge(clock) -- вызов функции по заднему фронту
. Использование аттрибутов следует рекомендовать в тех случаях, когда система проектирования не поддерживает вызов функции по событию. Однако , использование функций позволяет избежать коллизий, связанных с переходом из неопределенного состояния, поскольку функция определяет только переходы уровней (из 0 в 1 или из 1 в 0), не не переход из неопределенного состояния в 1 или 0. Это становиться достаточно важным в случае использования многозначных типов данных, например std_logic, который имеет 9 возможных значений(U, X, 0, 1, Z, W, L, H, -). Далее рассмотрим пример описания триггера на языке VHDL.
|
|
Триггеры, тактируемые передним фронтом (Rising Edge Flip-Flop)
Ниже приводиться пример описания D триггера без цепей асинхронного сброса (reset) или предустановки (preset). На Рис. 1 приведено схемное обозначение рассматриваемого триггера.
Рис.6.1
Описание на VHDL
library IEEE;
use IEEE.std_logic_1164.all;
entity dff is
port (data, clk : in std_logic; q :out std_logic);
end dff;
architecture behav of dff is
begin
process (clk) begin
if (clk'event and clk = '1') then
q <= data;
end if;
end process;
end behav;
Пример асинхронного процесса – RS-триггер.
72. СПОСОБЫ ОПИСАНИЯ КОМБИНАЦИОННОЙ ЛОГИКИ НА ЯЗЫКЕ VHDL
Комбинационная логика - логика функционирования устройств комбинационного типа. У комбинационных устройств состояние выхода однозначно определяется набором входных сигналов.
При моделировании цифрового устройства без учета переходных состояний сигналы могут принимать два значения ‑логический ноль и логическую единицу. Тогда удобно в описании отнести одиночные данные либо к типу BOOLEAN, либо к типу BIT. Обычно тип BOOLEAN используется как средство записи обобщенных условий исполнения операторов (операции сравнения дают результат BOOLEAN), а BIT – для представления фактических значений уровней.
|
|
Параллельные операторы присваивания, а также последовательные присваивания, записанные в теле процессов,при реализации проекта в аппаратуру порождают комбинационные логические схемы. В случаях, когда логическая функция относительно проста, удобнее и нагляднее параллельные присваивания, но в сложных случаях, требующих декомпозиции, приходится использовать последовательные присваивания, «вкладывая» их в операторы IF или CASE.
Реализация комбинационных схем при реализации преобразований данных типа std_logic не отличается от схем, выполняющих такие же преобразования с данными типа BIT, но результаты моделирования могут отличаться, и моделирование с типом std_logic более адекватно. К тому же тип std_logic позволяет описывать шинные соединения, а синтезаторы интерпретируют эти соединения включением соответствующих буферных схем. Пусть, например, проектируется арифметико-логическое устройство, для которого определены такие операции: add (сложение), subb (вычитание), and (поразрядное И), or (поразрядное ИЛИ), not (инверсия), copy (повторение одного из входов).
Тогда требуется ввести тип таких данных и управляющие сигналы этого типа:
|
|
TYPE instruction is (add, subb, and, or, not, copy);
SIGNAL current_instruction: instruction;
Теперь правило функционирования арифметико-логического устройства будет описываться приблизительно так:
CASE current_instruction IS
WHEN add =>< описание варианта реализации сложения>;
WHEN subb =>< описание варианта реализации вычитания>;
WHEN and =>< описание варианта реализации поразрядного И>;
END CASE;
Практически будет синтезирована логическая схема, входами которой будут собственно преобразуемые данные, а также биты кода инструкции.
Дата добавления: 2020-04-08; просмотров: 167; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!