ОПИСАНИЕ ТИПОВЫХ ФРАГМЕНТОВ ВЫЧИСЛИТЕЛЬНОЙ ТЕХНИКИ

Весьма существенным вопросом, интересующим разработчика, является наличие в языке возможностей и/или средств, ориентированных на описание типовых узлов и устройств цифровой техники. В соответствии с традиционным разбиением необходимо оценить возможности описания следующих типов узлов: комбинационных схем, регистровых схем и цифровых автоматов.

Функционирование комбинационных схем удобно описывать достаточно широким классом средств: арифметическими и логическими выражениями, условным или селективным (по выбору) назначением сигналу. В разделе операторов процесса допустимо использование операторов условия (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 достаточно сложных систем.