
- •1. Введение 3
- •2. Использование ahdl 13
- •3. Элементы ahdl 64
- •4. Структура проекта 83
- •1. Введение
- •1.1 Описание устройства с помощью ahdl
- •1.1.1 Как работает ahdl?
- •1.2 Структура ahdl-файла
- •1.2.1 Разделы ahdl-файла
- •1.2.2 Иерархические проекты
- •1.2.3 Подключение библиотек
- •1.3.1 Шаблоны и примеры ahdl
- •1.3.2 Контекстно-зависимая помощь
- •1.3.3 Выделение цветом групп символов
- •1.3.4 Локализация ошибок
- •1.4 Компиляция ahdl-проектов
- •1.5 Советы
- •2. Использование ahdl
- •2.1 Введение
- •2.1.1 Использование чисел
- •2.1.2 Использование констант и вычисленных функций
- •2.1.3 Вставка ahdl-шаблона
- •2.1.4 Примеры ahdl
- •2.2 Комбинационные устройства
- •2.2.1 Описание комбинационных устройств с помощью логических уравнений
- •2.2.2 Объявление узлов
- •2.2.3 Описание групп
- •2.2.4 Использование операторов ветвления
- •Использование оператора if…then
- •Использование оператора case
- •Сравнение операторов if…then и case
- •2.2.5 Создание декодеров
- •2.2.6 Использование значений «по умолчанию» для переменных
- •2.2.7 Описание активно-низкой логики
- •2.2.8 Двунаправленные выводы
- •2.2.9 Описание тристабильных выводов
- •2.3 Устройства с памятью
- •2.3.1 Использование регистров
- •2.3.2Определение регистровых входов
- •2.3.3 Создание счетчиков
- •2.4 Графы переходов
- •2.4.1 Описание графа переходов
- •2.4.2 Назначение автомату сигналов синхронизации, сброса, разрешения по входу
- •2.4.3 Кодирование состояний автомата
- •2.4.4 Описание автомата Мура (Moore machine)
- •2.4.5 Описание автомата Мили (Mealy machine)
- •2.5 Создание иерархического проекта
- •2.5.1 Использование не параметризированных функций
- •2.5.2 Использование параметризированных функций
- •2.5.3 Создание и использование макрофункций
- •2.5.4 Экспорт и импорт графов переходов автоматов
- •2.6 ИспользованиеLcell иSofTпримитивов
- •2.8 Перегрузка имени оператора
- •2.9 Использование циклически генерируемой логики
- •2.10 Использование условно генерируемой логики
- •3. Элементыahdl
- •3.1 Ключевые слова и идентификаторы
- •3.1.1 Ключевые слова
- •3.1.2 Зарезервированные идентификаторы
- •3.2 Символы
- •3.3 Имена вAhdl, использование кавычек
- •3.4 Группы
- •3.4.1 Способы объявления и записи групп
- •3.4.2 Размеры групп и подгрупп
- •3.5 Числа вAhdl
- •3.6 Арифметические выражения
- •3.7 Логические выражения
- •3.7.1 Логические операторы
- •3.7.2 Использование оператораNot
- •3.7.3 Использование операторовAnd, nand, or, nor, xor, xnor
- •3.7.4 Использование арифметических операторов в логических выражениях
- •3.7.5 Операторы сравнения
- •3.7.6 Приоритеты логических операторов и операторов сравнения
- •3.8 Мегафункции
- •3.9 Порты
- •3.9.1 Порты файла
- •3.9.2 Использование портов
- •4. Структура проекта
- •4.1 Введение
- •4.2 Заголовок (Title Statement)
- •4.2 Раздел объявления параметров (Parameters Statement)
2.2.4 Использование операторов ветвления
В MAX+PLUS II есть два оператора ветвления: IF…THEN и CASE.
При использовании оператора IF сначала вычисляется значение условия и если условие истинно, то выполняются операторы стоящие после THEN, если это условие ложно, то выполняются операторы стоящие после ELSE.
Часто возникающая в программировании задача – задача выбора одного варианта из многих. Можно это сделать с помощью вложенных операторов IF. Однако более удобный способ – использование оператора CASE.
Использование оператора if…then
Вследующем примере (priority.tdf) описано
устройство – кодер, преобразующий
уровень сигнала в двух битное число.
В данном примере в зависимости от входа, на который подан сигнал «Лог. 1», будут выполняться различные действия. Так например если на вход highподан сигнал «Лог. 1», то на выходеhighest_level[] будет значение 3, если на входlowподан сигнал «Лог. 1», то на выходеhighest_level[] будет значение 1, если на все входы будет подано значение «Лог. 0», то на выходеhighest_level[] будет значение 0.
На рисунке 2.4 представлена схема устройства, описанного в примере 2.9.
Для
получения более подробной информации
см. разделы:
Сравнение операторов IF…THEN и CASE
Использование оператора case
Вследующем примере (decoder.tdf) спроектировано
устройство, преобразующее 2-х битный
код в 4-х битное значение.
В данном примере возможными значениями входов code[1..0]являются 0, 1, 2 и 3. Если например значение входов равно 1 на выходахout[3..0]установится значениеB”0010”. Особенностью оператора CASE является то, что в данный момент времени активной может быть только одна строка.
На рисунке 2.4 представлена схема устройства, описанного в примере 2.10.
Для
получения более подробной информации
см. разделы:
Сравнение операторов IF…THEN и CASE
Создание декодеров
Сравнение операторов if…then и case
Операторы IF…THEN и CASE подобны. В некоторых случаях вы можете использовать любой из операторов. В следующем примере показана запись одних и тех же условий при использовании обоих операторов:
Однако, в некоторых случаях вместо того чтобы использовать вложенные конструкции IF…THEN проще и нагляднее использовать структуру CASE.
2.2.5 Создание декодеров
Декодер – комбинационное устройство (автомат), преобразующее один код, поступающий им на вход, в другой, снимающийся с выходов.
В примере 2.11 будет спроектирован дешифратор, управляющий работой светодиодов.
В данном примере все возможные комбинации входных сигналов (16 комбинаций) описаны таблицей истинности.
Следующий пример (decode3.tdf) – может служить дешифратором адреса в 16-битной микропроцессорной системе:
Вданном примере возможны тысячи входных
значений, которые в таблице истинности
указать очень сложно. Поэтому вы можете
пользоваться символомX,
указывающим на безразличное (don’t care)
состояние данного бита, т.е. указанный
выход не будет зависеть от сигнала на
данном входе. Например, для первой строки
таблицы истинности: выходromбудет равен «Лог. 1» при всех 16384 входных
комбинациях, начинающихся с 00. Таким
образом, для создания подобных таблиц
истинности вы должны будете указать
шаблон (например, 00), а вместо остальных
бит поставить Х.
При использовании битовых шаблонов не допускайте присвоение этого шаблона переменной или другому шаблону, т.к. это может привести к непредсказуемым результатам.
Если вы используете безразличное состояние Х (don’t care) для задания битовых шаблонов вы должны быть уверены в том, что во всех строках таблицы не найдется двух одинаковых шаблонов. Из всей таблицы компилятор MAX+PLUS II выбираеттолько однустроку.
Устройство, спроектированное в следующем примере (decode4.tdf) выполняет те же функции что и устройство, описанное в примереdecode1.tdf, но для реализации этих функций использует функциюlpm_decode:
Для
получения более подробной информации
см. разделы:
Использование операторов ветвления