Описание типовых фрагментов вычислительной техники
Весьма существенным вопросом, интересующим разработчика, является наличие в языке возможностей и/или средств, ориентированных на описание типовых узлов и устройств цифровой техники. В соответствии с традиционным разбиением необходимо оценить возможности описания следующих типов узлов: комбинационных схем, регистровых схем и цифровых автоматов.
Функционирование комбинационных схем удобно описывать достаточно широким классом средств: арифметическими и логическими выражениями, условным или селективным (по выбору) назначением сигналу. В разделе операторов процесса допустимо использование операторов условия (IF) и выбора (CASE). Входы и выходы схемы могут быть представлены в виде сигнала или переменной. Как правило, используются следующие типы данных: bit,bit_vector,std_logic_vector. Использование других типов данных может требовать определения функций взаимных преобразований. Пример образования схемы под именем exampale1, приведенный выше, как раз и соответствует представлению комбинационной схемы в языке VHDL..
Возможность иерархического построения проектов (плюс возможность организации пакетов для стандартных строительных кирпичиков пользовательских проектов) позволяет осуществлять проектирование в рамках привычных для разработчиков вычислительных систем элементов. Поведение триггерных элементов достаточно просто описывается средствами языка VHDL. Пользователь может создать систему элементов, наиболее точно отражающую поведение проектируемой системы. В практической деятельности используются следующие виды синхронизации триггеров: асинхронное управление, потенциальное управление или динамическое управление.
Поведение регистровых схем удобно описывать, используя либо процессное, либо блочное представление. При процессном представлении внутри оператора PROCESS обычно пользуются операторами условия (IF) и выбора (CASE). При блочном представлении возможно использование операторов условного назначения сигналу (<=…WHEN).
В качестве примера рассмотрим описание поведения триггера D типа "защелка", имеющего вход асинхронного сброса и срабатывающего по фронту тактирующего сигнала.
ENTITY d_ff IS—entity declaration
PORT (d,c,r:IN BIT;-port statement q:INOUT BIT);
END d_ff;
ARCHITECTURE one OF d_ff IS
architecture "one" of entity d_ff
BEGIN
beh_tr: BLOCK(c='1' OR r='1');
BEGIN
q<=GUARDED '0' WHEN r ='1'
ELSE d WHEN c='1' AND NOT c'STABLE
ELSE q;
END BLOCK beh_tr;
END one;
Наибольшее внимание при описании поведения регистровых схем необходимо уделять видам синхронизации входных сигналов (асинхронное, потенциальное или динамическое) и способам задания входных, выходных сигналов и внутренних состояний при описании многоразрядных схем (счетчиков, регистров сдвига и т. д.). для определения этих переменных или сигналов в многоразрядных схемах можно использовать понятие вектора или ограниченного целого (с диапазоном изменения, связанным с разрядностью схемы). Независимо от варианта описания поведения отдельных триггеров и средств, используемых для их объединения в регистровые структуры типа регистров, счетчиков и т. д., рассмотренный подход создает предпосылки для использования языка VHDL в качестве средства, позволяющего описывать вычислительные устройства в терминах и понятиях языка, обычно называемого языком регистровых передач.
Следующим типовым фрагментом, играющим очень важную роль в проектировании, является цифровой автомат. Основные разновидности поведения автоматов сводятся к автоматам Мили или Мура, хотя расширенные структурные возможности схем ПЛ привели
к широкому практическому распространению разновидности автоматов Мили — асинхронным автоматам Мили.
Наличие в языке возможности использования перечислительного типа данных позволяет ввести перечислительные типы данных «состояния», а при желании разработчика и типы данных «входы» и <выходы». Предпочтительной представляется процессная форма описания поведения автомата. В зависимости от типа используемого автомата его архитектура может включать от одного до четырех процессов. Оператор варианта целесообразно использовать в качестве основного каркаса процессов, для чего каждому состоянию автомата назначается вариант в операторе выбора. Для описания альтернативных вари антов формирования переходов и выходных сигналов (если это необходимо) обычно применяется условный оператор. Отдельный процесс может вводиться для описания процедуры тактирования и начальной установки автомата.
В качестве примера автомата рассмотрим автомат Мили. Пусть автомат задан таблицей переходов (табл. 8.1) и таблицей выходов (табл. 8.2), где в клетках таблицы переходов записаны состояния, в которые переходит автомат из исходного состояния при соответствующем входе, а в клетках таблицы выходов — выходные сигналы при тех же условиях. Нетрудно видеть, что приведенный пример соответствует реверсивному счетчику, причем УI и У2 соответствуют выдаче сигналов переноса.
Фрагмент VHDL-программы, описывающий такой автомат, имеет вид, приведенный в листинге 1. Предполагается, что перечислительный типа задан списком имен, переменные y и x объявлены в Еntitу блока, в котором определен данный процесс, и их тип задан списком имен-значений.
Процесс после задания исходного состояния (s<=s0) входит в бесконечно повторяющуюся петлю, в начале которой помещен оператор WAIT. Примененная конструкция оператора соответствует синхронному автомату, состояние которого изменяется по тактирующему сигналу p_clk, p_clk причем является глобальной переменной проекта.
Важно обратить внимание на то, что изменения состояний происходят в момент появления нарастающего фронта сигнала p_clk, так как запускающее событие определено как «появление единицы и наличие переходного процесса на входе р_сlk.
Синтаксическая конструкция p_clk'stable называется атрибутом сигнала. Атрибут сигнала может принимать значение «истинно» или «ложно» и характеризует некоторые свойства сигнала на момент моделирования (в данном контексте — переходный режим).
Использование в качестве условия продолжения процесса выражения "not p_clk'stable " соответствует реальной структуре устройства, реализующего автомат, в котором состояние отображается состоянием регистра. Так как этот регистр является одновременно датчиком информации о текущем состоянии и приемником нового значения, во избежание гонок необходимо использовать регистры с динамическим управлением, реагирующие на изменение сигнала, что и задается используемой конструкцией условия в операторе Wait.
Таблица 8.1 Таблица 8.2
Таблица переходов Таблица выходов
Листинг 1
— описано вне процесса
TYPE state IS (s0,s1,s2);
ТYРЕ input IS (x0,x1);
TYPE output IS (y0,y1,y2);
SIGNAL x: INPUT;
SIGNAL y_out:OUTPUT;
…………………..
PROCESS
SIGNAL s:state;
BEGIN
s<=s0;
LOOP
WAIT UNTILI (p_clk='1' AND NOT p_clk'stable);
— Реализация переходов
CASE s IS
WHEN s0=>IF x=x0 THEN s<=s0;
ELSEIF(x=x1) THEN s<=s1;
ELSE s<=s2;
END IF;
WHEN s1=>IF x=x0 THEN s<=s1;
ELSEIF x=x1 THEN s<=s2;
ELSE s<=s0;
END IF;
WHEN s2=>IF x=x0 THEN s<=s2;
ELSEIF x=x1 THEN s<=s3;
ELSE s<=s1;
END IF;
WHEN s3=>IF x=x0 THEN s<=s3;
ELSEIF x=x1 THEN S<=s0;
ELSE s<=s2;
END IF;
END CASE;
--Формирование выходов
IF (s=s3 AND x=x1) THEN y<=y1;
ELSEIF(s=s0 AND x=x2) THEN y<=y2;
ELSE y<=y0;
END IF;
END LOOP;
END PROCESS;
После вычисления нового состояния и выходных сигналов (обратите внимание на то, что сигналы вычисляются на основе состояний, которые были «перед» фронтом тактирующего сигнала, а не вычисленных в текущем цикле) программа переходит в состояние ожидания нового запускающего события.
Наличие определенных стереотипов и у проектировщиков, и у САПР для описания типовых фрагментов цифровой техники позволяют упростить написание и понимание описаний на языке VHDL достаточно сложных систем.