
- •САПР Xilinx Foundation Series
- •ВХОД В СИСТЕМУ
- •Открытие нового проекта
- •ВВОД И РЕДАКТИРОВАНИЕ СХЕМЫ
- •Как задать размер листа и присвоить ему имя
- •ОСНОВНЫЕ ОПЕРАЦИИ
- •Выбор элемента
- •Перемещение элемента или фрагмента схемы
- •Удаление элемента
- •Присвоение имени элементу
- •Рисование цепи
- •Перемещение цепи
- •Удаление цепи
- •Присвоение имени цепи
- •Переименование цепи
- •Удаление имени цепи
- •Задание констант 0 и 1
- •ШИННЫЕ СОЕДИНЕНИЯ
- •Пример простого шинного соединения
- •Шинные контакты элемента
- •Правила соединений
- •Простые и сложные шины
- •Примеры шинных соединений
- •Редактирование изображения шины
- •Контроль соединений
- •Сохранение схемы
- •ФОРМИРОВАНИЕ СОБСТВЕННОЙ БИБЛИОТЕКИ МОДЕЛЕЙ ЭЛЕМЕНТОВ
- •СОЗДАНИЕ МАКРОЭЛЕМЕНТА НА ОСНОВЕ БАЗОВЫХ ЭЛЕМЕНТОВ
- •Создание макроэлемента
- •Выбор макроэлемента из библиотеки
- •Редактирование УГО макроэлемента
- •ВВОД И ОТЛАДКА МАКРОЭЛЕМЕНТА НА VHDL
- •Ввод описания макроэлемента
- •Ввод описания архитектуры объекта с использованием Language Assistant
- •Сохранение документа
- •Проверка синтаксиса
- •Редактирование текста описания
- •Синтез макроэлемента
- •Создание VHDL-макроса
- •Выбор макроса из библиотеки
- •Редактирование УГО макроэлемента
- •Коррекция VHDL-описания макроэлемента
- •Автоматическое создание модели памяти
- •Редактирование начального состояния памяти
- •ФУНКЦИОНАЛЬНОЕ МОДЕЛИРОВАНИЕ СХЕМЫ
- •Окно моделирования схемы
- •Выбор контрольных точек схемы
- •Удаление контрольных точек из окна моделирования
- •Изменение порядка имен в окне моделирования
- •Задание входных воздействий
- •Задание синхросигналов
- •Как отсоединить генератор от внешнего входа схемы
- •Задание входных воздействий в окне моделирования
- •Выполнение моделирования схемы
- •Сохранение результатов моделирования
- •Моделирование макроэлемента
- •РЕАЛИЗАЦИЯ ПРОЕКТА НА ПЛИС
- •ПОДГОТОВКА СХЕМЫ ДЛЯ РАЗМЕЩЕНИЯ ЕЁ НА ПЛИС
- •Универсальный лабораторный стенд
- •Макроэлементы органов управления стенда
- •Подключение макроэлементов стенда к проекту
- •РАЗМЕЩЕНИЕ СХЕМЫ НА КРИСТАЛЛЕ
- •ВРЕМЕННОЕ МОДЕЛИРОВАНИЕ СХЕМЫ
- •Измерение задержек на временной диаграмме
- •ЗАГРУЗКА ПРОЕКТА В ПЛИС
- •ПРОСМОТР РЕЗУЛЬТАТОВ РАЗМЕЩЕНИЯ СХЕМЫ
- •ВВЕДЕНИЕ В ЯЗЫК VHDL
- •ВЫБРАННЫЕ МЕСТА ИЗ ОПИСАНИЯ ЯЗЫКА VHDL
- •Структура описания объекта проекта
- •Интерфейс объекта проекта
- •Синтаксис
- •Тип сигнала
- •О правилах записи программы
- •Описание архитектуры объекта
- •Синтаксис
- •Параллельные операторы
- •Стили описаний архитектур
- •Элементы потокового проектирования
- •Элементы поведенческого проектирования
- •VHDL-стандарты IEEE
- •Пакеты std_logic_arith, std_logic_signed u std_logic_unsigned
- •Библиотеки и пакеты
- •Логические элементы
- •Триггеры
- •Мультиплексоры
- •Дешифратор
- •Сумматоры
- •Счетчики
- •Регистры
- •Исходные данные
- •Составление программной модели АЛУ
- •СПИСОК ЛИТЕРАТУРЫ

Элементы потокового проектирования
В потоковых проектах используют параллельное присваивание. Параллельное присваивание определено в трех различных формах:
•безусловное параллельное присваивание;
•условное параллельное присваивание;
•параллельное присваивание по выбору.
Безусловное параллельное присваивание
В потоковых проектах используют два параллельных оператора; они приведены в листинге 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