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

дить внутренний сигнал IQ, определив выходной сигнал Q как buffer.
•Вход R является асинхронным; поскольку этот сигнал входит
всписок чувствительности процесса, он проверяется всякий раз, когда претерпевает изменение.
•Для сдвига применен оператор конкатенации (сцепления) &.
Конкатенация (объединение строк). К одномерным массивам
можно применять конкатенацию, в результате которой элементы правого операнда добавляются в конец левого. Например:
"abc" & "df" = "abcdf".
Пример описания двоичного трехразрядного счетчика приведен в листинге 24. Здесь выходной сигнал Q определен как buffer. Это позволило отказаться от использования внутреннего сигнала.
Листинг 24. VHDL-программа для двоичного счетчика
entity counter is port (
clk, r: in BIT;
Q: buffer INTEGER range 0 to 7
);
end counter;
architecture counter_arch of counter is begin
process (r,clk) begin
if r='1' then Q <= 0;
elsif CLK'event and CLK='1' then Q <= Q + 1; end if;
end process; end counter_arch;
VHDL-стандарты IEEE
Проектирование арифметико-логического устройства требует использования арифметических операций. Хотя язык VHDL имеет
129
встроенные операторы сложения (+) и вычитания (–), но они работают только с целыми и действительными числами и физическими типами. В частности, они не работают с типами BIT_VECTOR и с типом STD_LOGIC_VECTOR стандарта IEEE. Язык VHDL допус-
кает арифметические операции над двоичными и булевыми векторами только при подключении специальных пакетов.
Язык VHDL предоставляет замечательную возможность расширять типы данных и множество функций. Это важное свойство, поскольку встроенные типы BIT и BIT_VECTOR, в действительности, вовсе не адекватны требованиям моделирования реальных схем, когда обрабатываемые сигналы могут соответствовать третьему состоянию, а также быть неизвестными, безразличными и меняющейся интенсивности.
Поэтому вскоре после формализации языка в стандарте IEEE 1076 коммерческие поставщики начали вводить свои собственные встроенные типы данных, чтобы оперировать логическими величинами, отличающимися от 0 и 1. У разных поставщиков были, конечно, различные определения для этих расширенных типов, из-за чего началось возведение «Вавилонской башни».
Чтобы избежать этого, Институтом инженеров по электротехнике и электронике был разработан стандартный логический пакет 1164 (std_logic_1164), девятизначная логическая система которого удовлетворяет большую часть потребностей проектировщиков. За этим пакетом позднее последовал стандарт 1076-3, который содержит несколько пакетов со стандартными типами и операциями для векторов STD_LOGIC, интерпретируемых как целые числа со знаком и без знака. Эти пакеты включают:
std_logic_arith, std_logic_signed, std_logic_unsigned.
Следование стандартам IEEE гарантирует разработчикам высокую степень переносимости их проектов и возможность их взаимодействия. Последнее становится все более важным, так как переход на очень большие специализированные ИС делает необходимой кооперацию не только многих проектировщиков, но также и многих поставщиков, каждый из которых вносит свой вклад в создаваемую по кусочкам «систему в одном кристалле».
130
Пакеты std_logic_arith, std_logic_signed u std_logic_unsigned
Эти пакеты предназначены для стандартизации и упрощения программирования и моделирования моделей цифровых устройств, в которых выполняются арифметические операции, а также для обеспечения последующего синтеза логических схем этих моделей.
В пакете std_logic_arith определены типы unsigned и signed как векторы элементов типа std_logic и подтип small_int типа integer, a также ряд арифметических функций, функций сравнения и сдвига над операндами этих типов.
Типы UNSIGNED и SIGNED имеют такое же определение, как и bit_vector, но для них разработан набор функций, который позволяет интерпретировать их значения как числовые. Тип UNSIGNED интерпретируется как двоичное представление числа без знака. Старшие разряды в представлении находятся слева. Тип SIGNED интерпретируется как двоичное представление числа со знаком в дополнительном коде. Старшие разряды в представлении также находятся слева. Самый левый разряд представляет знак ('0' соответствует '+', '1' — '-'). Тип small_int состоит из двух целых чисел: 0 и 1.
В пакете определены арифметические функции '+', '-', '*', abs, а также все функции сравнения для операндов типа unsigned, signed, small_int и integer в различном их со-
четании (табл. 3 — 5). Причем векторы операндов могут иметь разные диапазоны. Например, если объявлены:
constant |
A:signed(4 downto 0):="11100"; |
-- число -4 |
constant |
B:unsigned(3 downto 1):="101"; |
-- число 5 |
то результаты различных функций будут следующие:
А+7 = "00011", А+B = "00001", А−B = "10111", A*3 = "01111", (А=B) = false, (А<B) = true.
131
|
|
|
Таблица 3 |
|
|
Пакет std logic_arith. Арифметические операторы |
|||
|
|
|
|
|
Оператор |
Тип левого |
Тип правого |
Тип результата |
|
операнда |
операнда |
|||
|
|
|||
+,— |
Unsigned |
Unsigned |
Unsigned |
|
+,— |
Signed |
Signed |
Signed |
|
+,— |
Unsigned |
Signed |
Signed |
|
+,— |
Signed |
Unsigned |
Signed |
|
+,— |
Unsigned |
Integer |
Unsigned |
|
+,— |
Integer |
Unsigned |
Unsigned |
|
+,— |
Signed |
Integer |
Signed |
|
+,— |
Integer |
Signed |
Signed |
|
+,— |
Unsigned |
Std_ulogic |
Unsigned |
|
+,— |
Std_ulogic |
Unsigned |
Unsigned |
|
+,— |
Signed |
Std_ulogic |
Signed |
|
+,— |
Std_ulogic |
Signed |
Signed |
|
+,—,* |
Unsigned |
Unsigned |
Std_logic_vector |
|
+,—,* |
Signed |
Signed |
Std_logic_vector |
|
+,—,* |
Signed |
Unsigned |
Std_logic_vector |
|
+,—,* |
Unsigned |
Signed |
Std_logic_vector |
|
+,— |
Integer |
Unsigned |
Std_logic_vector |
|
+,— |
Integer |
Signed |
Std_logic_vector |
|
+,— |
Signed |
Integer |
Std_logic_vector |
|
+,— |
Unsigned |
Std_ulogic |
Std_logic_vector |
|
+,— |
Std_ulogic |
Unsigned |
Std_logic_vector |
|
+,— |
Signed |
Std_ulogic |
Std_logic_vector |
|
+,— |
Std_ulogic |
Signed |
Std_logic_vector |
|
+ |
Unsigned |
- |
Unsigned |
|
+,—,ABS |
Signed |
- |
Signed |
|
+ |
Unsigned |
- |
Std_logic_vector |
|
+,—,ABS |
Signed |
- |
Std_logic_vector |
132

|
|
|
Таблица 4 |
|
Пакет std logic_arith. Операторы сдвига |
|
|
|
|
|
|
Оператор |
Тип левого операнда |
Тип правого операнда |
Тип результата |
(количество позиций) |
|||
|
|
|
Unsigned |
shl, shr |
Unsigned |
Unsigned |
|
shl, shr |
Signed |
Unsigned |
Signed |
Примечание. shl — оператор сдвига влево. Первый операнд сдвигается влево на количество разрядов, указанное во втором операнде.
shr — оператор сдвига вправо. Первый операнд сдвигается вправо на количество разрядов, указанное во втором операнде.
|
|
|
|
Таблица 5 |
Пакет std logic_arith. Операторы сравнения |
|
|||
|
|
|
|
|
Оператор |
Тип левого |
Тип правого |
|
Тип результата |
операнда |
операнда |
|
||
|
|
|
||
|
|
|
|
Boolean |
<,<=,>,>=,=,/= |
Unsigned |
Unsigned |
|
|
<,<=,>,>=,=,/= |
Unsigned |
Signed |
|
Boolean |
<,<=,>,>=,=,/= |
Signed |
Unsigned |
|
Boolean |
<,<=,>,>=,=,/= |
Signed |
Signed |
|
Boolean |
<,<=,>,>=,=,/= |
Unsigned |
Integer |
|
Boolean |
<,<=,>,>=,=,/= |
Integer |
Unsigned |
|
Boolean |
<,<=,>,>=,=,/= |
Signed |
Integer |
|
Boolean |
<,<=,>,>=,=,/= |
Integer |
Signed |
|
Boolean |
Функция shr выполняет сдвиг вправо без учета знака операнда типа unsigned или с учетом знака операнда типа signed на количество разрядов, задаваемое вторым операндом типа unsigned. Аналогично функция shl выполняет сдвиг влево. Например, для констант из предыдущего примера:
SHR(A,B-4) = "11110", |
SHL(A,B-3) = "10000". |
133