Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
vhdl.doc
Скачиваний:
3
Добавлен:
01.04.2025
Размер:
396 Кб
Скачать
☆

Операторы vhdl

- а кто такие опсосы? - это операторы сотовой связи.

Как и данные, операторы в языке VHDL могут быть синтезируемыми и нет. Кроме того, операторы принято делить на последовательные и параллельные, простые и составные. Как говорилось выше, мы не пытаемся написать учебник по VHDL и не будем подробно рассматривать каждый оператор. Приведем только несколько примеров.

Последовательные операторы в VHDL (не надо путать с последовательной логикой) определяют алгоритмы выполнения подпрограмм и процессов. Они выполняются в том порядке, в каком расположены в VHDL-коде, отсюда и название такое. Одно важное замечание: все последовательные операторы могут использоваться только в теле процесса, функции или процедуры. К последовательным операторам языка VHDL относятся следующие операторы:

  • assert (последовательный);

  • case;

  • exit;

  • if;

  • loop;

  • next;

  • null;

  • report;

  • return;

  • wait;

  • последовательные операторы присваивания.

Примеры использования последовательных операторов:

  • -- Использование операторов loop, next, exit, if, присваивание

  • -- Несинтезируемый фрагмент VHDL-кода подсчитывает кол-во несовпадающих бит в двух массивах

  • neq := 0;

  • L1 : for i in 0 to 31 loop

  •    next L1 when mem1(i) = mem2(i);

  •    for j in 7 downto 0 loop

  •        crash := 1;

  •        exit L1 when (mem1(i)(j) = 'X' or mem2(i)(j) = 'X');

  •        crash := 0;

  •        if (mem1(i)(j) /= mem2(i)(j)) then neq := neq+1;

  •    end loop;

  • end loop L1;

  • -- Использование операторов wait, case, if

  • -- Синтезируемый фрагмент VHDL-кода управляет состояниями сфетофора

  • process begin

  •    wait until clk;

  •    if (trig = '1') then

  •       case state is

  •           when red => state <= green;

  •           when green => state <= yellow;

  •           when yellow => state <= red;

  •        end case;

  •    end if;

  • end process;

Параллельные операторы в VHDL используются для определения блоков и процессов, которые описывают общее поведение или структуру проекта. Параллельные операторы VHDL, как следует из названия, выполняются (или не выполняются) параллельно друг другу и независимо от расположения в VHDL-коде. К таким операторам относятся:

  • assert (параллельный);

  • block;

  • generate;

  • process;

  • применение компонентов (port map ...);

  • параллельные операторы присваивания.

Примеры использования оператора block:

  • -- Пример защелки с использованием охранного выражения

  • L1: block (LE = '1')

  • begin

  • Q <= guarded D; -- Выполнится только при LE = '1'

  • end block L1;

  • -- Пример простых блоков

  • BLOCK1: block

  • signal Q : std_logic;-- Этот сигнал Q виден только в BLOCK1

  • begin

  • Q <= A and B;

  • end block BLOCK1;

  • -----------------------------------

  • BLOCK2: block

  • signal Q : std_logic;-- Этот сигнал Q виден только в BLOCK2

  • begin

  • Q <= C and D;

  • end block BLOCK2;

  • -- Пример вложенных блоков

  • BLOCK1: block

  • signal Q : std_logic;-- Этот сигнал Q виден в BLOCK1 и в BLOCK2

  • begin

  • Q <= A and B;

  • -----------------------------------

  •    BLOCK2: block

  •    signal Q1 : std_logic;-- Этот сигнал Q1 виден только в BLOCK2

  •    begin

  •    Q1 <= Q and C;

  •    end block BLOCK2;

  • -----------------------------------

  • end block BLOCK1;

Следует отметить, что охранные блоки не синтезируются ни одним из известных автору синтезатором. Другие виды блоков нормально синтезируются, но и без них можно вполне обходиться. Во всяком случае, автор, кроме как в примерах, больше нигде не встречал применение блоков. Хотя на вкус и цвет...

Остальные параллельные операторы языка VHDL встретятся в последующих разделах, и мы не будем рассматривать их в этом разделе.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]