Описание константы имеет следующий синтаксис:



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; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!