Язык описания аппаратуры AHDL

  • Вид работы:
    Реферат
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    1,33 Мб
  • Опубликовано:
    2013-12-24
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Язык описания аппаратуры AHDL

1. Язык описания аппаратуры AHDL

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

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

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

Особенности языка AHDL.

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

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

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

·              Основные конструкции языка отделяются пустым пространством;

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

·              Комментарии должны быть заключены в символы процента (%). Комментарии не могут быть вложенными.

Числа и константы

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

• десятичная - содержит последовательность цифр 0 - 9;

• двоичная - содержит последовательность из цифр 0, 1 и символа Х (данный символ отражает безразличное состояние), размещенных в кавычках («»), следующих за буквой B;

• восьмеричная - содержит последовательность цифр от 0 до 7, размещенных в кавычках, следующих за буквой O или Q;

• шестнадцатиричная - содержит последовательность цифр от 0 до 9 и букв от A до F, размещенных в кавычках, следующих за буквой H или X.

Примеры записи чисел: B «0110X1X10», Q «4671223», H «123AECF».

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

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

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

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

Использование числа и константы проиллюстрируем примером программы, представляющей описание дешифратора адреса, генерирующего высокий уровень сигнала разрешения доступа к шине, если входной адрес равен шестнадцатиричному числу 370h.

CONSTANT IO_ADDRESS = H «0370»;decoder

([15..0]: INPUT;_enable: OUTPUT;: OUTPUT;

)_enable = (address [15..0] == H «0370»);= (a [15..0] == IO_ADDRESS);;

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

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

FUNCTION

OTHERS


CASE

TABLE

JKFFE

BITS

SRFFE

NCLUDE

DFF

VCC

NODE

DFFE

WHEN

NOR

ELSE

WITH

NOT

END

XNOR

OPTIONS

EXP

XOR

OR

AND

GLOBAL

OUTPUT

BEGIN

GND

RETURNS

BURIED

INPUT

SOFT

BIDIR

IF

SRFF

CARRY

IS

STATES

CASCADE

JKFF

SUBDESIGN

CLIQUE

TFF

CONNECTED_PINS

LCELL

TFFE

CONSTANT

MACHINE

THEN

DEFAULTS

MACRO

TITLE

DESIGN

MCELL

TRI

DEVICE

NAND

VARIABLE

ELSIF

OF

X


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

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

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

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

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

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

Символы

Символ

Функция

_ (подчеркивание)

Используемые пользователем идентификаторы

- (тире)

символы в символических именах

- (два тире)

Начинает комментарий в стиле VHDL, который продолжается до конца строки

% (процент)

Заключает с двух сторон комментарий стиля AHDL

() (круглые скобки)

Заключают и определяют последовательные имена групп. Заключают имена выводов в секции подпроекта (Subdesign Section) и в прототипах функций. Заключают (необязательно) входы и выходы таблиц в объявлении Truth Table. Заключают состояния в объявлении цифрового автомата State Machine. Заключают более приоритетные операции в булевых выражениях. Заключают необязательные варианты в секции проекта Design Section (внутри объявления назначения ресурсов Assignment).

[] (квадратные скобки)

Заключают диапазон значений в десятичном имени группы

'…' (одинарные кавычки)

Заключают символические имена.

«…» (двойные кавычки)

Заключают строку в объявлении названия Title Заключают цифры в не десятичных номерах Заключают путь в объявлении Include. Могут (необязательно) заключать имя проекта и устройства в секции проекта Design Section. Могут (необязательно) заключать имя в объявлении назначения клики графа Clique Assignment.

(точка)

Отделяет символические имена переменных в макрофункции или примитиве от имен портов. Отделяет имя файла от расширения

… (многоточие)

Разделяет наименьшее и наибольшее значение в диапазонах

; (точка с запятой)

Заканчивает объявления и секции в языке AHDL

(запятая)

Разделяет элменты последовательных групп и списков

: (двоеточие)

Отделяет символические имена от типов в объявлениях и назначениях ресурсов.

@ «собака»

Присваивает символические узлы выводам устройства и логическим ячейкам в объявлениях назначения ресурсов Resource Assignment

= (равенство)

Присваивает значения по умолчанию GND и VCC входам в секции подпроекта Subdesign. Присваивает установочные значения в вариантах. Присваивает значения состояниям в машине состояний. Присваивает значения в булевых уранениях

=> (стрелка)

Отделяет входы от выходов в объявлениях таблицы истинности Truth Table. Отделяет предложения с WHEN от булевых выражений в операторе Case


2. Реализация иерархического проекта

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

Использование макрофункций системы Altera MAX+PLUS II

В системе MAX+PLUS II есть большая библиотека, в которую входят 74 стандартных макрофункций, реализующих шины с последовательным опросом, оптимизацию архитектуры и конкретные приложения. Библиотека представляет собой собрание блоков высокого уровня, используемых для создания проекта с иерархической логикой. Во время инсталляции системы эти макрофункции автоматически записываются в каталог \maxplus2\max2lib и его подкаталоги, создаваемые в процессе инсталляции.

В языке AHDL существуют два способа вызова (то есть вставки в качестве примера) макрофункции:

объявить переменную типа <macrofunction> в объявлении примеров INSTANCE в секции VARIABLE и использовать порты примера макрофункции в логической секции. В этом способе важное значение имеют имена портов;

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

Входы и выходы макрофункций перечисляются в описании прототипов функций (FUNCTION PROTOTYPE). Прототипы функций можно записать в отдельный файл и указать его в своем файле с помощью директивы INCLUDE. Такие Include-файлы создаются автоматически для данного проекта с помощью команды Create Default Include File. Include-файл вставляется вместо вызывающей его директивы INCLUDE. Для всех макрофункций системы MAX+PLUS II Include-файлы должны находиться в каталоге \maxplus2\max2inc.

Ниже приведен файл macro1.tdf, который реализует четырех битовый счетчик, подсоединенный к дешифратору 4 бит -> 16 бит. Соответствующие макрофункции вызываются объявлениями примеров в секции VARIABLE

INCLUDE «4count»;

(: INPUT;[15..0]: OUTPUT;

): 4count;: 16dmux;.clk = clk;.dnup = GND;. (d, c, b, a) = counter. (qd, qc, qb, qa);[15..0] = decoder.q [15..0];

END;

В данном файле используются директивы INCLUDE для импортирования прототипов функций для двух макроофункций фирмы Altera: 4count и 16dmux. В секции VARIABLE объявляются две переменные: counter и decoder как примеры этих макрофункций. В логической секции определяются входные порты для обеих макрофункций в формате <имя переменной-примера>.<имя порта>. (Они ставятся в левой части булевых уравнений, а выходные порты - справа.) Порядок портов в прототипе функции не важен, так как имена портов в логической секции перечисляются явно.

Ниже приведен файл macro2.tdf, выполняющий те же функции, что и предыдущий, но макрофункции в нем вызываются непосредственной ссылкой.

INCLUDE «4count»;«16dmux»;macro2

(: INPUT;[15..0]: OUTPUT;

)[3..0]: NODE;

(q [3..0],) = 4count (clk, GND,);

%[15..0] = 16dmux (. (d, c, b, a)=q [3..0]);

% equivalent in-line ref. with positional port association%

% out [15..0] = 16dmux (q [3..0]);%;

Вызов макрофункций 4count и 16dmux осуществляется в логической секции непосредственной ссылкой (в правой части булевых уравнений).

Ниже приведены прототипы этих макрофункций, записанные в файлах 4count.inc 16dmux.inc:

FUNCTION 4count (clk, clrn, setn, ldn, cin, dnup, d, c, b, a)(qd, qc, qb, qa, cout);16dmux (d, c, b, a)

RETURNS (q [15..0]);

Соединение портов показано в логической секции файла macro2.tdf. Порядок портов важен, так как должно быть однозначное соответствие между портами, описанными в прототипе функции и при ее реализации в логической секции. В данном примере запятыми отделяются (но не перечисляются) порты, для которых не делается явного подключения.

Создание и применение пользовательских макрофункций

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

Создать логику для макрофункции в файле проекта.

Определить порты макрофункции в объявлении прототипа функции.

Прототип функции дает краткое описание функции: ее имя, а также входные, выходные и двунаправленные порты. Можно также использовать машинные порты для макрофункций, которые импортируют или экспортируют цифрового автомата.

Объявление прототипов функций может быть размещено в Include-файле, который вызывается в пользовательском файле. Используя команду Create Default Include File, можно автоматически создавать Include-файл с прототипом функции для любого файла проекта.

Вставить в файл пример макрофункции с помощью объявления примера в секции VARIABLE или с помощью непосредственной ссылки в тексте.

Использовать макрофункцию в файле.

Определение пользовательской макрофункции

Для использования макрофункции ее нужно либо включить в описание прототипа функции в TDF-файле, либо указать в директиве INCLUDE файла TDF имя Include-файла, содержащего прототип этой макрофункции. Как уже упоминалось выше, Include-файлы можно создавать автоматически.

3. Реализация с помощью оператора выбора

Рассмотрим использование оператора выбора (case statement) для реализации мультиплексора. Следует отметить что этот способ наиболее прост и наименее трудоемок.



Единственное отличие - выход out определен как регистр(register), это сделано для того, чтобы назначить его значения явно и не управлять им. Такое назначение сигнала называется процедурным назначением (procedural assignment). Данные типа «цепь (wire)» не могут быть назначены явно, они нуждаются в сигнале драйвере, такое назначение называется непрерывным назначением.

Always ϱ (inl or in2 or in3 or in4 or cntrl1 or cntrl2)

аппаратура язык истинность иерархический


Эта конструкция читается так же, как и пишется, т.е. значение вычисляется всегда при изменении хотя бы одного операнда - система постоянно их отслеживает. Несколько забегая вперед, следует отметить, что данная конструкция является синтезируемой во многих системах проектирования, в частности и в MAX+PLUS фирмы Altera. Список переменных называется списком чувствительности, поскольку данная конструкция чувствительная к их изменениям.

Синтаксис оператора выбора case в Verilog сходен с синтаксисом оператора выбора в языке С. Условием является конкатенация или объединение переменных cntrl1 и cntrl2 в двухразрядное число. Завершает оператор выбора endcase.

Реализация с использованием условного оператора

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

Похожие работы на - Язык описания аппаратуры AHDL

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!