Программирование на зыке VHDL: Конспект лекций, страница 9

               function AddVectors (A:STD_LOGIC_VECTOR; B:STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR is

                              variable CARRY : STD_LOGIC:='0';

                              variable SUM : STD_LOGIC:='0';

                              constant SIZE : integer:=A'length;

                              variable RESULT : STD_LOGIC_VECTOR(SIZE-1 downto 0);

               begin

                              for i in A'reverse_range loop

                                             SUM:=A(i) xor B(i) xor (CARRY);

                                             CARRY:=(A(i) and B(i)) or ((A(i) or B(i)) and CARRY);

                                             RESULT(i):=SUM;

                              end loop;

                              return RESULT;

               end;

end MyPackage;

6. Синтез логических устройств средствами VHDL

Пусть требуется синтезировать мультиплексор:

Процесс синтеза предполагает трансляцию проекта с учетом аппаратных возможностей реального кристалла (RTL) и оптимизацию схемы. Проект должен учитывать возможности трансляции.

5.1. Два типа выражений Process

6.2. Последовательностные устройства

6.2.1. Регистр-защелка  LATCH

Регистр-защелка с потенциальным входом синхронизации создает режим прозрачности при gate=’1’:

6.2.2. D-триггер  DFF

Триггер с динамическим входом синхронизации. Срабатывает при изменении clk  и clk='1' (по переднему фронту clk):

6.2.3. Описание D-триггера с использованием выражения WAIT

6.2.4. Описание D-триггера с использованием выражения  clk'event and clk='1'

6.2.5. Описание D-триггера с использованием выражения rising_edge

6.2.6. D-триггер с асинхронным сбросом asynchronous clear

6.2.7. Использование нескольких триггеров



• Назначение сигналов a, b, q внутри выражения IF-THEN делает их зависимыми от фронта сигнала clk.

• Присвоение q<=b теперь не является зависимым от фронта сигнала Clk. Теперь модель описывает схему из двух триггеров!


• Значения переменных изменяются немедленно. Значения сигналов изменяются по переднему фронту сигнала clk. Получена модель схемы с единственным триггером!

6.2.8. Назначение переменных в последовательностных схемах

• Присвоение значения переменной внутри выражения IF-THEN, которое проверяет условие тактирования, не приводит к добавлению триггера.

• Присвоение значения переменной является элементом временного хранения информации и не влияет на аппаратную реализацию.

• Присвоение значения переменной может применяться в составе выражений для немедленной установки новой величины.

• Значение переменной может быть использовано для назначения сигнала.

5.2.8.1. Пример: модель счетчика с использованием переменной

7. Конечные автоматы - Finite State Machine (FSM)

7.1. Граф переходов - State Diagram

7.1.1. Перечислимый тип данных - Enumerated Data Type

Встроенные типы данных:

-  BIT

-  STD_LOGIC

-  INTEGER

К типам данных пользователя относится перечислимый тип (Enumerated Data Type):

TYPE <your_data_type> IS (items or values for your data type separated by commas)

7.1.2. Особенности написания кода VHDL для FSM

• Состояния автомата должны быть описаны как перечислимый тип:

TYPE state_type IS (idle, tapl, tap2, tap3, tap4);

• Объект, который хранит состояние автомата, должен быть сигналом объявленного выше типа:

SIGNAL filter: state_type;

• Для определения следующего состояния и условия перехода можно использовать выражение CASE  внутри выражения IF-THEN. Последнее должно проверять условие тактирования автомата.

• Следует помнить, что автоматы имплементируются с использованием регистров.

• Для определения выходов автомата можно использовать условные оператоы или операторы выбора варианта либо использовать второй оператор Case для определения выходов автомата.

7.1.2.1. Пример модели машины состояний