/
Автор: Антонов А.П.
Теги: компьютерные технологии программирование микропроцессоры цифровые устройства
ISBN: 5-93037-052-4
Год: 2001
Текст
А. П. Антонов
ЯЗЫК ОПИСАНИЯ
ЦИФРОВЫХ УСТРОЙСТВ
AlteraHDL
А. П. Антонов
ЯЗЫК
ОПИСАНИЯ ЦИФРОВЫХ
УСТРОЙСТВ AlteraHDL
Практический курс
Москва
Издательское
предприятие
РадиоСофт
2001
ББК 32.973-01
А72
УДК 681.3
А. П. Антонов
А72 Язык описания цифровых устройств AlteraHDL. Практический курс. —
М.: ИП РадиоСофт, 2001. — 224 с.: ил.
ISBN 5-93037-052-4
Книга посвящена языку описания цифровых устройств, интегрированному в пакет автоматиза-
ции проектирования MAX*plus II Рассматриваются как базовые концепции языка, так и вопросы
практического его использования для описания типичных операционных и управляющих уст-
ройств. Основу книги составил курс лекций, читаемых авторам студентам кафедры Автоматика
и Вычислительной Техника факультет© Технической Кибернетики Сонкт-Петербургского Государ-
ственного Технического Университете.
К книге прилагается CD-ROM, содержащий систему автоматизации проектирования —
пакет MAX+plus II.
Предназначена для инженерно-технических работников, специолизирующнхся в области
проектирования цифровых систем автоматики и вычислительной техники, а также студентов соот-
ветствующих специольностеи.
ББК 32.973-01
ISBN 5-93037-052-4
© А. П. Антонов. 2001
© ИП РодиоСофт. Оформление. 2001
Содержание
Предисловие......................................................................................5
Глава!. Введение ................................................................................8
Проект.........................................................................................9
Процедура проектирования в рамках пакета MAX+plus II......................................... 10
Стратегии проектирования .................................................................... 11
Глава II. Основы языка AHDL.................................................................... 13
Элементы языка .............................................................................. 13
Ключевые слова и идентификаторы .................................................................... 13
Символы .................................................................................. 1 3
Имена .................................................................................... 13
Группы ................................................................................... 16
Числа .................................................................................... 17
Выражения ............................................................................................................. 1 8
Примитивы .................................................................................24
Структура текстового описания.................................................................33
Общая структура ...........................................................................33
Title Statement (оператор заголовка) ......................................................33
Include Statement [оператор включения) ....................................................34
Constant Statement [оператор задания константы) ...........................................35
Define Statement (оператор обозначения) ...................................................35
Parameters Statement [оператор объявления параметров) .....................................36
Function Prototype Statement (оператор описания прототипа) ................................37
Options Statement (оператор задания опции) ................................................38
Assert Statement (оператор контроля) ......................................................39
Subdesign Section (раздел описания интерфейса модуля) .................................... 40
Variable Section (раздел переменных) ......................................................41
Logic Section (раздел описания логики) ....................................................41
Применение конструкций языка .................................................................42
Логические уравнения ..................................................................... 42
Переменные типа NODE ......................................................................43
Именованные операторы .....................................................................45
Группы .................................................................................................................... 46
Таблица истинности ..................................................................... 48
Оператор IF THEN...........................................................................49
Оператор CASE ............................................................................51
Базовые значения логических функций .......................................................52
Константы .................................................................................54
Оператор FOR GENERATE .....................................................................56
Параметры ............................................................................................................ 57
Оператор IF GENERATE ......................................................................58
Оператор ASSERT ................................................................................................. 59
Примитивы ............................................................................................................. 61
Прототип модуля ...........................................................................65
Глава!!!. Практическое использование языка AHDL ................................................69
Описание комбинационных схем..................................................................69
Шифратор ................................................................................. 69
Дешифратор ................................................................................71
Мультиплексор ............................................................................ 79
4
Содержание
Демультиплексор .................................................75
Преобразователь кода ............................................78
Компаратор ......................................................80
Сумматор ........................................................83
Шинные приемопередатчики ........................................86
Схемы монтажного «И» и «ИЛИ» ....................................................................... 94
Описание триггерных схем .........................................96
Регистры ........................................................96
Конечные автоматы ............................................. 106
Счетчики ......................................................1 20
Модули памяти .................................................1 38
Иерархическое описание .........................................145
Использование нелараметризированных модулей ................... 1 46
Использование параметризируемых модулей ........................ 148
Глава IV. Пример проектирования ...................................151
Техническое задание ............................................151
Структурная схема умножителя ...................................1 52
Модуль MUX4_2J .................................................. 154
Модуль Shifter..................................................159
Модуль Controller ..............................................161
МодульАссип» .................................................... 165
Модуль Counter .................................................167
Модуль Mult4x4..................................................169
Модуль MULT......................................................171
Приложение I. Менеджер пакета.....................................177
Иконы..........................................................178
Меню ..........................................................178
Приложение II. Графический редактор пакета ........................183
Окно графического редоктора ................................... 183
Иконы .........................................................1 84
Набор команд ................................................... 184
Ввод схемы ..................................................... 188
Приложение III. Текстовый редактор ................................194
Окно текстового редактора .................................... 194
Набор команд ................................................... 195
Приложение IV. Компилятор пакета .................................. 197
Окно компилятора ............................................. 197
Набор команд ................................................... 198
Назначение параметров компиляции...............................200
Приложение V. Исходные текстовые описания ........................216
Файл MUX4 2J.TDF ..............................................216
Файл SHIFTER.TDF ..............................................216
Файл CONTROL TDF ..............................................217
Файл ACCUM.TDF.................................................219
Файл COUNTER.TDF ..............................................220
Файл MUL.T4x4.TDF .............................................220
Файл MULLTDF ..................................................221
лолиила питаплтипл 999
Предисловие
Появление СБИС программируемой логики (СБИС ПЛ) сверхвысокой
логической емкости, развитие средств автоматизации проектирования
и уровень сложности создаваемых в настоящее время цифровых систем
предопределяют существенные изменения в методологии проектиро-
вания.
Так, широкое применение графического описания проектируемого
устройства, базирующееся на ручном и в большинстве случаев нефор-
мализованном, а импирическом, синтезе управляющих автоматов, оста-
ется в прошлом. На смену приходит другая методология, в основе ко-
торой лежат два ключевых момента:
Текстовое описание — применение высокоуровневых языковых
конструкций (языков описания аппаратуры) для задания алгорит-
ма работы создаваемого устройства.
Автоматический синтез — процедура формального перевода тек-
стового описания в схемное описание на заданном элементном
базисе, выполняемая системой автоматизации проектирования.
6 Предисловие
Поскольку применение этой методологии позволяет не только уско-
рить и удешевить процесс создания цифрового устройст ва, но и добить-
ся принципиально более высокой степени проработки проекта, то ста-
новится очевидно, почему разработчику необходимо знать и применять
в своей практической деятельности как языки описания аппаратуры
(HDL — Hardware Description Language), так и соответствующие сред-
ства автоматизации проектирования.
Однако многие разработчики и по настоящее время по-прежнему
продолжают придерживаться старых подходов. Во многом это вызвано
не только и, возможно, не столько нежеланием изменить привычный
стиль проектирования, а объективными причинами — сложностями, свя-
занными с адаптацией к подобным кардинальным изменениям в техно-
логии проектирования.
Для инженера, желающего начать использовать в своей практической
деятельности современные средства проектирования, типичными явля-
ются вопросы:
С чего начать?
Какой язык описания аппаратуры изучать?
Как его изучать?
Есть ли учебники?
Сколько это займет времени?
Где взять средства автоматизации проектирования, поддерживаю-
щие изучаемый язык?
Сколько они стоят?
Отсутствие ясных ответов на них и есть причина, заставляющая
отказаться или, по крайней мере, отложить на неопределенное время
переход к новой технологии проектирования.
Снять все перечисленные вопросы и призвана предлагаемая внима-
нию читателя книга.
Цель, которую ставил перед собой автор при написании книги, —
помочь читателю, ранее никогда не использовавшему ни систем автома-
тизации проектирования, ни языков описания аппаратуры, самостоятель-
но изучить язык AHDL и овладеть мощным средством проектирования,
пакетом MAX+plus II, затратив на это минимальные усилия.
Основа книги — ориентированный на самостоятельное изучение
практический курс языка описания аппаратуры AlteraHDL (AHDL).
Структура книги включает: введение, три основные главы и прило-
жения.
Во введении читатель познакомится с термином «проект», процеду-
рой проектирования в рамках пакета MAX+plus II и стратегиями про-
ектирования.
В главе «Основы языка AHDL» описываются основные элементы
и операторы языка, структура текстового описания, приводятся приме-
ры практического использования операторов и разделов языка.
В главе «Практическое использование языка AHDL» подробно рас-
Предисловие
________________________________________________________________7
ных устройств (шифраторов, дешифраторов, мультиплексоров, демуль-
типлексоров, компараторов, сумматоров, шинных приемопередатчиков,
регистров, счетчиков, модулей памяти и т. д.), так и управляющих ус-
тройств (конечных автоматов Мура и Мили).
В главе «Пример проектирования» представлен пример проектирова-
ния восьмиразрядного синхронного умножителя. Читателю предлагается
самостоятельно осуществить полный цикл проектирования, включаю-
щий: анализ технического задания, ввод текстовых описаний отдельных
модулей и их моделирование, создание файла верхнего уровня в иерар-
хии описаний и его функциональное моделирование, синтез проекта
и разводку СБИС, временной анализ, переразводку СБИС для достиже-
ния требуемой тактовой частоты работы СБИС, временное моделирова-
ние. Глава содержит детальные пошаговые инструкции для выполнения
каждого из этапов проектирования.
В приложениях приведены описания: менеджера пакета, мифического
редактора, текстового редактора, компилятора, а также исходные тексто-
вые описания компонентов умножителя, рассмотренного в третьей главе.
Рекомендуется последовательное изучение глав книги.
К книге прилагается CD-ROM. содержащий систему автоматизации
проектирования — пакет MAX-plus II, любезно предоставленный фир-
мой Altera. Поскольку на диске находится не демонстрационная, как
это бывает в большинстве случаев, а полнофункциональная система
проектирования, то читатель сможет использовать се не только в про-
цессе изучения языка AHDL. но и в дальнейшем — в своей практичес-
кой деятельности.
Тексты всех примеров, приведенных в книге, читатель может найти
на сервере www.efo.ni и бесплатно скачать их.
С вопросами. замечаниями, пожеланиями читатель может обращаться
непосредственно к автору по электронному адресу:
ап ton о v@eda-server. nord. nw. ru.
Автор считает своим приятным долгом выразить благодарность
С. М. Шептухе за неоценимую помощь в подготовке и издании книги.
Глава I
Введение
Язык AlteraHDL (AHDL) — язык описания аппаратуры, созданный
фирмой Altera в 1983 году. К настоящему времени, пройдя долгий путь
развития, он представляет собой эффективное средство для:
поведенческого и структурного описания проектируемого устрой-
ства;
документирования проекта.
Система синтеза пакета MAX+plus II, в которую язык AHDL ин-
тегрирован. обеспечивает его архитектурную независимость: текс-
товое описание может быть без переделки синтезировано на
базе любой СБИС программируемой логики, включенной в пакет
MAX+plus II.
В отличие от таких языков как VHDL гг VerilogHDL, ориентирован-
ных на описание и моделирование системы (например: процессор—па-
мять—проектируемое устройство), язык AHDL более прост в изучении
и оптимизирован по своим возможностям для проектирования отдель-
ной СБИС. Однако, несмотря на свою относительную простоту, он со-
дежит типичный для современных языков описания аппаратуры набор
высокоуровневых конструкций.
Проект
Под термином «проект» в рамках пакета MAX+plus II понимается набор
файлов, связанных с проектируемым модулем, в котором выделяются
две группы файлов:
логические файлы, описывающие алгоритм работы устройства
(Design Files);
вспомогательные файлы(Апс11агу Files).
Проект может содержать один логический файл либо несколько ло-
гических файлов, образующих иерархическое описание проектируемого
модуля. При иерархическом описании среди множества логических
файлов различают:
файл верхнего уровня в иерархии описаний (Top-level Design File);
файлы нижних (одного или нескольких) уровней иерархии (Low-
level Design files).
Б файле верхнего уровня задается архитектура модуля, определяется
набор модулей, входящих в его состав как компонегггы, и их взаимо-
связь. Описания этих модулей содержатся в логических файлах более
низкого уровня иерархии. В их состав, в свою очередь, в виде компонен-
тов также могут входить модули, описания которых приведены в логи-
ческих файлах еще более низкого уровня иерархии, и т. д.
Имя проекта должно совпадать с именем модуля верхнего уровня
в иерархии описаний, а следовательно, и именем логического файла, в котором
хранится его описание. Имена модулей нижних уровней иерархии, в свою
очередь, должны совпадать с именами файлов, в которых они описаны.
Логический файл — это файл одного из следующих типов:
Graphic Design File (стандартное расширение — . gdf)
Файл содержит схему, созданную в рамках пакета MAX+plus II;
AHDL Text Design File (стандартное расширение — . tdf)
Файл содержит текстовое описание модуля на языке AlteraHDL;
Waveform Design File (стандартное расширение — .wdf)
Файл содержит временные диаграммы входных и выходных сиг-
налов, созданные в рамках пакета MAX+plus II;
VHDL Design File (стандартное расширение — vdf)
Файл содержит текстовое описание модуля на языке VHDL;
Verilog Design File (стандартное расширение — v)
Файл содержит текстовое описание модуля на языке Verilog HDL;
Oread Schematic Files (стандартное расширение — .sen)
Файл содержит схему, созданную в рамках пакета ORCAD;
EDIF Input Files (стандартное расширение — . edf)
Файл содержит описание в формате EDIF 200 или 300;
Xilinx Netlist Format File (стандартное расширение — .xrf)
Файл содержит описание модуля, полученное в рамках пакета
фирмы Xilinx.
Вспомогательные файлы хранят дополнительную информацию о про-
екте. Их имена совпадают с именем проекта.
10
Введение
Процедура проектирования в рамках пакета
MAX+plus II
Типичная процедура проектирования в рамках пакета MAX+plus II
приведена на рис. 1.1.
Отметим, что на рис. 1.1 указаны также приложения пакета, задей-
ствованные на каждом из этапов проектирования.
Техническое задание
| Встроенные редакторы
Ввод описания модуля
I Компилятор
Проверка синтаксиса описания
Компилятор
Построение базы данных для
функционального моделирования
FunctionaLSNF Extractor
Timing.SNF Extractor
Компилятор
J Система моделирования
Функциональное моделирование
неверно
верно
Логический синтез.
Разводка СБИС.
Построение базы данных для
временного моделирования.
Создание файла для
программирования СБИС.
Временной анализатор
пакета
Анализ быстродействия СБИС
недостаточное
недостаточное
Система моделирования Т достаточное
Временное моделирование
Система программирования
неверно
верна
Программирование СБИС.
Проверка опытного образца.
работает
неверно
работает
верно
Серийное изготовление
Рис. 1.1
vipuietwi проекторе? ния I I
Стратегии проектирования
Пакет MAX+plus II позволяет реализовать как стратегию восходящего
проектирования, так и нисходящего.
И та и другая стратегии подразумевают использование поведенчес-
ких и структурных описаний модулей. При структурном описании мо-
дуль представляется в виде совокупности взаимосвязанных компонен-
тов более низкого уровня в иерархии описаний. При поведенческом же
описании задается алгоритм работы модуля.
Восходящее проектирование применимо в том случае, когда для со-
здаваемого устройства имеется детальное структурное описание (обыч-
но — принципиальная схема на микросхемах средней степени интег-
рации), выполненное в элементном базисе, отличном от имеющегося
в распоряжении разработчика СБИС.
При этом разработчик решает следующие задачи:
Создание функциональных аналогов элементов, использованных
в заданном структурном описании.
Отладка созданных компонентов.
Сборка созданных компонентов в единый модуль.
Моделирование и отладка устройства в целом.
Таким образом, в процессе проектирования разработчик сначала со-
здает модули нижнего уровня в иерархии описаний, а затем — модуль
верхнего уровня. Отсюда и название стратегии проектирования.
Стратегия нисходящего проектирования применяется в том случае,
когда задан алгоритм работы (поведенческое описание) создаваемого
устройства и набор системных требований (максимальная тактовая ча-
стота работы, задержка распространения сигналов от входов до выходов,
потребление энергии, стоимость и т. д.). При этом поведенческое опи-
сание может быть как формализованным (блок схема алгоритма, граф,
таблица переходов и выходов и т. д.), так и неформализованным (сло-
весное описание). Реализация нисходящего проектирования базируется
на итерационном выполнении структурной декомпозиции.
Упрощенно, ориентируясь на возможности пакета MAX+plus II, про-
цедура нисходящего проектирования выглядит следующим образом:
Разработка архитектуры СБИС. Исходное поведенческое описа-
ние преобразуется в структурное, элементами которого являются
архитектурные модули.
Архитектурные блоки либо описываются на поведенческом уровне
(например с помощью языка AlterHDL), либо осуществляется их
структурная декомпозиция и создается структурное описание,
элементами которого являются функциональные модули.
Далее процедура итерационно повторяется до тех пор, пока все
функциональные модули не будут описаны на поведенческом
уровне.
После этого осуществляется функциональное моделирование мо-
дулей, имеющих поведенческие описания.
12
Сведение
Функциональное моделирование модулей, имеющих структурное
описание (модули, имеющие поведенческое описание, входят в них
как компоненты).
Моделирование и отладка устройства в целом.
Таким образом, в процессе проектирования разработчик опускается
с верхнего уровня иерархии описаний, уровня СБИС, к нижним уров-
ням. Отсюда и название стратегии проектирования.
Стратегия нисходящего проектирования при прочих равных услови-
ях (квалификация разработчика, используемые средства проектиро-
вания) имеет безусловные преимущества как по временным затратам
на разработку, так и по качеству проработки проекта. Так, например, ее
использование позволяет распараллелить работу на уровне архитектур-
ных и функциональных модулей, легко локализовать источник ошибки
в работе модуля или устройства в целом, быстро внести изменения
в алгоритм работы модуля на любой стадии проектирования. Поэтому,
если это возможно, предпочтение следует отдавать именно такому под-
ходу к проектированию.
Однако независимо от выбранной стратегии проектирования для
задания структур и алгоритмов работы модулей целесообразно исполь-
зование текстового описания, созданного языке AlteraHDL.
Глава II
Основы языка AHDL
Элементы языка
Ключевые слова и идентификаторы
Полный перечень ключевых слов (Keywords) и идентификаторов
(Identifires) языка AHDL приведен в табл. 2.1 и табл. 2.2 соответст-
венно.
Символы -
В табл. 2.3 перечислены символы, используемые в языке AHDL.
Имена
В языке AHDL определены три типа имен:
Символическое имя (Symbolic name)
Имя модуля (Subdesign name)
Имя вывода (Port name).
14 Основы языка AHDL
Таблица 2.1
AND FUNCTION OUTPUT
ASSERT GENERATE PARAMETERS
BEGIN GND REPORT
BIDIR HELPJD RETURNS
BITS IF SEGMENTS
BURIED INCLUDE SEVERITY
CASE INPUT STATES
CUQUE IS SUBDESIGN
CONNECTED_PINS LOG2 TABLE
CONSTANT MACHINE THEN
DEFAULTS MOD TITLE
DEFINE NAND TO
DESIGN NODE TRI.STATE.NODE
DEVICE NOR VARIABLE
DIV NOT VCC
ELSE OF WHEN
ELSIF OPTIONS WITH
END OR XNOR
FOR OTHERS XOR
Таблица 2.2 ; - -t
CARRY JKFFE SRFFE
CASCADE JKFF SRFF
CEIL LATCH TFFE
DFFE DFF LCELL MCELL TFF ~ . „ •> . .. . V i TRI
EXP MEMORY USED
FLOOR OPENDRN WIRE ' '" '
GLOBAL SOFT X
Таблица 2.3
Символ Описание
Подчеркивание (Underscore)
• Тире (Dash]
/ Косая черта (Slosh] ; t
- Двойное гире . ; j
% Процент (Percent) t' I
(1 Открывающая и закрывающая скобки (left and Right РогвмНезез] | ,
(1 Открывающая и закрывающая прямоугольные скобки (Left ond Right Brockets]
Элементы языка 15
Таблица 2 3 (окончание)
Символ Описание
и « t + ж= 1 1- > >= < & [& $ 1$ # 1# ? Открывающая и закрывающая кавычки (Quotation marks) Двойные кавычки (Double Quotation marks) Точка (Period) Двойная точка Точка с запятой (Semicalan| Запятая (Comma) Двоеточие (Colon) Равенство (Equals) Стрелка (Arrow) Плюс (Plus) Минус (Minus) Двойное равенства Восклицательный знак (Exdomotion point) Восклицательный знак и равенство Больше (Greater than) Больше или равно Меньше (Less than) Меньше или равно Амперсанд (Ampersand) Восклицательный знак и амперсонд - Доллар (Dollar sign) Восклицательный знак н доллар Фунт (Pound sign) Восклицательный знак и фунт Вопросительный знак (Question mark) И f
Символическое имя — определяемое пользователем имя, используемое
для задания:
переменных;
констант;
состояний и разрядов конечного автомата;
параметров;
обозначаемых арифметических выражений;
именованных операторов.
Имя модуля — определяемое пользователем имя, используемое для
именования модуля, а также логического файла, в котором хранится его
текстовое описание.
Имя вывода — определяемое пользователем имя, используемое для
обозначения: '
входа модуля;
выхода модуля;
16
Основы языка АН L
двунаправленного вывода модуля;
входа для импортируемого конечного автомата;
выхода для экспортируемого конечного автомата.
Имя может быть задано в одной из двух форм:
строкой символов (от 1 до 32 символов) — Unquoted name;
строкой символов (от 1 до 32 символов), заключенной в одинар-
ные кавычки — Quoted name.
Правила использования указанных форм сведены в табл. 2.4.
Таблица 2.4
Quoted Subdesign Name Unquoted Subdesign Name Unquoted Symbolic Name Quoted Symbolic Name Unquoted Port Name Quoted Port Name
Символы A-Z + + + + + +
Символы Q-Z +• + + + + +
Цифры (0-9) + - + + + + +
Подчеркивоние |_| + + + + + ♦
Косая черте (/) ♦ + + ♦
Тире (-) + ♦ +
Только цифры (0—9) + + ♦ ♦ +
Ключевое слово ♦ ♦ ♦
Идентификатор ♦ ♦
Макс, число символов 32 32 32 32 32 32
Группы
Группа — набор однотипных переменных или выводов. Порядковый номер
переменной (вывода) в группе — индекс. Максимальное число переменных
(выводов), объединяемых в одну группу, не должно превышать 256.
В языке AHDL определены три типа групп:
одномерные (Single-range);
двумерные (Dual-range);
последовательные (Sequential) или, что по смыслу более точно,
временные.
Одномерные группы задают, указывая:
имя группы (символическое имя или имя вывода);
диапазон изменения индексов группы.
Двумерные группы задают, указывая:
имя группы (символическое имя или имя вывода);
пару диапазонов изменения индексов.
Последовательные (временные) группы задают списком, заключен-
ным в круглые скобки. Элементами списка могут быть переменные,
Элементы языка
17
выводы модуля, одномерные группы, двумерные группы. Элементы
списка отделяются друг от друга запятыми.
Индексы одномерных и двумерных групп должны быть целыми по-
ложительными числами. Диапазон изменения индексов указывается
в следующем формате:
[ граница А .. граница В ].
Каждая из границ может быть определена: числом, арифметическим
выражением, константой, параметром.
Типичный порядок задания индексов — убывающая слева направо
последовательность: граница А — большее целое, граница В — меньшее.
Если же они заданы в возрастающей слева направо последовательности
или же в рамках одного логического файла, используются оба способа
задания индексов, то рекомендуется установить опцию BITO=MSB или
BITO=any соответственно. В противном случае компилятор выдаст предуп-
реждение.
Примеры:
1. А[5. .0] — одномерная группа. Индексы заданы в убывающей слева
направо последовательности. Члены группы А5, А4, АЗ, А2, АТ, АО.
2. CONSTANT UPPER=H"4": B[UPPER .1] — одномерная группа. Верхняя
граница диапазона изменения индексов определена константой.
Индексы заданы в убывающей слева направо последовательности.
Члены группы В4, ВЗ, В2, В1.
3. С[2*2. .0][3. .2] — двумерная группа. Верхняя граница диапазона
изменения первой группы индексов задана арифметическим выра-
жением. Индексы заданы в убывающей слева направо последова-
тельности. Члены группы С43, С42, СЗЗ, С32, С23, С22, С13, С12, СОЗ, С02.
4. 0[1. .4] — одномерная группа. Индексы заданы в возрастающей
слева направо последовательности. Члены группы: Di, D2, D3, 04.
5. (А, Е[2.. 1 ], F) — временная группа. Члены группы: А, Е2, El, F.
Числа
Язык AHDL допускает возможность использования десятичных, двоич-
ных, восьмеричных, шестнадцатеричных чисел.
Правила задания чисел:
Десятичное число — совокупность цифр от 0 до 9.
Двоичное число — В "совокупность символов 0, 1, х”, либо Ь "со-
вокупность символов 0, 1, х".
Восьмеричное число — О "совокупность цифр от 0 до 7", либо
о "совокупность цифр от 0 до 7", либо Q "совокупность цифр от 0
до 7", либо q “совокупность цифр от 0 до 7".
Шестнадцатеричное число — Н "совокупность цифр от 0 до 9
и букв от А до F", либо h "совокупность цифр от 0 до 9 и букв
от А до F", либо X "совокупность цифр от 0 до 9 и букв от А до F",
либо х "совокупность цифр от 0 до 9 и букв от А до F".
18
Основы языка AHDL
Примеры:
В "10x01”; X "АГ; 0”73”
Число не может быть присвоено одноразрядной переменной или
выходу. Вместо числа следует использовать константную единицу (Ь’Т,
либо VCC) или константный нуль (Ь"0", либо GND).
Примеры:
1. out = b”1"; -- правильное присвоение
2. out = 0; -- неправильное присвоение
3. out = GND; -- правильное присвоение
Выражения
В языке AHDL определены два типа выражений (Expressions):
Арифметические выражения (Arithmetic Expressions)
Логические выражения (Boolean Expressions)
Арифметические выражения
Арифметические выражения используются для задания:
обозначаемого выражения в операторе обозначения (Define
Statement);
констант в операторе задания констант (Constant Statement);
границ диапазона изменения индексов одномерных и двумерных
групп;
границ диапазона изменения внутренней переменной в операторе
FOR GENERATE;
оцениваемого выражения в операторах IF GENERATE, ASSERT,
Примеры:
1. DEFINE Min (a,b)=((a<b)?a:b); — ((a<b)?a:b) - арифметическое вы-
ражение
2. CONSTANT Const=1+20IV3+L0G2(256); — 1+2DIV3*L0G2(256) - арифметичес-
кое выражение
3. A[2+4"2..3-2] : INPUT; — 2+4“2 и 3-2 - арифметические выражения
Значение арифметических выражений оценивается и подставляется
компилятором на этапе проверки синтаксиса проекта, и поэтому для их
реализации не требуются логические ресурсы СБИС ПЛ. В табл. 2.5
перечислены арифметические, логические операторы и операторы срав-
нения, которые могут использоваться в арифметических выражениях.
Так же в табл. 2.5 указан приоритет выполнения операторов: чем мень-
ше число, тем выше приоритет.
Результат арифметического выражения должен быть целым положи-
тельным числом. В противном случае он по умолчанию округляется
до ближайшего большего целого.
Элементы языка
19
Таблица 2.5
Оператор Пример Описание Приоритет выполнения
+ (unory| +1 Плюс 1
. (unary) -1 Минус 1
I la Отрицание 1
Л о л 2 Степень 1
MOD 4 MOD 2 Модуль 2
DIV 4 DIV 2 Деление 2
* a * 2 Умножение 2
LOG2 LOG2(4-3| Логарифм по основанию 2 2
+ 1+1 Сложение 3
- 1-1 Вычитание 3
== (numeric | 5=5 Равенство чисел 4
«> (string | "o" == "b" Равенство строк 4
l= 5 1= 4 Не равно 4
> 5 > 4 Больше 4
5 >- 5 Больше или ровно 4
о < b+2 Меньше 4
<« a <= b+2 Меньше или равно 4
& о & b и 5
AND о AND b
l& 1 l& 0 И-НЕ 5
NAND 1 NAND 0
$ 1 $ 1 Исключающее ИЛИ 6
XOR 1 XOR 1
l$ 1 1$ 1 Инверсия исключающего ИЛИ 6
XNOR 1 XNOR 1
# a # b или. 7
OR о OR b
I# a № b ИЛИ-НЕ 7
NOR a NOR b
? (5<4) 1 3:4 Тернарная операция В
Кроме того, в языке AHDL определены две функции, которые могут
использоваться в арифметических выражениях для явного задания пра-
вила округления:
CEIL — округление до ближайшего большего целого;
FLOOR — округление до ближайшего меньшего целого.
Примеры:
1. CEIL (LOG2(255))=8.
2. FLOOR (5DIV3)=1.
20
Основы языка AHDL
Логические выражения
Логические выражения (Boolean expressions) содержат операнды, объе-
диняемые: логическими операторами, арифметическими операторами
и операторами сравнения.
Логические выражения используются:
в логических уравнениях (Boolean Equations);
в логических уравнениях, задающих управляющие сигналы
(Boolean Control Equations);
в операторе CASE;
в операторе IF THEN.
Логические операторы
В табл. 2.6 перечислены логические операторы, используемые в логичес-
ких выражениях.
Таблица 2.6
Оператор Пример Описание
I NOT Itob NOT lob Инверсия
& AND breed & butter breed AND butter И
l& NAND а{3..11 l& b(5..3] OJ3..1 J NAND b[5..3] И-НЕ
# OR trick # treot trick OR treat или
I# NOR !# d[7..4] c[8..5| NOR d{7..4] ИЛ И-НЕ
S XOR foo $ bor foo XOR bar Исключающее ИЛИ
!S XNOR x2 1$ x4 x2 XNOR x4 Инверсия исключающего ИЛИ
Оператор инверсия (NOT) может применяться к одному из трех типов
операндов:
одноразрядной переменной (именованной линии связи), однораз-
рядному выводу модуля, а также к константной логической еди- ]
нице и константному логическому нулю. При этом осуществляет- j
ся инвертирование аргумента операнда, ;
группе переменных (группе именованных линий связи), группе вы-
водов модуля. В этом случае инвертируется каждый член группы,
Пример;
!(а, Ь[2..1]) соответствует !а, !Ь2, !Ы.
числу. В этом случае инвертируется каждый разряд двоичного
'ЛТГПГ'ТЭП пдит«3 поиилгл ГГТГ/'тТг>
Элементы языка
21
Пример:
>9 = (!В”100Г=В-0110') = 6.
Операторы AND, NAND, OR, NOR, XOR, NXOR допускают использование следу-
ющих комбинаций операндов;
Оба операнда одноразрядные (одноразрядная переменная, одно-
разрядный вывод модуля, логический нуль, логическая единица).
Оба операнда группы (группа переменных, группа выводов моду-
ля). В этом случае логический оператор применяется поразрядно
и, следовательно, операнды должны иметь одинаковое число раз-
рядов, совпадающее с числом разрядов результата.
Пример:
R [4.. 1]=(А, В, С. 0)йОР[3. . 0]; при этом: R4=A#0P3; R3=BflOP2; R2=C#OP1;
R1=D#0P0;
Один операнд группа (группа переменных, группа выводов моду-
ля), а другой операнд одноразрядный (одноразрядная перемен-
ная, одноразрядный вывод модуля, логический нуль, логическая
единица). В этом случае одноразрядный операнд тиражируется
и формируется группа, число разрядов в которой равно числу
разрядов в другом операнде. Затем к двум группам поразрядно
применяется логический оператор.
Пример:
R[3.. 1]=(a,b[2.. 1])&D; при этом: R3=a&D; R2=b2&D; Ri=b1&D.
Оба операнда числа. Поскольку естественной формой представле-
ния чисел для выполнения процедуры синтеза комбинационной
схемы является двоичная форма, то в этом случае оба операнда
рассматриваются компилятором как двоичные числа (группы дво-
ичных разрядов). Если для двоичного представления операндов
требуется разное число разрядов, то автоматически осуществляет-
ся наращивание числа разрядов двоичного представления меньше-
го операнда. Логический оператор применяется к сформирован-
ным группам поразрядно.
Пример:
3$14=В”001Г$В’Л110”=В’’110Г=13.
Один операнд число, а другой операнд либо одноразрядный, либо
группа. В этом случае число преобразуется в двоичное число
(группу двоичных разрядов). Логический оператор применяется
к этим группам поразрядно. Если число разрядов в этой группе
меньше числа разрядов в другом операнде, то она автоматически
расширяется. Если же больше, то процессор сообщений (Message
Processor) пакета MAX+plus II выдает сообщение об ошибке.
Примеры:
prq П = /я h ппт< О'ггчк<- ОГО п-( n S D” Л ”\~л. ог о 1-/ n--i \-к.
22
Основы языка AHDL
R[1 ]=(с&8"Г)=с;
R[3.. 1]=(a,b,c) & 9. Будет сформировано сообщение об ошибке.
Арифметические операторы
В табл. 2.7 перечислены арифметические операторы, которые могут быть
использованы в логических выражениях.
Таблица 2.7
Оператор Пример Описание
+ (унарный) +1 Плюс
- (унарный) -□И. 1] Минус
+ count[7..0] + de(la[7„0] Сложение
rightmost.*]] — leftmost.*]] Вычитание
Правила использования операторов сложения и вычитания:
Операндами данных операторов могут быть группы (группа пере-
менных, группа выводов модуля) и числа.
Если оба операнда — группы, то они должны иметь одинаковое
число разрядов, совпадающее с числом разрядов результата.
Если оба операнда — числа, то автоматически осуществляется
выравнивание числа разрядов их двоичных представлений путем
увеличения числа разрядов в двоичном представлении меньшего
операнда.
Если один операнд — число, а другой — группа, то число преоб-
разуется в двоичное число (группу двоичных разрядов). Если
число разрядов в этой группе меньше числа разрядов в другом
операнде, то она автоматически расширяется. Если же больше, то
процессор сообщении (Message Processor) пакета MAX+plus II
выдает сообщение об ошибке.
Операторы сравнения
В табл. 2.8 перечислены операторы сравнения, которые могут быть ис-
пользованы в логических выражениях.
Таблица 2.8
Оператор сравнения Пример Описание
(логическое) oddr(19..4] == Н'ВВОО" Равно
1= (логическое) Ы I- ьз Неравно
< (арифметическое) Fame]] < powerQ Меньше
<» (арифметическое) Money]] <® power]] Меньше или равно
> (арифметическое) Love]] > money]] Больше
>= (арифметическое) delta]] >• 0 Больше илн равно
Элементы языка
23
Результат операции сравнения:
логический нуль (GND), если условия сравнения не выполнены;
логическая единица (VCC), если условия сравнения выполнены.
Выделяются два типа операторов сравнения:
операторы логического сравнения (Logical comparator);
операторы арифметического сравнения (Arithmetic comparator).
Операндами оператора логического сравнения могут быть:
одноразрядные переменные и выводы модуля;
группы переменных и группы выводов модуля;
числа (в двоичных числах не должен использоваться символ "х” —
символ неопределенного значения разряда).
При логическом сравнении осуществляется побитовое сравнение
операндов, поэтому они должны иметь одинаковое число разрядов. Если
один операнд число, а другой — группа, то число преобразуется в дво-
ичное число (группу двоичных разрядов). Если число разрядов в этой
группе меньше числа разрядов в другом операнде, то она автоматичес-
ки расширяется. Если же больше, то процессор сообщений (Message
Processor) пакета MAX+plus II выдает сообщение об ошибке.
Операторы арифметического сравнения позволяют сравнивать груп-
пы (переменных и выводов модуля) и числа.
При арифметическом сравнении группа интерпретируется как поло-
жительное двоичное число без знака, число разрядов к котором соответ-
ствует числу разрядов в группе. Поэтому операнды должны иметь оди-
наковое число разрядов. Если один операнд число, а другой — группа,
то число преобразуется в двоичное число (группу двоичных разрядов).
Если число разрядов в этой группе меньше числа разрядов в другом
операнде, то она автоматически расширяется. Если же больше, то про-
цессор сообщений (Message Processor) пакета MAX+plus II выдает сооб-
щение об ошибке.
Приоритет выполнения операторов
В табл. 2.9 указан приоритет выполнения (порядок выполнения) опера-
торов, используемых в логических выражениях.
Таблица 2.9
Приоритет выполнения* Оператор Описание
1 Минус
1 1 НЕ
2 + Сложение
2 Вычитание
3 Равенство
24
Основы языка AHDL
Таблица 2.9 (окончание)
Приоритет выполнения* Оператор Описание
3 ! Неравенство
3 < Меньше
3 <= Меньше или равно
3 > Больше
3 >- Больше или равно
4 & и
4 !& И-НЕ
5 5 Исключающее ИЛИ
5 15 Инверсия исключающего ИЛИ
6 # или
6 I# ИЛИ-НЕ
* — чем меньше число, гем выше приоритет оператора.
Примитивы
Примитив — встроенное в пакет MAX+plus II п язык AHDL функци-
ональное описание тою или иного внутреннего ресурса СБИС ПЛ
фирмы ALTERA[1],
В языке AHDL определено два типа примитивов:
примитивы буферов;
примитивы триггеров: синхронных триггеров (Flipflop) и триггера-
защелки (Latch).
Примитивы буферов
В языке AHDL используются следующие примитивы буферов:
CARRY — буфер цепочного переноса;
CASCADE — буфер каскадного наращивания логической функ-
ции;
ЕХР — буфер логического расширителя;
GLOBAL — буфер глобальной цепи распространения управляю-
щего сигнала:
LCELL — не удаляемый буфер размещения логической ячей-
ки (макроячейки);
OPNDRN — буфер выхода с открытым коллектором;
SOFT — удаляемый буфер размещения логической ячейки
(макроячейкп);
TRI — буфер выхода с Z состоянием.
Буфер цепочного переноса (CARRY)
Буфер цепочного переноса позволяет явно указать компилятору на не-
обходимость использования схемы цепочного переноса логического эле-
мента СБИС семейств FLEX 6000, FLEX 8000, FLEX ЮК [1].
Элементы языка
25
Буфер имеет один вход (IX) и одни выход (OUT). Правила исполь-
зования буфера иллюстрируются на рис. 2.1.
Рис. 2.1
26
Основы языка AHDL
Заметим, что:
выходной сигнал буфера может поступать на вход только одного
логического элемента;
четырехвходовая таблица перекодировок (LUT) логического эле-
мента, на вход которого поступает сигнал с выхода буфера CARRY,
преобразуется компилятором в две трехвходовые таблицы. Поэтому
такой логический элемент имеет еще два информационных входа;
если в логическом элементе используются две трехвходовые таб-
лицы перекодировок, то выход второй таблицы должен подаваться
на вход следующего буфера CARRY;
если буфер CARRY используется неправильно, то компилятор
пакета игнорирует его, а процессор сообщений (Message Processor)
выдает предупреждение.
Буфер каскадного наращивания логической функции (CASCADE)
Буфер каскадного наращивания позволяет явно указать компилятору на
необходимость использования схемы каскадного наращивания логичес-
кого элемента СБИС семейств FLEX 6000, FLEX 8000, FLEX ЮК [1].
Буфер имеет один вход (IN) и один выход (ОСТ). Использование
буфера иллюстрируются на рис. 2.2.
Заметим, что:
на вход буфера CASCADE должен поступать сигнал с выхода
двухвходового элемента «И» или «ИЛИ»:
выходной сигнал буфера CASCADE должен подаваться на вход
одного двухвходового элемента «И», либо «ИЛИ», на второй вход
которого должен поступать сигнал с выхода таблицы перекодиро-
вок данного логического элемента;
цепочка каскадного наращивания должна быть логически одно-
родной, т. е. содержать либо двухвходовые элементы «И», либо
«ИЛИ». Данное правило определяется тем, что в СБИС ПЛ ап-
паратно реализованы схемы 2-И. Следовательно, схема 2-ИЛИ
будет преобразована в схему 2-И по закону де Моргана;
если буфер CASCADE используется неправильно, то компилятор
пакета игнорирует его, а процессор сообщений (Message Processor)
выдает предупреждение.
Буфер логического расширителя (ЕХР)
Буфер логического расширителя позволяет явно указать компилятору
на необходимость использования разделяемого логического расширите-
ля макроячейки СБИС семейств МАХ5000, МАХ 7000, МАХ 9000 [1].
Для остальных семейств СБИС программируемой логики этот буфер
будет трактоваться компилятором как элемент «НЕ».
Буфер имеет один вход (IN) и один выход (OL’T). Выходной сигнал
буфера является инверсией его входного сигнала.
Буфер логического расширения не следует применять для формиро-
вания цепи задержки сигнала, так как задержка распространения сигна-
Элементы языка
27
ЛЭ1
INI
IN2
IN3
INC
IN5
IN6
1N7
1N8
IN9
INW
IN11
!N12
Рис. 2.2
28
Основы языка A DL
Элементы языка
29
ла при таком подходе будет зависеть от окружающей температуры
СБИС, напряжения питания, технологии изготовления СБИС и, следо-
вательно, не будет стабильной.
Фирма Altera рекомендует использовать этот буфер только опытным
пользователям.
Буфер глобальной цепи распространения управляющего сигнала
(GLOBAL).
Буфер GLOBAL позволяет явно указать компилятору на необходимость
использования глобальной, проходящей через всю СБИС, непрерывной
цепи для распространения:
тактового сигнала (Global Clock);
сигнала сброса триггера (Global Clear);
сигнала установки триггера (Global Preset);
сигнала разрешения выхода (Global Output Enable).
Буфер имеет один вход (IN) и один выход (OUT). Использования
буфера иллюстрируются на рис. 2.3.
Заметим, что:
на вход буфера GLOBAL должен поступать сигнал со специали-
зированного входа СБИС (Dedicated Input). При этом между бу-
фером и специализированным входом может стоять инвертор.
В СБИС семейств FLEX 6000 и FLEX10K на вход буфера можно
подавать сигналы, порождаемые на внутренних логических ресур-
сах СБИС;
сигнал с выхода буфера (или его инверсия) следует подавать на:
входы асинхронной установки (PRn) и сброса (CLRn) триггера,
вход синхронизации триггера (CLK), вход разрешения выхода
(Output Enable) буфера TRI.
Если буфер GLOBAL используется неправильно, то компилятор па-
кета игнорирует его, а процессор сообщений (Message Processor) выдает
предупреждение.
Альтернативой использованию буфера GLOBAL является установка
опций Automatic Global (меню Assign -» Global Project Logic Synthesis).
Неудаляемый буфер размещения логической ячейки (LCELL)
Буфер LCELL позволяет явно указать компилятору на необходимость
использования логического элемента (макроячейки). Данный буфер не
может быть удален компилятором.
Буфер имеет один вход (IN) и один выход (OUT). На рис. 2.4 ил-
люстрируются особенности использования буфера LCELL.
Схема, представленная на рис. 2.4А, будет реализована на четырех
логических элементах (макроячейках) (рис. 2.4В). Если же из схемы
на рис. 2.4А убрать все буферы LCELL, то для ее реализации потребу-
ется всего один логический элемент (макроячейка) (рис. 2.4С).
I Ded. Incut | > ------г
'------------------------------------------1
TGlOBAL ~1
Рис. 2.3
На рис. 2.5 показано, как с помощью буфера LCELL может быть
создана комбинационная схема с обратной связью.
Буфер LCELL не следует применять для задержки сигнала, так как
в этом случае задержка распространения сигнала будет зависеть от
окружающей температуры, напряжения питания, технологии изготовле-
ния СБИС и, следовательно, не будет стабильной.
Пакет MAX+plus II позволяет установить режим автоматического
включения буферов LCELL как иа этапе синтеза комбинационной схемы
модуля, так и ее размещения в СБИС. Это в некоторых случаях позво-
ляет уменьшить аппаратные затраты (путем выделения общих термов
в синтезируемых компилятором логических уравнешшх и их многоуров-
невой реализации), а также обеспечить компилятору дополнительные
возможности при размещении синтезированных схем в СБИС програм-
мируемой логики.
сновы языка A DL
у емешь/ Я5ыки
А
Рис. 2.5
Буфер выхода с открытым коллектором (OPNDRN)
Буфер OPNDRN позволяет явно указать компилятору на необходимость
использования выхода с открытым коллектором.
Буфер имеет один вход (IN) и один выход (OUT).
Если на вход буфера OPNDRN поступает логический нуль, то
на выходе также будет логический нуль. Если же входной сигнал —
логическая единица, то выход буфера будет в Z состоянии.
Буфер OPNDRN эквивалентен буферу TRI, у которого на вход IN
поступает логический нуль, а на вход ОЕ — произвольный сигнал.
Правила использования буфера OPNDRN:
Сигнал с выхода буфера должен подаваться только па один вывод
типа вход/выход (BIDIR).
Если сигнал с выхода буфера поступает на логические элементы
СБИС, то его необходимо подать и па вывод типа вход/выход
(BIDIR).
Буфер OPNDRN может использоваться только в СБИС семейств
MAX 7000S и FLEX10K, для остальных семейств он автоматически
преобразуется в буфер TRI.
При реализации устройства на СБИС семейств MAX7000S или
FLEX ЮК и включенной опции Automatic Open-Drain (меню Assign ->
Global Project Logic Synthesis) компилятор преобразует в буфер
OPNDRN:
буфер TRI, на вход IN которого подается постоянный логический
нуль (GND), а на вход ОЕ — произвольный сигнал;
буфер TRI, на вход IN которого подается инверсное значение
сигнала, подаваемого на вход ОЕ.
Удаляемый буфер размещения логической ячейки (SOFT)
Буфер SOFT позволяет указать компилятору на возможность использо-
вания логического элемента (макроячейки). Буфер имеет один вход (IN)
и один выход (OUT).
В процессе синтеза проекта компилятор проверяет, позволит ли
использование логического элемента (макроячейки) вместо буфера
SOFT:
уменьшить аппаратные затраты (за счет выделения общих термов
и многоуровневой реализации логической функции);
обеспечить дополнительные возможности при размещении проек-
та в СБИС.
Если нет, то буфер SOFT удаляется из синтезируемой схемы, если да,
то заменяется буфером LCELL.
Буфер выхода с Z состоянием (TRI)
Буфер TRI позволяет явно указать компилятору на необходимость ис-
пользования выхода с Z состоянием. Буфер имеет информационный
вход (IN), вход разрешения работы (ОЕ) и выход (OUT).
Если на входе ОЕ присутствует логическая единица, то сигнал
на выходе OUT повторяет сигнал, поступающий на вход IN. Если ло-
гический нуль, то выход буфера TRI находится в Z состоянии. Если же
32 Основы языка AHDL
вход ОЕ буфера останется неподключенным, то на него автоматически
будет подана логическая единица.
Правила использования буфера TRI:
Сигнал с выхода буфера TRI должен подаваться только на
один вывод типа вход/выход (BIDIR) или выход (OUTPUT)
СБИС.
При использовании сигнала с выхода буфера как входного сигнала
для логических элементов СБИС, он должен быть одновременно
подан и на вывод типа вход/выход (BIDIR) или выход (OUTPUT)
СБИС.
Примитивы триггеров
В табл. 2.10 приведены используемые в языке AHDL примитивы триг-
геров.
Таблица 2.10
Примитив Прототип примитива
DFF FUNCTION DFF (D, CLK, CLRN, PRN) RETURNS (Q)
DFFE FUNCTION DFFE (D, CLK, CLRN, PRN, ENA) RETURNS (Q|
TFF FUNCTION TFF (T, CLK, CLRN, PRN) RETURNS (Q)
TFFE FUNCTION TFFE (T, CLK, CLRN, PRN, ENA) RETURNS (Q)
JKFF FUNCTION JKFF (J, K, CLK, CLRN, PRN) RETURNS (Q)
JKFFE FUNCTION JKFFE (J, K. CLK, CLRN, PRN, ENA) RETURNS (Q)
SRFF FUNCTION SRFF (S. R, CLK, CLRN, PRN| RETURNS (Q)
SRFFE FUNCTION SRFFE (S, R, CLK, CLRN, PRN, ENA) RETURNS (Q)
LATCH FUNCTION LATCH (D, ENA) RETURNS (Q|
Выводы триггеров:
D, Т J, К, S, R — информационные входы;
CLK — вход тактового сигнала (активный перепад 0->1);
CLRN — вход асинхронного сброса триггера (активный уровень —
логический нуль);
PRN — вход асинхронной установки триггера (активный уровень —
логический нуль);
ENA — вход разрешения работы триггера (активный уровень — ло-
гическая единица).
Структура текстового описания 33
Структура текстового описания
Общая структура
Текстовое описание па языке AHDL должно иметь определенную струк-
туру. Основные компоненты структуры перечислены ниже в том поряд-
ке, в котором их следует использовать.
Title Statement
Include Statement
Constant Statement
Define Statement
Parameters Statement
Function Prototype Statement
Options Statement
Assert Statement
Subdesign Section
Variable Section
- Instance Declaration
- Node Declaration
- Register Declaration
- State Machine Declaration
- Machine Alias Declaration
- If Generate Statement
Logic Section
- Defaults Statement
- Assert Statement
- Boolean Equations
- Boolean Control Equations
- Case Statement
- For Generate Statement
- If Then Statement
- If Generate Statement
- In-Line Logic Function Reference
- Truth Table Statement
Отметим, что не все перечисленные операторы и разделы являются
обязательными. Так, в простейшем случае, текстовое описание может
содержать только разделы Subdesign Section и Logic Section.
Title Statement (оператор заголовка)
Title Statement (оператор заголовка) позволяет задать название для
генерируемого компилятором файла отчета (Report File).
Пример:
TITLE "Binary COUNTER";
34 Основы языка AHDL
Заголовок Binary COUNTER появится в начале файла отчета (Report
File)
Правила использования оператора:
Оператор начинается с ключевого слова TITLE, за которым следует
текстовая строка, заключенная в двойные кавычки ("). В конце
оператора заголовка ставится точка с запятой (;).
Текстовая строка может содержать до 255 символов включительно.
Она не должна содержать символов конца строки или конца стра-
ницы.
Для включения в текстовую строку двойных кавычек следует
использовать дополнительную пару двойных кавычек:.......FLEX ЮК""
Median Filter'.
В файле с текстовым описанием данный оператор может быть
использован только один раз.
Include Statement (оператор включения)
Include Statement (оператор включения) позволяет включить содержи-
мое файла. указанного в операторе, в текущее текстовое описание.
Примеры:
1. INCLUDE "Low-level_pro]ect.inc";
2. INCLUDE "constant
Правила использования оператора:
Оператор начинается с ключевого слова INCLUDE, за которым
в двойных кавычках (") указывается имя файла включения
(Include file). Далее ставится точка с запятой (:).
Если явно не задано расширение файла включения, то компилятор
ищет файл, имеющий заданное имя и расширение . INC.
Имя файла, указанное в операторе включения, не должно содер-
жать пути к файлу.
В файле с текстовым описанием данный оператор может исполь-
зоваться неограниченное число раз.
Последовательность поиска файлов включения при компиляции модуля:
в директории проекта;
в библиотеках пользователя, заданных командой User Libraries
(меню Options);
В директориях \ir.axplus2\max21iD\mega_lpm и \maxplus2\max2inc, создан-
ных в процессе инсталляции пакета.
Файл включения может содержать следующие операторы:
Function Prototype Statement — оператор описания прототипа;
Define Statement — оператор обозначения:
Parameters Statement — оператор объявления параметров;
Constant Statement — оператор задания константы.
Структура текстового описания 35
Constant Statement (оператор задания константы)
Constant Statement (оператор задания константы) позволяет присвоить
символическому имени неизменяемое значение либо явно заданное
числом, либо являющееся результатом выполнения арифметического
выражения.
Примеры:
1. CONSTANT UPPER_LIM1T=H "130";
2. CONSTANT SAR=1+UPPER_LIMIT DIV3*L0G2(256):
3. CONSTANT NUMBER=5;
CONSTANT NUMBER_PLUS_0NE=NUMBER-1;
Правила использования оператора:
Оператор начинается с ключевого слова CONSTANT, за которым сле-
дует символическое имя, символ равно (=), число или арифмети-
ческое выражение. Далее ставится точка с запятой (;).
Имя константы должно быть уникальным и не должно содержать
пробелов. Для улучшения читаемости имени следует применять
символ подчеркивания (_).
Ссылка на константу допускается только после ее задания.
При задании константы могут использоваться заданные ранее
константы.
Циклическое задание констант недопустимо.
CONSTANT CONS~_A=CONST_B;
CONSTANT CONST_B=CONST_A;
В файле с текстовым описанием данный оператор может исполь-
зоваться неограниченное число раз.
Отметим, что арифметическое выражение, задающее константу, оце-
нивается компилятором и заменяется числом па этане проверки синтак-
сиса. Поэтому применение арифметических выражений при задании
констант не приводит к использованию дополнительных логических
ресурсов СБИС ПЛ.
Define Statement (оператор обозначения)
Define Statement (оператор обозначения) позволяет обозначить арифме-
тическое выражение символическим именем.
Пример;
PARAMETERS (WIDTH);
DEFINE MAX (a,b)=(a>o)?a:b;
SUBDESIGN DEF
(
data_a[MAX(WIDTH,2)..0]:INPUT;
j иснавы языки мпиь
cata_b[MAX(WIDTH,2)..0]:OUTPUT;
)
BEGIN
data_a[]=data_b[]:
END;
В приведенном примере арифметическое выражение, реализующее
поиск максимума от двух аргументов а, ь (если а больше ь, то резуль-
татом ее выполнения будет аргумент а, если нет — то аргумент ь),
обозначено мах (а.о).
Правила использования оператора:
Оператор начинается с ключевого слова DEFINE, за которым следует
символическое имя обозначаемого арифметического выражения со
списком аргументов, заключенным в скобки. За списком аргумен-
тов ставится знак «равно» (=), далее — само арифметическое вы-
ражение и точка с запятой.
Список аргументов может содержать один или более аргументов.
Аргументы в списке отделяются друг от друга запятой.
Символическое имя должно быть уникальным и не должно содер-
жать пробелов. Для улучшения читаемости имени следует приме-
нять символ подчеркивания (_).
Ссылка на символическое имя арифметического выражения допу-
стима только после его задания в операторе обозначения.
Обозначаемое арифметическое выражение может содержать сим-
волическое имя обозначенного ранее арифметического выражения.
В файле с текстовым описанием данный оператор обозначения
может использоваться неограниченное число раз.
Отметим, что обозначенное арифметическое выражение оценивается
компилятором и заменяется числом на этапе проверки синтаксиса.
Поэтому его применение не приводит к использованию дополнительных
логических ресурсов СБИС ПЛ.
Parameters Statement (оператор объявления параметров)
Параметр в рамках языка AHDL — символическое имя строки символов,
заключенной в двойные кавычки, или числа, заданного либо явно, либо
являющегося результатом выполнения арифметического выражения.
Parameters Statement (оператор объявления параметров) позволяет
объявить параметры, управляющие реализацией параметрнзироваииых
модулей.
Пример:
1. PARAMETERS
(FIl_ENAME='myflie, йй',
WIDTH,
AO.WICTH,
NUMW0RDS=2"AD_WIDTH );
Структура текстового описания 37
2. PARAMETERS (DEVICE_FAMILY);
DEVICE_FAM1LY предопределенный параметр языка AHDL. Его значение
может быть задано в окне Device (меню Assign).
Правила использования оператора:
Оператор начинается с ключевого слова PARAMETERS, за которым
следует заключенный в скобки список параметров. После закры-
вающей скобки ставится точка с запятой (;).
Список параметров может содержать один или несколько параметров.
Параметры в списке отделяются друг от друга запятой ( ).
Исходное (defaults) значение параметра указывается после симво-
ла «равно» (=). Задание исходного значения является необязатель-
ным.
Параметр может задаваться через другой параметр.
Циклическое задание параметров недопустимо.
PARAMETERS
( PAR_A = PAR_S.
PAR_B = PAR_A );
Заданное пользователем символическое имя параметра должно
быть уникальным и не должно содержать пробелов. Для улучше-
ния читаемости имени следует использовать символ подчеркива-
ния (_).
Область действия параметра — текстовое описание, в котором он
был объявлен.
В файле с текстовым описанием оператор объявления параметров
может использоваться неограниченное число раз.
Компилятор присваивает параметру значение, заданное (источники
указаны в порядке уменьшения старшинства):
при объявлении параметрпзированного модуля в разделе Variable
Section или при нсшосредственном использовании (InLine
Reference) параметрпзированного модуля;
при объявлении в разделе Variable Section модуля, в состав кото-
рого входит парамстризированный модуль;
как глобальное значение параметра (команда Global Project
Parameters меню Assign). Глобальное значение параметра хра-
нится в файле назначений и конфигурации (Assignment &
Configuration File) проекта;
как исходное (defaults) значение параметра.
Function Prototype Statement (оператор описания
прототипа)
Function Prototype Statement (оператор описания прототипа) позволяет
описать интерфейс (входы, выходы, передаваемые параметры) модулей
или примитивов, которые будут использованы в данном текстовом опи-
сании.
38
Основы языка AHDL
Структура текстового описания
39
Примеры:
1. FUNCTION lpm_aad_sub
CCin, dataa[LPM_WIDTH-1.,O],datab[LPM_WIDTH-1..0],add_sub) -- входы
модуля
WITH ( LPM_WIDTH.LPM_REPRESENTATION.
LPM_DIRECTION.ADDERTYPE,
ONE_INPUT_IS_CONSTANT) -- передаваемые параметры
RETURNS (result[LPM_WlDTH-1..0].Ccut.overflow) : -- выходы модуля
2. FUNCTION compare (a[3..0],b[3..0])
RETURNS (less.ecual.greater);
Правила использования оператора:
Оператор начинается с ключевого слова FUNCTION, за которым сле-
дует имя модуля, а за ним — заключенный в скобки список входов
модуля. При описании прототипа параметризировапного модуля
далее следует ключевое слово WITH и заключенный в скобки список
передаваемых в модуль параметров. Затем указывается ключевое
слово RETURNS, и далее — заключенный в скобки список выходов
модуля. Оператор оканчивается точкой с запятой.
Элементы списков (входов, передаваемых параметров, выходов)
отделяются друг от друга запятыми.
В файле с текстовым описанием данный оператор может исполь-
зоваться неограниченное число раз.
Options Statement (оператор задания опции)
Options Statement (оператор задания опции) позволяет определить
в группе элемент с меньшим индексом (BITO) как:
LSB — младший разряд (Least Significant Bit). При этом индексы
в группах должны указываться в убывающей слева направо по-
следовательности;
MSB — старший разряд (Most Significant Bit). При этом индексы
в группах должны указываться в возрастающей слева направо по-
следовательности;
ANY. При этом порядок перечисления индексов в группе произвольный.
Нарушение порядка перечисления индексов в группах ведет к появ-
лению предупреждения на этапе синтаксического анализа текстового
описания.
Пример:
OPTIONS 8ITO = MSB:
Правила использования оператора:
Оператор задания опции начинается с ключевого слова OPTIONS, за
которым следует ключевое слово 8IT0, символ «равно?- (=) и одно из
трех ключевых слов LSB, MSB, any. Далее ставится точка с запятой (; )
Если опция не задана, то по умолчанию предполагается, что
BITO = LSB.
и Значение опции, заданное в файле верхнего уровня иерархии
описаний проекта, распространяется и на файлы с описанием
модулей нижних уровней иерархии, если в них явно не задано
другое значение опции.
В файле с текстовым описанием данный оператор может исполь-
зоваться только один раз.
Assert Statement (оператор контроля)
Assert Statement (оператор контроля) позволяет проконтролировать
истинность арифметического выражения, а для случая, когда оно ложно,
указать текст сообщения и определить реакцию компилятора.
Пример:
ASSERT (WIDTH>0)
REPORT "Width (%) must be apositive intege-" WIDTH
SEVERITY ERROR;
Правила использования оператора:
Оператор начинается с ключевого слова ASSERT, за которым следует
арифметическое выражение. Если значение выражения False (лож-
но), то контролируемое условие считается невыполненным, и про-
цессор сообщений (Message Processor) отображает заключенное
в двойные кавычки сообщение, следующее за ключевым словом
REPORT.
Сообщение может содержать символ процент (%), который заменя-
ется значением переменной, указываемой после закрывающих
двойных кавычек. Если используется несколько символов процен-
та (%), то переменные перечисляются через запятую в том порядке,
в котором должны подставляться их значения.
Необязательное ключевое слово SEVERITY позволяет задать реакцию
компилятора («уровень строгости» сообщения): ERROR — ошиб-
ка, WARNING — предупреждение, INFO — информация. При от-
сутствии ключевого слова SEVERITY сообщение, по умолчанию, имеет
«уровень строгости» — ERROR.
Если ключевое слово REPORT и соответствующее сообщение не были
указаны в операторе, то при невыполненных условиях контроля
процессор сообщений (Message Processor) отображает следующую
строчку:
<"уровень строгости" >: Щпесномео строки:-, ЕПе<и.мя (patira>Assertion failed
Оператор контроля оканчивается символом точка с запятой (:).
Допустимо применение оператора в разделе описания логики
(Logic Section).
В файле с текстовым описанием данный оператор может исполь-
зоваться неограниченное число оаз.
40 Основы языка AHDL
Subdesign Section (раздел описания интерфейса модуля)
Subdesign Section (раздел описания интерфейса) позволяет задать имя
модуля и перечислить его выводы. Имя модуля должно совпадать
с именем логического файла, в котором хранится его текстовое описа-
ние. Если модуль является модулем верхнего уровня иерархии, то его
имя является и именем проекта, а следовательно, это имя будут иметь
и все вспомогательные файлы проекта.
Пример:
SUBDESIGN First_pro)ect
( А,В[4..О] : INPUT=VCC;
О : INPUT=GND;
С[7..1] OUTPUT;
E[3..2] BIDIR;)
Имя файла, в котором должно храниться текстовое описание данного
модуля — Firstproject. tdf
Правила использования раздела:
Раздел начинается с ключевого слова SUBDESIGN, за которым следует
имя модуля. Максимальная длина имени 32 символа. Имя модуля
должно совпадать с именем файла, в котором хранится его тексто-
вое описание.
После имени модуля следует заключенный в круглые скобки спи-
сок его выводов.
Типы выводов: INPUT — вход, OUTPUT — выход, BIDIR —
двунаправленный вывод, MACHINE INPUT — вход импортиру-
емых состояний автомата, MACHINE OUTPUT — выход экс-
портируемых состояний автомата. Выводы MACHINE INPUT
и MACHINE OUTPUT не могут быть использованы в текстовом
описании верхнего уровня иерархии, т. е. при описании модуля,
выводы которого являются выводами СБИС.
Выводы перечисляются через занятую в одну или несколько стро-
чек. В конце перечня однотипных выводов ставится двоеточие,
затем ключевое слово, указывающее тип выводов, и далее — точка
с запятой.
После ключевого слова INPUT может быть указано базовое значение
(GND — логический пуль, VCC — логическая единица) входного сиг-
нала. Базовое значение — значение, которое будет подаваться
на вход в том случае, если он окажется неподключенным при
использовании данного модуля как компонента при описании
модуля более высокого уровня иерархии. Если неподключенным
окажется вход, для которого не указано базовое значение, то ком-
пилятор пакета MAX+plus II выдаст сообщение об ошибке.
В файле с текстовым описанием данный раздел может использо-
ваться только один раз.
Структура текстового описания 41
Variable Section (раздел переменных)
Variable Section (раздел переменных) позволяет задавать внутренние
переменные модуля, предназначенные для использования в разделе
описания логики (Logic Section).
Переменная — это символическое имя: линии связи; линии связи
с тремя состояниями; модуля, используемого в текстовом описании
в качестве компонента (примитива, конечного автомата).
Пример:
INCLUDE "halfacfc. inc":
VARIABLE
a.b.c : NODE:-- a.o.c - именованные линии связи
add : halfadc;
-- naifadd - «одуль. используемаи в данном текстовом описании как
компонент, add - имя компонента.
tsnode TRI_STATE_NODE: -- tsnode - линия связи с Z состоянием
ff[3..O] : DFF;
-- ff[3].ff[2].ff[l] - группа переменных, обозначающих 'р/'геры
АА : MACHINE OF BITS (01.02,03)
hlTri STATES (A0=B"00O",
А1=В"00Г,
А2=В"01Г): -- АА - конечный автомат
Правила использования раздела:
Раздел начинается с ключевого слова VARIABLE. Далее указывается:
символическое имя переменной, символ двоеточие, тип перемен-
ной, точка с запятой. Имена однотипных переменных могут быть
перечислены через запятую.
Допустимые типы переменных: NODE — линия связи; TRI_STATE_NODE —
линия связи с тремя состояниями; модуль более низкого уровня
иерархии; примитив; конечный автомат; псевдоним конечного ав-
томата.
Раздел переменных может также содержать оператор IF GENERATE,
позволяющий, в зависимости от значения оцениваемого в опе-
раторе арифметического выражения, управлять заданием пере-
менных.
В файле с текстовым описанием данный раздел может использо-
ваться только один раз.
Logic Section (раздел описания логики)
Logic Section (раздел описания логики) позволяет задать алгоритм ра-
боты проектируемого модуля.
Правила использования раздела:
Раздел начинается с ключевого слова BEGIN и заканчивается клю-
чевым словом END, за которым следует точка с запятой (:).
UCHUttbl NJblAU AU ll>L
Применение конструкций языке
43
В разделе могут быть использованы:
- Defaults Statement (Оператор задания исходных значений);
- Boolean Equations (Логические уравнения);
- Boolean Control Equations (Логические уравнения для управля-
ющих сигналов);
- Case Statement (Оператор CASE);
- If Then Statement (Оператор If Then);
- If Generate Statement (Оператор IF Generate);
- In-line Logic Function reference (непосредственное обращение
к модулям нижнего уровня в иерархии описаний и примитивам)
- For Generate Statement (Оператор For Generate);
- Truth Table Statement (Таблица истинности);
- Assert Statement (Оператор контроля).
Если в разделе логики используется оператор задания исход-
ных значений (Defaults Statement), то он должен стоять сразу
после ключевого слова BEGIN. Последовательность применения
других операторов — произвольная.
В файле с текстовым описанием данный раздел может использо-
ваться только один раз.
BEGIN -- раздел описания логики работы модули
0UT1=A1&!АО:
OUT2=OUT1#B;
END;
Представленное текстовое описание включает минимально необходи-
мый набор разделов:
Раздел интерфейса (SUBDESIGN SECTION).
Раздел описания логики (LOGIC SECTION).
Имя модуля boole l должно совпадать с именем файла (boole_1. TDF),
в котором хранится приведенное текстовое описание.
Отметим, что порядок использования логических уравнений OUT^Ai&iAO;
и GLT2-OUT1 вВ; может быть произвольным, поскольку в отличие от языков
программирования компилятор осуществляет параллельное их выполне-
ние. Поэтому следующее описание комбинационной схемы:
BEGIN
0UT2=0UTl#B:
0UT1=A1&'АО.
END;
Применение конструкций языка
Логические уравнения
Использование логических уравнений рассмотрим на примере описания
комбинационной схемы, изображенной на рис. 2.6.
логически эквивалентно исходному
Переменные типа NODE
Для упрощения записи логических уравнений целесообразно использо-
вать переменную типа NODE (именованную линию связи). Комбинацион-
ная схема с линией связи (INT_VAR) приведена на рис. 2.7.
Рис. 2.6
Текстовое описание:
SUBDESIGN boole_1
(
А0.А1.В INPUT;
OUT1, OUT2 : OUTPUT;
-- раздел описания интерфейса модуля
-- входы
-- выходы
Текстовое описание:
SUBDESIGN boole_2
(
А0.А1.В INPUT;
OUT ; OUTPUT;
44
Основы языке AHDL
VARIABLE -- раздел переменно
IN7_VAR :NODE; — определение переменной (линии связи) INT_VAR
BEGIN
0UT=INT_VAR#B:
INT_VAR=A1&!АО;
END:
Отметим, что внутренняя линия связи INT_VAR окажется недоступ-
ной для наблюдения при реализации временного моделирования работы
СБИС. Поскольку в процессе синтеза и разводки СБИС она «раство-
рится» либо в четырехвходовой таблице перекодировок (при размеще-
нии схемы в СБИС семейства FLEX), либо в программируемой матрице
«И» (при размещении схемы в СБИС семейства МАХ)[1].
Если, тем не менее, нам необходимо наблюдать сигнал в точке
INT_VAR при временном моделировании работы СБИС, то целесооб-
разно использовать буфер LCELL (рис. 2.8)
Рис. 2.8
В этом случае комбинационная схема будет реализована на двух
логических элементах (макроячейках), и линия INT_VAR. линия связи
между логическими элементами, станет доступной для наблюдения.
Текстовое описание, соответствующее рис. 2.8:
SUBDESIGN boole_lc
(
АО.Al,8 INPUT:
OUT OUTPUT;
)
VARIABLE -- раздел переменных
INT_VAR :NODE: -- определение переменной (линии связи)
INT_VAR
BEGIN
OUT=INT_VAR#B;
INT_VAR=LCELL(A1&'AO);
END;
Применение конструкций языка 45
Именованные операторы
Логическим операторам и операторам сравнения в текстовом описании
могут быть присвоены символические имена. Их применение позволяет
упростить как интерпретацию синтезированных компилятором логических
выражений, так и ручное переразмещепие внутренних ресурсов СБИС.
Имя, присваиваемое оператору, отделяется от него двоеточием (:).
Приведенное ниже текстовое описание, логически эквивалентное тек-
стовому описанию модуля Воо1е_1, иллюстрирует использование имено-
ванных операторов.
SUBDESIGN boole_3
(
АО.А1.В INPUT;
0UT1.0UT2 OUTPUT.
)
BEGIN
OUT1=A1 tiger:4!A0; -- tiger - л«я оператооа 4
OUT2=OUT1 pantner:i;B; -- panther - имя оператора в
END;
Ниже приведставлены логические уравнения, синтезированные па-
кетом при компиляции модуля Воо1е_3 (уравнения взяты из раздела
Equations файла отчета):
- EQUATIONS ••
АО INPUT;
А1 INPUT;
В : INPUT;
-- Node name is OUT1' from file "boole_3.tdf" line 7, column 1
-- Equation name is OUT1 type is output
OUT1 = tiger’O;
-- Node name is 0UT2' from file "boole_3.tdf‘ line 8, column 1
-- Equation name is ’0UT2', type is output
OUT2 = panther’O;
— Node name is 'panther’O' from file "boole_3. tdf" line 8, column 19
- - Equation name is 'panther'O', location is LC1_A1, type is buried.
panther’O = LCELL( _EQ001);
_EQOO1 = tiger'O it B;
- - Node name is 'tiger'O' from file "boole_3.tdf" line 7. column 21
- - Equation name is tiger'O , location is LC3_A1. type is buried
tiger'O = LCELLC _EQ002);
-EQ002 = !A0 & A1.
Остановимся на них более подробно.
На выход OUT1 передается значение логического выражения tigner'O:
0UT1 = tiger’O, реализованного па отдельном логическом элементе:
tiger'O = LCELL(_EQC02). где _Е0002 = ! АО & А1.
основы языка AHUL
Применение конструкций языка
47
На выход 0UT2 передается значение логического выражения
panther'O: OUT2 = panther'O, реализованного на отдельном логическом эле-
менте:
panther'O = LCELL(_EOOO1). где _Е0001 = tiger'0#B.
Отметим, что в разделе Equation файла отчета содержится информа-
ция и о размещении использованных логических ячеек в СБИС про-
граммируемой логики[1]. Так panther'O размещена в первом логическом
элементе (LC1), находящемся в первой колонке строки А СБИС,
a tiger'O — в третьем логическом элементе (LC3), также находящемся
в первой колонке строки А.
Группы
Однотипные переменные или выводы могут быть объединены в одно-
мерную, двумерную или временную группу.
Одномерные и временные группы
Текстовое описание, иллюстрирующее использование одномерных
и временных групп:
SUBDESIGN GROUP_1
(
А[3..0]: INPUT; -- одномерная группа с четырьмя членами
В[4.. 1]: INPUT; -- одномерная группа с четырьмя членами
c.d.e.f: INPUT; -- однооазрядные входы
0UT[5..2] : OUTPUT. -- одномерная группа с четырьмя членами
)
BEGIN
OUT[]=(A[] # В[1..4]} I '(c.d.e.f);
END;
Комбинационная схема, соответствующая модулю GRCUP.1, приведена
на рис. 2.9.
Группы А[ ] и В[] имеют одинаковое число членов, поэтому возможно
поразрядное применение оператора #: А[] # В[1. .4].
При ссылке на группу В[4.. 1] ее индексы перечислены в обратном
порядке В[1. .4]. Поэтому при компиляции проекта процессор сообще-
ний сформирует следующее предупреждение:
"Warning: Line 9. File c:\max_work\ooole_1\g'oup_1.tdf:
Group range B[1..4] differs from declaration B[4..1]"
Если в логическом уравнении используются все члены группы, при-
чем в том же порядке, в котором они были заданы, то для ссылки на
такую группу можно воспользоваться сокращенной формой записи: А[]
вместо А[3.. 0].
(c.d.f.g) — временная группа с четырьмя членами. Выражение
! (c.d.f.g) задает поразрядное выполнение инвертирования.
В выражении (А[] # В[1..4]) & !(c,d,e.f) операндами оператора &
Г . 7 ।----------ч №ит]
i АЗ I. ... I -I------------
I-----------------------1
।______________________।
[output
являются две четырехразрядные группы: А[3]вВ[1], А[2]йВ[2], А[1 ]#В[3],
A[0]tfB[4] и !с, !d, !е, !f. Поэтому возможно его поразрядное приме-
нение.
Значение одной группы может быть присвоено другой группе
(т. е. между ними можно поставить знак равенства) только в том случае,
когда они имеют одинаковое число разрядов. Поэтому группа OUT[ ] так-
же является четерехразрялной.
Двумерные группы
Текстовое описание, иллюстрирующее применение двумерных групп:
SUBDESIGN GR0UP.2
(
А[2..1] INPUT:
R[1.. 0][2. 1] : OUTPUT:
)
BEGIN
R[][]= (A[1..2]. A[]);
END:
Отметим, что группы слева и справа от знака равенства (=) имеют
одинаковое число разрядов. На рис. 2.10 представлена схема, соответ-
ствующая модулю GR0UP_2.
г А2 [------------
I______________________I
।______________________।
।________
^Output
-I-------
I________
^output
I________
[output
।
________I
I
>/?/? ।
________I
---------!
> ROZ ।
_______J
>/?07 ।
Pnc. 2.10
Таблица истинности
Таблица истинности логической функции задается следующим образом:
TABLE
node_name, node.name => node_name. ncce name;
input_value. input_value => output.vaiue. output_value;
input_value, input_value => output-value output_value;
__input_value. input.value => output.value. output.value;
END TABLE;
Открывает таблицу ключевое слово TABLE, а закрывают ключевые
слова END TABLE, за которыми следует точка с запятой (:).
Первая после слова TABLE строка определяет форму таблицы. В ней
через запятую перечисляются аргументы (внутренние переменные, вхо-
ды или выходы модуля) н имена формируемых логических функций
(внутренние переменные или выходы модуля). Аргументы и функции
разделяет символ стрелка (=>). В конце строки ставится точка с запятой.
В следующих строках в соответствии с заданной формой указываются
наборы аргументов и значения логических функций.
Рассмотрим использование таблицы истинности на примере описа-
ния приоритетного шифратора.
SUBDESIGN TRUTH-TABLE
( nigh, middle, low : INPUT-
highest_level[1..0] OUTPUT;
)
BEGIN
TABLE
high. ir.icdle. low => highest_level[ ]
1. x, x -> B"11"
0. 1. x => B'W
0. 0. 1 => B"01"
0. 0. 0 => B"00"
END TABLE:
END;
Приведенная таблица истинности задает две логические функции от
трех аргументов. Если аргумент hign=i, то при любых значениях аргу-
ментов middle и low (данные аргументы заданы в таблице символом х" -
don't саге) группе выходов highest_level будет присвоено значение В" 11"
и так далее. При равенстве всех аргументов логическому нулю группе
выходов hignesr_level[] будет присвоено значение ЕГОС".
Оператор IF THEN
Оператор IF THEN может использоваться в одной из следующих форм:
IE .expression
THEN
__statement;
—Statement;
ELSIF ___expression
THEN
__statement:
__statement;
else'
__statement;
__statement;
END IF;
IF __expression
THEN
__statement;
__statement;
ELSE
__statement;
__statement;
END IF:
IF __expression
THEN
__statement:
__statement.
END IF;
Он, в общем случае, позволяет последовательно оценить истинность
нескольких логических выражений и в соответствии с полученными
Результатами выполнить те или иные действия.
Рассмотрим использование оператора IF THEN на примере описания
приоритетного шифратора, заданного в модуле TRUTH-TABLE таблицей
истинности.
50
SUBDESIGN IF.THEN
( high, middle, low INPUT.
highest_level[1..0] OUTPUT,
)
BEGIN
IF high == 1
THEN
highest-level []=3:
ELSIE middle == 1
THEN
highest-level []=2:
ELSIE low == 1
THEN
hignest_level []=1;
ELSE
highest-level []=0:
ENO IF;
END;
Основы языка AHDL Применение конструкций языка 5
Оператор CASE
Оператор CASE может использоваться в одной из следующих форм:
CASE __expression IS
UjHEN ccnstant_val je =>
______statement:
______statement:
WHEN___cor.stant_value =>
__statement;
___statement.
WHEN OTHERS =>
______statement;
______statement;
END CASE;
CASE __exoression IS
WHEN __constant_value =>
__statement:
__statement;
WHEN___constant_val(je =>
__statement;
__statement.
END CASE;
Оператор CASE позволяет оцепить значение одноразрядной пере-
менной (одноразрядного вывода), группы переменных (группы выво-
дов) и по результатам оценки выбрать тот или иной оператор для вы-
полнения.
Отмстим, что оператору IF THEN внутренне присуща приоритетность. Использование оператора CASE проиллюстрируем на примере описания
Так, проверяемый первым вход high имеет высший приоритет: ec.J1P,I0P1'11 етного шифратора, представленного ранее в модулях TRUTH.TABLE
high=l, то при любых значениях сигналов на входах middle и low (i* IF-JREN.
значения даже не проверяются) группе выходов hignest_level будет при- SUEDESIGN CASE
своено двоичное число В” 11". Вход middle имеет более низкий приоритет, (high, middle, "low • INPUT-
а вход low — низший. __ highest-level [1..0] : OUiPUT;
Составной оператор IF THEN — оператор, включающий выражение ELST, )
компилятор интерпретирует следующим ооразом:
Исходный текст: Интерпретация компилятора:
IF high == 1 IF high
THEN THEN
hignest_level []=3; hignest_level[]=3;
ELSIF middle == 1 END IF;
THEN IF !high & middle
highest-level []=2 THEN
ELSIF low == 1 highest_level[]=2;
THEN END IF:
highest-level []=1: IF thigh & Imidole & low
ELSE THEN
highest-level []=0; highest-level []=1:
END IF; END IF; IF !high & .'middle & How THEN highest-level []=0; END IF:
BEGIN
CASE (high, middle, low) IS
WHEN B"1xx" => highest_level[]=3;
WHEN B"01x" => higtiest_level[ ]=2;
WHEN B"001" => higrest_level[]=1;
WHEN OTHERS -> highest_level[]=0;
END CASE;
END;
В операторе CASE оценивается значение временной группы (high,
'iddle, low). Если ее значение соответствует:
двоичному числу В" 1хх", то выполняется оператор, присваивающий
группе выходов righest_level[] десятичное число 3;
двоичному числу В"01х". то группе выходов highest_level[] присва-
ивается десятичное число 2;
двоичному числу В”001", то группе выходов highest_level[] присва-
ивается десятичное число 1;
другим (WHEN OTHERS), не указанным выше трехразрядным двоич-
ным числам, то группе выходов highest_level[] будет присвоено
десятичное число 0.
Основы языка AHDL
Напомним, что двоичное число В"1хх" соответствует набору чисел: В"Ю0".
В”101", В"110”, В”11Г. Поэтому оператор WHEN OTHERS => highest_level[]=C
в данном примере эквивалентен оператору WHEN В"000" => highes:_level[]=O.
Базовые значения логических функций
Необходимость в задании базовых значении логических функций возни-
кает тогда, когда они определены не на всех наборах аргументов.
Базовые значения могут быть заданы:
неявно (по умолчанию);
явно.
Задаваемое по умолчанию базовое значение — логический нуль.
Проиллюстрируем неявное задание базовых значений па примере;
SUBCESIGN DEFAULT.1
(
ADR [15..0], rr.ern/IO • INPUT:
ROM, RAM, PRINT, SP [1..0] OUTPUT;
)
BEGIN
TABLE
mem/IO, ADR [] => RON. RAM. DRINT, SP [];
1 B"00xxxxxxxxxxxxxx" => 1. 0. 0. В ••01”:
1 B"11xxxxxxxxxxxxxx" => 0. 1. 0. В”10":
0 B"’10000000101001 r>’ => 0. 0. 1. 3"11";
END TABLE-
END;
Логические функции ROM, ram, PRINT, SP[2], SP[1] определены не на всех
наборах аргументов. Поскольку ист явного задания их базовых значе-
ний, то ио умолчанию они будут равны нулю на всех нс приведенных
в таблице истинности наборах аргументов.
Результаты моделирования модуля DEFAULT_1 представлены на рис. 2.11.
Применение конструкций языка 53
Для явного задания базовых значений логических функций применя-
ется оператор DEFAULTS:
DEFAULTS
___node_name = __constant_value;
END DEFAULTS:
Использование этого оператора иллюстрируется в следующем при-
мере:
SUBDESIGN DEFAULTS
(
IN[3..O] : INPUT;
ASCII_0DDE[7. .0] : OUTPUT;
)
BEGIN
DEFAULTS
ASCII_C0DE[]=B”00111111".-- код. соответствующий символу «?
END DEFAULTS;
TABLE
IN[] => ASCII_CODE[];
B"1000" => B"01100001’ , -- символ -a-
B’’11OO" => B”01100010"; -- символ -b-
B”1110” => B"01100011"; -- символ -с»
B”1111" => B''01100100’'; -- символ «сЫ
END TABLE:
END;
Группа выводов ASCII_C0DE[] на всех, не указанных в таблице истин-
ности наборах аргументов, будет иметь значение B"00111111", явно задан-
ное в операторе DEFAULTS.
При описании логической функции с помощью операторов CASE
и IF THEN целесообразно явное определение ее на всех наборах аргу-
ментов.
ADR 00XXXXXX /XXXXXXX} / XXXXXX. fXXXXXXX} ' 100000ЦП0100111 [oooooooooopooo
». mem/IO
ROM
RAM
, PRINT
4~SP[1..0l ° ) CjlJ UlJ ( ° Lj_J ( ° >
Рис. 2.11
SUBDESIGN DEFAULT_3
(
IN[3..O] INPUT.
ASCII C0DE[7..0] OUTPUT;
)
BEGIN
CASE IN[] IS
WHEN В”1000" =>ASCII_CCDE[]=В"01100001"; — СИМВОЛ «а>»
WHEN В”1100" =>ASCII_CODE[]=8’01100010"; -- СИМВОЛ «ь°
WHEN В"1110" =>ASCII_CODE[]=B"O1100011": -- символ «с»
WHEN B"1111" =>ASCII_C0DE[j=B"01100100”; -- символ
WHEN OTHERS =>ASCII_CODEI]=B"00111111"; -- символ «?»
End CASE;
END;
В приведенном примере использована конструкция WHEN OTHERS (когда
другие) оператора CASE. Эта конструкция задает группе выходов
ASCII_CODE[] значение В-'00111111' на всех не указанных ранее в операторе
CASE наборах аргументов.
Результаты моделирования логически эквивалентных модулей
DEFAULT.2 и DEFAULT_3 приведены на рис. 2.12
Narre:
0.1 0.2 0.3 0.4 0.S 0.6 0.7 0.8 0.9 1.0
ADR
SPH..01
1.2
1000
I 3F
61
I 3F I
Pnc. 2.12
Заметим, что если значение логической функции на некоторых набо-
рах аргументов для нас безразлично, то на этих наборах аргументов ей
следует присвоить значение Ь”х", что позволит компилятору более эф-
фективно минимизировать логическую функцию.
Константы
Использование в текстовом описании символических имен вместо фик-
сированных числовых значений (т. е. использование констант) позво-
ляет:
сделать текстовое описание более наглядным;
упростить внесение изменений, связанных с изменением фиксиро-
ванных числовых значений.
Ниже представлено описание адресного декодера, в котором базовые
значения адресов задаются константами.
CONSTANT ADR.WIDTH
CONSTANT Number.IO
CONSTANT 10, ADR
CONSTANT Command
CONSTANT DAC
CONSTANT ADC
SUBDESIGN Constant
= 8:
= 16:
= 2" ADR.WIDTH - Nember.IO
= I0.ADR;
= 10.ADR + 1;
= IO.ADR + 2;
(
ADR[ADR.WIDTH..1], Read, write : INPUT;
Wr.Command. Rd.Conmanc. Wr.DAC. Ro.ADC : OUTPUT;
)
BEGIN
if ADR[] == Command
then
if Write==1
then Wr.Comniano = VCC;
elsif Read==1
then Rd.Commana - VCC;
end if:
end if:
if ADR[] == DAC
then
if Write==i
then Wr.DAC = VCC:
end if;
end if;
if ADR[] == ADC
then
if Read==1
then Ro.ADC = VCC:
end if;
end if;
END;
В приведенном примере базовое значение адреса ввода/вывода
(IO_ADR) определено через разрядность шины адреса (ADR WIDTH)
и число адресов, зарезервированных под ввод/вывод (Numbcr lO). Ад-
реса регистров: команд (Command), АЦП (ADC), ЦАП (DAC) заданы
смещениями от базового адреса (IO_ADR).
Результаты моделирования адресного декодера приведены на
рис. 2.13.
Рис. 2.13
Заметим, что для адаптации адресного декодера под другую ширину
адресной шины в текстовом описании достаточно изменить значение
только одной константы — ADR.WIDTH.
Оператор FOR GENERATE
Оператор FOR GENERATE (оператор цикла) позволяет упростить за-
пись последовательности сходных логических уравнении и операторов
языка AHDL.
Оператор цикла имеет вид:
FOR „index_variable IN „range GENERATE
„statement:
__statement;
END GENERATE;
Оператор задается следующим образом:
За ключевым словом FOR указывается символическое имя внутрен-
ней переменной оператора. Это имя не может совпадать с именем
констант, параметров или переменных, используемых в текстовом
описании.
Ключевые слова In ... ТО ... определяют границы изменения зна-
чений внутренней переменной оператора.
Границы задаются арифметическими выражениями.
За ключевым словом GENERATE следуют логические уравнения
и операторы языка AHDL.
Оператор оканчивается ключе'выми словами END GENERATE, за кото-
рыми следует точка с запятой (;).
Проиллюстрируем использование оператора FOR GENERATE для описа-
ния на вентильном уровне Х-разрядиого сумматора, имеющего вход
и выход переноса.
CONSTANT NIIM_OF_ADDERS = В:
SUBDESIGN FOR_GEN
(
a[NUM_OF_ADDERS..1]. b[NUM_OF_ADDERS. 1]. cin : INPUT;
c[NUM_OF_AODERS..1]. cout : OUTPUT;
)
VARIABLE
carry_out[(NUM_0F_A3DERS+1}..1] : NODE:
BEGIN
carry_out[l] = cin;
FOR i IN 1 TO NUM_OF_ACDERS GENERATE
c[i] = a[i] $ bii] $ carry_out[i];
carry_out[i+i] = a[i] & o[i] в carry_out[i] & (a[i] $ b[i]);
END GENERATE;
cout = carry_out[NUM_0F_ADDERS+1]:
END:
Описание, заданное оператором FOR GENERATE при num._of_addERS=4, соот-
ветствует следующим уравнениям:
Применение конструкций языке 57
с[1] = а[1] $ b[1] $ carry_out[11;
carry_out[2] = а[1] & Ь[1] я car-'y_out[ 1) & (а[1] $ Ь[1]);
с[2] = а[2] $ Ь[2] $ carry_out[2];
carry_out[3] = а[2] & о[2] Я carry_out(2] & (а[2] $ Ь[2]):
с[3] = а[3] $ b[3] $ carry_out[3]:
carry_out[4] = а[3] & b[3] я carry_out[3] & (а[3] S b[3]):
с[4] = а[4] $ b[4] S carry_out[4];
carry_out[5] = а[4] & э[4] я carry_out[4] & (а[4] $ Ь[4]);
Результаты моделирования описанного сумматора при NUM_0F_aDDEFS=8
приведены на рис. 2.14
Заметим, что для изменения разрядности сумматора достаточно
в текстовом описании изменить значение константы NUM_of_a0DERS.
Параметры
Язык AHDL позволяет создать парамстризпрованное описание моду-
ля — описание, адаптирующееся к конкретным условиям применения
модуля, т. е. к конкретным значениям параметра.
Значение параметра, в отличие от значения константы, может быть
задано вне того текстового описания, в котором этот параметр определен
и используется.
Ниже приведено поведенческое (алгоритмическое) описание сумма-
тора, разрядность которого определяется параметром ADD_WID7.4.
PARAMETERS ( ADD.WIDTH =8);
SUBDESIGN Parameter.
(
A(ADO_WIDTH..1]. 3[ADD_NIDTH.. 1]: INPUT:
SUM[ADD.WIDTH..1], Cout : OUTPUT;
)
BEGIN
(Cout.SUM]]) = (GND.A[]> + (GND,B[]);
END;
Описанный сумматор обеспечивает сложение двух ADD_WIDTH-
разрядных операндов и формирование ADD_WIDTFI-pa3pnaHoro ре-
зультата (SUM[]) и переноса в следующий разряд.
При объявлении параметру ADD_WIDTH присваивается исходное значе-
ние — восемь. Поэтому, если вне данного текстового описания ему не
будет задано иное значение, то компилятор синтезирует восьмиразряд-
ный сумматор.
В языке AHDL определен параметр Device_Family, значение которо-
го — название семейства СБИС, выбранного для реализации модуля
(команда Device, меню Assign).
Отметим, что максимальный эффект от использования параметров
достигается при создании библиотек параметризированных модулей,
предназначенных для повторного использования.
Оператор IF GENERATE
Оператор IF GENERATE позволяет оценить значение арифметического
выражения и по результатам оценки сформировать то или иное описа-
ние проектируемого модуля.
Оператор может использоваться в полной, либо упрошенной форме.
Полная форма: Упрощенная форма:
IF __expression GENERATE IF _expression GENERATE
__statement; _statement:
__statement: _statement:
ELSE GENERATE END GENERATE:
__statement;
__statement;
END GENERATE:
Оператор задается следующим образом:
За ключевым словом IF указывается оцениваемое арифметическое
выражение.
За ключевым словом GENERATE следуют операторы языка AHDL,
которые будут использованы в текстовом описании при истинно-
сти оцениваемого арифметического выражения.
При наличии ключевых слов ELSE GENERATE за ними указываются
операторы, которые будут использованы в текстовом описании
в том случае, если оцениваемое арифметическое выражение ложно.
Оператор оканчивается ключевыми словами END GENERATE, за кото-
рыми следует точка с запятой (:).
Применение оператора проиллюстрируем на примере текстового опи-
сания, которое в зависимости от значения параметра Mooule_Type будет
задавать либо сумматор, либо вычитатель разрядностью WIDTH.
PARAMETERS
(
Width = 8.
Module_Type = "ADD"
);
SUBDESIGN IF_GEN
(
A[WIDTH..1].B[WIDTH. . 1] : INPUT;
Result[WIDTH..1]. Cout . OUTPUT;
)
BEGIN
IF Moaule_TyPe =='ADD” GENERATE
(Cent. Result!]) = (GND.A[])+(GND, B[ ]);
ELSE GENERATE
(Cout, Result!]) = (GND.A[])-(GND,B[]):
END GENERATE:
END;
При исходных значениях параметров компилятор синтезирует вось-
миразрядный сумматор, результаты моделирования которого приведены
на рис. 2.15
Рис. 2.15
Если вне текстового описания (например, командой Global Project
Parameters меню Assign) параметру Module_Type присвоить отличное
от ADD значение, то компилятор синтезирует вычитатель, результаты мо-
делирования которого приведены на рис. 2.16.
Напомним, что подстановка значений параметров и формирование
соответствующего текстового описания осуществляется компилятором
на этапе проверки синтаксиса. Поэтому применение оператора IF
GENERATE не приводит к использованию дополнительных логических ре-
сурсов СБИС ПЛ.
Оператор ASSERT
Оператор ASSERT позволяет контролировать истинность арифметичес-
кого выражения, операндами которого являются: параметры, числа, обо-
значепные арифметические выражения, а также значение встроенной
в пакет функции USED.
Функция USED применяется для проверки выводов модуля. Аргумен-
том функции является имя вывода модуля. Возвращаемое значение:
FALSE — если данный вывод модуля не подключен при использовании
модуля как компонента в описании более высокого уровня иерархии,
TRUE — если вывод подключен.
В качестве иллюстрации рассмотрим приведенное ниже текстовое
описание, базирующееся па представленном ранее описании модуля
IF.GEN.
PARAMETERS
(
Width= 8.
Module_Type = "ADD"
):
ASSERT (WIDTH > 0)
REPORT " WIDTH of % must be mere than %" Module_Type. WIDTH
SEVERITY ERROR;
SUBDESIGN ASSERT,
(
AfWIDTH..1].BfWIDTH..1j INPUT;
Result(WIDTH..1]. Cout OUTPUT;
)
BEGIN
ASSERT (Module_Type =="ADD") or (Module_Type --"SUB")
REPORT " Module_Type must be '‘"ADD "' or ""SUB"" but not %" Module_Type
SEVERITY ERROR;
IF Module_Type =="ADD" GENERATE
(Cout, Result!]) = (GND,A[])+(GND. B[]);
ELSE GENERATE
(Cout. Resultf]) = (GND.A[])-(GND,B[]);
END GENERATE;
END:
В приведенном примере оператор ASSERT используется для контроля
значения параметров WIDTH и Mocule.Type.
Так, если значение параметра Mcdule_Type, заданное вне данного тек-
стового описания, отлично от ADD и SUB (например, равно MLN), то ком-
пилятор сформирует следующее сообщение:
Error: Line 17, File c:\max_work\assert_.taf:
Module_Type must be "ADD" or "SUB" but not MIN
Поскольку «уровень строгости» данного сообщения — ERROR, то
компилятор прекратит работу.
Отметим, что при «уровнях строгости» WARRING и INFO компиля-
тор продолжает работу.
Примитивы
Для использования в текстовом описании модуля примитива необходи-
мо обратиться к встроенному в пакет функциональному описанию дан-
ного примитива и сопоставить его выводам числа, константы, перемен-
ные или выводы модуля.
В языке AHDL определены два способа обращения к примитиву:
непосредственное обращение (In_line Reference);
присвоение примитиву символического имени, т. е. объявление его
переменной, и обращение к нему как к переменной.
Непосредственное обращение к примитиву осуществляется следую-
щим образом:
указывается выход (либо внутренняя переменная) модуля, на
который передается сигнал с выхода примитива:
далее ставится знак равенства и имя примитива:
за именем примитива в круглых скобках, через запятую перечис-
ляются передаваемые значения: числа, константы, переменные или
выводы модуля, сопоставляемые входам примитива;
за круглыми скобками ставится точка с запятой.
Сопоставление входов примитива с передаваемыми значениями мо-
жет осуществляться:
позиционно;
ио именам.
При позиционном сопоставлении порядок перечисления передавае-
мых значений должен соответствовать порядку перечисления входов,
использованному в описании прототипа примитива.
Выход модуле (внутренняя переменная)=
Имя примитива (передаваемое значение, передаваемое значение,...);
В качестве примера рассмотрим текстовое описание схемы, представ-
ленной на рис. 2.17
uz
VCHO ы я ы
НП1Л.
63
I Enable [
D_in [
[output.---------. л .
1---->B fn ।
I________________________________I
Рис. 2.17
Применение конструкций языка
Текстовое описание;
SUBDESIGN Prim_in_line2
(
D.in. СЕК. Enable : INPUT.
D.out OUTPUT;
)
BEGIN
D.out = DFFE(D_in, CLK.
END;
Enable);
Текстовое описание;
примитив DFFE, прототип которого
SUBDESIGN Prim.in.linel
(
D.in, Enable INPUT;
D.tri : OUTPUT;
)
BEGIN
D.tri
END;
Отметим, что прототипы примитивов встроены в пакет, и для их подпары: вход, передаваемое значение. Формат записи:
TRI (D.in, Enable):
в модуле Pritn_in_line2 не использу-
В данном примере использован
в пакете MAX+plus II имеет вид:
FUNCTION DFFE (D.CLK.CERn.PRn.ENA)
RETURNS (0);
Входы CLRn и PRn примитива
ются, поэтому их позиции выделены в списке передаваемых значений
запятыми и оставлены пустыми.
При сопоставлении передаваемых значений и входов примитива по
именам в списке передаваемых значений через запятую перечисляются
ключения к текстовому описанию оператор INCLUDE не используется. unn„nr. , ..
гт ' Т-ПТ .. ... MiVtnlnr п -.-.„и гпглплгш. Выход М°ДУЛЙ (внутренняя переменная)=Имя примитива (.имя
Прототип примитива TRI в пакете MAX+plus 11 задан следующие nuvnna_no_on,„ „„ „
х ' г выхода-передазаемое знацание. .имя зыхода=иеовдаваемое значение V
ооразом: '
function TRT с in nF) Пары могут быть расположены в произвольном порядке, т. с. незави-
RFTURNS г ОПТ)' СИмо °Т Т0Г0’ в како*' последовательности перечислены входы в описа-
нии прототипа примитива. Неиспользованные входы примитива в спис-
При обращении к примитиву в списке передаваемых значений перке передаваемых значений не указываются.
вым указан вход D in. Поэтому он будет соединен с входом, указанны Приведенное ниже текстовое описание схемы, логически эквивален-
первым в описании прототипа примитива. Соответственно, вход ЕпаЫ^ное текстовому описанию модуля Prim.in Ипе2, иллюстрирует данный
модуля будет соединен с входом ОЕ примитива TR1. способ сопоставления.
Если некоторые из входов примитива не используются, то соответ
ствующие позиции в списке передаваемых значений должны быть остав
лены пустыми. Проиллюстрируем это на примере текстового описания
схемы, приведенной на рис. 2.18
SUBDESIGN Prim_in_line3
(
D.in, CLK. Er.aole : INPUT:
D.out : OUTPUT:
Г r> ।------------w=er-
I D_m I —r
I______________________I
I_________________________
I- c -, INPUT^
i Enable I >——r
I______________________l
Fare
' I №u I
PRN
o a
1_ CHA
I С1ЯН
Рис. 2.18
)
BEGIN
D.out = DFFEC CLK = CLK. .D= D.in, .ENA=Enable):
------>/7 ouf E№:
------------------' Другой способ обращения к примитиву — обращение к нему как
с переменной.
При реализации этого способа примитив, прежде всего, следует объя-
вить переменной. Для этого в разделе переменных (Variable Section)
^Мволическому имени или группе символических имен сопоставляется
Фимитив. Объявленная таким образом переменная, а также каждая
переменная из объясненной группы переменных, будет иметь тот
набор выводов, что и примитив.
Обращение к конкретному выводу примитива осуществляется путей
указания имени переменной, разделяющей точки и имени вывода при-
митива.
В качестве примера, иллюстрирующего такой способ обращения к при-
митиву, рассмотрим текстовое описание схемы, приведенной на рис. 2.19
л_ BUS А ।
I_____________________I
cl к !----------
_________________________।
/ JD I---К ttip'jp
LoadB I У-^-—н
_______________________I
/ л i--------ч IWPbP
Load А I У-^—ь
___________________I
>BUS А
I__________________
\Ёп_ BUSB [------>
I______________________.
Рис. 2.19
Текстовое описание:
SUBDESIGN Pri.n.var
(
En.BUSA, En.BUSB. LoadA, LoadB. CLK : INPUT;
BUS.A. BUS.B : BIDIR;
)
VARIABLE
RG.BUSA.RG.BUSB DFFE;
BUF.A.BUF.B TRI:
BEGIN
(RG.BUSA.RG.BUSB).CLK = CLK:
RG.BUSA.(D,ENA) = (BUS.B. LoadB);
RG.BUSB.(D.ENA) = (BUS.A. LoadA);
BUF.A.(IN,DE) = (RG.BUSA.0. En.BUSA):
BUF.B.(IN.0E)
BUS.A
BUS.B
END:
(RG.BUSB.0, En.BUSB);
BUF.A.OUT;
BUF.B.OUT;
В данном примере объявлены четыре переменные. Переменные RG.BUSA
и RG.BUSB обозначают примитивы триггеров DFFE, а переменные BUF.A
и BUF.B — примитивы буферов с Z состоянием.
Первое логическое уравнение текстового описания задает соединение
входа CLK модуля с входами CLK двух триггеров. Четвертое логическое
уравнение определяет связь выхода Q одного из триггеров (триггера,
обозначенного RG_BUSA) и входа En_BUSA модуля с входами IN и ОЕ
буфера TRI (буфера, обозначенного BUF_A). Шестое логическое урав-
нение описывает подключение выхода буфера TRI (буфера, обозначен-
ного BUF_A) к выводу BUS_A модуля.
Результаты моделирования созданного модуля приведены на рис. 2.20.
>3US_J
Рис. 2.20.
Прототип модуля
Язык AHDL позволяет при описании модуля использовать в качестве
его компонентов созданные ранее модули. Для этого текстовое описание
Модуля верхнего уровня иерархии должно содержать описания прототи-
пов этих модулей.
з-ггзэ
Прототип задается с помощью оператора Function Prototype
Statement, который может быть расположен либо непосредственно
в текстовом описании, либо в файле включения (Include File), содержи-
мое которого подсоединяется к текстовому описанию на этапе компиля-
ции.
Файл включения (Include File) с описанием прототипа модуля созда-
ется с помощью команды Create Default Include File (меню File), вы-
полняемой в окне текстового редактора пакета MAX+plus II. содержа-
щем описание модуля.
В языке AHDL определены два способа обращения к прототипу
модуля:
Непосредственное обращение (In_Line Reference).
Присвоение прототипу символического имени, т. е. объявление его
переменной, и обращение к нему как к переменной.
Отметим, что указанные способы обращения к прототипу совпадают
с описанными ранее способами обращения к примитиву.
В языке AHDL определено два типа модулей:
Параметризированные (Parameterized).
Непараметризированные (Unparameterized).
При этом, как те, так и другие могут быть созданы либо самим
разработчиком, либо фирмой Altera.
В качестве примера рассмотрим варианты текстового описания моду-
ля Top__level_module, представленного на рис. 2.21.
Рис. 2.21
В нем использовано три компонента, каждый из которых является
модулем более низкого уровня в иерархии описаний. Предположим, что
для модулей Modulej и Module_LPN созданы файлы включения:
Файл Module^. inc
Function Module_1(D[8.. 1])
Returns(0ut[8..1]).
прим нение конструкции языка 67
Файл Mooule_LPM. inc
Function Module_LPM(A[WIDTH..1].BfWlDTH.. 1])
With (WIDTH)
Returns(Out[WIDTH.. 1]).
Ниже представлено текстовое описание, в котором осуществляется
непосредственное обращение к прототипам модулей
INCLUDE "Module_1.inc";
INCLUDE "Module.LPM.inc":
FUNCTION Module_2(Data[8. 1], elk. Reset)
RETURNS (Data_out[8..1]);
SUBDESIGN Top_level_Module
(
Din[8..1], CLK. Reset - INPUT:
Dout[8..1] OUTPUT
)
VARIABLE
Int_A[8..1] NODE;
Int_D[8..1) : NODE:
BEGIN
Int_A[] = Module.K .CLK=CLK, .D[]=Din[]);
- - Int_A[] = Mocfule_1(Din[], ClK);
Int_D[] = Module_LPM(.A[]=Int_A[]. .B[]=Dout[J)
WITH (WIDTH=8);
- - Int_D[] = Module_LPM(Int_A[]. Dout[J)
WITH (WIDTH=8);
Dout[] = Module_2(. CLK=CLK. .DataL]=Int_D[], .Fteset=Reset);
— Dout[] = Module_2(Int D[], CLK. Reset);
END;
Прототипы модулей Module_l и Module LPM, содержащиеся в файлах
включения, подсоединяются к данному текстовому описанию с помо-
щью оператора Include. Прототип же модуля Module s задан непосред-
ственно в текстовом описании.
В разделе Variable объявлены две переменные Int_A[8. .1] и Int_D[8. .1),
являющиеся символическими именами шин, связывающих компоненты
Nodule_i и Module_LPM, Module_LPM и Module_2 соответственно.
Уравнение Int_A[]=Module_i(.CLK=CLK, .D[]=01n[]) иллюстрирует непосред-
ственное обращение к прототипу модуля и сопоставление входов прото-
типа и передаваемых значений по именам. Возвращаемое значение,
Другими словами выходной сигнал компонента, присваивается внутрен-
ней переменной Int_A[],
В следующей строке текстового описания, в строке с комментариями,
Приведено уравнение, логически эквивалентное уравнению, рассмотрен-
ному выше. Однако в нем используется позиционное сопоставление
входов прототипа и передаваемых значений.
з-
Значение параметра WIDTH задается при непосредственном обращение
к прототипу параметризированного модуля.
Рассмотрим теперь текстовое описание модуля Top_Level_Module
в котором компоненты объявляются внутренними переменными.
INCLUDE ”Module_1.inc";
INCLUDE "Module_LPM.inc";
FUNCTION Module_2(Data[8..1], elk, Reset)
RETURNS (Data_out[8..1]);
SUBDESIGN Top_level_Module_v
(
0in[8..1], CLK. Reset. INPUT;
Dout[8..1] OUTPUT;
)
VARIABLE
Var_Module_1 Module_1:
Var_Module_2 : Module_2:
Var_Module_LPM: Module,LPM WITH (WIDTH=8):
BEGIN
V ar_Moaule_1.CLK = CLK;
V ar_Module_2.(CLK.Reset) = (CLK,Reset);
V ar_Moaule_1.D[] = Dln[];
V ar_Module_LPM.A[] = Var_Module_1.OUT[];
V ar_Module_LPM. B[] = Dout[];
Var_Module_2.Data[] = Var_Module_LPM.0UT[];
Dout[] = Var_Module_2.Data_our[];
END;
В разделе переменных объявлены три переменные — символически
имена модулей, используемых в данном текстовом описании как компе
ненты.
Отметим, что при объявлении переменной Var_Module_LPM, обозначай
щей параметризированный модуль, задано значение параметра WIDTH.
Глава III
Практическое использование
языка AHDL
Описание комбинационных схем
Шифратор
Шифратор — комбинационное устройство, преобразующее 2п-разрядный
унитарный код (код «1 из N») в двоичный n-разрядный код.
Описание трехразрядного шифратора:
SUBDESIGN СО
(
IN[8..1] INPUT;
Binary_Code[3..1] : OUTPUT;
)
BEGIN
TABLE
IN[]
=> Binary_Code[];
70 Практическое использование языка ahul
Ь"00000001" => 0:
Ь'ООООООЮ" => 1:
Ь"00000Ю0" => 2:
Ь"00001000" => 3:
Ь•00010000'' => 4:
Ь'ООЮОООО" => 5:
Ь"01000000" => 6;
Ь"10000000" => 7;
END TABLE:
END;
В данном текстовом описании значения логических функций
Binary_Code[3. .1] заданы не на всех наборах аргументов. По умолчанию,
поскольку не использован оператор Defaults, на всех незаданных в таб-
лице истинности наборах аргументов группе выходов Binary_Code[3..1.
будет присвоено значение В"000".
Результаты моделирования модуля CD приведены на рис. 3.1.
Name
мел/
Bmary_Codell. ll
Рис. 3.1
Для ввода данных с клавиатуры обычно применяется неполны?
шифратор 10—*4. В таком шифраторе клавише каждой^ десятичной циф-
ры соответствует свой двоичный код. Признак ошиоки формируется
если одновременно нажато более одной клавиши или не нажато hi
одной клавиши.
SUBDESIGN CD10.4
(
IN[9..0] : INPUT;
Binary_code[4..1], ERROR- : OUTPUT;
)
BEGIN
CASE WHEN INC] H'001" IS => Binary_code[] = 8"0000"; -- нажата клавиша 0
WHEN H"002" => Binary.codef] = B'OOOT': -- нажата клавиша 1
WHEN H"004" => Binary_code[] = B'0010”; -- нажата клавиша 2
WHEN H"008" => Binary_code[] = B"00H"; -- нажата клавиша 3
WHEN H"010" => Binary.codef] = B"O1OO"; — нажата клавиша 4
WHEN H"020" => Binary_code[] = B"0101"; -- нажата клавиша 5
WHEN H"040" => Binary_code[] = 8”0110"; -- нажата клавиша 6
Описание комбинационных схем
WHEN H-080" => Binary.codef] = В"011Г'; - нажата клавиша 7
WHEN H 100 => Binary_code[] = B"1000"; -- нажата клавиша 8
WHEN H"200" => Binary_code[] = В"1001"; - нажата клавиша 9
WHEN OTHERS => ERROR. = VCC:
END CASE;
END;
В приведенном текстовом описании значения логических функций
Binary_code[4. 1] и ERROR, заданы не на всех наборах аргументов. Поэтому,
так же как и в предыдущем примере, на этих наборах они будут иметь
значение логического нуля.
Результаты моделирования модуля CD10.4 приведены на рис. 3.2.
Рис. 3.2
Дешифратор
Дешифратор - комбинационное устройство, преобразующее двоичный
Д в код «1 из N». Полный дешифратор имеет п входов и 2П выходов,
Полный — менее чем 2" выходов.
описание одного трехразрядного дешифратора с инверс-
72
Практическое использование языка AHDL
SUBDESIGN DC
(
IN[3..1] : INPUT:
nOUT[7..O] : OUTPUT;
BEGIN
CASE IN[] IS
WHEN 0 => nOUT[] = B"111111Ю
WHEN 1 => nOUT[] = B"1111110l"
WHEN 2 => nOUT[] = B"1111l011"
WHEN 3 => nOUT[] =
WHEN 4 => nOUT[] = В'^ИСИПГ
WHEN 5 => nOUT[] = B"11011111”
WHEN 6 => nOUT[] = В"1011111Г
WHEN 7 => nOUT[] = B"O1111111"
END CASE;
END:
Ha рис. 3.3 приведены результаты моделирования созданного дешиф-
ратора.
TO 100 150 200 250 500 550 COO C5O n- ”an)e' li i _J ! 1 ’ . —
1 I I 1 1 i 1 1 i ! ft. 1 1 1 1 1 1 I 1
u= 1 1 1" 1 1- 1 1 1 1 H 1 1 1 1 П 1 1 1 1- I 1 1 1 1- 1 1 i 1 1- 1 1 1 1 [ 1 b 1 1 1 1 r i 1- i i i i i i i i i 1 1 1 1 1 1 f- 1 1 1 1 1 1 i- 1 1 1- 1 1 1 1 " T • — [ 1 г 1 k- 1 1 1 1 i i i i i 1 L 1 1 1 1 г 1 1- 1 1 T I h- 1 [ [ 1 1 1 1 1
Рис. 3.3
Мультиплексор
Мультиплексор — комбинационное устройство, позволяющее последова-
тельно опрашивать большое число входов и передавать их состояний
на один выход.
Число информационных входов мультиплексора обычно равно 2", гд^
н — число адресных входов.
Описание комбинационных схем 73
Описание мультиплексора, имеющего 4 информационных входа
(I[4..1J), 2 адресных входа (ADR[2..i]) и вход разрешения работы
(ENABLE):
SUBDESIGN MUX
(
1(4.. 1], ADR[2. 1]. ENABLE INPUT;
OUT OUTPUT;
)
BEGIN
IF ENABLE THEN
CASE ADR[] IS
WHEN 0 => OUT = I[1];
WHEN 1 OUT = 1(2];
WHEN 2 => OUT = I[3];
WHEN 3 => OUT = I[4);
END CASE:
END IF:
END;
При ENABLE = 0 на выходе мультиплексора будет логический нуль
независимо от состояния других входов (поскольку в данном текстовом
описании логическая функция OUT не была определена на таких наборах
аргументов). Если ENABLE = 1, то сигнал на выходе определяется адрес-
ным кодом ADR[] и уровнем сигнала на соответствующем информацион-
ном входе.
На рис. 3.4 приведены результаты моделирования созданного муль-
типлексора.
Рассмотрим параметризированное описание шинного мультиплексо-
ра, на вход которого поступают две WIDTH-разрядные шины AfwiDTH.. 1],
BCWIDTH..11 и одноразрядный адрес:
PARAMETERS (WIDTH= 8);
ASSERT (WIDTH 1=1)
REPORT "Value of parameterWIDTH = %"WIDTH
SEVERITY INFO;
ASSERT (WIDTH > 0)
REPORT "Value of parameter WIDTH must be greater than 96"WIDTH
SEVERITY ERROR;
SUBDESIGN BUS.MUX
(
A[WIDTH..1). B[WIDTH..1], ADR: INPUT;
0UT[WIDTH..1] OUTPUT;
)
BEGIN
IF ADR
THEN 0UT[] = A[];
ELSE 0UT[] = B[);
ENO IF;
END;
Операторы ASSERT используются для проверки значения параметра
WIDTH. Так, если, например, с помощью команды Global Project Parameters
меню Assign (рис. 3.5) WIDTH присвоить единицу, то при компиляции
модуля будет сформировано следующее сообщение;
Info: Line 2, File c:\max_work\prim_book2\busjiiux cJir\bus_T.ux. tdf:
Value of parameterWIDTH = 1.
«Уровень строгости», заданный для данного сообщения, — INFO,
поэтому компилятор продолжит работу.
Gkibai Project Parameter*
Project Name i«: GV..\prinubookAbu«_ffiw<.dir\bu*_m*tx.tdf
Parameter Цате; (WIDTH. .. -. ( .. СЬдпд» |
Parameter Value: p • |Delete |
Potometer Nome: Value:
| DK | ’ Cancel
Pirc. 3.5
Если же WIDTH установить равным нулю, то будет сформировано со-
общение:
Error: Line 5, File c:\max_work\prim_book2\bus_mux.oir\bus_mux.tdf:
Value of parameter WIDTH must be greater than 0,
«Уровень строгости» сообщения — ERROR, и, следовательно, проце-
дура компиляции будет прервана.
иилшплс лсглчмииициииныж СЛ М 75
На рис. 3.6 приведены результаты моделирования шинного мульти-
плексора.
Демультиплексор
Демультиплексор — комбинационное устройство, обеспечивающее ком-
мутацию входного сигнала на одни из N выходов в соответствии
с полученным кодом адреса.
Число выходов демультиплексора обычно равно 2", где п — число
разрядов двоичного кода адреса.
Ниже представлено описание демультинлесора, имеющего однораз-
рядный информационный вход IN, трехразряднып адресный вход
ADR[3.. 1] и восемь выходов 0UT[7..0J.
SUBDESIGN DMX
(
IN, ADR[3..1] INPUT;
OUT[7..O] OUTPUT;
)
BEGIN
CASE ADR[] IS
WHEN 0 => 0UT[0] = IN;
WHEN 1 => 0UT[1] = IN;
WHEN 2 => 0UT[2] = IN:
WHEN 3 => 0UT[3] = IN;
WHEN 4 => 0UT[4] = IN;
WHEN 5 => 0UT[5] = IN;
WHEN 6 => 0UT[6] = IN;
WHEN 7 => 0UT[7] = IN;
END CASE:
END;
В каждой строке оператора CASE (т. е. на каждом наборе аргуметов)
явно задано значение только одного выхода модуля. Поскольку опера-
76
Практическое использование языка AHDL
77
тор Defaults не был использован, то на остальных выводах при данном
наборе аргументов будут логические нули.
На рис. 3.7 приведены результаты моделирования описанного де-
мультиплексора.
ооо ns
700
600
500
600
зоо
Name:
WO 200
— IN ADR13.. 11 OUT7 — OUT6 — OUT5 — OUT 6 — оитз OUT2 OUT1 — оито — .
—i—J г > 4 Гs ) t 7 )
Illi 1 I I 1 1 1 1 1
| 1 i Г 1 I [ | 1 1 1 1 1 1 1
1 i i i Illi 1 1
i i i i iiii 1 1 1 1 1 1 J. 1 1
1 i 1 1 1 1 1 1 1 — 1 I 1 1 1 J ——I-1-'—"
1 1— 1 1 1 1 1 П T t ' III1 III1 1 4 i
1— 1 1 — i i i i 1 1 ! 1 _J 1
-— i i । । । । ' i 1 1 i 1 । । । i i 1— 1
Рис. 3.7
Рассмотрим параметризированное описание демультиплексора, име-
ющего: WIDTH-разрядный информационный вход (IN[]), трехраз-
рядный вход адреса <ADR[3..1]), восемь WIDTH-разрядных выходов
(0UT[7..O][WIDTH. .1]).
PARAMETERS (WlDTH= 8):
ASSERT (WIDTH != 1)
REPORT "Value of pa-'ameterWIDTH = %"WIDTH
SEVERITY INFO;
ASSERT (WIDTH > 0)
REPORT "Value of parameter WIDTH must De greater than %"WI0TH
SEVERITY ERROR;
SUBDESIGN LPM.DMX
(
TNIWTDTH..11. ADRf3. . 11 ; INPUT;
Описание комбинационных схем
0UT[7. ,0][WIDTH. 1]: OUTPUT;
)
BEGIN
CASE ADR[] IS
WHEN 0 => 0UT[0][] = IN[];
WHEN 1 => 0UT[1][] = IN[];
WHEN 2 => 0UT[2][] = INC]’
WHEN 3 => 0UT[3][] = IN[]:
WHEN 4 => 0UT[4][] = IN[];
WHEN 5 => 0UT[5][] = IN[];
WHEN 6 => OUT[6][] = IN[J:
WHEN 7 => 0UT[7][] = IN[J;
END CASE;
END;
В приведенном описании использована двумерная группа
0UT[7. .0][WIDTH 1], в которой параметризирован один диапазон измене-
ния индексов (разрядность коммутируемой шины).
Результаты моделирования параметризированного демультиплексора
при WIDTH=8 приведены на рис. 3.8.
Преобразователь кода
Преобразователь кода — комбинационное устройство, предназначенное
для изменения кода представления информации.
Описание преобразователя четырехразрядного двоичного кода в пя-
тиразрядный двоично-десятичный:
SUBDESIGN Ып_оес
(
Binary_code[4..1] INPUT:
Binary_decnral[5.. 1] : OUTPUT;
)
BEGIN
TABLE
Binary_code[] => Binary_decimal[]’
B"0000" => B"00000";
B’OOOT => B’OOOOV;
B"0010" => B"00010";
B’0011" => B’00011";
B"0W => B'00100";
B”0101” => B’00101":
B' 0110 => В 00110-;
B"0111" => B"00111";
B”1000" => B-01000";
B"1001- => B--01001-;
B"1O1O" => B’10000--;
В"101Г => B"10001";
B’1100" => B"10010";
В-110Г => В-10011";
В ”1110 - => В-10100";
В"111Г => В-10101”;
END TABLE.
END;
На рис. 3.9 приведены результаты моделирования описанного преоб-
разователя кодов.
Name- I 100 200 300 40g 500 600 700 800 п$
Bifiary__code(t.. 1/ р
Bifiary_decimal5 — 1 1 1 1 1 1 1 II 1 1 1 1 1 1 1 1 1 1 I | l 1 I 1 1
Binary_jfeCimat[L.. 1] 0 Л л Л ZA 4 У 5'Y <5 Y 71 У й Y PI Y оУ nV 7 Y Л Y сУнУо
\ и\ *л Л 1 /\ /\ |/\ /\ 1 /\ /\ «А /X \/\ А i/\
Рис. 3.9
Описание комбинационных схем 79
В устройствах индикации часто используются преобразователи дво-
ичного и двоично-десятичного кодов в семисегментный код. На рис. 3.10
изображен семисегментный индикатор и обозначения сегментов.
Рис. 3.10
Ниже приведено текстовое описание преобразователя двоично-деся
тичного кода в семисегментный.
SUBDESIGN DEC-SEGM
(
Binary_Decimal[4.. 1], Enaole : INPUT;
A.B,C,0,E.F,G ; OUTPUT;
)
BEGIN
IF Enable
THEN
TABLE
Binary_decimal[] => A,B,C,D,E,F,G:
B”0000" => 1,1,1.1,1,1,0;
В’ОООГ => 0,1,1,0.0.0,0;
B’’0010" => 1.1.0.1.1.0.1;
В-0011” => 1,1,1, 1.0,0.1;
B"0100" => 0,1,1.0,0,1.1;
B’0101" => 1.0.1.1.0,1.1;
B”0110" => 1.0.1.1.1,1,1;
B’0111" => 1,1,1.0.0,0.0;
B’1000” => 1.1.1.1.1,1.1;
B’1001" => 1.1.1.1.0.1.1;
END TABLE;
END IF;
END;
Представленный преобразователь кодов имеет вход разрешения рабо-
ты (Enable). При Enable=0 (работа запрещена) значения логических функ-
ций А, В, С, D, Е, F, G не были явно заданы. Поэтому им будет присвоено
значение логического нуля.
Результаты моделирования преобразователя приведены на рис. 3.11.
Компаратор
Компаратор — это комбинационный узел, предназначенный для сравне-
ния двух чисел (А, В) по признакам: равно (А_Е_В), не равно (А_пЕ_В),
больше (А_М_В), меньше (A_L_B), больше или равно (А_МЕ_В), мень-
ше или равио(А ЕЕ В).
Рассмотрим параметризированное описание компаратора, обеспечи-
вающего сравнение двух VVIDTH-разрядных чисел по всем возможным
признакам.
PARAMETERS (WIDTH=8);
SUBDESIGN LPM.CP
(
A[WI0TN..1], A_M_B A_L_B B[WIDTH..1] : INPUT; : OUTPUT OUTPUT -- А больше В -- А меньше В
A_E_B : OUTPUT -- А равно В
A_nE_B : OUTPUT — А не равно В
A_ME_B : OUTPUT -- А больше или равно В
A_LE_B : OUTPUT -- А меньше или равно В
BEGIN
)
IF USED (A_M_B) GENERATE
A_M_B = (A[J > B[]):
END GENERATE:
IF USED (A_L_B) GENERATE
A_L_B = CA[] < B[]):
END GENERATE:
IF USED (A_nE_B) GENERATE
IF USED (A_E_B) GENERATE
A_nE_B = !A_E_B;
ELSE GENERATE
A_nE_B = (A[] ! = B[ ]):
END GENERATE;
END GENERATE:
IF USED (A_E_B) GENERATE
A_E_B = (A[] == B[]);
END GENERATE;
IF USED (A_ME_B) GENERATE
IF USED (A_M_B) GENERATE
IF USED (A_E_B) GENERATE
A_ME_B = A.E.B OR A_M_B;
ELSE GENERATE
A_ME_B = (A[]==B[]) OR A_M_B;
END GENERATE;
ELSE GENERATE
IF USED (A_E_B) GENERATE
A_ME_B = A_E_B OR (A[] > B[]);
ELSE GENERATE
A_ME_B = (A[]>=B[J);
END GENERATE;
END GENERATE;
END GENERATE;
IF USED CALEB) GENERATE
IF USED (A_L_B) GENERATE
IF USED (A_E_B) GENERATE
A.LE-B = A_E_B OR A_L_B:
ELSE GENERATE
A_LE_B = (A[]==B[J) OR A_L_B;
END GENERATE;
ELSE GENERATE
IF USED (A-E.B) GENERATE
A.LE.B = A_E_B OR (A[] < B[]);
ELSE GENERATE
A_LE_B = (A[]<=B[]):
END GENERATE;
END GENERATE;
END GENERATE;
END;
Описание комбинационных схем
83
82 Практическое использование языка AHDL
Используя данный параметризированный модуль как компонент,
пользователь имеет возможность выбирать:
разрядность компаратора (определяется значением параметра WIDTH);
требуемые признаки сравнения.
Операторы IF GENERATE и встроенная в пакет MAX+plus II функция
USED позволяют создавать параметризированные модули, архитектура
которых определяется не только значениями параметров, но и набором
используемых выводов.
В модуле LPM_CP выбор требуемых признаков сравнения может осуще-
ствляться путем указания используемых в нем выходов (рис. 3.12).
Рис. 3.12
Так, например, если при обращении к данному модулю как компонен-
ту выходы А_МЕ_В и A_L_B не используются, то при компиляции
приведенное выше текстовое описание будет интерпретироваться следу-
ющим образом:
PARAMETERS (WIDTH=S):
SUBDESIGN LPM_CP
(
A[WIDTH..1], B[WIDTH..1] : INPUT;
A_M_B : OUTPUT: — А больше 0
A_E_B ; OUTPUT; -- А равно В
А_пЕ_В : OUTPUT; — А не равно В
A_LE_B OUTPUT; -- А меньше или равно В
)
BEGIN
А_М_В = (А[] > ВС]);
А_пЕ_В = !А_Е_В:
А_Е_В = (А[]==В[]):
A-LE_B = А_Е_В OR (А[] < В[ ]);
END:
Результаты моделирования компаратора при WIDTH=8 и использовании
всех выходов приведены на рис. 3.13.
Name I W0 200 300 600 500 600 700 800 900 п$
d AI8..1J B18..11 llX'J / \ 2 м и
W w \ 0 A ? A \\ A\_ / / \ 3 \ / / w \ 4 I 5 \ /ft 1 / V/ \ 1 6 A 7 ) \ h\ / («X
— A_M_B 1 1 I 1 i [ 1
— A_L_B 1 1 1 1 1 1 1 i I 1 I 1
— 1 J 1 1 1 1 I I I 1 1 I
1
— A_nE_B I 1 i 1 1 1 1 1 1 1
A_ME_B ( 1 1 1 1 1 1 [ 1 1 1
A_LE_B 1 1 1 1 1 1 1 1 1 1 1 _
Рис 3.13
Сумматор
Сумматор — комбинационное устройство, выполняющее арифметичес-
кое сложение двух N-разрядных двоичных чисел А[], В[] и входного
переноса С in.
Ниже приведено параметризированное описание на вентильном уров-
не N-разрядного сумматора:
PARAMETERS (NUM_OF_ADDERS =8):
SUBDESIGN add gate
(
a[NUM_OF_ADDERS..1]. b[NUM_OF_ADDERS.. 1 ], cm INPUT.
c[NUM_OF_ADDERS.. 1], cout : OUTPUT;
)
04 практическое использование языка AnuL
VARIABLE
carry_out[(NUM_0F_ADDERS+1)..1] ' NODE:
BEGIN
carry_out[l] = cin;
FOR 1 IN 1 TO NUM_OF_ADDERS GENERATE
c[i] = a[i] $ b[i] $ carry_out[i];
carry_out[i+1] = CARRY( a[i] & b[i] й carry_out[i] & (a[i] it b[i]));
END GENERATE;
cout = carry_out[NUM_0F_ADDERS+1]:
END;
Примитив CARRY явно указывает компилятору на необходимость ис-
пользования схемы цепочного переноса логического элемента СБИС
семейств FLEX[1J. При размещении модуля в СБИС семейств МАХ[1]
компилятор игнорирует примитив CARRY.
Результаты моделирования модуля add_gate представлены на рис. 3.14.
Рассмотрим параметризированное описание WIDTH-разрядпого
арифметического устройства.
Параметры:
WIDTH — разрядность,
Module_Type — тип устройства (ADD — сумматор, SUB — вычитатель,
ADD_SUB — сумматор-вычитатель).
Выводы:
ADD_nSUB — вход режима работы: 0 — вычитание; 1 — сложение.
Данный вход должен быть использован только в том случае, когда
параметр Module_Type имеет значение ADD_SUB.
A[WIDTH..l], B[WIDTH..l] — входы данных, разрядность кото-
рых определяется значением параметра WIDTH.
CLK — вход тактовых сигналов. Если этот вход используется, то
на выходе арифметического устройства будет помещен N-разряд-
Описание комбинационных схем 85
ный регистр, запоминающий выходные данные по фронту такто-
вого импульса.
в Res[WIDTH..l] — выход результата, разрядность которого опреде-
ляется значением параметра WIDTH. Если полученный результат по-
ложительное число или нуль, то он представлен в прямом коде.
Если же он меньше нуля, то для его представления используется
дополнительный код.
а Cout — выход переноса. При реализации вычитания данный выход
может служить знаковым разрядом результата: 0 — результат по-
ложительный, 1 — результат отрицательный.
parameters
(
WIDTH = В.
Module_Type= "ADD_SUB"
);
ASSERT (WIDTH >0 )
REPORT "Width must be more then %” WIDTH
SEVERITY ERROR;
ASSERT ( ModuIe_Type== "ADC_SUB' )it
( Moaule_Type== "ADD" )й
( Module_Type== "SUB" )
REPORT " MOdule_Type can be ADE, ADD_SUB. SUB but not %" Mooule_Type
SEVERITY ERROR:
SUBDESIGN add_bhv
(
A[WIDTH..1], B[WlDTH..1].ADD_nSUB.clk : INPUT = GND;
Res[WIDTH..1], Cout : OUTPUT;
)
VARIABLE
IF USED (elk) GENERATE
RG[WIDTH+1..1] : OFF:
S[WIDTH..1] : NODE;
Cout_int NODE:
END GENERATE;
BEGIN
ASSERT ( Module_Type== "ADD.SUB" ) !$ USEO (ADD_nSUB)
REPORT " INPUT ADD_nSUB CAN BE USED ONLY WITH Module_Type=ADD_SUB "
SEVERITY ERROR:
IF ModuIe_Type== "ADD_SUB" GENERATE
IF ADO_nSUB ==1
THEN
(Cout_int, SC]) = (GND. A[]) + (GND, B[]):
ELSE
(Cout_int, S[]) = (GND, A[ ]) - (GND, B[]);
END IF:
END GENERATE;
-------------------- ----------- тыка апщ описание комбинационных схем
IF Module_Type== 'ADD" GENERATE "
(Cout.int, S[]) = (GND, A[ ]) + (GND, B[]);
END GENERATE;
IF Module_Type== "SUB- GENERATE
(Cout.int, S[]) = (GND, AC]) - (GND B[J);
END GENERATE,
IF USEO(clk) GENERATE
RG[].CLK = CLK:
RG[].D = (Cout.int,S[]);
(Cout.Res[])= RGfJ.C:
ELSE GENERATE
(Cout.Res[])= (Cout.int.S[]).
END GENERATE;
END;
Для контроля правильности использования входа ADD_nSUB
жит оператор:
Рис. 3.15
ASSERT ( Module_Type== "ADD.SUB" ) !$ USED (ADD.nSUB)
REPORT " INPUT ADD.nSUB CAN BE USED ONLY WITH Module_Type=AOD_SUB
SEVERITY ERROR;
Контролируемое оператором условие будет выполнено если:
Bxo ( Dm! I
I___________________________I
BXO. _____________________
значение Module Туре равно "ADD SUB" и используется
ADD_nSUB:
значение Module Туре не равно "ADD.SUB" и не используется
ADD_nSUB.
Использование же входа при других значениях параметра Module.Type1
ведет к остановке компиляции и появлению сообщения об ошибке: ___________
Г ----- три
“Error: Line 30. File c:\max_work\pri!n_book2\sdd_bnv.Dir\add_bhv. tdf: I DinN I >--
INPUT ADD.nSUB CAN BE USED ONLY WITH Mooule_Type=ADO_SUB”. 1-----------
Операторы IF GENERATE позволяют компилятору:
интерпретировать исходное текстовое описание как описание
арифметического устройства, тип которого задан параметров
Module.Type;
поместить на выходе модуля WIDTH-разрядный синхронный ре-
гистр в том случае, если используется вход CLK модуля.
На рис. 3.15 приведены результаты моделирования восьмиразрядной
арифметического устройства типа «ADD_SUB» (сумматор-вычитатель),
выходные данные которого запоминаются в регистре по переднему
фронту тактового сигнала CLK.
Шинные приемопередатчики
------,OUTPVT\
1 DoutN < Н--------------r-
I________________________1
L________________________I
I-------------------------
r- „ I-------. INPUT'
1 En__Din I >—-—*
i________________________l
Рис. 3.16
На рис. 3.16 изображена структурная схема типичного приемопередат-
чика, имеющего:
89
___________— - Пписаиие комбинационных схем
_ ---vv 1U1 н-разрядную шину (Din[WIDTH..l]); л Din, значения логических функций ™1-0^наборах
выходную WIDTH-разрядную шину (Dout[WIDTH..lJ); не определены. По умолчанию их зна Трт
двунаправленную WIDTH-разрядную шину (DB [WIDTH.jTMeHTOB — логический нуль. Поэтому пр
вход разрешения работы (CS). При CS=0 работа запрещена:^ находиться в Z состоянии. тчика Trsiv,
входная шина Dout[] и двунаправленная шина DB [] наход?ре3уЛЬтаты моделирования приемопереда
ген в Z состоянии. При CS-1 работа разрешена: состояние ииведены на рис. 3.17.
(АлиН и направление передачи данных определяется сигналом на вх
Бх/се EnDin;
буферы TRI
при WIDTH=8,
вход выбора направления передачи (En_Din). При En_Din=0 д Wome.
г0ои ные передаются с шины DB (] на шину Dout[]. При En_Dii-——
fh. Din-1данные передаются с шины Din[] на шину DB {].
Параметризированное описание приемопередатчика:
PARAMETERS (WIDTH=8);
ASSERT (WIDTH >0 )
REPORT "Width must be more
SEVERITY ERROR:
SUBDESIGN Trsiv
(
DinfWIOTH..1], En_0in,
OoutfWIDTH..1]
OBfWIDTH..1]
then 96" WIDTH
— CS
CS
INPUT;
: OUTPUT,
: BIDIR;
—► En_Din
5^ Dint8.1 J
~~ Dout[8.. 1]
~ DB18..1)
500 400 500 600 70(1
800 900 nS
Г !_ ! ! —
1—Г’ > —— । ! ! 1 1 1
1 1 1 1 III 1 1 1 I 1 1
1 1 ; । 1 1 1 55 । । 1 । । I ; — 1 1 1 .
1Ю; । И ! ' pl-
А 10^ г
i ”"'мг । 1 ’ Ю0\ A 3J А 2D0\ 1 Z\ /Л : Л' 1 W I А 100 /с i
VARIABLE
TRI_B[WIDTH..1] TRI;
TRI_Out[WIDTH. . 1 ] TRI;
BEGIN
CASE (CS.En_Din) IS
WHEN B"10" => TRI_Out[].OE =
WHEN B"1V => TRI_B[].OE
ENO CASE;
TRI_B[].IN = Din[];
TRI_Out[].IN = D6[J;
D0[] = TRI_B[].OUT;
Doutf] = TRI_Out[].OVT;
END;
Puc. 3.17
Заметим, что двунаправленный вывод на временной диаграмме изоб-
ажается и как вход, и как выход. Поэтому в приведенных результатах
юделирования группа двунаправленных выводов DB[8..1] отображена
I как группа входов 0В[8. .1], и как группа выходов 0В[8..1]. Данные,
юступающие на двунаправленную шину DB[8,.l], помещаются на вход-
1ую шину DB[8..1], а при моделировании они автоматически отобража-
ется и на выходной шине DB[8.. 1]. Данные, снимаемые с двунаправлен-
юй шины DB[8..1], отображаются на выходной шине DB[8..1], при этом
«одная шина DB[8..1] должна быть в Z состоянии.
На рис. 3.18 изображена структурная схема WIDTH-разрядного при-
В приведенном текстовом описании .
DB[WIDTH.. 1] — двунаправленный вывод (BIDIR).
В разделе VARIABLE объявлено width переменных TRI_B[WIDTH.
переменных TRI_Out[WIDTH.. 1], каждая из которых обозначает примите
буфера с тремя состояниями (TR1). Таким образом, компилятору явЕ
указывается, что на соответствующих выходах СБИС следует использе
вать буферы с тремя состояниями.
Входы CS и En_Din объединены во временную группу, оцениваемую
в операторе CASE. Заметим, что при CS=0 и произвольном сигнале W
каждый вывод из
’мопередатчика, имеющего:
групп и
•Ни WID’ и
’ примитг
двунаправленную WIDTH-разрядную шину DA[];
двунаправленную WIDTH-разрядную шину DB[];
вход разрешения работы выходов (ОЕ). При ОЕ=0 две двунаправ-
ленные шины находятся в Z состоянии. При ОЕ=1 направление
передачи данных по двунаправленным шинам определяется значе-
нием сигнала на входе DIR;
вход управления направлением передачи данных (DIR). При
DIR^O данные передаются с шины DB[] на шину DA[]. При
DIR~1 данные передаются с шины DA[] на шину DB[].
Для реализации параметризированного описания использован опера-
тор FOR GENERATE. При этом, пара строк
DB[i] = TRI(.IN=DA[I], ,OE=DIR&OE);
DA[i] = TRI(.IN=DB[I], ,0E=!DIR&OE);
будет интерпретирована компилятором как WIDTH пар с индексами от 1
ДО WIDTH.
Отметим, что сигналы, передаваемые на вход ОЕ каждого из буфе-
ров, заданы логическими уравнениями.
На рис. 3.19 приведены результаты моделирования модуля trsiv_b
при WIDTH=8:
Рис. 3.18
Warne-' WO 200 300 coo 500 600 700 800 900 nS
L OE i— 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ! 1 1
DIR 1 1 1 1 i i i i i i
1 1 III 1 1 1 1 1 1 1 1 1 1
У DA[8..1J 1 Z 1 1 A 1 Л\ . j li I "2 V/ ‘ A ? 1 /i\ 1
-1 DA[8.lJ 2221 1 I Л z i i( A 222 1
1 1 1 1 1 1 I 1 1 1 1 1 1 I I . 1 ।
DBl&.l] 2221 I z' ” I ZL К 222
0B[8..1] 1 2221 I nil 222i Y 21 i /А i 222 j
Рис. 3.19
Его параметризированное текстовое описание:
PARAMETERS (WIDTH=8);
ASSERT (WIDTH >0 )
REPORT "Wiath must oe more tnen %” WIDTH
SEVERITY ERROR;
SUBDESIGN Trsiv_b
(
DIR.OE : INPUT;
DA[WIDTH..1].DB[WIDTH..1]; BIDIR:
)
BEGIN
FOR i IN 1 TO WIDTH GENERATE
DB[i] = TRI(.IN=DA[I], .OE=DIR&OE);
DA[i] = TRI(.IN=DB[I], .0E=! DIR&OE);
END GENERATE;
END;
В текстовом описании используется непосредственное обращение
к примитивам буферов TRI. Сопоставление выводов буферов и переда-
ваемых на них сигналов осуществляется по именам.
На рис. 3.20 изображена структурная схема N-разрядного приемопе-
редатчика, имеющего:
двунаправленную N-разрядную шину DA[];
двунаправленную N-разрядную шину DB[];
двунаправленную N-разрядную шину DC[];
входы DIR_A, DIR_B, DIR_C, Mode, управляющие направлением
передачи данных.
Режимы работы приемопередатчика сведены в табл. 3.1.
Параметризированное описание приемопередатчика с тремя двунап-
равленными шинами:
PARAMETERS (WIDTH=8);
ASSERT (WIDTH >0 )
REPORT "Width must be more then %" WIDTH
SEVERITY ERROR:
SUBDESIGN Tr_dir
i DlR_A I > ,NPur i L_-_ I i - DlR_8 - I > ,NPur\ l I i DIR_ С I > №UT\ l i MODE 1 > 1 l Control 1 • 1 ADR_A ADR-B
ADR_C ~
DA_0E
DB-OE .
DC-OE
Рис. 3.20
DIR_A,DIR_B,DIR_C, Mode '"I : INPUT;
DA[WIDTH..1],DB[WIDTH..1],DC[WIDTH..1] : BIDIR;
)
VARIABLE
FOR_DA[WIDTH..1] NODE;
FOR_DB[WIDTH..1] NODE;
FOR_OC[WIDTH..1] NODE;
DA_0E NODE;
VriHLunre кимииноционн /X хм
УЗ
Таблица 3.1
j. DIR.A DIRJB DIR.C Mode Направление передачи
'1 0 0 0 0 0 1 Данные передаются Данные передаются с шины DBQ на шину DA[J
с шины DC[] на шину DA[]
п 0 1 0 0 Данные передаются с шины DA[] на шнну DB[]
0 1 0 1 Данные передаются с шины DC[] на шину DB[]
0 0 1 0 Данные передаются с шины DA[] на шину DC[]
0 0 I 1 Данные передаются С ШИНЫ DB[] на шииу DC[J
1 1 0 X Данные передаются с шины DC[] на шину DA[] и на шину DB[]
.0 1 1 X Данные передаются с шины DA[] на шину ОВ[] и на шнну DC[]
1 0 1 X Данные передаются с шины DB[J на шину DA[] и на шину DC[]
— DB_OE : NODE;
DC.OE : NODE;
BEGIN
CASE (DIRA,DIR_B.DIR.C,Mode) IS
WHEN В"1000" WHEN В’ЮОГ WHEN В"0100" => => FOR_DA[]=OB[] FOR_DA[]=DC[] FOR_DB[]=DA[] DA_OE=VCC; DA_OE=VCC; DB_OE=VCC;
WHEN В”010Г => FOR_DB[]=DC[] DB_OE=VCC;
WHEN В"0010" => FOR_DC[]=DA[] DC_OE=VCC;
WHEN В"0011" => FOR_DC[]=DB[] DC_DE=VCC;
WHEN В-110Х" => _ FOR_DA[]=DC[] DA_OE=VCC;
- FOR_DB[]=DC[] DB_OE=VCC;
WHEN В"101Х- => FOR_DA[ ]=DB[ ] DA_OE=VCC;
— — - FOR_DC[]=DB[] DC_OE=VCC;
WHEN В-011Х" => FOR_DB[]=DA[] DB_OE=VCC;
FOR_DC[]=DA[] DC_OE=VCC:
END CASE;
a* FOR i IN 1 TO WIDTH GENERATE
DA[i] = TRIG IN=FOR_DA[i], ,OE=DA_OE);
DB[i] = TRI(.IN=FOR_DB[i], .OE=DB_OE);
DC[i] = TRI(.IN=FOR_DC[i]. .OE=DC_OE);
END GENERATE;
END;
A . I В приведенном текстовом описании в разделе VARIABLE объявлены три
5- WlDTH-разрядные группы переменных типа NODE и три одноразрядные
^.переменные типа NODE.
j Входы DIR_A, DIRB, DIR_C, Mode объединены во временную груп-
ПУ> оцениваемую в операторе CASE. Напомним, что двоичное число Ь” 1 Юх”
•соответствует двум двоичным числам: Ь”1Ю1" и ь"1100". Переменные
FOR_da[], FOR_DB[], FOR_DC[], DA_0E, DB_OE, DC_oE определены не на всех воз-
можных наборах аргументов. Поскольку нет явного задания их базовых
• значений, то по умолчанию указанные переменные на всех не приведен-
Практическое использование языка AHDL
ных в операторе CASE наборах аргументов будут иметь значение логичес-
кого нуля. Переменные DA_0E, DB_OE, DC_OE подаются на входы ОЕ буферов
TRI. Поэтому, независимо от значения переменных FOR_DA[], FOR_DB[],
FOR_DC[] выходы DA[], DB[], DC[] будут в Z состоянии при появлении
на входах DIR_A, DIR B, DIR_C, Mode наборов сигналов, не указан-
ных в операторе CASE.
Результаты моделирования проекта Tr_DIR при WIDTH=8 приведены
на рис. 3.21.
Схемы монтажного «И» и «ИЛИ»
Ниже приведен пример текстового описания схемы монтажного «И»
(wire_AND) и монтажного «ИЛИ» (wire_OR).
SUBDESIGN Wire_
(
a, b, с : INPUT;
select_a, select_b, select_c ; INPUT;
wire_or, wire AND ; OUTPUT;
) .
Описание комбинационных схем
95
BEGIN
DEFAULTS
Wire_AND = VCC;
END DEFAULTS;
IF select_a THEN
wire_or = a;
wire_and = a;
END IF;
IF select_b THEN
wire_or = b;
wire_and = b;
END IF;
IF select_c THEN
wire_or = c;
wi re_and = c;
END IF;
END;
Монтажные схемы «И» и «ИЛИ» реализуются в том случае, когда
переменной (линии связи), либо выходу проекта присваивается несколь-
ко значений одновременно.
В данном текстовом описании выходам wire_0R и wire_and при
select_a = VCC, select_b = VCC, select_c = VCC одновременно присваиваются
три значения: а, Ь, с.
Тип реализуемой монтажной схемы («И», «ИЛИ») задается базовым
логическим уровнем соответствующей переменной или вывода. Вывод
Wire_or неявно доопределен логическим нулем (GND). Поэтому будет
реализована схема монтажного «ИЛИ». Вывод wire_and с помощью
оператора DEFAULT явно доопределен логической единицей (VCC) и, следо-
вательно, будет реализована схема монтажного «И».
Результаты моделирования модуля WIRE_ приведены на рис. 3.22.
Ниже представлены уравнения, синтезированные компилятором при
реализации модуля WIRE_ на СБИС семейства МАХ7000 (логические
уравнения взяты из раздела EQUATIONS файла отчета):
-- Node name is 'wire_AND‘
-- Equation name is 'wire_AND', location is LC018, type is output.
wire_AND = LCELL( _EQOO1 $ VCC):
_EQOO1 = !a & select_a
# !b & select_b
« !c & select_c;
-- Node name is 'wire_ar'
— Equation name is wire_or', location is LC017, type is output.
wire_or = LCELL( _EQ002 $ GND);
_E0002 = a & select_a
# b & select_b
# c & select_c; .
96
Практическое использование языка AHDL
Name 1 W0 200 300 COO 500 600 700 800 Д 1 1 — L ! ! ! 1—Z
j О -Q U U © J J J Ql s -x- -it <ъ CU Qj 0j .U. Qj CU Oj Qj (□ Хэ L. i -t. и и и t t r t 1 t I I 1 1 1 1 1 1
1 1 1 1 1 1 1 1
i 1 1 1 1 1 1 1 1 I 1 1 1 1
1 1 1 1
.1. 1 1 1
1 1 I 1 1 1 1 1
1 1 1 1 1
i 1
1
1 1 Illi till L
1 1 1 1 1 1 1 1 1 1
Рис. 3.22
Откуда следует, что компилятор пакета MAX+plus II реализует схе-
мы монтажного «И» и «ИЛИ» как обычные многовходовые схемы «И»
и «ИЛИ», то есть — на логических элементах (макроячейках) СБИС
ПЛ.
Описание триггерных схем
Триггерная (последовательностная) схема — схема с элементом памяти
(триггером), синхронизируемым фронтом (синхронный триггер) или
уровнем (триггер-защелка) тактового сигнала.
Регистры
Регистр — устройство, обеспечивающее прием, хранение, передачу
и преобразование формы представления (параллельная, последователь-
ная) данных.
По способу приема и передачи данных различают:
Параллельный регистр — регистр с параллельными загрузкой
и выходом данных.
Сдвигающий регистр — регистр с последовательными загрузкой
и выходом данных.
Сдвигающий регистр с параллельной загрузкой данных.
Сдвигающий регистр с параллельным выходом данных.
Параллельный регистр
На рис. 3.23 представлена структурная схема четырехразрядпого парал-
лельного регистра.
Описание триггерных схем
97
Рис. 3.23
Выводы регистра:
CLK — вход тактового сигнала;
Enable — вход разрешения загрузки данных;
Set — вход асинхронной установки регистра;
Reset — вход асинхронного сброса регистра;
D[4..1] — четырехразрядный вход данных;
Q[4..1] — четырехразрядный выход данных.
Текстовое описание регистра:
SUBDESIGN RG_4
(
D[4..1], CLK. Reset. Set : INPUT=GND;
Enable INPUT=VCC:
0[4..1] : OUTPUT.
)
VARIABLE
FF[4 . 1] DFFE;
BEGIN
FF[].clk = CLK;
FF[].(CLRn,PRn) = (Reset.Set);
FF[].ena = Enable;
FF[].d = DC],
0[] = FF[].q;
END;
В приведенном описании к примитиву триггера (DFFE) обращаются
как к переменной: объявлены четыре переменные FF[4..1], каждая
из которых обозначает DFFE триггер с входом разрешения работы.
Базовое значение входного сигнала, указанное для входов D[4..1],
CLK, Reset, Set — логический нуль, а для входа Enable — единица.
Поэтому при использовании модуля RG_4 как компонента любой из его
входов может быть оставлен неподключенным, и на него автоматически
будет подано соответствующее базовое значение.
Отметим, что входы асинхронной установки (Set) и сброса (Reset)
имеют более высокий приоритет по сравнению с входом разрешения
работы (Enable). Так, если на входе Reset логическая единица, то каж-
дый разряд регистра будет асинхронно сброшен в нуль независимо от
значения сигнала на входе Enable.
Ниже приведено параметризированное описание WIDTH-разрядного
параллельного регистра с входами: асинхронной установки (Set), асин-
хронного сброса (Reset), разрешения загрузки данных (Enable).
PARAMETERS (WIDTH=8 ):
ASSERT (WIDTH > 0)
REPORT "Value of WIDTH parameter must be greater than %’WIDTH
SEVERITY ERROR;
SUBDESIGN LPM.RG
DinfWIDTH..1]. CLK Set. Reset INPUT = GND; INPUT;
Enable INPUT = VCC;
0[WIDTH..1] . OUTPUT;
)
VARIABLE
FF[WIDTH.,1] DFFE;
BEGIN
FF[].clk = elk;
FF[].d Din[ ];
0[] FF[].q;
FF[].PRn = ’Set;
FF[].CLRn = !Reset;
FF[].ena = Enable:
END;
При использовании данного модуля как компонента (т. е. при созда-
нии модуля более высокого уровня в иерархии описаний) некоторые
входы (либо целенаправленно, либо в результате ошибки) могут быть
оставлены неподключенными.
Так как для входа CLK не задано базовое значение входного сигнала,
то компилятор в случае, если этот вход останется неподключенным,
сформирует сообщение об ошибке:
Error: Input plnstub/port elk' is unconnected and has no default value
Если же для входа CLK будет задано базовое значение входного
сигнала (например — GND), то для контроля подключения данного
входа можно использовать оператор ASSERT и встроенную в пакет фун-
кцию USED;
ASSERT USED(CLK)
REPORT "CLK must.be used"
SEVERITY ERROR:
Результаты моделирования описанного регистра при WIDTH=8 и ис-
пользовании всех его входов приведены на рис. 3.24.
Ниже приведено параметризированное описание VVIDTH-разрядного
Параллельного регистра с входами: синхронной установки (Sset), син-
хронного сброса (SReset), разрешения работы (Enable).
PARAMETERS ( WIDTH=8 );
ASSERT (WIDTH > 0)
REPORT “Value of WIDTH parameter must be greater than %"WIDTH
SEVERITY ERROR;
SUBDESIGN LPM_RGS
(
Din[WIDTH..1], SSet, SReset: INPUT = GND:
CLK : INPUT;
Enable
OfWIDTH..1]
INPUT = VCC;
OUTPUT.
VARIABLE
FF[MDTH. . 1 ]
BEGIN
FF[].clk =
FF[].ena =
DFFE.
elk;
Enable.
CASE (SSet,SReset) IS
WHEN b"00" => FF[].d = Oin[]:
WHEN b"10" => FF[].d = VCC;
WHEN b'01” => FF[].d = GND:
WHEN b”11” => FF[].d = FF[].q
END CASE;
O[]= FF[].q;
END;
Если на вход Enable подать логический нуль, то регистр будет осу-
ществлять хранение данных. Если же — логическую единицу, то логика
работы регистра будет определяться данными на входах SSet и SReset.
Результаты моделирования регистра при WIDTH=8 приведены на
рис. 3.25.
Отметим, что загрузка данных в регистр, его сброс и установка осу-
ществляются синхронно по фронту тактового сигнала.
Сдвигающий регистр
Ниже приведено параметризироваиное описание N-разрядпого сдвигаю-
щего регистра, имеющего входы: асинхронной установки (Set), асин-
хронного сброса (Reset), разрешения сдвига (Enable).
Name
700
n$ lof
PARAMETERS (WIDTH=8
ASSERT (WIDTH > 0)
REPORT "Value of
SEVERITY ERROR:
SUBDESIGN .PM_Sh
WIDTH
parameter must oe greater than %'WIDTH
: INPUT = GND:
Din, Set. Reset
CLK
Enaole
Q
)
VARIABLE
FF[WIDTH..1] I
BEGIN
rF[].clK = elk:
FF[].PRn = !Set:
FF[].CLRn = .'Reset;
FF[].ena = Enaole;
FF[].d = (FF[WIDTH-1..1].q, Din);
0 = FF[WIDTH].o,
END;
INPUT;
INPUT = VCC.
OUTPUT.
DFFE;
Выражение FF[].d = (FF[WIDTh-i. . l].q, Din) задает операцию сдвига
данных в регистре. При WIDTH=4 оно эквивалентно следующим выраже-
ниям:
FF[4].c=FF[3].a;
FF[3].d=FF[2].q;
FF[2].d=FF[1 ]. q;
FF[1].d=Din;
результаты моделирования сдвигающего
дены на рис. 3.26
регистра при wlDTH=8 приве-
Name
— Set
— Reset
—- Enable
—- Din
clk
- 0
VI OS 0.7S to 1.25 1.5 1.75 2.0 2.25 2.5 2.75 3.0 3.25».
J,ij i i l I I I I
ППППЛПППППППплпппппнппппг,------
Рис. 3.26
Сдвигающий регистр с параллельной загрузкой данных
Ниже приведено параметризированное описание WIDTH-разрядного
регистра, имеющего входы: асинхронной установки (Set), асинхронного
сброса (Reset), разрешения параллельной загрузки (Load), разрешения
работы (Enable).
PARAMETERS (WIDTH=8 ).
ASSERT (WIDTH > 0)
REPORT "Value of WIDTH parameter must be greater tnan %’WIOTH
SEVERITY ERROR:
SUBDESIGN SL.RG
(
Data[WIDTH..1], Set. Reset. Load: INPUT = GND;
CLK ’ INPUT;
Enable : INPUT = VCC;
0 : OUTPUT;
)
VARIABLE
FF[WIDTH..1] DFFE;
BEGIN
FF[].d =(FF[WIDTH-1..1].q, GND);
ELSE
FF[].d =Data[];
END IF;
0 = FF[WIDTH].q:
END;
Регистр осуществляет сдвиг данных в сторону старших разрядов
с заполнением освобождающихся младших разрядов логическим нулем:
FF[].d=(FF[WIDTH-1. ,1].q.GND).
Отметим, что входы асинхронной установки (Set) и сброса (Reset)
имеют более высокий приоритет по сравнению с входом разрешения
работы (Enable), а он, в свою очередь, имеет более высокий приоритет
относительно входа разрешения параллельной загрузки (Load). Так, если
на входе Enable логический нуль, то независимо от значения сигнала на
входе Load регистр будет осуществлять хранение данных. Аналогично,
при Reset=l каждый разряд регистра будет асинхронно сброшен в нуль
независимо от значения сигнала на входе Enable.
Результаты моделирования регистра при WIDTH=8 приведены на
рис. 3.27
Name I 0.2 (7.4 0.6 0.8 1.0 1.2 IS 1.6 1.8 2 0 2.2 2L aS
________A----1____:____i___i________j____i____i___i____I____i____i___
- Set 1 1 1 1 1 1 .1 1 1 i i । —J 1 1 1
—» Reset 1 1 1 i 1 1 1 1 1 1 1 1 1 I 1 —1| 1 J
—« Load 1 1 1 1 1 1 I 1 1 1 1 1 1 1 1
—► Enable 1 1 1 [ 1 1 1 1 1 1 1 1 1 1 1 1 1 1
Do to!8.. 1/ 1 1 1 1 1 1 tofyioio 1 1 1 1
— Clk " 1 _ - 11Ж
— 0 T" 1 1 i i । 1 1 1 1 1
Рис. 3.27
FFLl.dk = elk;
FF[].PRn = !Set;
FFfJ.CLRn = !Reset;
FF[].ena = Enable;
IF Load==0
THEN
Сдвигающий регистр с параллельным выходом
Ниже представлено параметризированное описание WIDTH-разрядного
регистра с параллельным выходом данных, имеющего входы: асинхрон-
ной установки (Set), асинхронного сброса (Reset), разрешения работы
(Enable).
PARAMETERS (WIDTH=4
ASSERT (WIDTH > 0)
REPORT 'Value of
SEVERITY ERROR;
SUBDESIGN SL.RG2
);
WIDTH parameter must oe greater rriar %’WIOTH
Din, Set, Reset
CLK
Enaole
QfWIOTH -1]
: INPUT = GND:
INPUT:
INPUT = VCC:
OUTPUT.
VARIABLE
FFfWIDTH. 1]
BEGIN
FF[].clk = CLK:
FF[].CLRn = 'Reset;
FF[].PRn = 'Set;
FF[].ena = Er.aole.
DFFE.
FF[].d = (FF[WIDTH-T.. 1 ].q. Din):
ОС] = FF[] q:
END:
При Set=0, Reset=0, Enable=l регистр по каждому фронту тактового
сигнала будет сдвигать в сторону старших разрядов все хранящиеся
в нем данные и одновременно запоминать в младшем разряде данные
с входа Din.
Результаты моделирование регистра при WI0TH=4 приведены на
рис. 3.28.
Рис. 3.28
wriMb-инме грпг е ных схем
105
Циклический сдвигающий регистр
Циклический сдвигающий регистр (Barrel Shifter) обеспечивает возмож-
ность параллельной загрузки регистра, а также позволяет за один такт
циклически сдвинуть все хранящиеся в нем данные на заданное число
разрядов.
Ниже приведено описание циклического сдвигающего регистра, име-
ющего:
D[8..1] — информационные входы:
С1.К — тактовый вход;
ENABLE — вход разрешения работы;
nLoad/Shift — вход управления (0 - загрузка, 1 — сдвиг);
nRight/Left — вход выбора направления сдвига (0 — вправо, 1 —
влево);
Reset — вход асинхронного сброса регистра:
S[2..O] — код, указывающий число разрядов, на которое осуществ-
ляется сдвиг;
Q[8..11 — выходы.
SUBDESIGN Barrel
(
D [8 1]. CLK. ENABLE. nLoad/Shift INPUT:
nRigr.t/Left. Reset. S[2..O] : INPUT;
0 [8..Ц : OUTPUT;
)
VARIABLE
TR[8..1] . DFFE;
BEGIN
TR[],(CLK. CLRn.Ena) = (CLK, !Reset,Enable):
IF nLoad/Shift == D
ThEN
TR[].D = Of]; -- паралпельная загрузка
ELSIF nRignt/Left == 0 -- режим сдвига
THEN -- сдвиг вправо
CASE S[] IS
WHEN 0 => TR[].D = (TR[].O):
WHEN 1 => TR[].D = (TR[1].Q, TR[8.,2].Q);
WHEN 2 => TR[].D = (TR[2. 1].O. TR[8 3].Q);
WHEN 3 => TR[].D = (TR[3..1].Q, TR[8..4].0);
WHEN 4 => TR[].0 = (TR[4..1].0, TR[8..5].0):
WHEN 5 => TR[].D = (TR[5.. 1].0. TR[8. ,6].0);
WHEN 6 => TR[].O = (TR[6..1].Q, TR[8..7].Q);
WHEN 7 => TR[].D = (TR[7..1].Q, TR[8].O)’
END CASE.
ELSE сдвиг влево
CASE S[] IS
WHEN 0 => TR[].D = 0[];
UvHEN 1 =>
WHEN 2 =>
WHEN 3 =>
WHEN 4 =>
WHEN 5 =>
WHEN 6 =>
WHEN 7 =>
END CASE:
TR[].D = (0[7.. 1]. 0[8]):
TR[].D = (0(6..1]. 018..71)
TR[].D = (0[5.. 1 ], Q[8. .6])
TR[].D = (0[4.. 1]. 0[8..5J)
TR[].D = (0(3..1], 0(8..4])
TR[ ]. D = (0[2.. 1 ]. 0(8. .3])
TR[].D = 0[8 .2]);
END IF:
0[] =TR[].O:
END;
Отметим, что уравнения TR[].D = (TRF4.. 1J.0. TR[3..5].O) и TR[].D =
= (0[4.. 1].0[8. .5]) являются эквивалентными, поскольку Q[] = TR[].O.
Результаты моделирования циклического сдвигающего регистра при-
ведены на рис. 3.29
Конечные автоматы
Обобщенная структурная схема конечного автомата
Конечный автомат — устройство с памятью, выходные сигналы которого
зависят от предыстории поступления входных сигналов.
Обобщенная структурная схема автомата приведена на рис. 3.30, где
изображены:
X[N..l] — входные сигналы;
Y[k..l] — выходные сигналы;
Q[K..l] — разряды памяти, определяющие состояние автомата;
D[n..l] - данные для записи в память:
М — память автомата (набор триггеров):
КС1 — комбинационная схема, обеспечивающая формирование
данных для записи в память;
КС2 — комбинационная схема, порождающая выходные сигналы.
Синхронный конечный автомат (СКА) — автомат, память которого
реализована на синхронных триггерах. СКА переходит из состояния
в состояние только по активному перепаду (фронту или спаду) такто-
вого сигнала синхронизирующего триггеры в его блоке памяти.
В зависимости от способа формирования выходных сигналов выде-
ляют два класса конечных автоматов:
Автомат Мура — автомат, выходные сигналы в котором зависят
только от текущего состояния автомата.
Автомат Мили — автомат, выходные сигналы в котором зависят от
текущего состояния автомата и от текущих входных сигналов
(пунктирная линия па рис. 3.30).
Число триггеров (н ), используемых для реализации модуля памяти
автомата, определяется числом состояний автомата (N.) и способом их
кодирования:
Двоичное кодирование (Binary coding). При этом пп =]log.2Xt[, где
] [ — операция округления до ближайшего большего целого.
Кодирование по принципу, одно состояние — один триггер (One
Hot State). При этом n ~Nc.
Для СБИС программируемой логики семейств МАХ [1], содержащих
относительно небольшое число макроячеек, в каждой из которых имеется
Рис. 3.30
мио го входовая программируемая матрица «И», матрица «ИЛИ» и триг-
гер, приемлемы оба способа кодирования. Поэтому для таких СБИС
пакет MAX+plus II с помощью опции One Hot State Machine Encoding
(меню Assign -* Global Project Logic Synthesis) позволяет выбирать
способ кодирования (по умолчанию применяется двоичное кодирование).
Для СБИС программируемо!'! логики семейств FLEX [1], содержа-
щих много логических элементов, в каждом из которых имеется четы-
рехвходовая таблица перекодировок и триггер, оптимальным является
кодирование по принципу: одно состояние — одни триггер. Так как при
этом существенно упрощается комбинационная схема КС1. Поэтому для
СБИС семейств FLFX в пакете MAX-plus II всегда применяется дан-
ный способ кодирования состояний.
Использование языка AHDL для описания алгоритма работы автома-
та позволяет автоматизировать процедуру синтеза, включая выбор числа
разрядов памяти и кодирование состояний автомата.
Задание конечного автомата
В языке AHDL конечный автомат — это переменная. Для ее задания
в разделе переменных (Variable Section) используется следующая конст-
рукция:
__machine_name MACHINE OF BITS (__srate_bit. __srate_oit)
WITH STATES (
__state_name = _srate_value.
__state_name = _state_value.
__state_name = _state_value);
Она в общем случае определяет:
имя переменной — символическое имя автомата (machine name);
число разрядов памяти автомата и символическое имя каждого
из разрядов (OF BITS (________state bit, _statebit));
символические имена состояний автомата и их коды (with STATES
(_____state_name =___state_vaiue, state_name =___state_value)).
Указывать число разрядов памяти и их символические имена, а также
коды состояний автомата необязательно. Поэтому в простейшем случае
для задания конечного автомата используется следующая конструкция:
___machine_name : MACHINE
WITH STATES (_state_name._state_name._state_name);
В этом случае компилятор, оптимизируя комбинационные схемы КС1
и КС2, самостоятельно выберет как разрядность блока памяти, так
и коды состояний автомата.
В рамках языка AHDL конечный автомат, а. следовательно, и пере-
менная его обозначающая, имеет три управляющих входа:
CLK — вход тактового сигнала (активный — фронт);
Reset — вход асинхронного сброса автомата (активный уровень —
логическая единица):
ENA — вход разрешения работы автомата (активный уровень —
логическая единица).
Обязательно использование только входа CLK, Если входы Reset
и/или ENA не используются, то на них автоматически подаются логи-
ческие уровни, не препятствующие нормальной работе автомата.
Описание алгоритма работы автомата
Исходный алгоритм работы автомата может быть задан в виде блок-
схемы или словесного описания.
Для того, чтобы описать автомат па языке AHDL, необходимо фор-
мализовать алгоритм его работы, т. е. представить его либо графом
переходов, либо таблицей переходов и выходов (возможно использова-
ние совмещенной таблицы переходов и выходов).
В качестве пример;! рассмотрим словесное описание алгоритма рабо-
ты устройства, имеющего входы: START АВАР. CLK и выходы: WORK,
END WORK.
"В исходном состоянии:
на выходах WORK. END_W0RK - логический нуль;
при появлении i-.а входе START логической единицы устройство переходит
в рабочий режич. в противном случае остается з исходном состоянии.
В рабочем режиме:
на выходе WORK - логическая единица, на выходе END_WCRK - логический
нуль.
при появлении на входе START логического нуля устройство переходит
в режим ожидания, в противном случае остается з рабочем режиме
В режиме ожидания;
на выходах WORK. END_WCRK - логическая единица;
при появлении на входе START логической единицы устройство переходит
в режим возобновления работы, в противном случае переходит в режим
окончания рабо’ы.
В режиме возобновления работы:
на выходах WORK. EN3_W0RK - логический нуль;
при появлении на зходе START логического нуля устройство переходит
в режим ожидания, в поотивно.ч случае переходи- в рабочий режим.
Описание триггерных схем
1 1 1
в режиме окончания работы: ' ------
единица^ ' "°ГИЧеСКИЙ нуль’ на в™ END_WORK - логическая
^=:.:—=~ » —
И ««"а™ "0Ж" б“" а»™»„ Мура
Выделим набор состояний автомата-
INIT
Working
Waiting
Resuming
Ending
- ?а1.переходов для реализации данного устройства как автомата
— исходное состояние;
— раоочий режим;
— режим ожидания
— режим возобновления работы;
- режим окончания работы.
_ * Г AJX1Z1 p/ucl.
Мура приведен на рис. 3.31.
Граф переходов состоит из узлов, обозначающих состояния автомата,
и ветвей, отображающих синхронные переходы между состояниями.
В автомате Мура:
для каждого состояния указан набор выходных сигналов (в дан-
ном примере — это сигналы WORK и END_WORK);
у каждой ветви указаны значения входных сигналов (в данном
примере сигнала START), вызывающие соответствующий переход
между состояниями.
Не зависящие от значений входных сигналов переходы — это безус-
ловные переходы (например, переход из состояния Ending в состояние
INIT).
Отметим, что описанный автомат асинхронно переходит из любого
состояния в состояние INIT при появлении на входе АВАР логической
единицы.
Граф переходов автомата Мили, реализующего тот же алгоритм, что
и приведенный выше автомат Мура, изображен на рис. 3.32.
Start=O
Рис. 3.32
ио сани триггерных схем
113
У каждой ветви автомата Мили указаны:
значения входных сигналов, вызывающих соответствующий пере-
ход (в данном примере — сигнала START);
значения выходных сигналов (в данном примере — сигналов WORK
и END_WORK).
Конечный автомат Мура
Модуль MOORE_1 иллюстрирует использование таблицы истинности для
описания автомата Мура, граф переходов которого приведен на рис. 3.31.
SUBDESIGN Мсоге1
(
Start, ABAP.dk INPUT:
Work,End_work : OUTPUT;
)
VARIABLE
FSM : MACHINE IvITH STATES
(INIT, WORKING. WAITING. RESUMING.ENDING);
BEGIN
FSM.clk= CLK;
FSM.reset = ABAP:
table -- текущее входной зыходные следующее
-- состояние сигнал => сигналы состояние
FSM. START => WORK. ENDJWORK. FSM;
INIT, 0 => 0. 0. INIT;
INIT. 1 => 0. 0. WORKING.
WORKING. 0 => 1. 0. WAITING;
WORKING. 1 => 1. 0. WORKING;
WAITING. 0 => 1. 1, ENDING:
WAITING. 1 => 1. 1. RESUMING;
RESUMING , 0 => 0. 0, WAITING;
RESUMING , 1 0. 0. WORKING:
ENDING. B'x" => 0. 1. INIT;
END TABLE;
ENO;
В приведенном описании задана внутренняя переменная FSM, явля-
ющаяся символическим именем конечного автомата, имеющего пять
состояний: INIT, WORKING, WAITING, RESUMING, ENDING. Отметим,
что при ее задании указаны только состояния автомата.
Уравнение FSM.clk=CLK определяет соединение тактового сигнала
с тактовым входом конечного автомата.
Вход АВАР соединяется с входом асинхронного сброса автомата:
FSM.reset=ABAP.
Поскольку вход разрешения работы автомата FSM.ENA пе исполь-
зован, то на него автоматически подается логический уровень, не
препятствующий нормальной работе автомата (т. е. — логическая еди-
ница).
В левой части таблицы истинности (слева от знака =>) указываются
текущее состояние автомата и набор входных сигналов. В правой час-
ти — состояние, в которое автомат перейдет при появлении на входе
CLK перепада из 0 в 1, т. е. состояние перехода. И, кроме того, перечис-
ляются выходные сигналы автомата. Поскольку данный автомат — это
автомат Мура, то его выходные сигналы зависят только от текущего
состояния и не зависят от входных сигналов.
Тот же самый автомат может быть описан с помощью операторов CASE
И IF THEN.
SUBDESIGN Moore2
(
Start. АВАР.elk : INPUT:
Work.End_work OUTPUT;
)
VARIABLE
FSM : MACHINE WITH STATES
(INIT, WORKING. WAITING. RESUMING.ENDING):
BEGIN
FSM.(elk. reset ) = (CLK. A6AP);
CASE FSM IS
WHEN INIT =>
IF START==C
THEN FSM = INIT;
ELSE FSM = WORKING:
END IF.
WHEN WORKINGS WORK=VCC:
IF START==O
THEN FSM = WAITING:
ELSE FSM = 'WORKING.
END IF.
WHEN WAITINGS WORK=VCC;END_WCRK=VCC;
IF STARTED
THEN FSM = ENDING:
ELSE FSM = RESUMING;
END IF;
WHEN RESUMING=>
IF STARTED
THEN FSM = WAI’ING;
ELSE FSM = WORKING:
END IF;
WHEN ENDING=> END_WCRK=VCC:
FSM = INIT;
END CASE;
END;
Практическое использование языка AHDL
Отметим, что в данном описании значения выходных сигналов WORK
и END_WORK определены не на всех наборах аргументов. Поскольку
нет явного задания их базовых значений, то, по умолчанию, на тех
наборах аргументов, на которых они не были определены, будет логи-
ческий нуль.
Результаты моделирования автомата Мура приведены на рис. 3.33.
Рис. 3.33
При реализации модулей МООЯЕ1 и M00RE2 на СБИС семейства FLEX
компилятор, кодирует состояния следующим образом (сведения взяты
из файла отчета — Report File):
FSM: MACHINE
OF BITS ( FSM'5.FSM "4. FSM'3, FSM'2. FSM~1 )
WITH STATES (
INIT = B'00000".
WORKING = B"11000",
WAITING = B"10100",
RESUMING = B"10010",
ENDING = B"10001" );
Таким образом, в данном случае использовано кодирование по прин-
ципу: одно состояние — один бит.
При реализации указанных модулей на СБИС семейства МАХ
и отключенной опции One Hot State Machine Encoding (команда Global
Project Logic Synthesis меню Assign), т. e. при реализации двоичного
кодирования, для состояний устанвливаются следующие коды (сведения
взяты из файла отчета — Report File):
FSM: MACHINE
OF BITS ( FSM*3. FSM*2, FSM*1 )
WITH STATES (
Описание триггерных схем
1 15
INIT
WORKING
WAITING
RESUMING
ENDING
= В"ООО",
= В"О11".
= В’010",
= В"100".
= В 001 );
Заметим, что состояние, указанное первым в списке состояний автома-
та (WITH STATES (...)), при любом способе кодирования имеет код, содержа-
щий одни нули. Поэтому при появлении логической единицы на входе
асинхронного сброса, автомат асинхронно перейдет в состояние, указан-
ное первым в списке состояний (в данном примере — в состояние INIT).
Более того, при включении питания все триггеры СБИС семейств FLEX
и МАХ устанавливаются, если явно не задано иное, в нулевое состояние.
Поэтому после включения питания СБИС, автомат оказывается в том
состоянии, которое в списке состояний было указано первым.
Язык AHDL позволяет задать значения выходных сигналов уже при
объявлении автомата Мура. Данная возможность иллюстрируется
на примере описания модуля M00RE3.
SUBDESIGN МоогеЗ
(
Start. ABAP.clk . INPUT;
Work,End_work OUTPUT;
)
VARIABLE
FSM : MACHINE
OF BITS (Work,End_work)
WITH STAT£S
(INIT = B"00"
WORKING = B"10"
WAITING = В"1Г,
RESUMING = B"00".
ENDING = B"0V >;
BEGIN
FSM.clk = CLK;
FSM. reset = ABAP;
CASE FSM IS
WHEN INIT =>
IF START==O
THEN FSM = INIT.
ELSE FSM = WORKING;
END IF;
WHEN WORKINGS
IF START==O
THEN FSM = WAITING;
ELSE FSM = WORKING;
END IF;
WHEN WAITINGS
116
Практическое использование языка AHDL
IF STARTED
THEN FSM = ENDING.
ELSE FSM = RESUMING:
END IF;
WHEN RESUMING=>
IF START==0
THEN FSM = WAITING.
ELSE CSM = WORKING.
END IF;
WHEN ENDING—'
FSM = INIT;
ENO CASE;
END:
В данном случае при объявлении автомата явно заданы имена двух
разрядов кода состояний (Work, End work), являющиеся одновременно
именами выходных сигналов. Кроме того, явно указаны их значения для
каждого из состояний. Поскольку даже при двоичном кодировании двух
разрядов недостаточно для кодирования пяти состояний, то компилятор
автоматически добавит недостающий разряд и осуществит перекодиро-
вание состояний, оставляя без изменения значения заданных разрядов.
Поскольку явно заданные значения разрядов в кодах состояний ком-
пилятор нс имеет права изменить, то он не может осуществить кодиро-
вание по принципу; одно состояние — один бит.
Ниже представлены коды состояний, установленные компилятором
при реализации модуля MOORE3 на СБИС семейства FLEX (сведения
взяты из файла отчета — Report File):
FSM: MACHINE
OF BITS (
FSM'1,
Work',
End_work'
)
WITH STATES (
INIT = B"000"
WORKING = B’010",
WAITING = B”011",
RESUMING = B'100",
ENDING = B”001"):
Отметим, что выходные сигналы в модуле MCORE3 являются выходами
триггеров блока памяти автомата, и. следовательно, они синхронизиро-
ваны тактовым сигналом CLK.
Конечный автомат Мили
Модуль Mealyl иллюстрирует использование таблицы истинности для
описания автомата Мили, граф переходов которого приведен на рис. 3.32.
Описание триггерных схем 1 17
SUBDESIGN Mealyl
(
Start. АВАР.elk INPUT-
Work.End_work 0UTPUT:
)
VARIABLE
FSM : MACHINE WITH STATES
(INIT. WORKING. WAITING. RESUMING.ENDING):
BEGIN
FSM.clk= CLK:
FSM.reset = A8AP: TABLE текущее входной Взходные следующее
состояние сигнал => СИ ГНДЛЬ состояние
FSM. start => WORK. END.WORK. FSM:
INIT. 0 => 0. 0. INIT:
INIT. 1 => 1. D. WORKING;
WORKING. 0 => 1. 1. WAITING:
WORKING. 1 => 1. 0. WORKING:
WAITING. 0 => 0. 1. ENDING:
WAITING. 1 => 0. 0. RESUMING:
RESUMING.0 => 1. 1. WAITING-
RESUMING. 1 => 1. 0. WORKING:
ENDING. B”x" => 0. 0. INIT;
END TABLE;
END;
Сравнение модулей MOORE1 и Mealyl показывает, что описание автома-
тов Мура и Мили совпадают с точностью до принципа формирования
выходного сигнала.
Тот же самый автомат Мили может быть описан и с помощью опе-
раторов CASE и IF THEN:
SUBDESIGN Mealy2
(
Start, АВАР,elk : INPUT:
Work.End_work OUTPUT;
)
VARIABLE
FSM : MACHINE WITH STATES
(INIT, WORKING. WAITING. RESUMING,ENDING);
BEGIN
FSM.clk= CLK;
FSM.reset = ABAP;
CASE FSM IS
WHEN INIT =>
IF START—0
THEN FSM = INIT;
11 б Практическое использование языка AHDL
ELSE FSM = WORKING;WORK=VCC:
END IF;
WHEN WQRKING=>
IF START==O
THEN FSM = WAITING:WORK=VCC;END_WGRK=VCC:
ELSE FSM = WORKING;WORK=VCC;
END IF:
WHEN WAITINGS
IF START==O
THEN FSM = ENDING;END_WORK=VCC:
ELSE FSM = RESUMING:
END IF;
WHEN RESUMING=>
IF START==O
THEN FSM = WAITING:WORK=VCC; END_WORK=VCC;
ELSE FSM = WORKING;WORK=VCC:
END IF;
WHEN ENDING^
FSM = INIT;
ENO CASE;
END;
Импорт и экспорт состояний конечных автоматов
Язык AHDL позволяет передавать состояния конечных автоматов меж-
ду модулями, используемыми как компоненты при описании модуля
более высокого уровня в иерархии описаний.
Для этого в разделах SUBDESIGN текстовых описаний модулей
используются: выход MACHINE OUTPUT и вход MACHINE INPUT.
Описание триггерных схем 119
В представленном ниже модуле cefinition_ определяется конечный
автомат АА, состояния которого экспортируются через выход FSM_OUT.
SUBDESIGN aefinit
(
CLK. Reser ; INPUT = GND;
START. STOP, .END : INPUT = GND:
FSM.OUT : MACHINE OUTPUT;
)
VARIABLE АА MACHINE WITH STATES (Idle. Busy, Wait);
BEGIN CASE WHEN AA IS Idle => IF Start
THEN ELSE AA AA = Busy; = Idle;
END WHEN IF; Busy => IF Stop
ELSE END THEN AA = Busy; IF; AA = Wait;
WHEN Wait => IF Start
THEN AA = Busy;
ELSIE .END
THEN AA = Idle:
ELSE AA = Wait,
END IF:
END CASE:
AA.(CLK. Reset) = (CLK, Reset);
FSM.OUT = AA:
END:
В модуле USE. через вход FSM_in импортируются состояния конеч-
ного автомата и для каждого из них определяются выходные сигналы:
SUBDESIGN USE.
(
FSM.in : MACHINE INPUT;
Work, Waiting OUTPUT;
)
BEGIN
Work = (FSM.in == Busy);
Waiting = (FSM.in == Idle) OR (FSM.in == Wait):
END;
Для создания файла верхнего уровня иерархии, описывающего связи
приведенных выше проектов, необходимо сформировать их прототипы.
Для этого при активном окне текстового редактора с описанием модуля
J 20
Практическое использование языка AHDL
Прототипы модулей:
Файл definit.inc:
FUNCTION definit (CLK, Reset, Start, Stop, _End)
RETURNS (MACHINE FSM_OUT);
Файл use_.inc:
FUNCTION USE, (MACHINE FSM_IN)
RETURNS (Work, Walting):
Ниже приведено текстовое описание, в котором модули definit и USE_
используются как компоненты.
INCLUDE “definit.INC";
INCLUDE "USE_.INC";
SUBDESIGN top_level
(
CLK. Reset, Start, Stop, _Ena: INPUT;
Work,Waiting : OUTPUT;
)
VARIABLE
FSM_ : MACHINE;
BEGIN
FSM_ = definit (.CLK = CLK. .Reset = Reset.
.Start = Start, .Stop = Stop,
,_End = _End);
(Work,Waiting) = USE, (.FSM_in = FSM_);
END;
Отметим, что в данном описании использовалось непосредственное
обращение к компонентам с сопоставлением их входов и передаваемых
значений по именам.
Счетчики
.1
Счетчик — последовательностное устройство, предназначенное для реги-
страции числа импульсов, поступивших на его тактовый вход.
На языке AHDL счетчик может быть описан:
на поведенческом уровне. При этом используются высокоуровне-
вые конструкции языка, а также арифметические операторы сло-
жения и вычитания;
в виде конечного автомата;
на вентильном уровне.
Поведенческое описание
Описание на поведенческом уровне — это простейший и наиболее об-
щий способ задания алгоритма работы счетчика. Проиллюстрируем &0
на примерах. .
Описание триггерных схем 121
Рассмотрим параметризированное описание двоичного WIDTH-раз-
рядного суммирующего счетчика.
Выводы счетчика:
Clk — тактовый вход;
Reset — вход асинхронного сброса счетчика в нуль;
Dout[WIDTH..l] — WIDTH-разрядный выход счетчика.
PARAMETERS (WIDTH =6);
ASSERT (WIDTH > 0)
REPORT "Value of WIDTH parameter must be greater than %"WIDTH
SEVERITY ERROR;
SUBDESIGN cnt_sum
(
CLK - : INPUT;
Reset : INPUT = GND;
Dout[WIDTH..1] OUTPUT;
)
VARIABLE
RGfWIDTH..1] ; OFF;
BEGIN
RG[].CLRn = !Reset;
RG[].CLK = CLK;
RG[].D = RG[].0+1:
Oout[] = RG[].O;
END;
В соответствии с приведенным описанием компилятор пакета синте-
зирует WIDTH-разрядный накапливающий сумматор, на информацион-
ный вход которого поступает константная единица (рис. 3.35).
при появлении на входе clk фронта тактового сигнала к текущему
значению накапливающего сумматора прибавляется единица. Суммиро-
вание единицы с числом 2W1DTH-1 (во всех WIDTH разрядах накапли-
вающего сумматора логические единицы) приведет к переполнению
сумматора, и во всех его разрядах будут логические нули.
Результаты моделирования счетчика cnt_sum при WIDTH=8 приведены
на рис. 3.36
Name I КО 200 500 400 500 600 700 800 п$
Q i i i I i ZT i i
— Reset I I I I I I l I
- - 11НШЖ W>1
Dout[8..l]
Yt YY YY Y<j Y?
2 I J 14
8 X 9 I 10 M
Рис. 3.36
Аналогично можно описать и параметризированный WIDTH-разряд-
ный вычитающий счетчик.
Выводы счетчика:
Clk — тактовый вход;
Set — вход асинхронной установки счетчика;
Dout[WIDTH..l] — WIDTH-разрядный выход счетчика.
PARAMETERS (WIDTH = 8);
ASSERT (WIDTH > 0)
REPORT "Value of WIDTH parameter must be greater than %“WIDTH
SEVERITY ERROR;
SUBOESIGN cnt_sub
(
CLK ; INPUT; -J
Set •_ INPUT = GND;
DoutfWIDTH..1] ; OUTPUT;
VARIABLE
RG[WI0TH..1] : OFF;
BEGIN
RG[].PRn = (Set;
RG[].CLK = CLK;
RG(].D = RG[].Q-1;
Oout[] = RG[].O; -j
END; ।
Результаты моделирования счетчика cnt_sub при WIDTH=8 приведены
на рис. 3.37
Описание триггерных схем
123
Рассмотрим теперь параметризированное описание суммирующего
WIDTH-разрядного счетчика, имеющего вход разрешения работы и вход
асинхронного сброса.
Выводы счетчика:
Clk — тактовый вход;
Reset — вход асинхронного сброса счетчика в нуль;
Enable — вход разрешения работы;
Dout[WIDTH..l] — WIDTH-разрядный выход счетчика.
PARAMETERS (WIDTH =8);
ASSERT (WIDTH > 0)
REPORT "Value of WIDTH parameter must be greater than %"WIDTH
SEVERITY ERROR;
SUBDESIGN cnt_ena
(
CLK : INPUT;
Reset : INPUT = GND;
Enable ; INPUT = VCC;
Dout[WIDTH..1] : OUTPUT;
)
VARIABLE
RG[WIDTH..1] : DFFE;
BEGIN
RG[],(CLK.CLRn, Ena) = (CLK, IReset, Enable);
RGCJ.D = RG[].Q+1;
Dout[] = RGtJ.O:
END;
Отметим, что вход асинхронного сброса имеет более высокий при-
оритет относительно входа разрешения работы.
Результаты моделирования счетчика приведены на рис. 3.38
,, Ниже приведено параметризированное описание реверсивного WIDTH-
Разрядного счетчика, имеющего вход разрешения работы и вход асин-
хронного сброса.
пр ктич ое спользование языка AHUL
Name 1 !00 200 JOO 400 500 щ
F —- Reset — Enable — CLK -g Ocut(8..l] 1 1 H 1 1 1 1 1 1 1 1- — 1 1 1 1
1 1 1 1 1 1 u i ~ ' i — i i -iJ i
uuuuuuu
“Л r\ r\ r\ г\ г\ г\ /л!лл r\ / oYz^YjYiYjYdYzYfiYpnomY F- /2 । 1 Y о
Рис. 3.38
Выводы счетчика:
Clk — тактовый вход;
Sreset — вход синхронного сброса счетчика в нуль;
Enable — вход разрешения работы;
Dir — вход управления направлением счета;
Dout[WIDTH..l] — WIDTH-разрядный выход счетчика.
PARAMETERS (WIDTH =8);
ASSERT (WIDTH > 0)
REPORT "Value of WIDTH parameter must be greater than %”WIDTH
SEVERITY ERROR;
SUBDESIGN ent rev
(
CLK : INPUT;
SReset : INPUT = GND;
Enable.Dir : INPUT = VCC;
Dout[WIDTH..1] : OUTPUT;
)
VARIABLE
RG[WIDTH..1] DFFE;
BEGIN
RG[].(CLK. Ena)= (CLK,Enable);
if Sreset
then
RG[].O = 0;
elslf dir
then
RG[].D = RG[].Q+1;
else
RG[ ].D = RG[].Q-1;
end if;
Oout[]= RG[].Q;
ENO;
Отметим, что вход Enable имеет более высокий приоритет относи-
тельно входа Sreset, а он, в свою очередь, имеет более высокий приори-
тет относительно входа Dir.
Описание триггерных схем 1 25
Результаты моделирования счетчика cnt_rev при WIDTH=8 приведены
на рис. 3.39.
Расширим теперь параметризированное описание суммирующего
WIDTH-разрядного счетчика с параллельной загрузкой.
Выводы счетчика:
Clk — тактовый вход;
Reset — вход асинхронного сброса счетчика в нуль;
Load — вход разрешения загрузки;
Din[WIDTH..l] — WIDTH-разрядный вход данных;
Dout[WIDTH..l] — WIDTH-разрядный выход счетчика.
PARAMETERS (WIDTH = 8);
ASSERT (WIDTH > 0) ____
REPORT "Value of WIDTH parameter must be greater than VWIDTH
SEVERITY ERROR:
SUBDESIGN crt_load
(
CLK : INPUT:
Reset,Load,DinfWIDTH.. 1] • INPUT = GND;
DoutfWIDTH.. 1] : OUTPUT;
)
VARIABLE
RG[WIDTH..1] : DFFE:
BEGIN
ASSERT USED(Load)!$ USED(Din)
REPORT ~inputs'”'Load""and“"Din[]"" must be used together"
SEVERITY ERROR;
RG[].CLRn = [Reset;
RG[].CLK = CLK;
Dout[] = RG[].Q;
IF USED (Load) GENERATE
IF Load
THEN
RG[].O = Din[];
ELSE
RG[].D = RG[].Q+1;
END IF;
ELSE GENERATE
RG[].D = RG[].O+1;
END GENERATE;
ENO;
В приведенном описании проверяется использование входа Load
и входа данных Din[], которые либо нужно использовать совместно,
либо не использовать вовсе. При нарушении этого условия компиляция
будет прервана и процессор сообщений пакета сформирует сообщение
об ошибке.
Заметим, что в данном текстовом описании по существу задано два
различных счетчика:
если входы Load и Din[] не используются, то компилятор синте-
зирует схему соответствующую рис. 3.35.
если входы Load и Din[] используются, то компилятор синтезиру-
ет схему представленную на рис. 3.40.
Рис. 3.40
Результаты моделирования модуля cnt_load при WIDTH=8 и использо-
вании всех входов приведены на рис. 3.41.
Рис. 3.41
to to
Ниже представлено параметризированное описание реверсивного
WIDTH-разрядного счетчика с параллельной загрузкой.
Выводы счетчика:
Clk — тактовый вход;
Reset — вход асинхронного сброса счетчика в нуль;
En__Work — вход разрешения работы;
Load — вход разрешения загрузки;
Dir — вход управления направлением счета;
Din[width..l] — WIDTH-разрядный вход данных;
Dout[WIDTH..l] — WIDTH-разрядный выход счетчика.
PARAMETERS (WIDTH =8);
ASSERT (WIDTH > 0)
REPORT "Value of WIDTH parameter must be greater than VWIDTH
SEVERITY ERROR;
SUBDESIGN LPM.CNT3
(
CLK, Reset, Load, Din[WIDTH..1] : INPUT = GND;
Dir_CNT : INPUT = VCC;
Dout[WIDTH..1] ; OUTPUT;
)
VARIABLE
COUNT[WIDTH..1] : DFFE;
BEGIN
ASSERT USED(clk)
REPORT " CLK input must be used"
SEVERITY ERROR;
ASSERT USED(Load)!$ USED(Oin)
REPORT "inputs"'Load"“and""Din[]"" must be used together"
SEVERITY ERROR;
IF USED (Reser) GENERATE
COUNT[].CLRn = !Reser;
END GENERATE;
IF USED(Load) GENERATE
IF Load
THEN COUNT!].D = Din[J;
ELSIF Dlr_CNT
THEN C0UNT[).D = COUNT!].0+1;
ELSE COUNT!].D = COUNT!].0-1;
END IF;
ELSE GENERATE
IF Dir.CNT
THEN COUNT!].D = COUNT!].0+1;
ELSE COUNT!].D = COUNT!].Q-1;
END IF;
END GENERATE;
COUNT!].CLK = CLK;
Dout[] = COUNT!].O;
END;
Результаты моделирования счетчика при WIDTH=8 приведены на
рис. 3.42.
Name-
Еп_ work
—*• Reset
tOO ZOO 300 400
J--------1------1------!—
---------|------1------1—
SOO 600 700 SOO 900,
Рис. 3.42
Рассмотрим теперь счетчики с модулем счета отличным от двух.
Ниже представлено текстовое описание четырехразрядного двоично-
десятичного реверсивного счетчика с параллельной загрузкой.
писание триггерных схем 129
Выводы счетчика:
Clk — тактовый вход;
nReset — вход асинхронного сброса счетчика в нуль;
Load — вход разрешения загрузки;
Dir_CNT — вход управления направлением счета;
Din[4.,l] — четырехразрядный вход данных;
Dout[4..1] — четырехразрядный выход счетчика.
SUBDESIGN CNT_4
- (
CLK, nReset, Dir_CNT, Din[4..1], Load : INPUT;
-- Dout[4..1] : OUTPUT;
)
VARIABLE
C0UNT[4..1] DPP;
BEGIN
COUNT!].(CLK) = GLOBAL(CLK);
COUNT!]. (CLRn) = GLOBAL(nReset);
IF Load
THEN
IF Din[] > B“1001"
THEN COUNT!]. D = B'1001";
ELSE COUNT!].D = Din!];
END IF;
ENO IF;
IF (! Load & Dir.CNT)
THEN
IF (COUNT[j.0 >= B'1001")
THEN COUNT!].0 = B"0000";
ELSE COUNT!].D = COUNT!].Q+1;
END IF;
END IF;
IF (!Load & !Dir_CNT)
THEN
IF (COUNT!].0 == B'0000")
THEN COUNT!].D = B"1OO1";
ELSE COUNT[],D = COUNT[],0-1;
END IF;
END IF;
Oout!] = COUNT!].0;
ENO;
Результаты моделирования данного счетчика приведены на рис. 3.43.
Текстовое описание суммирующего счетчика с параметризированным
Модулем счета.
Выводы счетчика:
Clk — тактовый вход;
Reset — вход асинхронного сброса счетчика в нуль;
Enable — вход разрешения работы;
Dout[WIDTH..l] — WIDTH-разрядный выход счетчика;
Cout — выход переноса в следующий разряд.
PARAMETERS (module = 10);
ASSERT (Module> 1)
REPORT "Value of Module parameter must be greater than W'Module
SEVERITY ERROR;
CONSTANT WIDTH= ceil(log2(module));
CONSTANT DATA= module-1;
SUBDESIGN cnt_mod
(
CLK : INPUT;
Reset INPUT = GND;
Enable INPUT = VCC;
Dout[WIDTH.. 1] : OUTPUT;
Cout : OUTPUT;
)
VARIABLE
RG[WIDTH. .1] : DFFE;
BEGIN
RG[], (CLK.CLRn. ENA) = (CLK,'Reset,Enable);
IF RG[].O==DATA
THEN
Cout= VCC;
RG[]= 0;
Описание триггерных схем 131
ELSE
RG[].D= RG[].0+1;
END IF;
Dout[]= RG[].O;
END;
Заметим, что константа WIDTH, задающая разрядность счетчика, опре-
делена через параметр Module с помощью арифметического выражения.
Результаты моделирования данного счетчика при Module=iO представ-
лены на рис. 3.44.
Рис. 3.44
Рассмотрим теперь более универсальный вариант описанного выше
счетчика — реверсивный счетчик с параметризированным модулем счета.
Выводы счетчика:
Clk — тактовый вход;
Sreset — вход синхронного сброса счетчика в нуль;
En_Work — вход разрешения работы;
Load — вход разрешения загрузки данных;
Dir — вход управления направлением счета;
Din[WIDTH.. 1] — WIDTH-разрядный вход данных;
Dout[WIDTH..l] — WIDTH-разрядный выход счетчика;
Cout — выход переноса в следующий разряд.
PARAMETERS (module = 10);
ASSERT (Module> 1)
REPORT ''Value of Module parameter must be greater than %'Module
SEVERITY ERROR;
CONSTANT WIDTH= ceil(log2(module));
CONSTANT DATA= module-1;
SUBDESIGN cnt_univ
(
CLK ; INPUT;
Sreset,Load, Din[WIDTH..1) : INPUT = RNR-
I ipUMHICtRWC rLIIV/IDJWDUnriU Л<>«
En_Work, Dir
Dout[WlDTH..1]
Cout
INPUT = VCC;
OUTPUT;
OUTPUT;
VARIABLE
RG[WIDTH.,1] : DFFE;
BEGIN
ASSERT USED(Load)!$ USED(Din)
REPORT "inpurs'”Load""and'"Din[]"" must be used together
SEVERITY ERROR;
IF USED (Sreset) GENERATE
IF Sreset
THEN
RG[].0=0;
ELSE
IF USED(LOAD) GENERATE
IF Load
THEN
IF Din[]> DATA
THEN
RG[].D=DATA;
ELSE
RG[].D=DiN[];
END IF;
ELSE
IF USED (DIR) GENERATE
IF DIR
THEN
IF RG[].0==DATA
THEN
Cout=VCC;
RG[].D=O;
ELSE
RG[].D=RG[].Q+1;
END IF;
ELSE
IF RG[]-Q==0
THEN
Cout=VCC;
RG[].0=DATA;
ELSE
RG[].D=RG[].O-1;
END IF;
END IF;
ELSE GENERATE
IF RG[] O==DATA
>mvuh»w гри герных схем
133
THEN
Cout=VCC:
RG[].D=O;
ELSE
RG[].D=RG[1.0+1;
END IF;
END GENERATE;
END IF;
ELSE GENERATE
IF USED (DIR) GENERATE
IF DIR
THEN
IF RG[].O==DATA
THEN
Cout=VCC;
RG[].D=0;
ELSE
RG[].D=RG[].0+1;
END IF;
ELSIF RG[].Q==0
THEN
Cout=VCC;
RG[].D=DATA;
ELSE
RG[].D=RG[].0-1;
END IF;
ELSE GENERATE
IF RG[].0==DATA
THEN
Cout=VCC;
RG[].D=0;
ELSE
RG[ ].D=RG[],0+1;
END IF;
END GENERATE;
END GENERATE;
END IF;
ELSE GENERATE
IF USED(LOAD) GENERATE
IF Load
THEN
IF Din[]> DATA
THEN
RG[].D=DATA;
ELSE
RG[],D=DiN[];
ENO IF;
ELSE
IF USED (DIR) GENERATE
IF DIR
THEN
IF RG[].O==DATA
THEN
Cout=VCC;
RG[].D=O;
ELSE
RG[].D=RG[1.0+1;
END IF;
ELSE
IF RG[].0==0
THEN
Cout=VCC;
RG[].D=DATA;
ELSE
RG[].D=RG[].Q-1;
END IF;
END IF;
ELSE GENERATE
IF RG[].0==DATA
THEN
Cout=VCC;
RG[].D=0;
ELSE
RG[].D=RG[].0+1;
END IF;
END GENERATE;
END IF;
ELSE GENERATE
IF USED (DIR) GENERATE
IF DIR
THEN
IF RG[].0==DATA
THEN
Cout=VCC;
RG[].D=0;
ELSE
RG[].D=RG[].Q+1;
END IF;
ELSE
IF RG[] Q==0
THEN
Cout=VCC;
RG[].0=DATA;
ELSE
RG[].D=RG[].0-1;
END IF;
END IF;
f ELSE GENERATE
I IF RG[],Q==DATA
THEN
Cout=VCC;
RG[].D=O;
ELSE
RG[].D=RG[].0+1;
END IF;
END GENERATE;
END GENERATE;
END GENERATE;
RG[).(CLK,ENA)= (CLK, En.Work);
Dout[] = RG[ ].O;
END;
Заметим, что в данном текстовом описании по существу задано во-
семь различных схем счетчиков. Выбор конкретной схемы для синтеза
определяется набором использованных входов (Sreset, Load, Dir),
табл. 3.2, и модуля счета Module.
Таблица 3.2
Sreset Load Dlr Тип порождаемого счетчика
- Счетчик на сложение
♦ Счетчик на сложение с синхронным сбросом
- « Счетчик на сложение с параллельной загрузкой
♦ ♦ Счетчик на сложение с параллельной загрузкой и с синхронным сбросом
- - + Реверсивный счетчик
Реверсивный счетчик с синхронным сбросом
+ ♦ Реверсивный счетчик с параллельной зогруэкой
♦ + ♦ Реверсивный счетчик с параллельной загрузкой и с синхронным сбросом
Результаты моделирования данного счетчика при Module=iO и исполь-
зовании всех входов приведены на рис. 3.45.
Описание счетчика в виде конечного автомата
На рис. 3.46 представлен граф переходов трехразрядного счетчика в коде
Грея.
Текстовое описание трехразрядного счетчика в коде Грея, имеющего
вход асинхронного сброса и вход разрешения работы:
136
Практическое использование языка AHDL
Рис. 3.46
SUBDESIGN CNT_FSM
(
CLK, Reset, Enable : INPUT = GND;
Dout[3..1] : OUTPUT;
)
VARIABLE
AA: MACHINE OF BITS (Dout[3..1])
WITH STATES
( AD = B”000",
A1 = В’ООГ,
A2 = B"011",
A3 = 8"O1O",
A4 =
Описание триггерных схем
137
А6 = B"1D1",
А7 = В" 100');
BEGIN
АЛ.(CLK, Reset, ENA) = (CLK, Reset, ENABLE);
CASE AA IS
WHEN AO => AA = A1
WHEN A1 => AA = A2
WHEN A2 => AA = A3
WHEN A3 => AA = A4
WHEN A’4 => AA = A5
WHEN A5 => AA = A6
WHEN A6 => AA = A7
WHEN A7 => AA = AO
END CASE;
END:
- Результаты моделирования работы счетчика приведены на рис, 3.47.
’'Описание на вентильном уровне
j Представленные выше варианты описания счетчиков предполагают
автоматическую реализацию процедуры синтеза в рамках пакета
MAX+plus II.
Однако счетчик можно описать и на вентильном уровне, осуществив
процедуру синтеза вручную.
Ниже представлено текстовое описание четырехразрядного двоично-
го счетчика, реализованного на Т — триггерах, имеющего входы: асин-
хронного сброса (nReset), разрешения работы (Enable).
SUBOESlGN CNT_Gate
(
: INPUT = GND;
CLK, nReset, Enable
Dout 4.. 1] : OUTPUT;
)
VARIABLE
TR[4..1] TFFE;
BEGIN
TR[].(CLK ,CLRn, ENA)= (CLK, nfieset, Enable );
TR[1].T = VCC;
TR[2].T = TR[1].Q;
TR[3].T = TR[1].Q&TR[2].0;
TR[4].T = TR[1].Q&TR[2].Q&TR[3].Q;
Dout[] = TR[].O;
END;
Результаты моделирования счетчика приведены на рис. 3.48
Natne:
—» nReset
—- Enable
- ~ CLK
50 100 150 200 250 300 350 400 450 500 550 .
I I I I I 1 I I I I | ЛЭ
ШЙЬшЫЙМЙлМг
ouf[4..l]
Рис. 3.48
Модули памяти
Язык AHDL позволяет использовать поставляемые фирмой Altera
метризированные модули для создания блоков памяти.
Модуль LPM_RAM_DQ
LPM_RAM_DO — это параметризированный модуль памяти с отдель
шинами для записи и чтения данных.
Прототип модуля, находящийся в файле LPM_RAM_DO. INC (дирек
<Drive>:\niaxplus2\max21it)\mega_lpm), имеет вид:
FUNCTION lpm_ram_dq
(data[LPM_WIDTH-1..0],
address[LPM_WIOTHAD-l..0],
we, inclock, outclock)
WITH (LPM_WIDTH, LPM_WIDTHAD,
LPM-NUMWORDS, LPM_FILE,
LPM_INDATA, LPM_AODRESS.CONTROL. LPM_OUTOATA)
RETURNS(q[LPM_WIDTH-1..0]);
Описание выводов модуля сведено в табл. 3.3.
Таблица 3.3
Вывод Тип Использование Описание
обязательно
Dotc[LPM_WIDTH-I..O] Вход До LpM.WIDTH-рсэрядный вход данных
Address[LPM_WlDTHAD-l ..0] Вход До LPM.WIDTHAD-разрядный вход адреса
We Вход До Вход разрешения записи. При wea,l запись разрешена.
Indock Вход Нет Вход синхронизации записи данных в память.
Outclock Вход Нет Вход синхронизации чтения данных из памяти.
q[LPM_WIDTH-l..Ol Выход До кРМ.У/ЮТН-розрядный выход данных
Описание параметров модуля представлено в табл. 3.4.
Таблица 3.4
Параметр Тип Использование обязательно Описание
LPM.WIDTH Целое Да Разрядность входа и выхода данных памяти.
LPM_W|DTHAD Целое Да Разрядность адресного входа.
LPM.NUMWORDS Целое Нет Число слов, хранящихся в памяти. Если параметр не указан, то по умолчанию он устанавливается равным 2 IPM-W1DTAD,
IPM.FILE Страка символов Нет Имя файла инициализации памяти. Этот файл содержит донные, которые будут загружены в модуль памяти при включении питания СБИС. Если параметр не задан, то при включении питания СБИС во все разряды памяти будут записаны логические нули.
LPMJNDATA Строка символов Нет Допустимые значения параметре: «REGISTERED» — входные данные синхронизируются тактовым сигналом inclock (значение по умолчанию); «UNREGISTERED» — входные донные не синхронизируются тактовым сигналом inclock.
IPM_ADDRESS CONTROL Строка символов Нет Допустимые значения параметра'. «REGISTERED» — вход адреса синхронизируется тактовым сигналом inclock (значение по умолчанию); «UNREGISTERED» — вход адреса не синхронизируется тактовым сигналом indock.
IPM.OUTDATA Строка символов Нет Допустимые значения параметра: «REGISTERED» — выходные донные синхронизируются тактовым сигналом inclock (значение по умолчанию); «UNREGISTERED» — выходные донные не синхронизируются тактовым сигналом inclock.
Рассмотрим применение параметризированного модуля памяти
LPM_RAM_DO на примерах.
Блок памяти объемом 256 восьмиразрядных слов с синхронными
записью и чтением данных.
Выводы блока:
тактовый вход — clk:
синхронизируемый, восьмиразрядный вход данных — data_in[8..1];
синхронизируемый, восьмиразрядный выход данных — out|8..1];
синхронизируемый, восьмиразрядный вход адреса — adr[8..1];
синхронизируемый вход разрешения записи — we.
Текстовое описание:
INCLUDE "lpm_ram_aq.inc":
SUBDESIGN ram_dq_s
(
data_in[8. . 1 ]. acfr'8..1], we, clk INPUT :
ol'[8 .1] . OUTPUT:
)
BEGIN
out[]=Ipm_ram_dq (data_in[]. adr[], we. clk. clk)
WITH (LPM_WIDTH=8. LPM>IDTHAD=8):
END;
В данном примере используется непосредственное обращение к пара-
метризпрованному модулю с позиционным сопоставлением выводов
модуля и передаваемых значений.
Для синхронизации входов и выходов памяти используется единый
тактовый сигнал clk.
При обращении к модулю значения параметров LPM_INDATA,
LPM_ADDRESS_CONTROL, LPM_OUTDATA не заданы и по умолчанию им автома-
тически присваивается значение «REGISTERED”.
Результаты моделирования созданного блока памяти приведены
на рис. 3.49.
Рис. 3.49
Блок памяти объемом 256 восьмиразрядных слов с асинхронными
записью и чтением данных.
Выводы блока:
восьмиразрядный вход данных — data_in[8..1];
восьмиразрядный выход данных — out[8..1];
восьмиразрядный вход адреса — adr[8..l];
вход разрешения записи — we.
Текстовое описание:
INCLUDE ”lpm_ram_cfc. inc”:
SUBOESIGN ram_dc_a
(
dara_in[8 .1], acr[8..1],we : INPUl
our[8..1] OUTPUT:
)
BEGIN
oi.i[]=lpni_raii!_dq (oara_:n[], acr[], we. )
WITH (LPN_WIDTH=8,
LPM_WIDTHAD=8,
LPM_INDATA=”UNREGISTERED".
lpx_adoress_control=”unregistered”. lpm_outoa7A=”unreg:stered”):
END;
При обращении к модулю параметрам LPM INDATA, LPM_ADDRESS_CONTROL.
L?M_OUTDATA присвоено значение «UNREGISTERED». Поэтому процедуры
записи и чтения данных будут асинхронными. Отметим, что позиции
входов inclock и outclock оставлены пустыми.
Результаты моделирования блока памяти ram_dq_a представлены
на рис. 3.50.
—»- м/е П । П 1 П 1 П 1 II II — 1 1_ ' 1 |_ 1 1 1 1П 1 1 1 • L Tl 1 _ 1 1
ilata_M.ll °! 11 ' 11 HL. 4 | J IT7 N 7 II*
-^adr[8„ 11 0 i I! 7 !< 127 р 255\ 1 । ‘ i 'ill' 27 ’1
outi8..1} д н- 1 0 1 Шт Mi Ll
Рис. 3.50
Параметр LPM_FILE позволяет задать имя файла содержащего данные,
которые должны быть в ячейках блока памяти при включении питания
СБР1С (т. е. данные инициализации блока памяти).
В приведенных примерах этот параметр не был задан. Поэтому при
включении питания СБИС все ячейки блоков памяти, описанных ранее,
будут загружены логическими нулями.
Ниже приведено текстовое описание, в котором задано имя фай-
ла, содержащего данные для инициализации блока памяти объемом
256 восьмиразрядных слов.
Выводы блока:
тактовый вход — clk;
синхронизируемый, восьмиразрядный вход данных — data_in[8..1]:
синхронизируемый, восьмиразрядный выход данных — out[8,.l];
синхронизируемый, восьмиразрядный вход адреса — adr[8..1J;
синхронизируемый вход разрешения записи — we.
INCLUDE "lpin_ra.n_dq. inc";
SUBDESIGh ram_ac_f
(
aata_in[8..1]. adr[o. 1],we.clk INPUT ;
OJt[8..1] OUTPUT;
)
BEGIN
out[l=lpm_ra(n_da <data_in[], aar[], we, cik, clk)
WITH (L?M_WIDTH=8, LPM_WIDTHAD=8,LPM_FILE="init.mif’);
END:
В соответствии с данным описанием при включении питания СБИС
блок памяти будет содержать данные, указанные в файле Init.mif.
Файл с расширением . mif — это файл инициализации памяти (Memory
Initialization File).
Он имеет следующую структуру:
DEPTH = 32; -- Глубина памя’и( десятичное число)
WIDTH = 14; -- Разрядность данных памяти (десятичное число)
ADORESS_RADIX = HEX;
-- Система счисления, используемая для задания адреса.
DATA_RADIX = HEX;
-- Система счисления, используемая дпя задания данных.
%
Допустимо использование следующих систем счисления: BIN. DEC, HEX, OCT,
По умолчанию используется HEX.
%
CONTENT
BEGIN
[0.. F] : 3FFF;
— В ячейках памяти с адресами от 0 до F будет записано число h’3FFF"
10 :F;
-- В ячейке памяти с адресом И"10"будет записано число h’OOOF'.
[11..1F]:O;
-- В ячейках памяти с адресами от 1D до 1F будет записано число h"0000!'.
END ;
Для модуля ram_dq_f зададим файл Init.mif следующим образом:
DEPTH = 256;
WIDTH = 8;
ADDRESS_RADIX = HEX:
DATA_RADIX = HEX;
CONTENT
BEGIN
0 1;
1 2;
[2..7E] 0:
7F 3:
[80..fe] 0:
FF 4:
END;
Полученные при этом результаты
на рис. 3.51.
моделирования представлены
Модуль LPM_RAM_IO
LPM_RAM_IC — это параметризированный модуль памяти с объединенной
шиной ввода/вывода данных.
Прототип модуля, находящийся в файле LPM_RAM_IC.INC (директория
<Drive>:\maxplus2\max21ib\mega_lpni), имеет вид:
FUNCTION lpm_ram_io
(adaress[LPM_WIDTHAD-1..0].
we, inclock, outclock. outenab, memenab)
WITH (LPM_WIOTH, LPM.WIDTHAD.
LPM_NUMWORDS, LPM_FILE.
LPMJNDATA. LPM_ADDRESS_CONTROL,
LPM_OUTDATA)
RETURNS (dio[L?M_WI0TH-1..0]):
Практическое использование языка AHDL
Описание выводов Таблица 3.5 модуля сведено в табл. 3.5.
Вывод Тип Использовоние обязательна Описание
Dio[LPM_WlDTH-1..0] Вход/Выход Да IP M_WlDTH -разрядный вход/выход денных
Address(LPM_WlDTHAD-1. .0] Вход Да 1РМ_\УЮТНАО-разрядный вход адреса
We Вход Да Вход разрешения записи. При we= 1 запись разрешена.
Inclock Вход Нет Вход синхронизации записи данных в память.
Outclock Вход Нет Вход синхронизации чтения данных из памяти.
Memenab Вход Нет Вход разрешения работы памяти. При memenab=0 вывод dio[] находится в Z состоянии.
Outena Вход Нет Вход разрешения выдачи данных. При outena=1 на выводе dio(] донные, читаемые из памяти.
Описание параметрон данного модуля соответствует описанию пара-
метров модуля, LPM_RAM_DQ представленному в табл. 3.4.
Рассмотрим применение параметризированного модуля памяти
LPM_RAM_IQ на примере создания блока памяти объемом 256 восьмираз-
рядных слов, обеспечивающего возможность синхронной записи и чте-
ния данных.
Выводы блока:
вход синхронизации — clk:
двунаправленный вход/выход данных — Data[8..1J;
вход разрешения записи — we;
вход разрешения чтения — outenab;
вход разрешения работы — inenienab.
Текстовое описание:
INCLUDE ' lpir._rarc_io. inc";
SUBDESIGN ram io_s
(
adr[8..1].we.outenab,memenao.clK INPUT :
Data[8. 1] . BIDIR:
)
BEGIN
Data[]=lpm_ram_io (adr[], we,clk.clk. outenao. me-nenao )
WITH (LPM_WIDTH=8, L?M_WIDTHAD=8);
END;
Иерархическое описание
145
Поскольку параметр, указывающий имя файла инициализации памя-
ти (.mif файла), не задан, то при включении питания СБИС все ячейки
памяти будут содержать логические нули.
Результаты моделирования ;инного блока памяти приведены на рис. 3.52.
Рис. 3.52
Иерархическое описание
Язык AIIDL позволяет создать иерархическое описание модуля, в кото-
ром выделяются:
модуль верхнего уровня иерархии;
модули нижнего уровня (либо нескольких нижних уровней)
в иерархии описаний, используемые как компоненты.
В качестве примера рассмотрим иерархическое описание синхронно-
го девятиразрядного накапливающего сумматора, структурная схема ко-
торого приведена на рис. 3.53.
Рис. 3.53
11^ил1«чсслис ж.пол зо ание языка AHUL
Где изображены:
RG_A — восьмиразрядный синхронный регистр с входом об-
нуления;
RGOUT — двенадцатиразрядный синхронный регистр с входом
обнуления;
ADD — двенадцатиразрядный сумматор.
Использование непараметризированных модулей
Для создания представленного накапливающего сумматора могут быть
использованы непараметрнзированные модули, описания которых при-
ведены ниже.
Файл RG_A.tdf:
SUBDESLGN RG_A
(
D[8..V, CLK. Reset INPUT = GND;
0UT[8..1] OUTPUT;
)
VARIABLE
TR28..1] DFF;
BEGIN
TR[ ]. (CLK. CLRn) = (CLK. ! Reset);
TR[].D = D[]:
OUT[] = TR[].Q;
END;
Файл RG.OUT.tdf:
SUBDESIGN RG_OUT
(
0[9..1], CLK, Reset . INPUT = GND:
0UT[9..1] : OUTPUT:
)
VARIABLE
TP.[9. . 1] DFF;
BEGIN
TR[],(CLK. CLRn) = (CLK. iReset):
TR[].D = D[J;
OUT[] = TR[].O;
END;
Файл ADD.tdf:
SUBDESIGN ADD
(
A[S. .1], B[9. .1] : INPUT = GND:
0UT[9..1] : OUTPUT:
п рархическое описание 147
BEGIN
0ЦТ[] = B[]+ (GND,A[B:
END;
Файлы включения (Include File) содержащие прототипы указанных
модулей, созданные с помощью команды Create Default Include File
(меню File):
RG_A.INC
FUNCTION RG.A (D[8..1], CLK. Reser)
RETURNS (OUT[8..1J);
RG.OUT.INC
FUNCTION RG_OUT (D[9. 1], CLK, Reset)
RETURNS (OUT[9..1]);
ADD.INC
FUNCTION ADD (A[8.. 1]. B[S 1])
RETURNS (0UT[9..1]);
Текстовое описание верхнего уровня иерархии, в котором данные
модули используются как компоненты:
INCLUDE "RG_A.INC";
INCLUDE "ADD.INC";
INCLUDE "RG.OUT.INC’;
SUBDESIGN Accuml
(
Din[8..1], CLK, Reset Dout[9.. 1] : INPUT; OUTPUT;
VARIABLE
_RG_A RG.A; модулю RG_A присвоено имя _RG_A.
.ADD : ADD; модулю ADD присвоено имя ADD
_RG_OUT ; RG.OUT; -- yr1 модулю RG.OUT присвоено имя _RG_OUT
_RG_A.CLK = CLK;
_RG_OUT.(CLK, Reset) = (CLK. Reset);
_RG_A.D[] = 01n[];
_ADD.A[] - _RG_A,0UT[];
_ADD.B[] = .RG.OUT.OUT[J;
.RG-OUT.D[] = _ADD.OUT[J:
Oout[] = -RG.OUT.OUTi];
END;
Отметим, что вход Reset модуля RG.a остался неподключенным.
При описании модуля RG_a для входа Reset было установлено базовое
значение входного сигнала (Reset: INPUT=GND;). Поэтому компилятор
подаст на этот вход уровень логического нуля и не выдаст сообщения
об ошибке.
Использование параметризируемых модулей
Для описания накапливающего сумматора (рис. 3.53) могут быть ис-
пользованы следующие иарамстризированные модули:
LPM_ADO_SUB — модуль сумматора-вычитателя, поставляемый фир-
мой Altera:
LPMRG — модуль регистра с параллельной загрузкой, созданный
нами ранее.
Прототип модуля LPM_ADD_SUB, находящийся в файле LPM_AOO_SUB.INC
(директорий <Drive>:\maxplus2\n>ax21ib\mega_lpm) имеет вид:
FUNCTION Ipsi.acc^sjc
(cir.. d£taa[LPM_WlDTH-1. .0]. datao[L3M_WIDTH-1..0]. aad_SLb. clock, aclr)
WITH (LPM-WIDTH. _PM_REPRESENTATION,
LPM.DIRECTIGN,ONE_INPLT_IS_CONSTANT.
LPM_PIPELINE. MAXIMIZE.SPEED)
RETURNS (result!LPM_WIDTH-1..0], соы. overflow);
Прототип модуля LPM_RG, полученный с помощью команды Create
Default Include File (меню File) и находящийся в файле LPM RG.IMC,
имеет вид:
FUNCTION lpm_rg (din[width..".]. clk, set. reset, enable)
WITH (WIDTH)
RETURNS (a[wLdth.. I])
Ниже приведены два варианта текстового описания модуля верхнего
уровня.
Вариант 1: модули, используемые как компоненты, объявляются
внутренними переменными:
INCLUDE LPM.RG.INC";
INCLUDE ’LPM_ADD_SvB.INC";
SUBOESIGN ACCUH3
(
Din[8. 1], CLK. Reset . INPUT;
Dout[9 . . 1 ] OUTPUT
)
VARIABLE
RG_A LPM.RG WITH (WIDTH = 8):
RG_OUT : LPM.RG WITH (WIDTH =9);
ADD LPM.ADD. .SUB WI Th (LPM.WIDTH = 9)
BEGIN
RG_A.(CLK. Reset) = (CLK,Reset):
RG_OUT.(i.LK. Reset)= (CLK, Reset):
RG_A.0in[] = Din[];
AD0.dataa[7..0] = (RG_A.Q[));
ADD.datao[] = 3out[):
иписиние
149
RG.OUT.Dinf]
Dout[]
= ADD. result[ ]:
= RG_OUT.0[]:
END;
Вариант 2: непосредственное обращение к параметризируемы.м моду-
лям с использованием как позиционного сопоставления передаваемых
значений и выводов, так и сопоставления по именам:
INCLUDE ”LPM.RG.INC"
INCLUDE "LPX.ADD.SUB"’
SUBDESIG'i Ассыг.А
(
Din[8 .1J. CLK. Reser . INPUT:
Gout[9..1] OUTPUT-
VARIABLE
Int_A[8 . 1j NODE:
Int.BIS 1] NODE;
BEGIN
I-it.AI] = LPM.RG (Din[], CLK. Reset, )
WITH (WIDTH = 8):
(I'it_B[]. )= LPM_AOD_SUB( .aataa[7 ,0]=(Int_A[]). datab[ ]=Dout[ ])
WITH (LPM.WIDTH =9):
Dout[] = LPM.RG (Lnt_B[], CLK. Reset.)
WITH (WIDTH = 9);
END:
В приведенном описании модуль LPM.RG используется дважды:
как компонент с именем RG_A — восьмиразрядный параллельный
регистр;
как компонент RG_otit — двенадцатнразряднып параллельный ре-
гистр.
Отметим, что вход Enable модуля LPM.RG остался неподключенным
как в одном, так и в другом случае. При описании модуля LPM.RG для
входа Enable было установлено базовое значение входного сигнала
(Enable: INP(JT=VCC;). Поэтому компилятор подаст на эти входы уровень
логической единицы.
Описание накапливающего сумматора при использовании параметри-
зированных модулей также может быть сделано параметрп.зированным:
INCLUDE "LPM.RG.INC":
INCLUDE "LPM.ADD.SUB.INC";
PARAMETERS
(
Accuni_WIDTH= 9. 0ata_WIDTH=8
);
ASSES’ (AccLm_WlDTH>=Data_WIDTH)
REPORT "Acc’j.’i 'a’IDTH rr.ust be grate or equal Data.ln.WIDTH. out Accum_WlDTH=%
11 рик । и четкое исгго bjo ан
язы
and Oata_WIDTH=%" Accum_WIDTh. Data_WIDTH
SEVERITY ERROR;
SUSDESIGN ACCUM5
(
Dir,[Data_WIDTH. . 1]. Reset INP'jT=grd:
CLK . INPUT;
Dout[Accwn_WlDTE. 1] : OUTPUT;
)
VARIABLE
RG_A . LPM_RG WITH (WIDTH = Datc_wIDTH):
RG_0UT LPM_RG WITH (WIDTH - Act sni_WID7H):
ADD LPM_ADD_SUB WITH (LPV_WIDTH = Accun_WIDTH):
BEGIN
RG_A.(CLK, Reset) = (CLK.Reset):
RG_OUT.(CLK, Reset) = (CLK, Reset);
RG_A.Din[] = O’.n[];
ADD.oataa[Data_WIDTH-1. .0]= (RG_A.0[]);
A0D.datab[] = 0out[]:
RG_0UT.Din[] = ADD. result[];
Dout[] = RG_OUT.Q[];
ENO:
В приведенном описании определено два параметра:
Accum_WIDTH — разрядность накапливающего сумматора;
Data_WlDTH — разрядность входных данных.
Поскольку им могут быть присвоены любые значения, то для провер-
ки допустимости их соотношения (Accum_WIDTH>=Dats_WIDTH — разряд-
ность сумматора должна быть больше или равна разрядности входных
данных) применяется оператор Assert.
На рис. 3.54 приведены результаты моделирования параметрнзи-
роваиного накапливающего сумматора при базовых значениях пара-
метров.
Рис. 3.54
1ГШША 1¥
Пример проектирования
Рассмотрим процедуру создания и моделирования сложного функ-
ционального узла п особенности использования пакета MAX+plus II
па примере проектирования восьмиразрядного синхронного умножи-
теля.
Техническое задание
Разработать восьмиразрядный синхронный умножитель. Для его реали-
зации использовать метод последовательного умножения, иллюстрируе-
мый следующим выражением:
resuiт[15..0] = а[7. .0] Ь[7..О] ( а[7 .з] . 2 " 4) + а[3..0] • 2 " 0 )
* ( Ь[7. .4] - 2 " 4) + 0[3..0] «2'0)
- а[7..4] . Ь[7..4] ) - 2 ' 8
+ а[7 4] . Ь[3..0] ) * 2 " 4
а[3. .0] Ь[7. .4] ) . 2 ' 4
+ а[3..0] « Ь[3..0] ) . 2 " 0
В соответствии с этим методом два восьмиразрядных операнда
А[7..О] и В[7. .0] разбиваются на два четырсхразрядных операнда
А[7. .4], А[3. .0], В[7. .4], В[3. .0] и их умножение осуществляется за че-
тыре такта.
Частота синхронизации умножителя Р=25МГц.
Структурная схема умножителя
Структурная схема умножителя представлена на рис. 4.1
Выводы умножителя:
CLK — вход тактового сигнала, синхронизирующего работу умно-
жителя .
Start — вход запуска. Процедура умножения начинается при по-
явлении логической единицы на данном входе. Длительность ак-
тивного уровня сигнала — один период тактового сигнала CLK.
Reset — вход сброса.
А|7..О], В[7..О] — операнды. Значение операндов остается неизмен-
ным с момента появления логической единицы на входе Start
до окончания процедуры умножения.
Results! 15..0] — выход результата.
Done flag — выход квитирования результата. При Done_flag=l
на выходе results!] должен быть результат умножения.
В состав умножителя входят:
два чегырехразрядиых мультиплексора 2 в 1 — MUX4 21;
комбинационная схема сдвига данных — Shifter;
шестнадцатиразрядный накапливающий сумматор — Accum;
счетчик тактов — Counter:
блок управления работой — Controller;
блок умножения четырехразрядиых чисел — MULT4x4;
Разобьем процедуру создания умножителя на этапы. Сначала созда-
дим отдельные модули н проверим их работу. Затем с помощью тексто-
вого описания соберем из этих модулей умножитель, реализуем его
на СБИС программируемой логики и проверим работу
Читатели, у которых возникнут сложности с текстовым описанием
компонентов умножителя или модуля верхнего уровня, могут обратить-
ся к приложению V.
Подробное описание текстового редактора пакета приведено в прило-
жении III.
Отметим, что модуль верхнего уровня в иерархии описаний умножи-
теля, модуль Malt, можно задать и графически, т. е. с помощью графи-
ческого редактора пакета. В приложении II приведено описание графи-
ческого редактора, которое поможет вам сделать это самостоятельно.
Для графического ввода вам необходимо создать изображения символов
каждого из модулей структурной схемы. Это может быть сделано
Структурная схема умножителя
153
Рис. 4.1
пример проектирования
с помощью команды Create Default Symbol меню File, выполняемой
вместе с командой Create Default Include File меню File при создании
каждого из модулей.
Подробную информацию о компиляторе пакета Вы можете получить,
обратившись к приложению IV. Менеджер пакета описан в приложе-
нии I.
Обратите внимание на то, что представленный способ создания ум-
ножителей не является оптимальным. Цель данного проекта развить
ваши навыки использования языка AHDL для реализации иерархичес-
ких проектов.
Для хранения файлов, связанных с данным проектом, создайте
в вашей рабочей директории папку MULT.
Модуль MUX4_2_1
михл_2_1 — четырсхразрядный мультиплексор 2 в 1.
Условное графическое изображение данного мультиплексора приведе-
но на рис. 4.2
Рис. 4.2
Выводы модуля:
А[З..О], В[З..О] — две четырехразрядные входные шины;
Sei — адресный вход;
Y[3..O] — четырехразрядная выходная шина.
Логика работы модуля:
при Sel=0 на выход Y[] передаются данные с входа А[];
при Sel=l на выход Y[] передаются данные с входа В[].
Задание
Создайте модуль MUX4_2_1, используя для его описания логическое вы-
ражение:
Y []=A[]&!Sel # В[]& Sei;
Модуль MUX4_2_1 155
Осуществите его функциональное моделирование. Создайте файл
с описанием прототипа модуля.
При выполнении задания придерживайтесь последовательности дей-
ствий, приведенной ниже.
1. Создайте новый файл.
- Выполните команду New меню File.
- В диалоговом окне (рис. 4.3) укажите тип создаваемого фай-
ла — текстовый файл (Text Editor File).
- Подтвердите выбор (кнопка ОК). В результате будет открыто
окно текстового редактора с именем Untitledl.
ШВНВНННМВК
I File Туре —:-------~|
г graphic Editor file [.gdl «|
! rsymbol Editor rite
I fflwfEdltorjie' __
। г Editor file |.sd -|
| flK | Cancel [
Puc. 4.3
2. Введите текстовое описание мультиплексора. При этом не забы-
вайте использовать заготовки базовых конструкций языка
AlteraHDL (команда AHDL меню Templates).
3. Сохраните файл под именем MUX4_2_1. tdf.
- Выполните команду Save As меню File.
- В диалоговом окне (рис. 4.4):
Hie Marne: |MUX«Ztol| |
Directory Is: dAuserstentonoHpr!m_bcok2Vmjlt
files:
' Cancel J
Automate Extension:
Pile. 4.4
156 Пример проектирования
- укажите папку, в которой следует сохранить файл (раздел
Directories);
- введите имя файла М11Х4_2_1 (строка File Name).
Строка Automatic Extension показывает расширение, которое
будет автоматически добавлено к введенному имени файла.
- Подтвердите ввод (кнопка ОК).
4. Объявите проект MUX4_2_1 с помощью команды Project —> Set
Project to Current File меню File.
Для проверки синтаксиса текстового описания, построения базы
данных для функционального моделирования работы модуля, со-
здания прототипа модуля необходимо использовать компилятор
пакета, который может работать только с проектами. Поэтому
объявлен проект, имя которого совпадает с именем модуля
MUX4_2_1.
5. Проверьте синтаксис созданного текстового описания модуля (ко-
манда Project -> Save & Check меню File). После выполнения
данной команды будет запущен компилятор пакета. Если он не
обнаружит синтаксических ошибок, то появится сообщение, пред-
ставленное на рис. 4.5.
MAXrpliH II Compiler ЕЗ
Рис. 4.5
В противном случае процессор сообщений пакета выдаст инфор-
мацию об источниках ошибок.
6. Осуществите компиляцию модуля для реализации функциональ-
ного моделирования его работы.
- Выполните команду Compiler меню MAX+plus II.
- С помощью команды Function SNF Extractor меню Processing
установите режим неполной компиляции.
- Нажмите кнопку Start в окне компилятора (рис. 4.6)
»•: Compiler RHE
*' Compiler Л* • у*4 Database;^"' . *4*5 f - : Functional “ \
jX-Hetnst -а •>' ' •’i¥SNF.
- л.» •• Extractor ‘ • ' Extractor
«»... .. 'X •”
. tZ1 Ll.
Модуль MUX4 2 1
157
7. Создайте файл с описанием теста для проверки работы модуля.
Тест может быть задан либо в графическом виде с помощью ре-
дактора временных диаграмм (Waveform Editor), либо в текстовом
(векторном) виде.
Ниже приведено текстовое описание теста для проверки модуля
MUX4_2_1.
RADIX HEX;
INPUTS А[4..1];
4 PATTERN
0> 5;
RADIX HEX;
INPUTS B[4..1]:
PATTERN
0> A;
RADIX BIN;
1 INPUTS sei;
PATTERN
0> 0
10> 1;
RADIX HEX;
OUTPUTS Y[4. .1];
Введите этот текст в текстовом редакторе пакета и сохраните его
под именем MUX4_2_1.vec в папке MULT.
8. Промоделируйте работу модуля.
- С помощью команды Simulator меню MAX+plus II откройте
< диалоговое окно системы моделирования (рис. 4.7).
£ - В строке Simulation Input диалогового окна укажите источник
данных для моделирования — файл MUX4_2_1. vec.
- Запустите процедуру моделирования (кнопка Start).
ь>
‘.Г
f Рис. 4.7
t По окончании моделирования появится сообщение, представлен-
I ное на рис. 4.8.
158
Пример проектирования
1 \ Project simulation wav tuccecefui
X4* C rturt vtabihMd at 10.0ns
Simula ion ended at 20 Ons
Srnu ation covtnge. 5B%
0 sirors
0 waitings
1Гок~]
Рис. 4.8
9. Откроите графический редактор с результатами моделирования
(кнопка Open SCF диалогового окна системы моделирования,
изображенного на рис. 4.7). Сравните полученные результаты с ре-
зультатами. представленными на рис. 4.9.
Name \ 5 10 15
Z A[L.t] \ 15
1
ВЦ..Г] ! 1
—* sei 1 1 1
r[L..1l I - '
Рис. 4.9
Если они не совпадают, то необходимо скорректировать тексто-
вое описание модуля MUX4_2_1 или файл с описанием теста
(MUX4_2_1. vec).
10. Создайте прототип модуля.
- Откройте окно текстового редактора с описанием модуля. Если
текстовый редактор был вами закрыт, то выполните команду Open
меню File и в строке File Name диалогового окна укажите имя
файла: MUX4_2_1. rdf. Если же он не закрыт, то разверните его.
выбрав соответствующую строчку в меню Window (рис. 4.10).
I Msw Windew
> Ids Manzortsly Stift+H
, ГЦ \>йсаЦ
| Cascade SM«F5
• grange Icons ’ "•
। IHsmchy Dlsptoy
2 Comp vr
»• 3 '• !J*<2_1 vsc • Text Editor
1 Simulator Firctionai Simulation
Рис. 4.10
Модуль Shifter
159
- Выполните команду Create Default Include File меню File. При
этом будет запущен компилятор пакета, по окончании работы
которого появится сообщение, представленное на рис. 4.11.
UAX »ptu5 II - Compiler
include File generation was succaasLi
0 antra
Owamnga
Рис. 4.11
11.Задание выполнено. Закройте все активные окна пакета
MAX-rplus II.
Модуль Shifter
Shifter — комбинационная схема сдвига данных.
Условное графическое изображение схемы приведено на рис. 4.12.
shifter
cnf[ 1..0]
Resuir[15..O]
Рис. 4.12
Выводы модуля:
In|7..O] — восьмиразрядная входная шина данных:
Cnt[1..0[ — двухразрядная шина управления сдвигом;
Result [15..0] — шестнадцатиразрядная выходная шина.
Логика работы модуля:
если Спг[]=Ь”00", то Result!15..8]=0, Result[7. .0]=1п[7. 0] — дан-
ные передаются без сдвига;
если Cnt[]=oOT, то Result! 15.. 12]=0, Result! 11..4]=1п[7..0],
Result[3.. 0]=0 — данные передаются со сдвигом влево на четыре
разряда;
если Cnt[]=o’110", то Result! 15. .8]=1п[7. .0], Result[7..0]=0 — дан-
ные передаются со сдвигом влево на восемь разрядов;
если Cnt[ 1=Ь ” 11", то Result! 15..8]=0, Result!7. .0]=1п[7.. 0] — дан-
ные передаются без сдвига.
Задание
Создайте модуль Shifter, используя для его описания оператор Case.
Осуществите его функциональное моделирование. Создайте файл
с описанием прототипа модуля.
При выполнении задания придерживайтесь последовательности дей-
ствий. приведенной ниже.
1. Создайте новый файл.
2. Введите текстовое описание модуля.
3. Сохраните файл под именем Shifter, to*.
4. Объявите проект Shifter.
5. Проверьте синтаксис созданного текстового описания модуля.
6. Осуществите компиляцию модуля для реализации функциональ-
ного моделирования его работы.
7. Создайте файл с описанием теста для проверки работы модуля.
Ниже приведено текстовое описание теста для проверки модуля
Shifter.
START 0;
STOP 400:
RADIX HEX:
INPUTS in[7..0J:
PATTERN
0> AB;
INPUTS cnt[1..0];
RADIX BIN:
PATTERN
0> 00
10> 01
20> 10
30> 11;
RADIX HEX;
OUTPUTS resalt[15..0];
Введите этот текст в текстовом редакторе пакета и сохраните его
под именем Shifter.vec в папке MULT.
8. Промоделируйте работу модуля.
9. Откройте графический редактор с результатами моделирования.
Сравните полученные результаты с результатами, представленны-
ми на рис. 4.13.
Если они не совпадают, то необходимо скорректировать текс-
товое описание модуля Shifter или файл с описанием теста
(Shifter, vec).
10. Создайте прототип модуля.
11.Задание выполнено. Закройте все активные окна пакета
MAX+plus II.
Name
20
nS
/л('7..С/ ' " — 1 - I АВ
cntll.,01 0 Т ' . L_ 2 Y J
result! 15.01 ООАВ X 0/180 X ABOO X ООАВ
Рис. 4.13
Модуль Controller
Controller — конечный автомат, управляющий работой умножителя.
Логику работы автомата задает граф переходов, приведенный на
рис. 4.14.
Перечень состояний автомата:
Состояние IDLE. Состояние ожидания (исходное состояние автомата).
Состояние LCB. Осуществляется умножение .младших разрядов
операндов: а[3. ,0]»0[3. .0])*2"0. В накапливающий сумматор за-
писывается промежуточный результат.
Состояние MID. Последовательно осуществляются два умножения:
а[3. ,0]»Ь[7. 4])*2"4 и а[7..4]«р[3. .0])’2~4. На каждом такте накапли-
вающий сумматор осуществляет сложение хранящихся в нем данных
и текущего результата умножения.
Состояние MSB. Осуществляется умножение старших разрядов
операндов: а[7. ,4]*ь[7. .4])«2'8. Накапливающий сумматор осу-
ществляет сложение хранящихся в нем данных и текущего резуль-
тата умножения.
Состояние ERR. Состояние ошибки.
Условное графическое изображение конечного автомата приведено
на рис. 4.15.
Выводы модуля:
Clk — вход синхронизации;
Rst — вход асинхронного сброса автомата в начальное состояние:
Start — вход запуска автомата;
Count] 1..0) — вход номера такта процедуры умножения;
Sel[l..O] — выходные сигналы управления мультиплексорами
MUX4_2_1:
Shiftfl..0] — выходные сигналы для управления модулем Sfi^ter;
Done — выходной сигнал окончания работы;
Clken — выходной сигнал, разрешающий запись данных в накап-
ливающий сумматор;
Regclr — выходной сигнал, осуществляющий синхронный сброс
в нуль накапливающего сумматора.
6-2259
IDLE
оrhers
STARTED n
Count! 1..Gj-0
STARTS,
Coun 41.,0}=xx
set 1..O1=X
shift[1..0i=X
done=0
dken=l
regctr=O
set 1..0]=X
shiftfl.,01=X
done=1
dken= 1
regdr =1
MSB
STARTS
Count! L.0';=3
selt..0]=5
shifttl..0.1=2
done=0
clken=t
otners
set t..O]-X
shift[1..0]=X
done=O
clken= 1
read г -1
Count! 1..0J-2
sell.0]=2
shift[1..0]= 7
done=O
c'.ken- 7
read г =1
START=Q
Count! 1..0j=xx
sell..Oj=X '
shift! l..Ol=X
done=0
dken=l
regdr=1
shift!l..01=X
done=0
dken=1
ERR
others
set 1..0]=X
shift[1..0]=X
done=0
d.ken= 1
reqclr= /
MID
Count! 1,.0j= 1
set 1..0]=1
shift(1..0l=1
done-0
dken=0
regdr=1
starts
Count(1..0i=xx
shift[1..0]=X
done=0
c!ken=1
regdr=O
LSB
others
set 1..0]=X
shift[1..0]=X
done=0
ciken= 1
regclr=1
START=Q
Count! 1,.0i'=0
set t..0]=0
shift[ 1 ..01=0
done=0
clken=O
regclr=1
Рис. 4.14
I I
I consol I
CLK SEL[1..O]
RST SHIFT[1..0]
START DONE
COUN T[1..0] CLKEN
RE6CLR
I_________________________________________________________________I
Рис. 4.15
Задание
Создайте модуль Controller, используя для его описания оператор Case.
Осуществите его функциональное моделирование. Создайте файл
с описанием прототипа модуля.
При выполнении задания придерживайтесь последовательности дей-
ствий. приведенной ниже.
1. Создайте новый файл.
2. Введите текстовое описание модуля.
3. Сохраните файл под именем Controller, rdf.
4. Объявите проект Controlle1'.
5. Проверьте синтаксис созданного текстового описания модуля.
6. Осуществите компиляцию модуля для реализации функциональ-
ного моделирования его работы.
7. Создайте файл с описанием теста для проверки работы модуля.
Ниже приведено текстовое описание теста для проверки модуля
Controller.
START 0;
STOP 800:
% Used to define tne c1ock%
INTERVAL 50:
INPUTS clk;
PATTERN
0 1:
%Intial reset only to 100ns’t
INPUTS rst;
PATTERN
0> 1
100> 0;
RADIX BIN;
s-
164
Пример проектирования
INPUTS count[1..0]:
PATTERN
0> 00
250> 01
350> 10
45G> 11
550> 00;
INPUTS start:
PATTERN
0> 0
100> 1
200> 0;
BURIED code;
OUTPUTS self’ .0] snift[1..0Z done clken regcl';
Введите этот текст в текстовом редакторе пакета и сохраните его
под именем Controller.vec в папке MULT.
Обратите внимание на то, что представленный тест не позволяет
проверить все возможные переходы автомата.
8. Промоделируйте работу- модуля.
9. Откройте графический редактор с результатами моделирования.
Сравните полученные результаты с результатами, представленны-
ми на рис. 4.16.
Рис. 4.16
Модуль Ассит 1 65
Если они не совпадают, то необходимо скорректировать текстовое
описание модуля Controller или файл с описанием теста —
Controller, vec.
10. Создайте прототип модуля.
11. Задание выполнено. Закройте все активные окна пакета
MAX-plus II.
Модуль Ассит
Ассит — шестнадцатиразрядный накапливающий сумматор.
Условное графическое изображение модуля приведено на рис. 4.17.
I------------------------------7
। ассит ।
। ।
I---- CLK I
I CLR OUTI15..0] ---------------5
I---- CL KEN ।
! A[15..O] !
---------------------------- ।
।
i---------------------------;
Рис. 4.17
Выводы .модуля:
Clk — тактовый вход;
Clr — вход синхронного сброса содержимого накапливающего сум-
матора в нуль. Активный уровень сигнала — логическая единица:
Clken — вход разрешения работы. При С1кеп=0 работа разрешена.
При С1кеп=1 работа запрещена, но сброс накапливающего сумма-
тора в нуль разрешен;
А[15..О] — шестнадцатиразрядный вход данных;
Out[15..0j шестнадцатиразрядный выход результата.
Задание
Создайте модуль Ассит, используя для его описания оператор сложения
и примитивы триггеров DFE Осуществите его функциональное модели-
рование. Создайте файл с описанием прототипа модуля.
При выполнении задания придерживайтесь последовательности дей-
ствий, приведенной ниже.
1. Создайте новый файл.
2. Введите текстовое описание модуля.
3. Сохраните файл под именем Accum.tcf.
166 Пример проектирования
4. Объявите проект Accum.
5. Проверьте синтаксис созданного текстового описания .модуля.
6. Осуществите компиляцию модуля для реализации функциональ-
ного моделирования его работы.
7. Создайте файл с описанием теста для проверки работы модуля.
Ниже приведено текстовое описание теста для проверки модуля
Accum.
START 0;
STOP 240;
INTERVAL 20:
INPUTS clk:
PATTERN
o i;
INPUTS cl г.
PATTERN
0> 1
80>0
120>1:
INPUTS clke.n:
PATTERN
0> 0
40> 1
11O> 0:
RADIX DEC:
INPUTS a[15. .0]:
PATTERN
0> 8
40> 0
80> 10
12012
160128;
RADIX DEC;
OUTPUTS out[15..0],
Введите этот текст в текстовом редакторе пакета и сохраните его
под именем Accum. vec в папке MULT.
8. Промоделируйте работу модуля.
9. Откройте графический редактор с результатами моделирования.
Сравните полученные результаты с результатами, представленны-
ми на рис. 4.18.
Если они не совпадают, то необходимо скорректировать текстовое
описание модуля Accum или файл с описанием теста — Accum. vec.
10. Создайте прототип модуля.
И.Задание выполнено. Закройте все активные окна пакета
MAX+plus II.
Модуль Counter
167
Модуль Counter
Counter — двухразрядный счетчик.
Условное графическое изображение модуля приведено на рис. 4.19.
I 1
। counter ।
'—[CLK I
CLR TACT[1..O]
Puc. 4.19
Выводы модуля:
Clk — тактовый вход;
Clr — вход асинхронного сброса счетчика в нуль. Активный уро-
вень сигнала — логическая единица;
Clken — вход разрешения работы счетчика. Активный уровень
сигнала — логический нуль;
Tact[l..O] — двухразрядный выход результата.
Задание
Создайте модуль Counter, используя для его описания оператор сложе-
ния и примитивы триггеров DFFE. Осуществите его функциональное
Моделирование. Создайте файл с описанием прототипа модуля.
При выполнении задания придерживайтесь последовательности дей-
ствий, приведенной ниже.
168
Пример проектирования
1. Создайте новый файл.
2. Введите текстовое описание модуля.
3. Сохраните файл под именем Counter, tdf.
4. Объявите проект Counter.
5. Проверьте синтаксис созданного текстового описания модуля.
6. Осуществите компиляцию модуля для реализации функциональ-
ного моделирования его работы.
7. Создайте файл с описанием теста для проверки работы модуля.
Ниже приведено текстовое описание теста для проверки модуля
Counter.
START 0:
STOP 280:
INTERVAL 20:
INPUTS CLK:
PATTERN
0 1.
INPUTS clr;
PATTERN
0>0
75>1
85>0;
INPUTS clken:
PATTERN
0>0
40>1
120>0;
OUTPUTS tact[1..0]:
Введите этот текст в текстовом редакторе пакета и сохраните его
под именем Counter.vec в папке MULT
8. Промоделируйте работу модуля.
9. Откройте графический редактор с результатами моделирования.
Сравните полученные результаты с результатами, представленны-
ми на рис. 4.20.
Рис. 4.20
/модуль Л11ЛГ4Х4
169
Если они не совпадают, то необходимо скорректировать текстовое
описание модуля Counter или файл с описанием теста —
Counter, vec.
10. Создайте прототип .модуля.
И.Задание выполнено. Закройте все активные окна пакета
MAX+plus II.
Модуль Mult4x4
Mult4x4 — это четырехразрядиый умножитель.
Условное графическое изображение модуля приведено на рис. 4.21.
muliC-xb
Г~ Result[8..l
Рис. 4.21
Выводы модуля:
А[4..1] — операнд А;
В[4..1] — операнд В;
Result[8..1] — восьмиразрядный выход результата.
Задание
Создайте модуль Mult4x4, используя для его описания параметрнзиро-
ванный умножитель Ipmjnult, прототип которого, находящийся в файле
LPM_MULT.INC (директорий <Drive>: \maxplus2\max21ib\,iiega_lpm), имеет вид:
FUNCTION lpm_mult
(dataa[(LPM_WIDTHA-1)..0], datab[(LPM_WIDTHB-1)..0],
sum[(LPM_WIDTHS-1) .0'. aclr. clock)
WITH (LPM.WIDTHA, LPM.WIDTHB.
LPM-WIDTHP. LPM-WIDTHS.
LPM_REPRESENTATION, L°M_PIPELINE. LATENCY.
INPUT_A_IS_CONSTANT. INPUT_3_IS_C0NSTANT)
RETURNS (result[LPM_WI3THP-1. 0]):
Пример непосредственного обращения к примитиву:
result! ] - LPM_MULT(.dataar]=а[],.dataol]=а[]) with
(LPM_WIDTHA=4. LPM_WIDTHB=4. LPM_WIDTHP=8. LPM_WIDTHS=8):
Осуществите его функциональное моделирование. Создайте файл
с описанием прототипа модуля.
170 Пример проектирования
При выполнении задания придерживайтесь последовательности дей-
ствий, приведенной ниже,
1. Создайте новый файл.
2. Введите текстовое описание модуля.
3. Сохраните файл под именем Mult4x4.tdf.
4. Объявите проект Mult4x4.
5. Проверьте синтаксис созданного текстового описания модуля.
6. Осуществите компиляцию модуля для реализации функциональ-
ного моделирования его работы.
7. Создайте файл с описанием теста для проверки работы модуля.
Ниже приведено текстовое описание теста для проверки модуля
Mult4x4.
START 0;
STOP 80:
RADIX DEC:
INPUTS a[4..1]:
PATTERN
0> 0
1O 2
20 4
30 6
40> 8
50> 10
60 12
70> 14:
RADIX DEC:
INPUTS b[4. 1];
PATTERN
0> 1
10> 3
20> 5
30 7
40> 9
50> 11
60> 13
70 15;
RADIX DEC:
OUTPUTS result[8..1]:
Введите этот текст в текстовом редакторе пакета и сохраните его
под именем Counter, vec в папке Mult4x4.
8. Промоделируйте работу модуля.
9. Откройте графический редактор с результатами моделирования.
Сравните полученные результаты с результатами, представленны-
ми на рис. 4.22.
Модуль MULT 171
Если они нс совпадают, то необходимо скорректировать текстовое
описание модуля Mult4x4 или файл с описанием теста —
Mult4x4.vec.
10. Создайте прототип модуля.
11. Задание выполнено. Закройте все активные окна пакета
MAX+plus II.
Модуль MULT
MULT — это модуль верхнего уровня в иерархии описаний умножителя.
Выводы модуля соответствуют выводам умножителя.
Задание
В соответствии со структурной схемой умножителя, представленной
на рис. 4.1, создайте текстовое описание модуля. Осуществите его функ-
циональное моделирование. Реализуйте его на СБИС программируемой
логики семейства FLEX. Проведите временной анализ и определите
максимальную тактовую частоту работы СБИС. Осуществите временное
моделирование работы СБИС.
При выполнении задания придерживайтесь последовательности дей-
ствий, приведенной ниже.
1. Создайте новый файл.
2. Введите текстовое описание модуля.
3. Сохраните файл иод именем Mult.tdf.
4. Объявите проект Mult.
5. Проверьте синтаксис созданного текстового описания модуля.
6. Осуществите компиляцию модуля для реализации функциональ-
ного .моделирования его работы.
7. Создайте файл с описанием теста для проверки работы модуля.
Ниже приведено текстовое описание теста для проверки модуля
Mult.
RADIX DEC;
INPUTS а[7..01;
PATTERN
172
Пример проектирования
0> 1
200> 255
440128;
RADIX DEC;
INPUTS t>[7.. 0];
PATTERN
0> 1
200 255
440128;
RADIX DEC:
OUTPUTS resulcs[l5. 0]:
RADIX BIN:
OUTPUTS done_flag:
Введите этот текст в текстовом редакторе пакета и сохраните его
под именем Mult.vec в папке MULT.
8. Промоделируйте работу модуля.
9. Откройте графический редактор с результатами моделирования.
Сравните полученные результаты с результатами, представленны-
ми на рис. 4.23.
Если они не совпадают, то необходимо скорректировать тек-
стовое описание модуля Mult или файл с описанием теста
(Mult. vec).
10. Назначьте семейство СБИС программируемой логики для реали-
зации модуля Mult.
- Выполните команду Device меню Assign.
Модуль MULT
173
- В строке Device Family диалогового окна (рис. 4.24) выберите
семейство СБИС (например: FLEX ЮКА).
- В строке Devices установите AUTO.
- Подтвердите ввод (кнопка ОК).
И
Top of Hierarchy; dAusers\antonmAprlni_book2tmutt’iniutttdf
Device family. [FLEX10KA
peaces:
|auto
FLEX10KA
1FLEX10KB
Jflexwk ’
_________| FLEX800C
EPF10KIOATC1|FLEX6000 ’
EPFWK10AQC4MAX9C0C
E PF10 КЗОАТСя MAX7000 A
EPF10K30AQqMAX7000S
лито
°
PShow Only Fastest Speed Grades
Г Maintain Current Synthesis Regardless of Device or Speed £rade Changes
Рис. 4.24
11. Осуществите полную компиляцию модуля.
- Выполните команду Compiler меню MAX+plus II.
- С помощью команды Function SNF Extractor меню Processing
отключите режим неполной компиляции.
- Нажмите кнопку Start в окне компилятора (рис. 4.25)
Compiler Database - Logic Timing
Netllst Builder Synthesizer Partitloner Fitter -, SNF Assembler
Extractor J - 5 Extractor
Рис. 4.25
12. Определите максимальную тактовую частоту работы СБИС.
- С помощью команды Timing Analyzer меню MAX+plus II запу-
стите систему временного анализа.
- Выполните команду Registered Performance меню Analysis.
- В диалоговом окне Registered Performance нажмите кнопку
Start (рис. 4.26).
- По окончании временного анализа максимально допусти-
мая частота работы СБИС будет отображена в диалоговом
окне.
174
I /ример проектирования
А*П - АмМ* Н®С
Registered Performance
| tA0O З1!
nw«lwlHt«Q
ОШПИМ paaam-IMIttOMO
40
rt wn
|СМар«
f П4и«мг 21 Й7М»Ъ
Start | Stop | List Paths
Рис. 4.26
Сравните полученную максимально допустимую частоту
(Рд=21.97МГц) работы СБИС с частотой, заданной в техническом
задании (Бз=25.0 МГц). Поскольку Рд меньше Рз. то нам необхо-
димо установить другой режим синтеза и заново осуществить
процедуру компиляции.
13. Установите режим синтеза FAST.
- Выполните команду Global Project Logic Synthesis меню Assign.
- В строке Global Project Synthesis Style диалогового окна Global
Project Logic Synthesis (рис. 4.27) укажите режим синтеза FAST.
- Подтвердите ввод (кнопка ОК).
Ghbai Pro actL--
Project Name Is: dtaserslantonovlprimj)ook2lmultlmulttdf
Globa! Project Synthesis Style —
FAST
Define Synthesis Style.»
-Optimize-
d
Area
d
Speed
______I
MAX Device Synthesis Options--------------------
Г Multi-Level Synthesis for MAX 5000/7000 Devices
p MultFLeyei Synthesis for MAX 9000 Devices
Г Dne-Hot State Machine Encoding
Г Automatic Fast UO
Г Automatic Register Packing
P Automatic Dpen-Draln £fns
г Automatic Implement in EAB
Г
- Automatic Global —।
p Clock . |
p Clear (
F Preset 4
p Output Enable *
P Д11
Cancel
Рис. 4.27
Модуль MULT 175
14.Осуществите полную компиляцию.
- Выполните команду Compiler меню MAX+plus II.
- Нажмите кнопку Start в окне Компилятора (рис. 4.25).
15. Определите максимальную тактовую частоту работы СБИС.
- С помощью команды Timing Analyzer меню MAX+plus II запу-
стите систему временного анализа.
- Выполните команду Registered Performance меню Analysis.
- В диалоговом окне Registered Performance нажмите кнопку
Start (рис. 4.28).
- По окончании временного анализа максимально допустимая
частота работы СБИС будет отображена в диалоговом окне.
ZiTImf Ал1- ВИС
Registered Performance
Cl5de|<*(io pjtMj
|вмг«« |m nla 171p2O I
ao
MHj
Start | Stop | List Paths
Рис. 4.28
Сравните полученную максимально допустимую частоту
(Рд_36.36 МГц) работы СБИС с частотой, заданной в техничес-
ком задании (Вз=25.0 МГц). Поскольку Гд больше Рз, то можно
переходить к этану временного моделирования работы СБИС.
16. Промоделируйте работу СБИС.
- С помощью команды Simulator меню MAX+plus II откройте
диалоговое окно системы моделирования (рис. 4.29).
- Запустите процедуру моделирования (кнопка Start).
SSimulemn • SUnelatian - BOQ
Simulation input muttsef
Simulation Time; 0.0ns
Start Time: [p.Ons [ End Time: [800.0ns ]
ruse Device г Osculation lo ons I
Г Setup/НоЩ i . --------
Г Check Outputs Cfilltch |0 0ns |
| Start | Рди»е*> | Slop | Opeg SCF|
Pitc. 4.29
176 Пример проектирования
По окончании моделирования появится сообщение, представлен-
ное на рис. 4.30.
< i \ Project simulation was succeeds
C'rcM «tab ued at 793 9ns
Emulation ended Bt 600 One
Srmdatlon coverage: 90%
0 errors
Owainmgc
1ЕЮ
Рис. 4.30
17.Откройте графический редактор с результатами моделирования
(кнопка Open SCF диалогового окна системы моделирования,
изображенного на рис. 4.29). Сравните полученные результаты
с результатами, представленными на рис. 4.31.
Name
elk
—- reset
start
~~ а[7..О]
Ы7..0]
RESUL TSH5..0]
*— done _ flag
Рис. 4.31
18.Задание выполнено. Закройте все активные окна и пакет
MAX+plus II.
Приложение I
Менеджер пакета
После запуска пакета MAX+plus И активизируется окно менеджера
пакета (рис. 1.1).
| Title Ваг ~|
| Menu |
| Tool Bar ~]
ива;
.Application
Workspace
MRX+plus lly
Status Bar
Рис. 1.1
178
Приложение I
Элементы окна:
Строка заголовка (Tide Ваг) отображает название пакета
(MAX-plus II), полный путь к папке с текущим проектом
(c:\iriax2work\ChiDirip) и имя текущего проекта (Cr.iotr’.p).
Меню команд (Menu),
Строка инструментов (Tool Ваг) содержит графические обозначе-
ния (иконы) наиболее часто используемых функций пакета. Стро-
ка инструментов может быть отключена командой Preferences -*
Show Tool Ваг меню Options.
Рабочая область приложений пакета (Application Workspace).
Строка состояния (Status Ваг) содержит описание иконы, на ко-
торую указывает курсор. Строка состояния может быть отключена
командой Preferences -» Show Status Ваг меню Options.
Для выхода из пакета может быть использована команда Exit
MAX+Plus II меню File.
Иконы
Описания икон строки инструментов сведены в табл. 1.1.
Описанные иконы окна менеджера пакета являются общими для всех
приложений пакета. При этом каждое приложение может расширять
набор доступных пользователю икон.
Меню
Строка меню менеджера пакета содержит следующие команды:
MAX+plus II — открывает меню, позволяющее запускать любое
приложение пакета;
File — открывает меню работы с файлами;
Assign — открывает меню назначений проекта;
Options — открывает меню опций менеджера;
Help — открывает меню помощи.
Меню MAX+plus II (рис. 1.2) позволяет:
открыть окно с иерархическим отображением текущего проекта
(Hierarchy Display);
запустить графический редактор (Graphic Editor);
запустить редактор символов (Symbol Editor);
запустить текстовый редактор (Text Editor);
запустить редактор временных диаграмм (Waveform Editor);
запустить редактор разводки СБИС (Floorplan Editor);
открыть окно компилятора (Compiler);
открыть окно системы моделирования (Simulator);
открыть окно временного анализатора (Timing Analyser);
открыть окно системы программирования СБИС (Programmer);
запустить процессор сообщений (Message Processor).
179
Менеджер пакета
Таблица 1.1
Икона Описание
Создать новый файл
Открыть существующий файл
Сохранить файл
Напечатать файл
Вырезать
Копировать
Вставить
Отменить последнее действие
Получить подсказку ло любому объекту или слову
Открыть окно с иерархическим отображением текущего проекта
Открыть редактор разводки СБИС
Открыть окно компилятора
Открыть окно системы моделирования
Открыть окно временного анализаторе
Открыть окно системы программирования СБИС
Задать имя проекта
Объявить файл проектом
Открыть файл верхнего уровня в иерархии описаний проекте
Сохранить все открытые фойлы с списанием проекта и осуществить его лексический
анализ (запускается компилятор)
Сохранить все открытые файлы с описанием проекта и осуществить его компиляцию
(запускается компилятор)
Сохранить файл с описанием временной диаграммы и осуществить моделирование
(запускается система моделирования)
80
Приложение I
яаяятага F.ie
Hierarchy Display
Graphic Editor
Symbol Editor
Jwt Editor
W^etorm Editor
Eloorplen Editor
Compiler
Simulator
Timng^pafyier
Erogrammer
passage Processor
Рис. 1.2
Меню File (рис. 1.3) позволяет:
открыть меню управления проектом (Project);
создать новый файл (New);
открыть существующий файл (Open);
удалить файл (Delete File);
открыть файл верхнего уровня в иерархии проекта (Hierarchy
Project Top);
выйти ил пакета (Exit MAX+plus II).
HQ Assign Qpuons Help
Project »
Hew
Open.. Ctrl+O
Delete File .
Hierarchy Project Jop '** 5 CM*T
MegaWijard Plug-In Manager...
Exit MAX+plus II Alt*F4
Pile. 1.3
Меню Assign (рис. 1.4) позволяет:
задать тип кристалла (кристаллов) для размещения проектируемо-
го устройства (Device);
управлять разводкой выводов СБИС и размещением внутренних
ресурсов (Pin/Location/Chip);
установить требуемые характеристики быстродействия для отдель-
ных модулей проекта (Timing Requirements);
осуществить объединение модулей проекта в группу для компак-
тного размещения в СБИС ПЛ (Clique);
выбрать опции системы логического синтеза для отдельных бло-
ков (Logic Options);
задать имена точкам контроля схемы (Probe);
Менеджер пакета 181
осуществить соединение выводов СБИС (эмулируя связи на пе-
чатной плате) для упрощения процедуры моделирования
(Connected Pins):
установить режим локальной разводки, применимый только для
Flex 6000 (Local Routing);
задать опции реализации проекта на СБИС (Global Project Device
Options);
установить глобальные значения параметров, используемых в иа-
раметризируемых модулях проекта (Global Project Parameters);
определить требуемые характеристики быстродействия для всего
проекта в целом (Global Project Timing Requirments);
выбрать опции системы логического синтеза для всего проекта
в целом (Global Project Logic Synthesis);
игнорировать некоторые из сделанных установок (Ignore Project
Assignments);
сбросить сделанные установки (Clear Project Assignments);
скопировать результаты последней разводки СБИС в файл
Assignment & configuration File — acf-файл назначений и конфи-
гураций (Back-Annotate Project);
осуществить автоматическое преобразование файла назначений
и конфигурации устаревшего формата, созданного в рамках пакета
версий младше 5.00 (Convert Obsolete Assignment Format).
Qpoons tieip
Ejr/lccstioiVChip...
liming Requirements...
Clique .
Logic Options .
Profce..
Connected Pins..
Local Routing...
global Protect Device Options ..
Global Project Parameters
Gtooal Project Timing fiequirements.
Global Project Logic Synthesis...
Ignore Project Assignments
Cteer Project Assignments
Bacfc-Annotate project...
Convert Obsolete Assignment Eonmat
Рис. 1.4
Меню Options (рис. 1.5) позволяет пользователю;
сформировать собственную библиотеку (User Libraries);
изменить цвета элементов экрана (Color Palette);
задать лицензионный код (Authorization Code);
182 Приложение I
установить предпочитаемые режимы работы менеджера пакета
(Preferences).
Help
User Libraries
Color Palette...
Authcrijation Code .
Preferences.
Рис. 1.5
Описанные команды являются общими для всех приложений пакета.
При этом каждое приложение может расширять этот набор команд.
Для получения более подробной информации об окне менеджера
пакета и доступных командах следует обратиться к встроенной в па-
кет системе подсказок: команда MAX+pIus II Tabic of Contents —>
MAX+plus II Manager, меню Help.
Приложение ii
Графический редактор пакета
Окно графического редактора
Окно графического редактора представлено на рис. 11.1.
Рчс. 11.1
184
Приложение и
Щелчок по правой клавише манипулятора позволяет получить в окне
графического редактора контекстно-зависимое меню, включающее часто
используемые команды данного редактора (рис. П.1).
Иконы
В левой части окна находятся иконы инструментов редактора. Их опи-
сания сведены в табл. П.1.
Таблица II. 1
Икона Назначение
Выбор, перемещение, копирование объекта (Selection Toot)
Ввод текста (Text Tool)
Ввод ортогональных линий (Orthogonal Line Tool)
Ввод линий с произвольным углом (Diagonal Line Tool)
Ввод дуг (Arc Tool)
Ввод окружностей (Circle Tool)
Укрупнение изображения (Zoom In button)
Уменьшение изоброжения (Zoom Out button)
Отображение в окне редоктора всего листа (Fit in Window button)
Установка точек соединения цепей (Toggle Connection Dot button)
Включение режима, обеспечивающего неразрывность цепей (шин) (Rubberbanding On
button)
Выключение режима, обеспечивающего неразрывность цепей (шин) (Rubberbanding OFF
button).
Набор команд
В графическом редакторе базовый набор команд в строке меню, опреде-
ленной для менеджера пакета, расширен за счет следующих команд:
Edit — открывает меню редактирования;
View — открывает меню управления отображением схемы;
Symbol — открывает меню управления вводом символов;
Utilities — открывает меню утилит;
Window — открывает меню управления окнами.
185
Графический редактор пакета
Меню Edit (рис. П.2) позволяет:
отменить последнее действие (Undo);
вырезать объект (Cut);
скопировать объект (Сору);
вставить объект (Paste);
удалить объект (Del);
устанавить точку соединения на пересечении двух цепей (шин)
(Toggle Connection Dot);
перевернуть объект по горизонтали (Flip Horizontal);
перевернуть объект по вертикали (Flip Vertical);
повернуть объект на 90°, 180°, 270° (Rotate).
ЕД yiew Symbol Assign yblrties Options ^jndov
Undo Enter Orthogonal Une Ctrt*Z 3 !
Cui Ctri+X , Z л1,£
Copy Ctrt+C
Oi v
delete x Del 'Ey. .
Toggle Connection Dot Double-Cick
Ftp tonzontal ' . , . . 3,
Ftp Vertical * J C'"' •»,
Eotafe ► JO"
л» wjsBfiwwsn iso"
в&й&И* Jra taSfi.- 2TO-
Рис. 11.2
Меню View (рис. П.З) позволяет:
отобразить в окне редактора весь лист для вводе! схемы (Fit Window);
укрупнить изображение (Zoom In);
уменьшить изображение (Zoom Out);
отобразить в окне редактора всю введенную схему (Normal Size);
максимально укрупнить изображение (Maximum Size).
Symool Assign Unities Qpt
&t in Window CtrH-W
| Zoomln Ctrl* Spec»
| Zoom Cut Ctrl+Shft*Sp0ce
MormeiSize CtrH-1
Mavmum Size ctrw-2
Рис. 11.3
.Меню Symbol (рис. II.4) позволяет;
ввести символ (Enter Symbol);
осуществить редактирование выводов/параметров выделенного
символа (Edit Port/Parameters);
186
Приложение II
обновить выделенный символ (Update Symbol);
Assign Ubbties Options Ytfndc
Enter Symbol Doubte-Сйск
. Edit Eorts/Parameters Ctl*M
i Update Symbol
Рис. II.4
Меню Utilities (рис. II.5) позволяет:
найти текстовую строку (Find Text);
найти цепь в иерархическом описании проекта (Find Node in
Design File);
найти цепь в редакторе разводки СБИС (Find Node in Floorplan);
найти заданную группу модулей проекта в редакторе разводки
СБИС (Find Clique in Floorplan);
найти источник цепи (Find Node Sourse);
найти приемник цепи (Find Node Destination);
найти следующее... (Find Next...);
найти предыдущее... (Find Previous):
найти последний редактировавшийся объект (Find Last Edit);
найти и заменить (Search & Replace);
установить пегочники сигналом лля процедуры временного анали-
за (Timing Analysis Source);
установить приемники сигналов для процедуры временного ана-
лиза (Timing Analysis Destination);
удалить источник (приемник) из временного анализа (Timing
Analysis Cutoff);
осуществить процедуру временного анализа (Analyze Timing);
сбросить все установленные источники и приемники процедуры
временного анализа (Clear All Timing Analysis Tags).
РИНИИЯ Qpbons Window Hep
Findlert...
Find Node in Design Fite
Find Node in Floorplan .
Find Clique in Floorplan..
Find Node Source
Find Node Destination
Find Next Node Destination
Ctrl+C
СГП*В
Ctr1*Snift*S
Ctrl+Srtft*O
Ctn+N
Find Erevous Node Destination Ctn+Shift+N
nru _ач
Search & Replace...
Ctri+R
Timing Analysis Source ctri+A)t*S
liming Ana ysis Destination Ctrl^A^D
Timing Analysis Cutoff Ctr1*Aft*C
Analyze Timing
Clear Al Tirmrg Analysis Tags
Рис. П.5
187
Графический редактор пакета
Меню Window (рис. II.6) позволяет:
создать новое окно графического редактора, содержащее схему
текущего окна редактора (New Window);
выровнять открытые окна по горизонтали (Tile Horizontally):
выровнять открытые окна по вертикали (Tile Vertically):
расположить открытые окна каскадно (Cascade):
упорядочить иконы свернутых окон (Arrange Icons).
Це1р
Illa Horizontally STift*Fa
Ttle VertcaHy
Cascade SNft*F5
Arrange icons
z 1 Hierarchy Dispay
Рис. 11.6
Меню File, Options .менеджера пакета в графическом редакторе рас-
ширено за счет следующих команд.
В меню File появились команды, позволяющие:
открыть в окне редактора новый графический файл с сохранением
текущего файла (Retrieve);
получить информацию (размер, панку храпения и г. д.) о редак-
тируемом логическом файле (Info);
установить размер и ориентацию листа для ввода схемы (Size):
создать условное графическое изображение (символ) текущего
файла (Create Default Symbol):
редактировать символ текущего файла (Edit Symbol);
создать файл с описанием функции прототипа, файл включения
(Include File) текущего файла (Create Default Include File);
печатать (Print);
настроить принтер (Print Setup).
Меню Options в графическом редакторе дополнительно позволяет:
задать шрифт и его размер (Font; Text Size);
устанавить тип липни (Line Style);
включить 'выключить режим, обеспечивающий неразрывность це-
пей и шип (Rubberbanding):
управлять отображением назначений, сделанных пользователем
(Show...):
разрешить/запрстить отображение сетки для привязки элементов
схемы (Show Guidelines);
устаиавить расстояния между горизонтальными. X (Horizontal)
Spacing, и вертикальными. Y (Vertical) Spacing, линиями для при-
вязки элементов схемы (Guideline Spacing).
188
Приложение II
Ввод схемы
Элементами схемы, вводимой в графическом редакторе пакета, явля-
ются:
символы;
цепи (шины), соединяющие входы и выходы символов.
Символами являются:
Базовые примитивы пакета (папка — <Drive>:\maxplus2\max21iD\c'im).
Непараметризпроваиные модули (.макрофуикции), в том чис-
ле библиотека эле.мептов средней степени интеграции (папка
«Drive):\maxpljs2\max21io\mf).
Параметризированные модули и мегафункции (папка <Drive>:\-
ma/pi'js2\max211Q\mega.pin).
Созданные пользователем модули (расположены в рабочей папке
проекта).
При вводе схемы пользователь реализует следующие процедуры:
ввод символов;
удаление элементов схемы;
перемещение элементов схемы:
копирование элементов схемы;
соединение элементов схемы:
именование элементов схемы.
Базовым инструментом ввода схемы является Selection Tool
(табл. II. 1), обеспечивающий автоматическую инициализацию других
инструментов редактора, требуемых для выполнения тех или иных опе-
раций.
Отметим, что любая схема обязательно должна содержать хотя бы
один примитив INPUT и хотя бы один примитив OUTPUT, задающие
вход и выход схемы.
Рассмотрим процедуры, реализуемые при вводе схемы.
Ввод символа
1. Выбрать команду Enter Symbol меню Symbol. Данная команда
активизируется автоматически при двойном щелчке по левой
кнопке манипулятора в рабочей зоне редактора.
2. Задать имя вводимого символа в окне Enter Symbol (рис. II.7)
одним из следующих способов:
- ввести имя символа в строке Symbol Name;
- выбрать символ созданного вами модуля из окна Symbol Files;
- выбрать библиотечный символ, используя окно Symbol Libraries
п окно Symbol Files.
3. Подтвердить выбор (кнопка ОК).
Графический редактор пакета
189
Symbol Marne: Р |
hdegaWIzard Plug-In Manager, |
Symbol Libraries:____________________________________
dAuserstantonovW ecode
d^axplus2Vnax2HW₽rim
dVnaxplus2Vnax2llbVnf
dAmaxpiusZVnaxZllbimegajpm _
d.*lmaxplus2knax2llbleaf "*"
Directory Is: dAusersVantonovAdecode
Symbol files:
cascade_array
core_bar
core.conflg
core.decoder
core_par36
core_parlty
core_regmux
core_rombar
core.screg
dma_conflg
dm a,ctrt
I ДК ] Cancel |
Pile. 11.7
При вводе символа параметризирусмого модуля отображается диало-
говое окно настройки модуля (Edit Porcs/Paramcters). Описание модуля
можно получить, активизировав кнопку Help окна настройки.
В зависимости от того, включена или не г опция Show Parameters
меню Options, символ иараметризпруемого модуля будет отображаться
либо с окном введенных параметров (рис. II.8), либо без него. Если
символ отображается с окном параметров, то для редактирования пара-
метров следует:
поместить курсор в окне параметров:
двойным щелчком по левой кнопке манипулятора активизировать
диалоговое окно настройки модуля;
осуществить редактирование и подтвердить внесенные изменения
(кнопка ОК).
Если символ отображается без окна параметров, то для редактирова-
ния параметров следует.
поместить курсор на тело модуля;
щелчком правой кнопки манипулятора вызвать контекстно-зави-
симое меню;
выбрать команду Parameters, активизирующую диалоговое окно
настройки модуля;
осуществить редактирование и подтвердить внесенные изменения
(кнопка ОК).
Удаление элемента схемы
1. Выбрать элемент. Поместить курсор на тело элемента и щелкнуть
по левой кнопке манипулятора. Выбранный элемент будет иметь
красный контур.
2. Выполнить команду Delete меню Edit, либо нажать па клавиатуре
клавишу Del. Последний удаленный элемент схемы может быть
восстановлен командой Undo меню Edit.
Перемещение элемента схемы
1. Выбрать элемент. Поместить курсор па тело элемента и нажать
левую кнопку манипулятора. Выбранный элемент будет иметь
красный контур.
2. Не отпуская левую кнопку, переместить выбранный элемент
в нужную зону схемы.
3. Отпустить левую кнопку манипулятора.
Перемещение элемента схемы может осуществляться как при вклю-
ченном, так и при выключенном режиме обеспечения неразрывности
цепей, связывающих символы (табл. II. 1).
Копирование элемента схемы
1. Выбрать элемент. Поместить курсор на тело элемента и нажать
левую кнопку манипулятора. Выбранный элемент будет иметь
красный контур.
2. Не отпуская левую кнопку, нажать на клавиатуре клавишу Ctrl.
При этом около выбранного элемента появится символ «-».
3. Не отпуская нажатые клавиши, переместить копию элемента
в нужную зону схемы.
4. Отпустить нажатые клавиши.
Копирование элемента схемы можно также осуществить следующим
образом:
1. Выбрать элемент.
2. Выполнить команду Сору меню Edit.
3. Переместить курсор в нужную зону схемы.
4. Выполнить команду Paste меню Edit.
Соединение элементов схемы
Соединение выводов символов
1. Подвести курсор к выводу символа.
2. Нажать левую кнопку манипулятора и, удерживая ее, провести
линию до другого, соединяемого вывода.
3. Отпустить левую кнопку манипулятора.
Если невозможно за один прием провести линию, связывающую
соединяемые выводы, то .можно поступить следующим образом:
1. Провести участок линии.
2. Соединить конец линии с требуемым выводом по описанной выше
процедуре, или провести еще одни участок линии и т. д.
Соединение выводов символов можег осуществляться либо с помо-
щью цепей (тонкая непрерывная линия), либо шин (широкая непрерыв-
ная линия).
Тин линии выбирается редактором автоматически в зависимости от
типа соединяемых выводов. Однако он может быть задан и вручную
с помощью команды Line Style меню Options (рис. 11.9).
Assign Unities ЮПВЯИ Window Це1р
ISIISCTll! Eort
Jext Size
*--------
* Eubberbanding
* Show Parameters
_______ Show Profees
_______ ShowBns/locaticns/Chipa
Show Clique, Timing & Loca Routng Assignments
Рис. 11.9
Соединение цепей (шин)
Пакет позволяет осуществлять как графическое соединение цепей (шип),
так и соединение по именам.
192
Приложение II
Графическое соединение
Если к существующей цепи (шине) необходимо подсоединить цепь
(шину), то от введенного конца этой цепи (шины) (см. п. «Соединение
выводов символов») проводят линию до тела существующей цепи
(шины). При этом автоматически формируется точка, отмечающая ме-
сто соединения цепей (шин).
Если проведенная линия пересечет существующую цепь (шину), то
данные цепи являются пересекающимися, а не соединенными. И, сле-
довательно, точка, отмечающая место соединения, не формируется
(рис. 11.10).
Рис. П.10
Соединение по именам
Две цепи (шины) считаются соединенными, если они имеют одинаковые
имена.
Соединение по именам — удобный способ ввода длинных цепей
с разветвленными соединениями (рис. 11.11).
Именование элементов схемы
Именование примитивов INPUT (OUTPUT)
Все используемые в схеме примитивы INPUT и OUTPUT должны иметь
уникальные имена, являющиеся именами входов и выходов схемы.
Ввод имени:
1. Поместить курсор в зону имени вывода (т. е. на текст
«PIN_NAME») и выбрать эту зону двойным щелчком по левой
клавише манипулятора.
2. Ввести на клавиатуре имя вывода. (Старое имя будет автомати-
чески стерто).
3. Нажать кнопку Enter на клавиатуре. (Если существует другой
Графический редактор пакета
193
Г elk 1—CL-K
d[1l Г°г^П 1
--— п п --» —
CLK I
q[2.. // Gwplt
> q[2..1b
~d(2] ~j q[2]
--n n '
CLK I
Рис. П.11
примитив типа INPUT или OUTPUT, расположенный ниже дан-
ного примитива, то у него будет автоматически выбрана зона
имени).
Редактирование имени:
1. Поместить курсор в зону имени вывода и выбрать эту зону двой-
ным щелчком по левой клавише манипулятора.
2. Используя клавиши «- (-*) клавиатуры, подвести курсор к редак-
тируемому символу.
3. После окончания редактирования нажать клавишу Enter клавиа-
туры.
Именование цепей (шин)
Ввод имени:
1. Выбрать цепь (шину). Поместить курсор на тело цепи (шины)
и щелкнуть по левой клавише манипулятора. Выбранная цепь
(шина) будет иметь красный контур.
2. Ввести имя цепи.
3. Нажать клавишу Enter на клавиатуре.
Редактирование имени:
1. Поместить курсор в зону редактируемого имени и двойным щел-
чком по левой клавише манипулятора выбрать эту зону.
2. Используя клавиши *- (-») клавиатуры, подвести курсор к редак-
тируемому символу.
3. После окончания редактирования нажать клавишу Enter клавиа-
туры.
Удаление, перемещение, копирование имен цепей (шин) осуществля-
ется так же, как и других элементов схемы.
Приложение III
Текстовый редактор
Окно текстового редактора
Окно текстового редактора представлено на рис. III.1.
с
Рис. III. 1
Текстовый редактор 195
Щелчок по правой клавише манипулятора позволяет получить в окне
текстового редактора контекстно-зависимое меню, включающее часто
используемые команды данного редактора (рис. III.1).
Набор команд
В текстовом редакторе базовый набор команд в строке меню, определен-
ной для менеджера пакета, расширен за счет следующих команд:
Edit — открывает меню редактирования;
Templates — открывает меню заготовок базовых конструкций язы-
ков AlteraHDL, VHDL, Verilog HDL;
Utilities — открывает меню утилит;
Windows — открывает меню управления окнами.
Меню Edit (рис. III.2) позволяет:
отменить последнее действие (Undo);
вырезать объект (Cut);
скопировать объект (Сору);
вставить объект (Paste);
удалить объект (Del);
вставить страничный разделитель (Insert Page Break);
увеличить отступ (Increase Indent);
уменьшить отступ (Decrease Indent).
Рис. П1.2
Меню Templates (рис. Ш.З) позволяет активизировать диалоговое
окно с заготовками базовых конструкций языков:
AlteraHDL
VHDL
> Verilog HDL
9. M
7^
196
Приложение III
Диалоговое окно с заготовками базовых конструкций языка
AlteraHDL представлено па рис. 1II.4. Для выбора базовой конструкции
следует поместить курсор на требуемую конструкцию и щелчком по
левой клавише манипулятора активизировать ее.
ТвтоШа S*D*ore
Asian StMamant
Boolean Eouation
Cua
Canstare Sial*m*nl
Defalt StAfamanl
Denns Statamanl
-O' General* 9«l*n»*nt
^uneton Proiolyv* SI tamani Inoopawnewtzad)
cunrtan PioMl^e S1aiam*nitoaram«'«r’sed\
It G«n« Ns Suismenl
If ’’hen Slaiamani
|rv-un* Aefsrsnc* (non-paramsts'as-dl
In-Lin» Asrsisnoe jparanwwnzea)
k>-Lr* Aef*r*r\c* (namsd port ass«<c<abon)
Incluo* Swamert
Insunc* 3«сшгаьоп tnon-oaram I*n2*dl
Insunc* Dadaraton <param*wnzed)
Logic S«eaon
Madn«r* Alia* Oaclaraeon
Nooa 0ви*/з*оп
Carc*i |
PUC. Ш/4
Меню Utilities позволяет:
осуществить переход к заданной строке и колонке (Go То);
в выполнять все те же действия, что и команда Utilities графичес-
кого редактора.
Меню File и меню Options менеджера пакета в текстовом редакторе
расширено за счет следующих команд.
В меню File появились команды, позволяющие:
в открыть в окне редактора новый текстовый файл с сохранением
текущего файла (Retrievs);
в получить информацию (размер, папку хранения и т. л.) о редак-
тируемом логическом файле (Info);
в команда Options дополнительно позволяет:
- выбрать шрифт (Font);
- задать размер шрифта (Text Size);
- определить шаг табуляции (Tab Stops);
- установить режим позиционирования курсора при переводе
строки (Auto-Indent):
- курсор помещается на ту же позицию, что и в текущей стро-
ке (режим задан);
- курсор помещается в начало строки (режим не задан);
- задать использование режима окраски синтаксических элемен-
тов текстового описания (Syntax Coloring).
Компилятор пакета
Окно компилятора
Па рис. IV. 1 представлено окно компилятора при реализации полного
цикла компиляции.
Рис. IV I
198 Приложение IV
Для запуска компилятора следует нажать кнопку Start.
Набор команд
Базовый набор команд в строке меню, определенной для менеджера
пакета, расширен в компиляторе за счет следующих команд:
Processing — открывает меню настройки режима работы компиля-
тора:
Interfaces — открывает меню настройки интерфейса компилято-
ра — установки параметров входных и выходных файлов ( ecf
.Ido, .v, vo, vno, , vto, . xnf);
Windows — открывает меню управления окнами активных прило-
жений пакета.
Меню Processing (рис. IV.2) позволяет:
включить утилиту проверки качества проекта (Design Doctor):
настроить утилиту проверки качества проекта (Design Doctor
Settings);
установить режим построения базы данных для функциональ-
ного моделирования проекта — режим неполной компиляции
(Functional SNF Extractor);
установить режим полной компиляции (Timing SNF Extractor);
установить режим построения оптимизированной базы данных для
временного моделирования (Optimize Timing SNF);
установить режим создания «связанной» базы данных для функ-
ционального или временного моделирования проекта, состоящего
из модулей, для которых созданы свои функциональные или вре-
менные базы данных (Linked SNF Extractor);
выбрать параметры разводки СБИС (Fitter Settings);
выбрать параметры автоматически генерируемого пакетом файла
с отчетом о созданной СБИС (Report File Settings);
установить режим генерации на языке AlteraHDL файла с описа-
нием всего проекта в целом (Generate AHDL TDO File);
установить режим ускоренной рекомпиляции проекта (Smart
Recompile);
установить режим полной рекомпиляцин проекта (Total
Recompile);
установить режим сохранения синонимов цепей (Preserve All
Node Name Synonyms).
Меню Interfaces (рис. 1V.3) позволяет;
задать параметры компиляции входного файла в формате EDIF
(EDIF Netlist Reader Settings);
установить режим создания файла в формате EDIF, содержащего
временную модель спроектированной СБИС (EDIF Netlist Writer);
задать параметры создаваемого в EDIF формате файла (EDIF
Netlist Writer Settings'»:
Компилятор пакета
199
ISEBESffiffl interfaces Assign Option
Design Doctor
Design Doctor Settings.
Eurobond SNF Extractor
•* liming SNF Extractor
Qptimz© Timing SNF
Linked SNF Extractor
Fitter Settings .
Report File Settings .
Gorerate /‘tiCL TDO File
Smart Reconcile
Total ReiompHe
Ereserve All Node Name Syncnyrns
Pnc. IV.2
установить режим создания файла на языке Verilog HDL. содержа-
щего временную модель спроектированной СБИС (Verilog Netlist
Writer);
задать параметры создаваемого на языке Verilog HDL файла
(Verilog Netlist Writer Settings);
задать параметры компиляции логического файла на языке VHDL
(VHDL Netlist Reader Settings);
установить режим создания файла на языке VT1DL, содержаще-
го временную модель спроектированной СБИС (VHDL Netlist
Writer);
задать парметры создаваемого на языке VHDL файла (VHDL
Netlist Writer Settings).
ИЯЯИ55Я Assign Options y^rdc
ED(F Netlist Boeder Settings
EDiF Uetiist Wnter
, ED IF Netlist Wnter Settings ..
1 vgriiog Netfist Writer
| Venlgg Netlist Wnter Settings
I VHDL Netlist Reader Settings...
VhlDL Nethst wnter
VFQL Nethst Wnter Settings .
£№ Netlist Reeder Settings...
Sv-jps’/s Co-rp te*
Рис. IV.3
Меню File менеджера пакета в компиляторе расширено за счет ко-
манд, позволяющих;
преобразовать формат файла с данными для программирования
СБИС (Convert SRAM Object Files);
200
Приложение IV
создать на языке JAM или в формате SVF файл для программи-
рования СБИС (Create JAM or SVF File).
Назначение параметров компиляции
Назначение параметров компиляции может быть выполнено с помощью
команд Processing, Interfaces, Assign меню компилятора.
Настройка режима работы компилятора
Настройка режима работы компилятора осуществляется командами
меню Processing (рис. IV2).
Утилита проверки качества проекта
Команда Design Doctor меню Processing позволяет на этапе компиля-
ции проекта обнаружить проблемы, связанные с:
формированием сигналов синхронизации и сигналов асинхронной
установкп/сброса триггеров:
наличием статических сбоев в схеме до и/пли после компиляции:
использованием логических элементов или макроячеек для фор-
мирования ценен задержки и т. л.
То есть те проблемы, которые обычно обнаруживаются только
на этапе тестирования опытного образца в составе системы.
При этом проверка качества может осуществляться как по правилам,
с<|юрмированным фирмой Altera для EPLD (СБИС семейств МАХ),
FLEX (СБИС семейств FLEX), MPLD (масочно-программируемых
СБИС), так и по правилам, заданным пользователем (Custom Rules).
Правила проверки задаются с помощью диалогового окна Design Doctor
Settings меню Processing (рис. IV.4).
Design Rules
r EPLD Rules
ff£LEXRiJes
** MPLD Rules
I г Custom Rules
| Advanced Options » ~|
| ДК ~| Cancel |
- Clocks---• -—г-------
P Ripple Clocks
P Gated Clocks
P MUtbLeyel Clocks
P MuttJ-Clock Networks
- Static'Hazards —-----
P Before Synthesis
r After Synthesis
- Other Rules ----*—*—
P presetf Gear Networks
P Asynchronous Inputs
P Delay Chains
PRace Conditions
P Eijpander Networks
Г Master Reset I
Рис. IV.4
Режимы компиляции
В меню Processing определены следующие режимы компиляции
(рис. 1V.2):
Компилятор пакета 201
Functional SNF Extractor — режим частичной компиляции. Этот
режим ориентирован на создание функциональной (логической)
модели проектируемой СБИС. Процедуры синтеза, разводки
СБИС и т. д. не реализуются. Поэтому время формирования базы
данных (файл с расширением . sef) для функционального модели-
рования будет минимальным.
Timing SNF Extractor — режим полной компиляции. Этот режим
обеспечивает создание файла с данными для программирования
СБИС и временной модели спроектированной СБИС (т. е. базы
данных для временного моделирования СБИС — файла с расши-
рением set). В этом режиме может сбыть задана опция Optimize
Timing SNF меню Processing, обеспечивающая создание динами-
ческих моделей комбинационных схем. Включение этой опции
увеличивает время компиляции, ио позволяет ускорить процедуру
моделирования и временного анализа.
Linked SNF Extractor — режим объединения баз данных для функ-
ционального или временного моделирования нескольких проектов
в единую базу данных для реализации их совместного функцио-
нального или временного моделирования.
Ете один режим компиляции — компиляция без создания snc
файла. В этом режиме не выбрана ни одна из трех команд:
Functional SNF Extractor, Timing SNF Extractor. Linked SNF
Extractor.
Установка режимов разводки СБИС
Команда Fitter Settings меню Processing позволяет установить следую-
щие режимы разводки (рис. IV.5):
Normal Fitting — стандартный режим разводки;
Advanced Fitting — режим углубленной разводки. В этом режиме
тля обеспечения разводки СБИС используются дополнительные
опции разводки, что приводит к большим временным затратам
па раз водку проекта;
Custom Fitting — режим разводки с опциями, заданными пользо-
вателем (команда Customize).
С«п«г«| FW* SMngs
* fion»* F«ifcig_(Npmu<Ajja LCSLU kwirton Ortyl
r fidwtood Try HartwAangor CorrpMton Ffling
(Auto l.CFl.1. Intorten But Otar OHone)
r CUtfemFang i
Qujtomg»» | I ДК ] Gxvool |
Рис. IV.o
202
Приложение IV
Установка формата файла отчета
Команда Report File Settings меню Processing позволяет управлять
включением в файл отчета (рис. 1V.6):
User Assignments — назначений, сделанных пользователем:
File Hierarchy — описания иерархии проекта;
Logic Cell Interconnections — описания схемы соединения логи-
ческих элементов (FLEX) и макроячеек (МАХ);
Equations — синтезированных логических выражений.
Optional Report Fde Sections.
P jjser Assignments
P File Hierarchy
P Logic Cell Interconnections
p Equations
Р&И
| ак ] Далее! |
Pile, IV.G
Установка режима формирования выходного файла на языке AHDL
Команда Generate AHDL TDO File меню Processing позволяет устано-
вить режим формирования на языке A1IDL описания всего проекта
в целом. Данное описание включает описание интерфейса проекта и ло-
гические выражения, полученные после реализации компилятором логи-
ческого синтеза па заданном элементном базисе ( г. е. на заданном семей-
стве СБИС).
Установка режима перекомпиляции проекта
Команда Smart Recompile меню Processing позволяет установить ре-
жим быстрой перекомпиляции проекта.
Первая после установки данного режима процедура компиляции из-
за необходимости сохранения на диске всех промежуточных баз данных,
создаваемых пакетом, требует дополнительных временных затрат. При
последующих компиляциях (перекомпиляциях) проекта пакет будет
выполнять только те этапы компиляции, которые необходимы для учета
внесенных в проект изменений, что обеспечивает .значительное сокраще-
ние времени перекомпиляции.
Команда Total Recompile меню Processing позволяет установить ре-
жим полной! перекомпиляции проекта, при этом на диске создается
новый набор промежуточных баз данных проекта.
В режиме нормальной компиляции (не выбрана ни одна из указан-
ных выше команд) выполняются все этапы компиляции, при этом новые
Компилятор пакета
203
промежуточные базы данных создаются только для измененных мо-
дулей.
Режим сохранения синонимов
Команда Preserve All Node Names Synonyms меню Processing позволя-
ет установить режим сохранения синонимов внутренних цепей и пере-
менных проекта. Использование этого режима может упростить поиск
цепей и переменных. Однако включение данного режима увеличивает
время компиляции и объем создаваемых промежуточных базы данных
проекта.
Настройка интерфейса компилятора
Настройка интерфейса компилятора осуществляется командами меню
Interfaces (рис. IV.3)
EDIF формат
Команда EDIF Netlist Reader Settings позволяет:
указать поставщика системы проектирования, в рамках которой
получен импортируемый EDIF файл. Для перечисленных в графе
Vendor поставщиков пакет MAX-plus II содержит .Luf (Library
Mapping File) файлы (<crive>:\mzxplas2\lmf\*. Imf):
указать собственный . Isif файл (клавиша Customize).
Команда EDIF Netlist Writer Settings позволяет:
указать поставщика сие гемы проектирования, для которой созда-
ется файл в EDIF формате;
выбрать стандарт (EDIF 200 или EDIF 300), в котором будет
создаваться файл;
изменить определенные в пакете опции настройки (клавиша
Customize).
Язык VHDL
Команда VHDL Netlist Reader Settings позволяет:
указать версию языка (VHDL87 или VHDL'93), использованную
в файле с VF1DL описанием;
указать компилятору дополнительные библиотеки, которые необ-
ходимо использовать при компиляции VHDL файла.
Команда VHDL Netlist Writer Settings позволяет:
выбрать версию языка VHDL для создаваемого файла;
задать параметры создаваемого файла.
Язык Verilog HDL
Команда VerilogHDL Netlist Writer Settings позволяет задать парамет-
ры создаваемого на языке Verilog файла.
204
Приложение IV
Формат .xnf
Команда XNF Netlist Reader Settings позволяет:
выбрать режим эмуляции шин с Z состоянием;
установить опцию автоматического формирования файла на языке
AlteraHDL — tdf файл.
Задание элементной базы и опций компилятора
Задание элементной базы и опций компилятора осуществляется коман-
дами меню Assign (рис. 1.4).
Задание элементной базы для реализации проекта
Команда Device (рис. IV.7) позволяет выбрать СБИС программируемой
логики для реализации проекта.
а
Рис. 1\'.7
В окне Device Family указывается семейство СБИС.
Окно Devices содержит список СБИС программируемой логики ука-
занного семейства, поддерживаемых используемой версией пакета.
При включенной опции Show Only Fastest Speed Grades в окне
Devices отображаются только СБИС, имеющие максимальное быстро-
действие.
Наименование СБИС программируемой логики, выбранной для реа-
лизации проекта, отображается в графе под словом Devices.
Пользователь имеет возможность указать не конкретную СБИС,
а опцию Auto. При этом компилятор сам подберет СБИС из выбранного
семейства, позволяющую реализовать текущий проект.
Клавиша Auto Device активизирует для выбранного семейства окно
задания множества СБИС, в рамках которого компилятор осуществляет
поиск СБИС при реализации процедуры автоматического подбора (оп-
ция AUTO).
Клавиша Edit Chip открывает окно управления размещением проекта
на СБИС (рис. IV.8). Если проект размешается па нескольких СБИС
(Chip), то каждой из них присваивается собственное имя (Chip Name).
Соответствие имен и типов СБИС ПЛ отображается в поле Existing
Device Assignments.
Компилятор пакета
205
Top of Hierarchy: dl_lf riortcad_.wr_updated\cod_wr.gdf
Далее! |
Ayto Device— |
Device family: |flEXBOOO
Devices;_______________
[EPFB636ALC84-4
EPF9636ALG04-4
Device Options... |
EPFBG3&ALC84-3
EPFB636ALI04-4
EPFB636AQC16D-4
EPFfi636AQC160-3
г Show Only Fastest Speed Grades
P Maintain Current Synthesis Regardless of Device or Speed Grade Changes
£<111 Chips » |
Chipbame;
Rename Chip- |
Existing Device Assignments;
CHIP_C0D:>
Device » EpFe636ALC84-4; (Famiy = FLEX9000)
CHiP_WR: >
Device = EPFB636ALC84-4: (Family - FLEX80C0)
Auto-Restart Configuration on Frame Error = ON
Configuration Scheme (FLEXS000) = ACTIVE-SERIAL
DataO = RESERVED_TRi_ STATED
DatafUT] - UNRESERVED
nWs.nRS.nCS.CS = UNRESERVED
So£tBy ------
Chip Name
Device Name
Cluing#-
а
Delete . |
Piic. IV.8
Клавиша Device Options (рис.
ИЛ. псио.11>зусмой при реализации
опции. Окно, открываемое данной
семейства СБИС ИЛ.
JV.9) позволяет .тля каждой СБИС
проекта, установить индивидуальные
клавишей, специфично .тля каждого
Задание режимов синтеза
Пакет позволяет задавать режим синтеза:
глобально, т. е. для всего проекта в целом;
индивидуально, т. е. для отдельных модулей, входящих в проект
на любом уровне иерархии.
Глобальная установка режима синтеза
Команда Global Project Logic Synthesis открывает окно (рис. IV.10)
установки режима синтеза.
В пакете определено три базовых режима синтеза (поле Global Project
Synthesis Style):
NORMAL — режим, ориентированный на минимизацию аппаратных
затрат на реализацию проекта;
EAST — режим, ориентированный на достижение максимального
быстродействия создаваемой СБИС;
WYSIWYG — режим, обеспечивающий реализацию проекта без ми-
нимизации и оптимизации.
Поле MAX-Device Synthesis Options содержит настройки, специфи-
ческие для семейств МАХ;
2U0
Приложение iv
> 8000 > Owte»«>>' П
Top of Hierarchy: d,l..Vnax_work\pr1orXcod_wr_updatedU:od_wr.gd1'
Device Options — - • — •— — F User-Supplied Start-Up Clock (CLKUSR)( f Auto-Restart Configuration on Frame Error 1 1
Cancel |
F Release Clears Before Tri-States F Enable DCLK Output In User Mode F disable Start-Up Time-Out F MulUYoit I/O F Enable JTAG Sipport Dual-Purpose Configuration Pins Configuration Scheme:) Use Global Project Sett! rg J
Pin; Reserve: Trt-State: Pin: Reserve: Trt-State:
Data£ P P AddlCL.12] p F
ntf S, nRS, nCS. CS F F Addia F F
Data(1..7[ F F Add Ц F F
RDJfnBUSY F F Addl5 F F
Rdclk F F Add 16 F F
SDOUI F F Add 12 F F
Not Affected By Configuration CLKUSR
Scheme:
Pur. IV.9
Gtabii « □
Prq«c(ftM-n«ii «rW*tQnVKW"*HrHu*.^lniaeidf
Global Privet SI/« OpW’xja
WVSWYG
MAX Davin SynihaM Optom
r Mu*-L»val Synthai» for MAX ЭООДОООУТООО Самом
p Mufe-LafcM Synthoi a tor MAX $000 Сммеаа
r On*-tjot Sum Maduna Enoedm^
Automate Fmi I/O
г Automata RaguterPtolong
в Automate OpwvOraan Elm
в Gm»S
P Gaw
в ₽t«»at
я Oufout БпаЫа
РАИ
Automata Invlamanl ю EAO
Cancal
Ри< . IV. U)
Multi-Level Synthesis for MAX 5000. MAX 7000 Devices — опция,
включение которой позволяет компилятору более эффективно
разбивать сложные логические функции и реализовывать их
Компилятор пакета 207
иерархически. Использование этой опции может привести к уве-
личению задержки распространения сигнала от входа до выхода
СБИС, но обеспечивает возможность автоматической разводки
более сложных проектов.
Multi-Level Synthesis for MAX 9000 — опция, используемая для
СБИС семейства МАХ 9000, аналогична описанной выше опции.
One-Hot State Machine Encoding — опция кодирования состояния
автоматов по принципу: одно состояние — один триггер. Если эта
опция выключена, то используется двоичное кодирование состо-
янии.
Поле Automatic Global позволяет указать компилятору на необходи-
мость автоматического использования специализированных глобальных
шин распространения сигналов:
CLK — тактового сигнала;
Clear — сигнала асинхронного сброса триггеров:
Preset — сигнала асинхронной установки триггеров;
Output Enable — сигнала разрешения работы выходных буферов
СБИС.
Опции, ориентированные на автоматическое использование архитек-
турных особенностей СБИС программируемой логики;
Automatic Fast I/O — позволяет задействовать триггеры, располо-
женные в элементах ввода/выиода СБИС семейств МАХ 9000.
FLEX [1];
Automatic Register Packing — позволяет одновременно и независи-
мо использовать триггер и логическую часть макроячейки (МАХ
9000) или логического элемента (FLEX ЮК);
Automatic Open-Drain Pins — разрешает кок.лятору при выпол-
нении определенных условий автоматически заменить буфер с Z
состоянием па буфер с открытым коллектором:
Automatic Implement in EAB — обеспечивает автоматическую ре-
ализацию логических функций па встроенных модулях памяти
(FLEX ЮК)
Клавиша Define Synthesis Style открывает окно (рис. IV, 11), позво-
ляющее:
создать собственный режим синтеза;
посмотреть и при необходимости изменить установки, сделанные
для базовых режимов.
Для каждой опции может быть установлено три значения;
включена (ON) — опция помечена галочкой;
выключена (Off) — опция не помечена галочкой;
по умолчанию (Default) — опция помечена галочкой на сером
фойе.
208
Приложение IV
□«fine *MSty««
Top Ы Htenrety: «^deogrriprtntofVnul daMmdUdf
sm>; ИМ^ИИИИШ
3
РмОглмГчДО )FL£X/AC£X
Г Slow SI»W Rato
Г XCR SyrS>?«n
Г TvrbO ЗЛ
CatryCMre |AuIo J
MetAUoL»no*i:
| QK 1 Cinod |
□
Sav»SM*Aa„ I
D»w‘» sr,to |
Г S 1Л1Я* Ех£.аГк№г»
₽«anw»SCETBufcrt
Г Ui< LPM lor AbOL Operator»
MrimGJftXY |fG1 3
Caactda Qiao: |Auto 3
Mat. AiJd Langh; |2
Цао QoIomU I Adwxtod Optoni . |
Рис. IV. 11
Задание опции, определяющих особенности синтеза проекта и ис-
пользования внутренних ресурсов СБИС, должно базироваться на зна-
нии архитектуры СБИС ПЛ, выбранной для реализации проекта.
Индивидуальная установка режимов синтеза
Команда Logic Options открывает окно (рис. IV. 12) индивидуальной
установки режима синтеза.
В поле Node Name выводится имя модуля проекта, для которого
будет устанавливаться режим синтеза.
Имя модуля может быть найдено пользователем с помощью клавиши
Search. Кроме того, модуль может быть выбран в графическом редакто-
ре, тогда его имя будет автоматически подставлено пакетом в поле Node
Name.
Компилятор пакета 209
Раздел Logic Options позволяет пользователю установить режим
синтеза путем:
задания базового режима синтеза (поле Style);
определения для модуля собственного режима синтеза (Define
Synthesis Style):
установки опции логического синтеза модуля (Individual Logic
Options).
Отметим, что индивидуальные установки имеют приоритет перед
глобальными установками.
Размещение выводов и модулей проекта
Команда Pin/Location/Chip открывает окно (рис. IV. 13), позволяющее
привязать выводы проекта к конкретным выводам СБИС, а модули
проекта — к логическим блокам или .макроячейкам.
Рис. IV13
Поле Node Name отображает имя размещаемого модуля (вывода)
проекта.
Модуль (вывод) может быть найден с помощью клавиши Search.
Кроме того, модуль (вывод) проекта может быть выбран в графическом
редакторе, тогда его имя будет автоматически подставлено пакетом
в иоле Node Name.
Поле Chip Name отображает имя СБИС, для которой осуществляется
назначение.
Клавиша Assign Device открывает окно, соответствующее команде
Device меню Assign.
Поле Existing Pin/Location/Chip Assignments отображает все сделан-
ные назначения.
2 10 Приложение IV
Задание требуемых характеристик быстродействия
Требуемые характеристики быстродействия могут быть заданы инди-
видуально. т. е. для отдельных модулей проекта (команда Timing
Requirements см. рис. IV. 14) или глобально (команда Global Project
Timing Requirements, см. рис. IV'. 15):
t — максимально допустимая задержка распространения сигнала
от входа до выхода;
t — минимально допустимое время предустановки данных
па входах СБИС до появления на тактовом входе СБИС актив-
ного перепада тактового сигнала;
с — максимально допустимое время распространения сиг-
налов от выхода триггеров до выходов СБИС после появления
на тактовом входе СБИС активного перепада тактового сиг-
нала;
f — требуемая тактовая частота работы СБИС.
Рве. IV. 14
Gtaboi * • Kt Timin Roquremtre к
Protect Namoia cWMiQr№nmofVnul.d«VnulUdf
Globo) Proiaot Timing Boquromom
W: | Joo J
bu: j [
P ©J All gidiradorui Feedback Timing РаЙч
₽ OJ Al Oov li Protat Timing Psffu
r Ignore Timrg Asugrmonb During FoSng
Рве. IV. 15
Компилятор пакета 21 1
Задание значений параметров
Команда Global Project Parameters открывает окно (рис. IV. 16), позво-
ляющее задать значение ларметров. используемых в пара.метризнруемых
модулях. Данный способ имеет низший приоритет по отношению
к другим способам задания значений параметров.
Global Рпэ act Panmvta а Q
proiwl Nam* it; сЛбаыдгАргипаЛгпи» dkyrmHidf
Ptramater thrn*-. ( __J
Parameteryatua: | '* •* |
Param*a> Nam*: Value-.
Рис. IV.16
Объединение модулей проекта в группу
Команда Clique позволяет объединить модули проекта в группу. При
разводке СБИС компилятор будет стараться разместить лги модули как
можно компактнее, т. е. в одном логическом блоке, в одной строке
логических блоков, в одной СБИС.
Окно команды Clique приведено на рис. IV. 17.
Тор of Harare**,* otda«gn\prm*^nnuRdvSmulLM
Noda Manx | | QK |
I °вМ* №m*: ' 3 Chical |
| EgnfingCSqua Аэдлталн: Search.. 1
SotlBy
* Noda Name
| r Qlqua Nam*
I
----------------1
I
Рис. IV. 17
Назначение полей:
Поле Node Name отображает привязанное к иерархии проекта имя
.модуля, включаемого в группу.
Поле Clique Name показывает имя группы, в которую будет добав-
лен модуль.
11рилож ние । у
Иоле Existing Clique Assignment содержит информацию о всех
созданных группах.
Назначение псевдонима
Команда Probe позволяет заменить в базе данных проекта имя вывода
модуля псевдонимом (Probe Name). Имя псевдонима должно быть уни-
кальным и содержать не более 32 символов.
Создание группы соединяемых выводов СБИС
Команда Connected Pins позволяет выводы СБИС, соединяемые
на печатной плате, объединить в группу.
Выводы, входящие в такую группу, в рамках пакета MAX+plus II
считаются связанными tpyr с другом. Что существенно упрощает про-
ne.ivpv моделирования работы СБИС.
Окно команды Connected Pins приведено па рис. IV. 18.
Рис. IV. 18
Назначение нолей:
ноле Node Name отображает имя вывода, включаемого в группу;
поле Pine Туре позволяет указать тип вывода:
- Input — вход;
- Output — выход;
- Bidir — вход/выход;
поле Connected Pin Group содержит имя группы, в которую вклю-
чается указанный в поле Node Name вывод СБИС;
в поле Existing Connected Pin Groups перечисляются созданные
группы.
Установка режима локальной разводки
Команда Local Routing, работающая только при размещении проекта
па СБИС семейства FLEX 6000, указывает компилятору на необходи-
мость использования разделяемого локального соединителя для разме-
щения выбранной цени.
Компилятор пакета 213
Игнорирование назначений
Команда Ignore Project Assignment позволяет (рис. IV. 19) указать ком-
пилятору, какие пользовательские назначения могут быть проигно-
рированы:
Pin Assignment — игнорируется привязка выводов проекта к вы-
водам СБИС;
Logic Cell Assignment — игнорируется привязка .модулей к логи-
ческим ячейкам или макроячейкам:
Demote Specific Logic Cell Assignment to LAB Assignment — при-
вязка к логическим ячейкам или макроячейкам изменяется па при-
вязку к логическому блоку, в котором данные ячейки располо-
жены;
Chip Assignment — игнорируется привязка к СБИС;
Clique Assignment — игнорируются созданные группы модулей:
Individual Logic Option Assignments — игнорируются индивиду-
ально назначенные опции синтеза;
Device Assignments — игнорируется заданный для реализации про-
екта тип СБИС (при разводке используется опция AL’TO);
Timing Requirenments — игнорируются заданные временные пара-
метры проекта;
Local Routing — игнорируется режим локальной разводки для
СБИС FLEX 6000.
RoHCtNarrM I»; 4td«»^n)p(vrt*<Vnul.diAnuAMf
Тур*» ci io Ignore During Ссжпрай
Г *i VO CM Awgnment*
r Log c CM AMignmaob
Г Qomote $р»сйс Logic CM АмДОЮТС» to LAS AiMgrirrwnta
г СЪф A**Jgnrn«nti
г Ctgua Aitigrun*ib
г indyiouaJ Logie Opbon A»«ignm*nh
Г Devic* AMiontnenb
г liming Raguramanb
r Local Rogins
«"AH
I flK | Cancel |
Pur. IV.19
Сброс сделанных назначений
Команда Clear Project Assignment (рис. IV.20) позволяет сбросить сде-
ланные ранее назначения:
Pin, Logic Cells & Chips — сбрасываются привязки выводов про-
екта к выводам СБИС, модулей проекта к логическим ячейкам
(макроячейкам). проекта к СБИС;
it ил жение IV
Pin & Logic Cells — сбрасывается привязка выводов проекта
к выводам СБИС, модулей проекта к логическим ячейкам (мак-
роячепкам):
Logic Cell — сбрасывается привязка выводов проекта к выводам
СБИС:
Clique — сбрасываются созданные группы модулей;
Devices — сбрасывается заданный для реализации проекта тип
СБИС (при разводке используется опция AUTO);
Timing Requirements — сбрасываются заданные временные пара-
метры проекта;
Logic Options — сбрасываются пили ни дуально назначенные опции
синтеза;
Probes — сбрасываются все заданные псевдонимы выводов мо-
дулей:
Connected Pin Groups — очищаются группы соединяемых выводов
СБИС:
Local Routing — сбрасываются назначения, сделанные для режима
локальной разводки СБИС семейства FLEX 6000:
Obsolete Assignments — сбрасываются все устаревшие назначения,
т. е. назначения, сделанные для уже не существующих з.чемептов
проекта.
CtovPra -
с IdeitgraprvnaiVTHji d Amutt I •
Nam* is
O*V AsMgrvnsntt from ACF
r Sfl1,VO Is, LapseC« IsiChips
r Etni. I/O Crfs & Logic Calls
Г Logic Cails
Г OlgUM
t~ Qsvims
Г Xlftvng Requramcrih
OK I
r Opbona
•" ProfcM
<“ CcOo»c<«d Ptn Gtotci
Lee*) Rowing
«“ Obio Assignments
Г «
I &r-1 ~l
Pur. IV.20
Копирование результатов разводки СБИС
Команда Back-Annotate Project стирает все текущие назначения и ко-
пирует результаты последней разводки СБИС, т.е содержимое файла
с результатами разводки ( fn файла), в файл назначений и конфигура-
ции (acf: файл):
Chip. Logic Cell. Pin & Desice -- копируются результаты разме-
щения:
тип СБИС, на которой (которых) был реализован проект;
модулей проекта по логическим ячейкам или макроячейкам;
выводов проекта по выводам СБИС;
Chip. LAB, Pin & Device — копируются результаты размещения;
тип СБИС, па которой (которых) был реализован проект;
Компилятор пакета 2 15
модулей проекта по логическим блокам;
выводов проекта по выводам СБИС;
Chip. Row. Pin & Device — копируются результаты размещения:
тип СБИС, на которой (которых) был реализован проект;
модулей по строкам логических блоков;
выводов проекта по выводам СБИС:
Chip, Pin & Device — копируются результаты размещения;
тип СБИС, на которой (которых) был реализован проект:
выводов проекта по выводам СБИС;
Chip — копируются результаты размещения проекта в СБИС (если
проект размещен на нескольких СБИС):
Device — тин СБИС, на которой (которых) был реализован проект.
]’ ’ Ш ¥
Исходные текстовые описания
Файл MUX4_2_1.TDF
SUBDESIGN mux4_2_1
( А[4. . 1 ], В[4 .1] input
sei input:
Y[4. 1] output; )
BEGIN
Y[]=A[]&!Sel s B[]& Sei:
END:
Файл SHIFTER.TDF
SUBDESIGN shifter
( in[7 .0] INPUT.
cnt[i..O] INPUT
result[15..0] ' OUTPUT:
Исходные текстовые описания
217
BEGIN
Case c?t[ ] is
wnen 1 =>
reS'dlt[ 15. . 12] = 0:
result[11 4] = in[J;
result[3..0] - 0:
when 2 =>
result[15..8] = in[]:
result[7..0] = 0:
when others =>
’esclt[15..8] = 0;
'SSblr[7. .0] = inf ].
END Case'
END;
Файл CONTROL.TDF
SUBDESIGH control
( elk. rst. start incut:
counrf. .0] input:
sel[l..0], shift[l .0] output,
done, ciken. regclr output
)
variable
code : nacbine v<ith states! ia.e. lso.mic.msb.err);
BEGIN
code.elk = elk;
code.reset = rst;
CASE code is
ViHEN iole =>
IF start
then
cooe = Iso;
self] = O"XX";
shift! ] = b"XX";
done = gro;
ciken = vcc:
regclr = gne:
else
code = idle:
sel[] = b’XX";
snift[ ] - p’XX”:
done = gnd;
ciken = vcc:
regclr = vcc;
end if;
2 lb
Приложение V
WHEN Iso =>
t‘ start arc count!' == 0 )
then
cooe = mid:
self] = C;
shift!] = 0:
core = crd:
clken = gad.
regci'' - vcc;
else
coae = err:
sel[] = b’XX”;
shiftf] = b'XX
cone = gnc:
clken = vcc:
regci'" = vcc.
eric if:
w.HEN mic =
if (,sta,'t aro count]] == 2)
then
cede - mso
sel[] = 2;
sr.i*t[] = 1.
dene = gird:
clкеп = gna:
regclr = vcc.
elsif (!start ano cc-ztf] == 1)
then
code = it ia:
sel[] = 1:
shift!] = 1.
done = gnc.
clken = gnc.
regclr - vcc:
else
code = err;
sel[] = b"XX’
shift! ] = b'XX”:
done = gne:
clken = vcc
regclr = vcc:
enc if;
WHEN iisb =>
if (!start anc count!] == 0)
then
code = idle:
sel[1 = b'XX”;
1
219 |
Исходные текстовые описания
S-hlfrC ] = b'XX";
done = VCC;
clken = vcc:
regclr = vcc:
elstf (!starr anc count!] == 3)
men
coce = MSB:
sel[] = 3
= 2:
oone = GND:
clken = gnd
regcm = vcc:
eise
code = f'r:
self] = b'XX".
shiftf] = c"XX”.
done = oro;
clxen = vcc:
regclr = vcc:
end -.t;
WHEN e-- =>
if start
then
coce = Iss:
sel[] = b"XX";
shift[] = г’XX";
dore = god:
clker = vcc:
regclr = gnd:
else
code = err.
self] = d’XX”,
shift[] = b'XX";
cone = gno;
clken = vcc:
regclr = vcc:
end i*;
END CASE:
END;
I
Файл ACCUM.TDF
SUBDESIGN Acojm
(
clk.cl*',clker.. a[l5. .01 : ПРУТ'
оиг[15..0] : OlFPVT;
)
22
Приложение V
VARIABLE
RG[ 15. .0] • OFF:
BEGIN
RG[l.CLK = CLK;
IF CLR==O
THEN
rg[].D=O:
ELSIF clker==0
then
RG[1.C = a[] + RGIJ.q;
ELSE
RG[].d = RG[].q:
END IF;
out[] = RGlJq;
END;
Файл COUNTER. TDF
SUBDESIGN counter
( clk, clr. CLKEN : INPUT:
tact[l..O] : OUTPUT:
)
VARIABLE
tact[1- 0] DFFE:
BEGIN
tact[].(clk.clrn,ENA) = (clk.!clr.!CLKEN);
tact[].d = tact[].q + Г.
END:
Файл MULT4x4.TDF
CONSTANT size = 8;
CONSTANT hi_oit =4'
INCLUDE "lpm_mult.inc";
SUBDESIGN mult4x4
(
a[hi_Git..1],b[hi_bit .1] INPUT;
rescltfsize. 1] . OUTPUT;
)
VARIABLE
mult LPMMULT WITH ( LPM_WIDTHA=hi_Dit.
LPM_WI3THB=hi_bit.
LPM_WIDTHP=size.
LPM_WIDTHS=size);
BEGIN
mult.cataa[] = a[];
mult.datab[] = b[];
Исходные текстовые описания
221
result[] = MULT.result!];
%
Optional IN-LINE referarce
result] -• LPM_MULT(.daiaaL]=a[], .oatao[]=D[])
with
(LDM_WIDTHA=ni_bit. LPM_WlDTHB=hi_blt.
LPM_WiOTHP=size. _PM_WlDTHS=size);
%
END:
Файл MULT.TDF
INCLUDE "MUX4_2_1.INC";
INCLUDE "SHIFTER.INC";
INCLUDE "ACCOM.INC":
INCLUDE "COUNTER.INC";
INCLUDE MULT4X4.INC":
INCLUDE "CONTROL.INC";
SUBDESIGN MULT
(
A[7..O1, B[7. .0] INPUT;
START, RESET, CLK : INPUT:
RESULTS[15. 0]. DONE_FLAG . OUTPUT:
)
VARIABLE
A0[4..1 ],B0[4..1] NODE
M[7. 0] NODE:
SH115. 0] NODE:
COUNT!1..0] NODE:
SEL[ 1. .0]. SHIFT[1. .0]: NODE:
CLR.CLKEN NODE;
BEGIN
A0[] = MUX4_2_1(.A[]=A[3. 0]. B[]=A[7..4], .SEL=SEL[1]);
BOC] = MUX4_2_1(.A[]=B[3..0], 8[]=B[7. .4]. .SEL=SEL[O]);
SH[] = SHIFTER!.IN[]=M[]. ,CNT[]=SHIFT[]):
M[] = MULT4X4(.A[]=AC[], .B[]=BC[]):
RESULTS!] = ACCUM(.CLK=CLK. ,CLR=CLR, .CLKEN=CLKEN. .A[]=SH[]);
COUNT!] = COUNTER(.CLK=CLK. CLR=S"'AP~ .CLKEN=CLKEN):
(SELQ1 SHIFT[].DONE_FLaG.CLKEN. CLR) =
CONTROL!.CLK=CLK, ,RST=RESET. .START=START, .COJNT[]=COUNT[ ]):
END:
Использованная литература
ri i<M* - -о J*4g », —д: м**—
А. П. Антонов. В. Ф. Мелехин. А. С. Филиппов. «Обзор элементной
базы фирмы Altera». СПб.: Изд. дом Файнстрит, 1997, 143 стр.
ИЗДАТЕЛЬСТВО «РАДИОСОФТ»
Отдел реализации: тел./факс (095) 177-47-20
http://www.radiosoft.ru; e-mail: radiosft@aha.ru
Адрес и телефон для заявок на книги
по почте наложенным платежом;
1 1 1578,Москва, а/я 1 «Пост-Пресс»,
тел.:(095) 307-06-61, 307-06-21
e-mail: postpres@dol.ru