Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
схемотехника / Введение в инструментальные средства.pdf
Скачиваний:
168
Добавлен:
27.03.2016
Размер:
1.94 Mб
Скачать

Элементы потокового проектирования

В потоковых проектах используют параллельное присваивание. Параллельное присваивание определено в трех различных формах:

безусловное параллельное присваивание;

условное параллельное присваивание;

параллельное присваивание по выбору.

Безусловное параллельное присваивание

В потоковых проектах используют два параллельных оператора; они приведены в листинге 6. Чаще всего используется первый из них; он называется параллельным сигнальным оператором при-

сваивания (concurrent signal-assignment statement). Его можно про-

честь так: «Сигнал с именем signal-name принимает значение выражения expression». Присвоение значения сигналу задают составным оператором “<=”.

Поскольку в языке VHDL необходимо строго соблюдать типы, тип выражения expression должен быть совместим с типом сигнала signal-name.

Листинг 6. Синтаксис параллельных сигнальных операторов присваивания

signal-name <= expression;

signal-name <= expression when boolean-expression else expression when boolean-expression else

. . .

expression when boolean-expression else expression;

Рассмотрим на примере дешифратора (рис. 110) различные варианты его описания в потоковом стиле. Приведенная схема дешифратора реализует следующие выражения:

D0 = A0 & A1 & E; D1 = A0 & A1 & E;

D2 = A0 & A1 & E; D3 = A0 & A1 & E.

112

а

б

Рис. 110. Условное графическое обозначение (а)

илогическая схема (б) дешифратора

Влистинге 7 представлена архитектура объекта для дешифратора, записанная в потоковой форме. При таком подходе вентили и соединения между ними в явном виде не указываются; вместо это-

го используют встроенные операторы языка VHDL and, or и not. Заметьте, что у оператора not самый высокий приоритет, так что для получения нужного результата можно не заключать в скобки подвыражение типа not А1.

Листинг 7. Потоковая архитектура для дешифратора

entity DECODER

is

 

 

 

port (

 

 

 

 

 

A0,A1,E: in BIT;

 

 

);

D0,D1,D2,D3: out BIT

end DECODER;

 

 

 

architecture DECODER_arch

of DECODER is

begin

 

and not A1

and E;

D0

<= not A0

D1

<=

A0

and not A1

and E;

D2

<= not A0

and

A1

and E;

D3

<=

A0

and

A1

and E;

end DECODER_arch;

 

 

 

 

 

 

 

113

Логические операторы and, or, nand, nor, xor, хпоr имеют одинаковое старшинство и выполняются слева направо в выражениях. В сложных логических выражениях порядок выполнения операторов регулируется скобками.

Листинг 8 иллюстрирует использование векторного представления сигналов. Из сопоставления листингов 7 и 8 легко установить отличия в употреблении данной формы представления сигналов.

Листинг 8. Потоковая архитектура для дешифратора

entity decoder is port (

A: in BIT_VECTOR (1 downto 0); E: in BIT;

D: out BIT_VECTOR (0 to 3)

);

end decoder;

architecture decoder_arch of decoder is

begin

<= not A(0)

and not A(1)

and E;

D(0)

D(1)

<=

A(0)

and not A(1)

and E;

D(2)

<= not A(0)

and

A(1)

and

E;

D(3)

<=

A(0)

and

A(1)

and

E;

end decoder_arch;

Условное параллельное присваивание

Можно также воспользоваться второй, условной формой парал-

лельного сигнального оператора присваивания (conditional signalassignment statement) с ключевыми словами when и else (см. листинг 6). В этом случае в выражении boolean-expression отдельные булевы термы объединяют посредством встроенных булевых операторов языка VHDL, таких, как and, or и not. Под булевыми термами обычно понимают булевы переменные или результаты сравнения, выполняемого с помощью операторов отношений

(relational operators) =, /= (не равно), >, >=, < и <=.

Листинг 9 содержит пример использования условных параллельных операторов присваивания. Результаты сравнения объеди-

114

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

Листинг 9. Архитектура дешифратора, в которой использованы условные присваивания

entity DECODER is port (

A: in BIT_VECTOR (1 downto 0); E: in BIT;

D: out BIT_VECTOR (3 downto 0)

);

end DECODER;

architecture DECODER_arch of DECODER is begin

d(0) <= '1' when A="00" and E='1' else '0';

D(1) <= '1' when A="01" and E='1' else '0';

d(2) <= '1' when A="10" and e='1' else '0';

D(3) <= '1' when A="11" and e='1' else '0'; end DECODER_arch;

Обратите внимание на разницу в записи значений сигналов типов BIT и BIT_VECTOR. Значения сигналов типа BIT записываются в одинарных кавычках: ‘0’, ‘1’. Значения сигналов типа BIT_VECTOR записываются в двойных кавычках, например, “0110”. Это возвращает нас снова к строгому следованию типам в языке VHDL.

Еще один пример, приведенный в листинге 10, дополнит представление о возможном использовании условного параллельного оператора присваивания.

115

Листинг 10. Архитектура мультиплексора, в которой использовано условное присваивание

entity MUX is port (

D: in BIT_VECTOR (3 downto 0); A: in BIT_VECTOR (1 downto 0); F: out BIT

); end MUX;

architecture MUX_arch of MUX is begin

F <= D(0) when A="00" else D(1) when A="01" else D(2) when A="10" else D(3);

end MUX_arch;

Параллельное присваивание по выбору

Параллельный оператор присваивания другого рода — это изби-

рательное (по выбору) присваивание сигналу его значения (selected signal-assignment statement), синтаксис которого указан в листинге 11. Этот оператор вычисляет заданное выражение expression и присваивает сигналу с именем signal-name значение сигнала (signal-value), соответствующее той из альтернатив (choices), значение которой равно expression. Альтернативой в каждом предложении when может быть одиночное возможное значение expression или список значений, разделенных вертикальной чертой (|). Альтернативы choices в данном операторе должны быть взаимно исключающими и в совокупности включать все возможные случаи. В последнем предложении when можно воспользоваться ключевым словом others в качестве указания на все значения expression, которые еще не были упомянуты.

В листинге 12 продемонстрирован один из подходов к написанию программы дешифратора (см. рис. 110) на языке VHDL в стиле потокового проектирования с использованием избирательного

116

сигнального оператора присваивания. Адресные входы А(1 downto 0) и выходные сигналы D(3 downto 0) ради удобства чтения представлены в виде векторов. В операторе select перечислены четыре случая декодирования, в каждом из которых 4-разрядному внутреннему сигналу D_i присваивается соответствующая комбинация значений. Эта комбинация присваивается фактическому выходному сигналу схемы D только в том случае, когда сигнал на входе разрешения Е активен.

Листинг 11. Синтаксис избирательного сигнального оператора присваивания

with expression select

signal-name <= signal-value when choices, signal-value when choices,

. . .

signal-value when choices;

Листинг 12. Архитектура дешифратора, в которой используется присваивание сигналу его значения по выбору

entity DECODER is port (

A: in BIT_VECTOR (1 downto 0); E: in BIT;

D: out BIT_VECTOR (3 downto 0)

);

end DECODER;

architecture DECODER_arch of DECODER is signal D_i: BIT_VECTOR (3 downto 0); begin

with A select D_i <= "0001" when "00", "0010" when "01", "0100" when "10", "1000" when "11";

D <= D_i when E = '1' else "0000"; end DECODER_arch;

117

Рассмотрим еще один пример. Требуется спроектировать 3-раз- рядное устройства для обнаружения простых чисел. При заданной 3-разрядной двоичной комбинации на входе N = N2N1N0 схема, реализующая требуемую функцию, вырабатывает на выходе 1, если N = 1, 2, 3, 5, 7 и 0 — в противном случае. В архитектуре устройства для обнаружения простых чисел, приведенной в листинге 13, использован избирательный сигнальный оператор присваивания. Все альтернативы, для которых F равно 1, записаны в одном предложении when. В последнем предложении when используется ключевое слово others для указания на все другие значения, которые еще не были упомянуты.

Листинг 12. Архитектура устройства для обнаружения простых чисел, в которой используется присваивание сигналу его значения по выбору

entity KC is port (

N: in BIT_VECTOR (2 downto 0); F: out BIT

); end KC;

architecture KC_arch of KC is begin

with N select

F <= '1' when "001" | "010" | "011" | "101" | "111", '0' when others;

end KC_arch;

Ту же самую архитектуру можно слегка видоизменить, чтобы воспользоваться более удобной числовой интерпретацией N в определении функции. Применяя для сигналов на входе N тип INTEGER, можно записать альтернативу в терминах целых чисел, которые, как это можно видеть из листинга 14, являются простыми, что и требовалось. О таком варианте представления структуры можно говорить как о «поведенческом» описании, поскольку же-

118