Мегаобучалка Главная | О нас | Обратная связь


Общие сведения о языке описания аппаратуры AHDL



2020-02-04 433 Обсуждений (0)
Общие сведения о языке описания аппаратуры AHDL 0.00 из 5.00 0 оценок




 

Язык описания аппаратуры AHDL разработан фирмой Altera и предназначен для описания комбинационных и последовательностных логических устройств, групповых операций, цифровых автоматов (state machine) и таблиц истинности с учётом архитектурных особенностей ПЛИС фирмы Altera. Он полностью интегрируется с системой автоматизированного проектирования ПЛИС MAX+PLUS II. Файлы описания аппаратуры, написанные на языке AHDL, имеют расширение .tdf (Text design file). Для создания TDF-файла можно использовать как текстовый редактор системы MAX+PLUS II, так и любой другой. Проект, выполненный в виде TDF-файла, компилируется, отлаживается и используется для формирования файла программирования или загрузки ПЛИС фирмы Altera.

Операторы и элементы языка AHDL являются достаточно мощным и универсальным средством описания алгоритмов функционирования цифровых устройств, удобным в использовании. Язык описания аппаратуры AHDL даёт возможность создавать иерархические проекты в рамках одного этого языка или использовать TDF-файлы, разработанные на языке AHDL, наряду с другими типами файлов. Для создания проектов на AHDL можно, конечно, пользоваться любым текстовым редактором, но текстовый редактор системы MAX+PLUS II предоставляет ряд дополнительных возможностей для ввода, компиляции и отладки проектов.


Проекты, созданные на языке AHDL, легко внедряются в иерархическую структуру. Система MAX+PLUS II позволяет автоматически создать символ компонента, алгоритм функционирования которого описывается TDF файлом, и затем вставить его в файл схемного описания (GDF-файл). Подобным же образом можно вводить в любой TDF-файл собственные функции разработчика и около 300 макрофункций, разработанных фирмой Altera. Для всех функций, включённых в макробиблиотеку системы MAX+PLUS II, фирма Altera поставляет файлы с расширением .inc, которые используются в операторе включения INCLUDE.

При распределении ресурсов устройств разработчик может пользоваться командами текстового редактора или операторами языка AHDL для того, чтобы сделать назначения ресурсов и устройств. Кроме того, разработчик может только проверить синтаксис или выполнить полную компиляцию для отладки и запуска проекта. Любые ошибки автоматически обнаруживаются обработчиком сообщений и высвечиваются в окне текстового редактора. При работе с AHDL следует соблюдать так называемые “Золотые правила” (Golden Rules). Выполнение их позволит эффективно применять язык AHDL и избежать многих ошибок.

“Золотые правила AHDL”.

─ Несмотря на то, что язык AHDL не различает прописные и строчные буквы, Altera рекомендует для улучшения читаемости использовать прописные буквы для ключевых слов.

─ Не применяйте вложенные конструкции условного оператора If, если можно использовать оператор выбора Case.

─ Строка в TDF-файле может быть длиной до 255 символов. Однако следует стремиться к длине строки, умещающейся на экране. Строки заканчиваются нажатием клавиши Enter.

─ Новую строку можно начинать в любом свободном месте, то есть на местах пустых строк, табуляций, пробелов. Основные конструкции языка отделяются пустым пространством.

─ Ключевые слова, имена и числа должны разделяться соответствующими символами или операторами и/или одним или более пробелами.

─ Комментарии должны быть заключены в символы процента (%). Комментарий может включать любой символ, кроме символа %, поскольку компилятор системы MAX+PLUS II игнорирует всё, заключённое в эти символы. Комментарии не могут быть вложенными.

─ При соединении одного примитива с другим используйте только “разрешённые” связи между ними, не все примитивы могут соединяться друг с другом.

─ Используйте только макрофункции EXPDFF, EXPLATCH, NANDLTCH и NORLTCH, входящие в макробиблиотеку системы MAX+PLUS II. Не создавайте свои собственные структуры перекрёстных связей. Избегайте многократного связывания вместе EXPDFF, EXPLATCH, NANDLTCH и NORLTCH. Многочисленные примеры этих макрофункций должны всегда разделяться примитивами LCELL.

Общие “золотые правила” ввода проекта:

─ Если многочисленные двунаправленные или выходные выводы связаны вместе, разработчик не может использовать оператор Pin Connection для соединения выводов при функциональном моделировании с аппаратной поддержкой или функциональном тестировании.

─ Нет необходимости создавать прототипы функций для примитивов. Однако разработчик может переопределить примитивы в объявлениях прототипов функций для изменения порядка вызова входов в TDF файле.

─ Не редактируйте файл Fit. Если разработчик желает отредактировать назначения для проекта, необходимо сохранить сначала файл Fit как TDF-файл или сделать обратное назначение с помощью команды Project Back-Annotate и отредактировать их с помощью команд Chip to Device, Pin/LC/Chip и Enter Assignments.

─ Если разработчик хочет загрузить регистр по определённому фронту глобального тактового сигнала Clock, фирма Altera рекомендует, когда регистр загружен, использовать для управления вход Clock Enable одного из триггеров типа Enable: DFFE, TFFE, JKFFE или SRFFE.

─ Когда разработчик начинает работать с новым файлом проекта, сразу же необходимо задать семейство ПЛИС, на которые ориентирован проект, с помощью конструкции Family для того, чтобы в дальнейшем иметь возможность воспользоваться макрофункциями, специфичными для данного семейства. Если разработчик не задаст семейство, оно будет считаться таким же, как и в текущем проекте.

─ Используйте опцию Design Doctor для проверки надёжности логики проекта во время компиляции.

─ Предоставляемые по умолчанию фирмой Altera стили для логического синтеза имеют разные установки для разных семейств устройств, что обеспечивает более эффективное использование архитектуры каждого устройства. Когда разработчик использует какой-нибудь из этих стилей, его установки изменятся при переходе к другому семейству устройств. После смены семейства необходимо проверить новые установки стиля.

 

2.3.2 Элементы языка AHDL

 

2.3.2.1 Зарезервированные ключевые слова

Зарезервированные ключевые слова используются для следующих целей:

─ для обозначения начала, конца и переходов в объявлениях языка AHDL;

─ для обозначения предопределённых констант, то есть GND и VCC.

Ключевые слова можно использовать как символические имена только если они заключены в одинарных кавычках. Их можно также использовать в комментариях.

Для того чтобы получить контекстную помощь по ключевому слову, нужно убедиться, что текущий файл сохранён с расширением .tdf, затем нажать Shift+F1 в окне текстового редактора Text Editor и щёлкнуть левой кнопкой мыши на ключевом слове.

Altera рекомендует все ключевые слова набирать прописными буквами.

Список всех зарезервированных ключевых слов языка AHDL: FUNCTION; CASE; BITS; DFF; DFFE; ELSE; END; EXP; AND; BEGIN; BURIED; BIDIR; CARRY; CASCADE; CLIQUE; CONNECTED_PINS; CONSTANT; DEFAULTS; DESIGN; DEVICE; ELSIF; OTHERS; TABLE; SRFFE; VCC; WHEN; WITH; XNOR; XOR; GLOBAL; GND; INPUT; IF; IS; JKFF; LATCH; LCELL; MACHINE; MACRO; MCELL; NAND; OF; JKFFE; INCLUDE; NODE; NOR; NOT; OPTIONS; OR; OUTPUT; RETURNS; SOFT; SRFF; STATES; SUBDESIGN; TFF; TFFE; THEN; TITLE; TRI; VARIABLE.

2.3.2.2 Символы

Ниже приведены символы, имеющие определённое значение в языке AHDL. В этот перечень не включены символы, используемые в булевых выражениях как операторы и для операций сравнения.


Таблица 2.4 – Символы AHDL

Символ Функция
_ (подчёркивание) Используемые пользователем идентификаторы.
- (тире) Символы в символических именах.
-- (два тире) Начинает комментарий в стиле VHDL, который продолжается до конца строки.
% (процент) Заключает с двух сторон комментарий стиля AHDL.
() (круглые скобки) Заключают и определяют последовательные имена групп. Заключают имена выводов в секции подпроекта (Subdesign Section) и в прототипах функций. Заключают (необязательно) входы и выходы таблиц в объявлении Truth Table (таблицы истинности). Заключают состояния в объявлении цифрового автомата State Machine. Заключают более приоритетные операции в булевых выражениях. Заключают необязательные варианты в секции проекта Design Section (внутри объявления назначения ресурсов Assignment)
[ ] (квадратные скобки) Заключают диапазон значений в десятичном имени группы.
‘…’ (одинарные кавычки) Заключают символические имена.
"…" (двойные кавычки) Заключают строку в объявлении названия Title. Заключают цифры в не десятичных номерах. Заключают путь в объявлении Include. Могут заключать имя проекта и устройства в секции проекта Design Section. Могут заключать имя в объявлении назначения клики графа Clique Assignment.
. (точка) Отделяет символические имена переменных в макрофункции или примитиве от имён портов. Отделяет имя файла от расширения.
… (многоточие) Разделяет наименьшее и наибольшее значение в диапазонах.
; (точка с запятой) Заканчивает объявления и секции в языке AHDL.
, (запятая) Разделяет элементы последовательных групп и списков.
: (двоеточие) Отделяет символические имена от типов в объявлениях и назначениях ресурсов.

продолжение таблицы 2.4

Символ Функция
@ (собака) Присваивает символические узлы выводам устройства и логическим ячейкам в объявлениях назначения ресурсов Resource Assignment.
= (равенство) Присваивает значения по умолчанию GND и VCC входам в секции подпроекта Subdesign. Присваивает установочные значения в вариантах. Присваивает значения состояниям в машине в машине состояний. Присваивает значения в булевых уравнениях.
=> (стрелка) Отделяет входы от выходов в объявлениях таблицы истинности Truth Table. Отделяет предложения с WHEN от булевых выражений в операторе Case.

 

2.3.2.3 Имена в кавычках и без кавычек

В языке AHDL есть три типа имён.

─ Символические имена – это определяемые пользователем идентификаторы. Они используются для обозначения следующих частей TDF:

─ внутренних и внешних узлов (вершин);

─ констант;

─ переменных цифрового автомата, битов состояний, имён состояний;

─ примеров (Instance).

─ Имена подпроекта – это определяемые пользователем имена для файлов проекта более низкого уровня. Имя подпроекта должно быть таким же, как имя файла TDF.

─ Имена портов – это символические имена, идентифицирующие вход или выход примитива или макрофункции.

В файле Fit проекта могут появиться генерируемые компилятором имена выводов с символом “тильда” (~). Этот символ зарезервирован для имён, генерируемых компилятором, пользователю запрещается его использовать для обозначения имён выводов, узлов (вершин), групп (шин).

Существует две формы записи для всех трёх типов-имён (символических, проекта и портов): в кавычках (¢) и без кавычек. Если разработчик создаёт символ по умолчанию
для файла TDF, который включает в себя имена портов в кавычках, собственно кавычки не входят в имена выводов. Ниже, в таблице 2.5 указаны все возможные варианты записи имён в языке AHDL.

 

Таблица 2.5 – Варианты записи имён в AHDL

Разрешённые

символы

Имя подпроекта

Символическое имя

Имя порта

Без кавычек В кавычках Без кавычек В кавычках Без кавычек В кавычках
A-Z + + + + + +
a-z + + + + + +
0-9 + + + + + +
Подчёркивание(_) + + + + + +
Косая черта (/) + + + +
Тире (–) + + +
Только цифры(0-9) + + + + +
Ключевое слово + + +
Максимальное число символов 8 8 32 32 32 32

 

2.3.2.4 Числа в языке AHDL

В языке AHDL можно использовать десятичные, двоичные, восьмеричные и шестнадцатеричные числа в любой комбинации. В таблице 2.6 приведён синтаксис записи чисел в языке AHDL для каждой системы счисления.

 

Таблица 2.6 – Синтаксис записи чисел

Система счисления Значения
Десятичная <последовательность цифр 0-9>
Двоичная B¢¢<последовательность из 1, 0, X>¢¢, где символ X обозначает безразличное значение
Восьмеричная O¢¢<последовательность цифр 0-7>¢¢ или Q¢¢<последовательность цифр 0-7>¢¢
Шестнадцатиричная X¢¢<последовательность цифр 0-9, букв A-F>¢¢ или H¢¢<последовательность цифр 0-9, букв A-F>¢¢

К числам в языке AHDL применяются следующие правила:

─ компилятор системы MAX+PLUS II всегда интерпретирует числа как группы двоичных цифр;

─ в булевых выражениях числа нельзя присваивать одиночным узлам (вершинам). Вместо этого нужно использовать константы VCC и GND.

2.3.2.5 Булевы выражения

Булевы выражения состоят из операндов, разделённых логическими и арифметическими операторами и компараторами и (необязательно) сгруппированных в круглые скобки. Выражения используются в булевых уравнениях, также в других конструкциях языка, таких, как операторы Case и If.

Существуют следующие применения булевых выражений.

─ Операнд. Пример: a, b[5..1], 7, VCC;

─ Встроенная в текст (in line) ссылка (reference) на примитив или макрофункцию;

─ Префиксный оператор (! Или -), применённый к булеву выражению. Пример: !a;

─ Два булевых выражения, разделённые двоичным (не префиксным) оператором. Пример: d1 & d3;

─ Заключённое в круглые скобки булево выражение. Пример: (!foo & bar)

Результат каждого булева выражения должен иметь ту же ширину, что и узел или группа (в левой стороне уравнения), которому он, в конечном счёте, присваивается.

2.3.2.6 Приоритеты в булевых уравнениях

Операнды, разделённые логическими и арифметическими операторами и компараторами, оцениваются по правилам приоритетов, перечисленным ниже (приоритет 1 является наивысшим). Равноприоритетные операции выполняются по очереди, слева направо. Порядок выполнения может быть изменён с помощью заключения в круглые скобки.

 

Таблица 2.7 – Приоритеты операторов

Приоритет Оператор Компаратор
1 - (отрицание)
1 ! (логическое НЕ)
2 + (сложение)
2 - (вычитание)
3 == (равно?)
3 != (не равно?)

продолжение таблицы 2.7

Приоритет Оператор Компаратор
3 < (меньше чем)
3 <= (меньше либо равно)
3 > (больше чем)
3 >= (больше либо равно)
4 & (AND)
4 !& (NAND)
5 $ (XOR)
5 !$ (XNOR)
6 # (OR)
6 !# (NOR)

 

2.3.2.7 Логические операторы

В таблице 2.8 приведены логические операторы для булевых выражений.

 

Таблица 2.8 – Логические операторы

Оператор Пример Описание
! !tob Дополнение (префиксное обращение)
NOT NOT tob  
& bread & butter Логическое И
AND bread AND butter  
!& a[3..1] !& b[5..3] Обращение логического И
NAND a[3..1] NAND b[5..3]  
# trick & treat Логическое ИЛИ
OR trick OR treat  
!# c[8..5] !# d[7..4] Обращение логического ИЛИ
NOR c[8..5] NOR d[7..4]  
$ foo $ bar Исключающее ИЛИ
XOR foo XOR bar  
!$ x2 !$ x4 Обращение исключающего ИЛИ
XNOR x2 XNOR x4 Обращение логического ИЛИ

Каждый оператор представляет собой логический вентиль с двумя входами; исключение составляет оператор NOT, являющийся префиксным инвертором. Для записи логического оператора можно использовать его имя или символ.

Выражения, в которых используются эти операторы, интерпретируются по-разному в зависимости от того, что представляют собой операнды: одиночные узлы (вершины), группы или числа. Кроме того выражения с оператором NOT интерпретируются не так как другие логические операторы.

2.3.2.8 Выражения с оператором NOT

С оператором NOT можно использовать три типа операндов.

─ Если операнд представляет собой одиночный узел, константы GND или VCC, выполняется одна операция обращения. Пример: !a.

─ Если операнд представляет собой группу узлов, каждый элемент группы проходит через инвертор. Пример: !a[4..1] интерпретируется как (!a4, !a3, !a2, !a1).

─ Если операнд представляет собой число, он обрабатывается как двоичное число, то есть как группа соответствующего числа битов, где обращается каждый бит. Пример: !9 операнд интерпретируется как двоичное число !B"1001" (группа из четырёх элементов), результат и B"0110".

2.3.2.9 Выражения с операторами AND, NAND, OR, NOR, XOR и XOR

Существует четыре комбинации операндов с двоичными (не префиксными) операторами, и каждая из них интерпретируется по-особому.

─ Если операнд представляет собой одиночный узел, константы GND или VCC, оператор выполняет логическую операцию над двумя элементами. Пример: (a&b).

─ Если оба оператора являются группами узлов, оператор применяется к соответствующим узлам каждой группы, производя ряд операций на битовом уровне между группами. Группы должны быть одинакового размера. Пример: (a,b) # (c,d) интерпретируется как (a#c, b#d).

─ Если один оператор представляет собой одиночный узел, константы GND или VCC, а другой операнд – группу узлов, то одиночный узел или константа дублируются для образования группы такого же размера, что и второй операнд. Затем выражение интерпретируется как групповая операция. Пример: a & b[2..1] интерпретируется как (a&b2, a&b1).

─ Если оба операнда представляют собой числа, более короткое (в смысле числа битов в двоичном представлении) число дополняется незначащими нулями,
чтобы сравняться по числу битов с другим операндом. Затем выражение интерпретируется как групповая операция. Пример: в выражении (3#8) 3 или 8 преобразуются в двоичные числа B"0011" и B"1000". Результатом является B"1011".

─ Если один операнд представляет собой число, а другой – узел или группу узлов, то число усекается до или расширяется до размера группы. При усечении значащих битов генерируется сообщение об ошибке. Выражение затем интерпретируется как групповая операция. Пример: (a,b,c)&1 интерпретируется как (a&0, b&0, c&1).

Выражение с константой VCC интерпретируется не так как выражение с операндом 1. В первом выражении приведённого ниже примера число 1 расширяется по числу битов двоичного представления, чтобы соответствовать размеру группы. Во втором уравнении узел VCC дублируется для образования группы того же размера. Затем, каждое уравнение интерпретируется как групповая операция.

! operation.

  (a, b, c) & 1 = (0, 0 c)

  (a, b, c) & VCC = (a, b c).

2.3.2.10 Арифметические операторы

Арифметические операторы используются для выполнения арифметических операций сложения и вычитания над группами и числами. В языке AHDL применяются арифметические операторы перечисленные в таблице 2.9.

 

Таблица 2.9 – Арифметические операторы

Оператор Пример Описание
+ (унарный) +1 Положительное значение
- (унарный) -a[4..1] Отрицательное значение
+ count [7..1] + delta[7..0] Сложение
- Rightmost_x[] – leftmost_x[] Вычитание

 

Унарные плюс (+) и минус (-) являются префиксными операторами. Оператор “+” не влияет на свой операнд, и разработчик может использовать его для иллюстративных целей (то есть для указания положительного числа). Оператор “-” интерпретирует свой операнд в двоичном представлении (если он таковым не является с самого начала). Затем
он выполняет операцию унарного минуса, то есть получает дополнение операнда как двоичного числа.

К другим арифметическим операторам применяются следующие правила:

─ операции выполняются между двумя операндами, которые должны быть группами узлов или числами;

─ если оба операнда представляют собой группы узлов, то они должны иметь одинаковый размер;

─ если оба операнда представляют собой числа, то более короткое (в двоичном представлении) число расширяется (дополняется незначащими нулями), чтобы сравняться по числу битов с другим операндом;

─ если один операнд представляет собой число, а другой является группой узлов, то число усекается или расширяется в двоичном представлении до размера группы. Если при этом усекаются значащие биты, компилятор системы MAX+PLUS II генерирует сообщение об ошибке.

 

2.3.3 Управление синтезом.

 

2.3.3.1 Реализация примитивов LCELL и SOFT

Можно ограничить логический синтез с помощью замены переменных типа узел (NODE) примитивами SOFT и LCELL. Переменные NODE и примитивы LCELL обеспечивают наилучшее управление логическим синтезом. Примитивы SOFT обеспечивают более слабое управление логическим синтезом.

Переменные NODE, которые объявляются в секции VARIABLE, не накладывают больших ограничений на логический синтез. Во время синтеза модуль логического синтеза компилятора системы MAX+PLUS II заменяет каждый пример использования переменной NODE логикой, которую она представляет. Затем происходит минимизация логики до одной логической ячейки. Этот метод обычно приводит к ускорению работы схемы, но в результате может получиться слишком сложная логика или же её трудно свести к одной ячейке.

Буферы SOFT обеспечивают лучшее управление использованием ресурсов, чем переменные NODE. Модуль логического синтезатора выбирает, когда заменить примеры использования примитивов SOFT примитивами LCELL.

Буферы SOFT могут помочь уничтожить логику, которая оказалась слишком сложной, и сделать проект проще; однако при этом может быть увеличено количество
логических операций и скорость выполнения программы соответственно уменьшится.

Наиболее сильное управление процессом логического синтеза обеспечивается примитивами LCELL. Модуль логического синтезатора минимизирует всю логику, которая запускает примитив LCELL, таким образом, чтобы можно было свести её к одной логической ячейке. Примитивы LCELL реализуются в виде одной логической ячейки (их нельзя убрать из проекта, даже если они имеют единственный вход). Если проект минимизирован до такой степени, что один примитив LCELL имеет единственный вход, в этом случае вместо примитивов LCELL можно использовать примитивы SOFT, которые убираются в процессе логического синтеза.

2.3.3.2 Значения констант по умолчанию

Логический синтезатор автоматически выполняет подключение к GND всех выходов таблицы истинности, если не удовлетворяется ни одно из условий входа в таблицы. Для присвоения выходам таблицы истинности значения VCC можно использовать одно или несколько объявлений языка AHDL по умолчанию. С помощью этих объявлений можно задать значения по умолчанию для соответствующих выходов. Например, если большинство выходов таблицы истинности равны 1, можно задать значение по умолчанию VCC.

 

2.3.4 Использование чисел и констант в языке AHDL

 

2.3.4.1 Использование чисел

Числа используются для представления констант в булевых выражениях и уравнениях. Язык AHDL поддерживает все комбинации десятичных, двоичных, восьмеричных и шестнадцатеричных чисел.

Ниже приведён файл decode1.tdf, который представляет собой дешифратор адреса, генерирующий высокий активный уровень сигнала разрешения доступа к шине, если адрес равен шестнадцатеричному числу 370h.

SUDESIGN decode1

(

address[15..0] : INPUT;

chip_enable : OUTPUT;

)

BEGIN

chip_enable = (adress[15..0] == H"0370");

END;

В этом примере десятичные числа использованы для указания размерности массива бит, которым записывается адрес шины. Шестнадцатеричным числом H"0370" записано значение адреса, при котором обеспечивается высокий уровень сигнала.

В файле AHDL можно использовать константы для описательных имён разных чисел. Такое имя, используемое на протяжении всего файла, может быть более информативным, чем число; например, имя UPPER_LI несёт больше информации, чем число 103. В языке AHDL константы вводятся объявлением CONSTANT.

Приведённый выше файл можно записать по-другому, используя вместо числа H”0370” константу IO_ADDRESS.

CONSTANT IO_ADRESS = H"0370";

SUBDESIGN decode2

       (

       a[15..0] : INPUT;

       ce : OUTPUT;

       )

BEGIN

       Ce = (a[15..0] == IO_ADDRESS);

END;

Преимущество использования констант особенно заметно, если одно и то же число используется в файле несколько раз. Тогда, если его нужно изменить, его меняют только один раз в объявлении константы.

 

2.3.5 Комбинационная логика

 

Как известно, логическая схема называется комбинационной, если состояния выходов являются только функциями входов независимо от момента времени. Комбинационная логика в языке AHDL реализована булевыми выражениями и уравнениями, таблицами истинности и большим количеством макрофункций. В число примеров комбинаторных логических функций входят дешифраторы, мультиплексоры и сумматоры.

 


2.3.5.1 Реализация булевых выражений и уравнений

Булевы выражения – это множества узлов, чисел, констант и других булевых выражений, выделяемых операторами, компараторами и, возможно, сгруппированных в заключающих круглых скобках. Булево уравнение устанавливает равенство между узлом или группой и булевым выражением.

В качестве примера приведён файл boole1.tdf, в котором даны два простых булевых выражения, представляющих два логических элемента.

SUBDESIGN boole1

(

a0, a1, b : INPUT;

out1, out2 : OUTPUT;

)

BEGIN

out1 = a1 & !a0;

out2 = out1 # b;

END;

Здесь выход out1 получается в результате логической операции И, применённой ко входу a1 и инвертированному входу a0, а выход out2 получается в результате применения логической операции ИЛИ к выходу out1 и входу b. Поскольку эти уравнения обрабатываются одновременно, последовательность их следования в файле не важна.

 

2.3.5.2 Объявление NODE (узел)

Узел, который объявляется в секции переменных VARIABLE в объявлении NODE, можно использовать для хранения промежуточных выражений.

Это полезно делать, если булево выражение повторяется несколько раз и его целесообразно заменить именем узла. Файл boole1.tdf можно переписать по-другому.

SUBDESIGN boole2

(

a0, a1, b : INPUT;

out : OUTPUT;

)

VARIABLE

a_equals_2 : NODE;

BEGIN

a_equals_2 = a1 & !a0;

out = a_equals_2 # b;

END;

Здесь объявляется узел a_equals_2, и ему присваивается значение выражения a1 & !a0. Использование узлов помогает экономить ресурсы устройств, если узел используется в нескольких выражениях.

 

2.3.5.3 Определение групп

Важным понятием AHDL является группа. Она может включать в себя до 256 элементов (бит), рассматривается как совокупность узлов и участвует в различных действиях как единое целое. В булевых уравнениях группа может быть приравнена булевому выражению, другой группе, одному узлу, VCC, GND, 1 или 0. В каждом случае значения группы разные.

Если группа определена, для краткого указания всего диапазона ставят две квадратные скобки [ ]. Например, группу a[4..1] можно кратко записать как a[ ].

 

2.3.6 Описание цифровой схемы на языке AHDL

 

 

Опишем проект из лабораторной работы №1 на языке AHDL. Для этого вначале создаётся проект, как описано в первой лабораторной работе. В качестве файла верхнего уровня задаётся текстовый файл c расширением .tdf. Для этого выбираем в меню File пункт New… В появившемся окне (рисунок 2.24) выбирается тип создаваемого файла – Text Editor file.

 

Рисунок 2.24 – Меню New


Затем, исходя из заданного булева выражения создаём в окне текстового редактора программу.

SUBDESIGN project2                 % Задание символического имени подпроекта %

(                                                     % и объявление его входов и выходов %

       A                           : INPUT;    % Назначение ресурсов %

       B                            : INPUT;

       C                            : INPUT;

       D                           : INPUT;

       Y                           : OUTPUT;

)

 

BEGIN

Y =            A & B & C & D                -- Присвоение Y значения

       #     !A & !B & !C & !D                      -- булева ыражения

       #     A & !B & !C & D

       #     A & B & !C & !D

       #     !A & B & C & !D

       #     !A & B & !C & D

       #     !A & !B & C & D;

 

END;                                                        % Оператор окончания проекта %

 

Сохраним данный документ как файл AHDL, с расширением .tdf (рисунок 2.25).

 

Рисунок 2.25 – Сохранение файла AHDL


Теперь можно создать графическое изображение символа, реализующего функцию, описанную в файле project2.tdf. Для этого выбирается пункт New… из меню File, где в уже знакомом меню (рисунок 2.24) задаётся тип создаваемого файла – Symbol Editor file. В открывшемся символьном редакторе, с помощью примитивов рисования создаётся графическое изображение символа. При этом следует задать контакты символа. Для этого следует дважды кликнуть левой кнопкой мышки в том месте, где предполагается создать контакт. Появится окно (рисунок 2.26), в котором нужно указать имя контакта, его тип

 

(вход или выход), отображение его имени и статус по умолчанию (используется или нет).

 

Рисунок 2.26 – Окно задания контактов

 

 

Проделав эту операцию с каждым контактом символа, получим изображение символа (рисунок 2.27).

 

Рисунок 2.27 – Создание символа в символьном редакторе

После того как символ создан, нужно сохранить его под тем же именем, что и файл его описания (project.tdf) с расширением .sym.

 

Теперь можно создать графическое изображение схемы используя созданный символ (рисунок 2.28).

 

Рисунок 2.28 – Схема с новым символом

 

Теперь проект готов к компиляции.

 

Для тестирования временных параметров нужно создать файл входных сигналов в сигнальном редакторе. Подадим на вход сигналы в порядке следования их в таблице истинности данной схемы (рисунок 2.29). Высокий уровень – 1, низкий – 0.

 

Рисунок 2.29 – Входные сигналы схемы


Теперь можно приступать к компиляции проекта и тестированию его выходных параметров.

 

Результаты, полученные во время компиляции и тестирования временных параметров (рисунок 2.30), говорят о том, что схема работает правильно и может быть реализована на ПЛИС фирмы Altera.

 

Рисунок 2.30 – Сигналы на входах и выходе схемы

 

2.3.7 Задание для самостоятельной разработки

По заданному булеву выражению построить таблицу истинности устройства. Описать данное булево выражение на языке AHDL. Создать с символьном редакторе символ реализующий описание на AHDL. Построить схему, основанную на созданном символе, в графическом редакторе Graphic Editor. В сигнальном редакторе Waveform Editor построить входные сигналы проекта. Осуществить компиляцию и симуляцию проекта на ПЛИС с созданием всех необходимых файлов. По результатам моделирования сделать вывод о правильности реализации цифрового устройства на ПЛИС.

 

Таблица 2.10 – Варианты заданий для самостоятельной разработки

Номер варианта Булево выражение
1
2
3
4
5
6
7

продолжение таблицы 2.10

Номер варианта Булево выражение
8
9
10
11
12
13
14
15

 

 


Список использованной литературы

1. Стешенко В.Б. ПЛИС фирмы Altera: проектирование устройств обработки сигналов. –М.: ДОДЭКА, 2000.–128 с.

2. Антонов А.П., Мелехин В.Ф., Филиппов А.С. Обзор элементной базы фирмы Altera. Санкт-Петербург, 1997.–142 с.

3. Разевиг В.Д. Система схемотехнического моделирования Micro-Cap V. – М.: “СОЛОН”, 1997.–273 с.

4. Токхейм Р. Основы цифровой электроники: Пер с англ.–М.: Мир, 1988.–392 с.

5. The Design Center, Application Notes Manual, Copyright 1994 by MicroSim Corporation.–238 c.

6. Гутников В.С. Интегральная электроника в измерительных устройствах. – Л.: Энергия, Ленингр. отд-ние, 1980.–248 с.

7. Армстронг Дж. Р. Моделирование цифровых систем на языке VHDL: Пер. с англ./М.: Мир, 1992.–175 с.



2020-02-04 433 Обсуждений (0)
Общие сведения о языке описания аппаратуры AHDL 0.00 из 5.00 0 оценок









Обсуждение в статье: Общие сведения о языке описания аппаратуры AHDL

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Почему человек чувствует себя несчастным?: Для начала определим, что такое несчастье. Несчастьем мы будем считать психологическое состояние...
Организация как механизм и форма жизни коллектива: Организация не сможет достичь поставленных целей без соответствующей внутренней...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (433)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.01 сек.)