Язык AHDL

Операторы и элементы языка аппаратуры фирмы Altera AHDL. Зарезервированные идентификаторы: шины, символы, строковые и символьные имена. Структура описания проекта на языке AHDL. Создание текстового выходного файла. Использование логики и констант.

Рубрика Программирование, компьютеры и кибернетика
Вид книга
Язык русский
Дата добавления 23.04.2015
Размер файла 144,7 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Оглавление

1. Введение

1.1 Общие положения

1.2. Как работает AHDL?

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

2.1 Зарезервированные слова

2.2 Зарезервированные идентификаторы

2.3 Символы

2.4. Строковые и символьные имена

2.5 Шины

2.5.1 Способы объявления шин

2.5.2 Диапазоны и поддиапазоны шин

2.6 Числа в AHDL

2.7 Арифметические выражения

2.8 Встроенные оценочные функции

2.9 Логические выражения

2.9.1 Операторы логических функций

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

2.9.3 Компараторы

2.9.4 Приоритеты логических и арифметических операторов

2.10 Прототипы логических функций

2.10.1 Примитивы

2.10.2 Массивы примитивов

2.10.3 Макрофункции

2.10.4 Мегафункции и библиотеки параметризуемых модулей

2.10.5 Не используемые входы примитивов, мегафункций и макрофункций

2.11 Порты

2.11.1 Типы портов

2.11.2 Порты экземпляров

3. Структура описания проекта на языке AHDL

3.1 Общая структура

3.2 Определение заголовка описания (оператор Title)

3.3 Определение включаемого текста (оператор Include)

3.4 Определение констант (оператор Constant)

3.5 Обозначение арифметических выражений (оператор Define)

3.6 Определение параметров (оператор Parameters)

3.7 Определение прототипов логических функций (оператор Function Prototype)

3.8 Определение порядка следования битов (оператор Options)

3.9 Контроль арифметических выражений (оператор Assert)

3.10 Раздел интерфейса проекта (Subdesign)

3.11 Раздел переменных проекта (Variable)

3.11.1 Объявление объектов (Instance Declarations)

3.11.2 Объявление узлов (Node Declarations)

3.11.3 Объявление регистров (Register Declarations)

3.11.4 Объявление конечных автоматов (State Machine Declarations)

3.11.5 Объявления псевдоимен конечных автоматов (Machine Alias Declaration)

3.12 Раздел тела проекта (Logic)

3.12.1 Задание исходных значений (Defaults Statment)

3.12.2 Булевские выражения (Boolean Equations)

3.12.3 Управляющие булевские выражения (Boolean Control Equations)

3.12.4 Оператор проверки списка (Case.)

3.12.5 Оператор проверки логического выражения (If Then.)

3.12.6 Оператор проверки логического выражения (If Generate )

3.12.7 Оператор цикла (For Generate)

3.12.8 Использование ссылок на прототипы функций (In-Line Logic Function Reference)

3.12.9 Определение таблицы истинности (Truth Table)

4. Применение языка AHDL

4.1 Использование шаблонов AHDL

4.2 Создание текстового выходного файла

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

4.4 Использование констант и оценочных функций

4.5 Использование итеративно-генерируемой логики

4.6 Использование условно-генерируемой логики

4.7 Выполнение контроля выражений с помощью оператора Assert

4.8 Управление логическим синтезом с помощью примитивов LCELL & SOFT

4.9 Реализация комбинационной логики

4.9.1 Реализация логических выражений и уравнений

4.9.2 Именование логических операторов и компараторов

4.9.3 Использование узлов

4.9.4 Использование шин

4.9.5 Реализация условной логики

4.9.6 Создание дешифраторов

4.9.7 Использование значений переменных по умолчанию

4.9.8 Реализация логики с активными низкими уровнями

4.9.9 Реализация двунаправленных выводов

4.9.10 Реализация тристабильных шин

4.10 Реализация последовательностной логики

4.10.1 Объявление регистров

4.10.2 Объявление регистровых выходов

4.10.3 Создание счетчиков

4.10.4 Конечные автоматы

4.10.5 Реализация конечных автоматов

4.10.6 Управление записью, сбросом и разрешением (Clock, Reset & Enable)

4.10.7 Присваивание состояний

4.10.8 Конечные автоматы с синхронными выходами

4.10.9 Конечные автоматы с асинхронными выходами

4.10.10 Выход из некорректных состояний

4.11 Реализация запоминающих устройств

4.12 Реализация иерархических проектов

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

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

4.12.3 Использование заказных мега- и макрофункций

4.12.4 Импорт и экспорт конечных автоматов

1. Введение

1.1 Общие положения

AHDL (язык описания аппаратуры фирмы Altera) является высокоуровневым, модульным языком, полностью интегрированным в систему MAX+PLUS II. Он особенно хорошо подходит для проектирования сложной комбинационной логики, шин, конечных автоматов, таблиц истинности и параметрической логики. Вы можете использовать текстовой редактор системы MAX+PLUS II или любой другой для создания текстовых файлов проектов (AHDL Text Design Files (.tdf)). Затем Вы можете откомпилировать TDF файлы для получения выходных файлов, пригодных для последующего моделирования, временного анализа и программирования устройства. Кроме того компилятор системы MAX+PLUS II может создавать текстовые файлы экспортирования (AHDL Text Design Export Files (.tdx)) и текстовые выходные файлы (Text Design Output Files (.tdo)), которые можно сохранить как TDF файлы и повторно использовать в качестве файлов проекта.

1.2 Как работает AHDL?

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

Хотя Вы можете воспользоваться любым текстовым редактором для создания TDF файлов, но только текстовой редактор системы MAX+PLUS II дает Вам возможность воспользоваться его преимуществами, когда Вы вводите, компилируете и отлаживаете Ваш AHDL проект.

AHDL проект легко вставить в иерархию проекта. В текстовом редакторе Вы можете автоматически создавать символ, представляющий TDF файл и вводить его в графический файл проекта (Graphic Design File (.gdf)). Аналогичным образом Вы можете объединять заказные функции и свыше 300 мегафункций и макрофункций, поставляемых Альтерой, включая функции библиотеки параметрических модулей (LPM), в любой TDF файл.

Вы можете использовать команды меню Assign или Assignment & Configuration File (.acf) для создания ресурса и выбора устройства. Вы можете также проверить синтаксис и выполнить полную компиляцию для отладки и прогона Вашего проекта. Любые появляющиеся ошибки автоматически локализуются процессором сообщений (Message Processor ) и выделяются в окне текстового редактора.

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

2.1 Зарезервированные слова

Зарезервированные ключевые слова используются для управления операторами AHDL, а также для предопределенных констант GND и VCC.

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

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

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

Ниже приведен список всех зарезервированных ключевых слов.

Таблица 1. Зарезервированные ключевые слова языка AHDL

AND

FUNCTION

OUTPUT

ASSERT

GENERATE

PARAMETERS

BEGIN

GND

REPORT

BIDIR

HELP_ID

RETURNS

BITS

IF

SEGMENTS

BURIED

INCLUDE

SEVERITY

CASE

INPUT

STATES

CLIQUE

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 Зарезервированные идентификаторы

Ниже приведен список всех зарезервированных идентификаторов.

Таблица 2. Зарезервированные идентификаторы языка AHDL

CARRY

JKFFE

SRFFE

CASCADE

JKFF

SRFF

CEIL

LATCH

TFFE

DFFE

LCELL

TFF

DFF

MCELL

TRI

EXP

MEMORY

USED

FLOOR

OPENDRN

WIRE

GLOBAL

SOFT

X

2.3 Символы

Символы ниже имеют в языке AHDL предопределенные значения. Этот список включает символы, которые используются в качестве операторов и компараторов в булевых выражениях и как операторы в арифметических выражениях.

Таблица 3. Символы языка AHDL

Символ

Функция

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

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

-(тире)

/(прямой слеш)

--(два тире)

Начинает однострочный комментарий в VHDL стиле

%(процент)

Ограничивает комментарий в AHDL стиле

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

Ограничивают и определяют последовательные имена шин. Например, шина (a, b, c) состоит из узлов a, b, и c.

Ограничивают имена выводов в разделах Subdesign и операторах прототипов функций.

Дополнительно, ограничивает входы и выходы таблиц истинности в операторах Truth Table.

Заключают биты и состояния объявлений State Machine.

Ограничивают операции наивысшего приоритета в булевых и арифметических выражениях.

Ограничивают определения параметров в операторах Parameters, объявлениях Instance и параметрические имена в операторах Function Prototype и в подставляемых ссылках.

Дополнительно, ограничивают условие в операторе Assert.

Ограничивают аргументы оценочных функций в операторах Define.

[ ](скобки)

Ограничивают диапазон шины

'...' (кавычки)

Ограничивают символьные имена

"..."(двойные кавычки)

Ограничивают строки в операторах Title, Parameters, Assert.

Ограничивают имена файлов в операторах Include.

Ограничивают цифры в недесятичных числах

.(точка)

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

Отделяет расширения от имен файлов.

..(эллипс)

Отделяет старший бит от младшего.

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

Оканчивает операторы и разделы AHDL.

,(запятая)

Отделяет символьные имена от типов в объявлениях.

=(равно)

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

Присваивает значения опциям в операторе Options.

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

Присваивает значения состояниям конечного автомата.

Присваивает значения булевым уравнениям.

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

=>(стрелка)

Отделяет входы от выходов в операторах Truth Table.

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

+(плюс)

Оператор сложения

-(минус)

Оператор вычитания

== (два знака равенства)

Оператор эквивалентности строк или чисел

! (восклицательный знак)

Оператор НЕ

!=(знак восклицание равно)

Оператор неравенства

>(больше чем)

Компаратор больше чем

>=(больше или равно)

Компаратор больше чем или равно

<(меньше чем)

Компаратор меньше чем

<=(меньше или равно)

Компаратор меньше чем или равно

&(амперсант)

Оператор И

!&(восклицание амперсант)

Оператор И-НЕ

$(знак доллара)

Оператор Исключающее - ИЛИ

!$(восклицание доллар)

Оператор Исключающее - ИЛИ - НЕ

#(знак фунта)

Оператор ИЛИ

!#(восклицание фунт)

Оператор ИЛИ-НЕ

?(вопрос)

Тернарный оператор. Он использует следующий формат:

<выражение 1> ? < выражение 2> : < выражение 3>

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

2.4 Строковые и символьные имена

В AHDL существует три типа имен:

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

1. Внутренних и внешних узлов и шин

2. Констант

3. Переменных конечных автоматов, битов состояний и имен состояний

4. Экземпляров

5. Параметров

6. Сегментов памяти

7. Оценочных функций

8. Именованных операторов

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

Имя подпроекта должно совпадать с именем TDF файла.

С. Имена портов - это символьные имена, идентифицирующие входы или выходы логической функции.

Компилятор генерирует имена содержащие символ тильда (~), которые могут появляться в файле подгонки (Fit File) проекта. При использовании обратной аннотации эти имена появятся и в ACF файле проекта.

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

Для трех типов имен доступны два вида представления: с использованием кавычек и без них. Строковые имена заключаются в одиночные кавычки ('), а символьные имена без них.

Когда Вы создаете символ представления TDF файла, который содержит строковые имена портов, кавычки не включаются в его символ представления входов и выходов (pinstub).

2.5 Шины

Символьные имена и порты одного и того же типа можно объявить и использовать как шины в булевых выражениях и уравнениях.

Шина, которая может содержать до 256 членов (или битов), рассматривается как коллекция узлов и действует как одно целое.

Одиночные узлы и константы GND и VCC можно дублировать для создания шин.

2.5.1 Способы объявления шин

Шины можно объявить с помощью следующих трех способов:

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

Имя q[MAX..0] правильно, если константа MAX была описана выше в операторе Constant.

После определения шины скобки [] являются коротким способом описания всего диапазона. Например,

a [4..1] можно указать как a[].

b [6..0][3..2] можно указать как b[][].

Имя шины состоит из символьного имени или имени порта, за которым следует указание поддиапазонов, заключенных в скобки, т.е. d[6..0][2..0]. Имя вместе с самым длинным числом в диапазоне может содержать до 32 символов. К индивидуальному узлу в шине можно обратиться как name[y][z] или namey_z, где y и z числа в диапазоне шины.

Последовательное имя шины состоит из списка символьных имен, портов или чисел, разделенных запятыми и заключенных в скобки, например, (a, b, c).

Эта нотация полезна для определения имен портов. Например,

Входные порты переменной reg типа DFF можно записать как reg.(d, clk, clrn, prn).

Ниже приведены две совокупности примеров, демонстрирующие две шины, описанные с помощью различной нотации:

b[5..0]

(b5, b4, b3, b2, b1, b0)

b[]

b[log2(256)..1+2-1]

b[2^8..3 mod 1]

b[2*8..8 div 2]

2.5.2 Диапазоны и поддиапазоны шин

Диапазоны в именах шин могут состоять из чисел или арифметических выражений, разделенных двумя точками (..) и заключенных в скобки []. Например,

a[4..1]шина с членами a4, a3, a2, и a1.

d[B"10"..B"00"]шина с членами d2, d1, и d0.

b[2*2..2-1]шина с членами b4, b3, b2, и b1. Ограничителями диапазона являются арифметические выражения.

q[MAX..0]допустимая шина, если константа MAX была описана в операторе Constant.

c[MIN(a,b)..0]допустимая шина, если оцениваемая функция MIN была описана в операторе Define.

t[WIDTH-1..0]допустимая шина, если параметр WIDTH был описан в операторе Parameters.

Не зависимо от того является ли ограничитель диапазона числом или арифметическим выражением компилятор разделяет и интерпретирует ограничители как десятичные значения (целые числа).

Поддиапазоны содержат подмножество узлов, определенных в объявлении шины и могут описываться рядом способов. Запятые можно использовать как заменители только в шинах с левой стороны булева уравнения или подставляемой ссылки. Например,

Если Вы объявили шину c[5..1], то Вы можете использовать следующие поддиапазоны этой шины:

c[3..1]

c[4..2]

c4

c[5]

(c2, , c4)

В поддиапазоне (c2, , c4), запятая используется для сохранения места не назначенному члену шины.

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

2.6 Числа в AHDL

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

Основание: Значения:

Десятичное<последовательность цифр от 0 до 9>

ДвоичноеB"<последовательность 0-ей, 1-ц и

X-ов>" (где X = "безразличное состояние")

ВосьмеричноеO"<последовательность цифр от 0

до 7>" или Q"< последовательность цифр от 0 до 7>"

ШестнадцатеричноеX"< последовательность цифр

от 0 до 9, A до F>"

H"< последовательность цифр

от 0 до 9, A до F >"

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

1. Компилятор MAX+PLUS II всегда интерпретирует числа в булевых выражениях как группы двоичных цифр; числа в диапазонах шин как десятичные значения.

2. Числа нельзя присваивать одиночным узлам в булевых уравнениях. Вместо этого используйте VCC и GND.

2.7 Арифметические выражения

Арифметические выражения можно использовать для определения оцениваемых функций в операторах Define, констант в операторах Constant, значений параметров в операторах Parameters и в качестве ограничителей диапазонов шин.

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

SUBDESIGN foo

(

a[4..2+1-3+8] : INPUT;

)

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

CONSTANT foo = 1 + 2 DIV 3 + LOG2(256);

Оцениваемая функция, определенная с помощью арифметического выражения:

DEFINE MIN(a,b) = ((a < b) ? a : b);

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

Таблица 4. Арифметические операторы языка AHDL

Оператор/ компаратор:

Пример:

Описание:

Приоритет

+ (унарный)

+1

положительный

1

- (унарный)

-1

отрицательный

1

!

!a

NOT

1

^

a ^ 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

== (числовой)

5 == 5

числовое равенство

4

== (строковый)

"a" == "b"

строковое равенство

4

!=

5 != 4

не равно

4

>

5 > 4

больше чем

4

>=

5 >= 5

больше чем или равно

4

<

a < b+2

меньше чем

4

<=

a <= b+2

меньше чем или равно

4

&

a & b

AND

5

AND

a AND b

!&

1 !& 0

NAND

5

NAND

1 NAND 0

$

1 $ 1

XOR

6

XOR

1 XOR 1

!$

1 !$ 1

XNOR

6

XNOR

1 XNOR 1

#

a # b

OR

7

OR

a OR b

!#

a !# b

NOR

7

NOR

a NOR b

?

(5<4) ? 3:4

тернарный

8

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

1. Арифметические выражения должны давать не отрицательные числа.

2. Когда результат LOG2 не целый, он автоматически округляется до следующего целого. Например, LOG2(257) = 9.

Арифметические операторы, поддерживаемые в арифметических выражениях, являются надмножеством арифметических операторов, поддерживаемых в булевых выражениях, которые описываются в 2.9.2.

2.8 Встроенные оценочные функции

USED, которую можно использовать для контроля того, использовался ли порт, например, в операторе If Generate или Parameters. USED принимает имя порта в качестве входа и возвращает значение FALSE, если порт не используется.

CEIL, которая возвращает наименьшее целое число большее вещественного числа. Хотя эта операция применима ко всем арифметическим выражениям, она имеет смысл только для LOG2 и DIV, в которых результат может быть вещественным.

FLOOR, которая возвращает наибольшее целое число меньшее вещественного числа. Хотя эта операция применима ко всем арифметическим выражениям, она имеет смысл только для LOG2 и DIV, в которых результат может быть вещественным.

Примеры.

CEIL(LOG2(255)) = 8

FLOOR(LOG2(255)) = 7

Использованный статус протестирован в операторе Assert:

USED(aconst) == # 0 USED(AVALUE)

2.9 Логические выражения

Логические выражения состоят из операндов, разделенных логическими и арифметическими операторами и компараторами и дополнительно сгруппированы с помощью круглых скобок. Выражения используются в булевых уравнениях также как и в других операторах таких как Case и If Then.

Логическое выражение может быть одним из следующих:

Операнд

Например, a, b[5..1], 7, VCC

Подставляемая ссылка на логическую функцию

Например, out[15..0] = 16dmux(q[3..0]);

Префиксный оператор (! или -), применяемый к логическому выражению

Например, !c

Два логических выражения, разделенных бинарным оператором

Например, d1 $ d3

Логическое выражение, заключенное в круглые скобки

Например, (!foo & bar)

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

2.9.1 Операторы логических функций

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

Таблица 5. Логические операторы языка AHDL

Оператор

Пример

Описание

!

!tob

дополнение до 1

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 (!), который является префиксом инвертирования одного узла. Вы можете использовать или имя или символ для представления логического оператора.

Выражения, которые используют эти операторы, интерпретируются различно в зависимости от того, являются ли операнды одиночными узлами, шинами или числами.

Вы можете позволить компилятору заменить И операторы и все компараторы в булевых выражениях на lpm_add_sub и lpm_compare функции, включая логическую опцию Use LPM for AHDL Operators.

Булевы операторы, использующие NOT.

Оператор НЕ является префиксом инвертора. Поведение оператора НЕ зависит от операнда, на который он воздействует.

С оператором НЕ можно использовать три типа операндов:

Если операнд - одиночный узел, GND, или VCC, выполняется одиночная инверсия. Например, !a означает, что сигнал проходит через инвертор.

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

Если операнд - число, он трактуется как двоичное число и каждый его бит инвертируется. Например, !9 интерпретируется как !B"1001", то есть B"0110".

Булевы операторы, использующие AND, NAND, OR, NOR, XOR, и XNOR

С бинарными операторами существует пять сочетаний операндов. Каждое из этих сочетаний интерпретируется различно:

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

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

Если один операнд - одиночный узел, GND, или VCC, а другой группа узлов, одиночный узел или константа дублируется для создания группы такого же размера как другой оператор. Затем выражение трактуется как групповая операция. Например, a & b[4..1] интерпретируется как (a & b4, a & b3, a & b2, a & b1).

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

Если один операнд - число, а другой узел или группа узлов, то число разделяется на биты для согласования с размером группы и выражение рассматривается как групповая операция. Например, в выражении (a, b, c) & 1, 1 преобразуется к B"001" и выражение становится (a, b, c) & (0, 0, 1). Результатом будет (a & 0, b & 0, c & 1).

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

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

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

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

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

Таблица 6. Операторы сложения и вычитания языка AHDL

Оператор:

Пример:

Описание:

+ (унарный)

+1

плюс

- (унарный)

-a[4..1]

минус

+

count[7..0] + delta[7..0]

сложение

-

rightmost_x[] - leftmost_x[]

вычитание

К бинарным операторам применимы следующие правила:

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

Если оба операнда - шины, то они должны иметь один размер.

Если оба операнда числа, более короткое число расширяется до размеров другого операнда.

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

Когда Вы складываете две шины вместе с правой стороны булева уравнения с помощью оператора +, Вы можете поместить 0 с левой стороны группы для расширения ширины шины. Этот метод обеспечивает добавление дополнительного бита данных с левой стороны уравнения, который можно использовать как сигнал выходного переноса. Например, шины count[7..0] и delta[7..0] дополняются нулями для обеспечения информацией сигнала cout:

(cout, answer[7..0]) = (0, count[7..0]) + (0, delta[7..0])

2.9.3 Компараторы

Для сравнения одиночных узлов или шин используются два типа компараторов: логические и арифметические. В булевых выражениях можно использовать следующие компараторы.

Таблица 7. Компараторы одиночных узлов и шин

Компаратор:

Пример:

Описание

== (логический)

addr[19..4] == B"B800"

равно

!= (логический)

b1 != b3

не равно

< (арифметический)

fame[] < power[]

меньше чем

<= (арифметический)

money[] <= power[]

меньше чем или равно

> (арифметический)

love[] > money[]

больше чем

>= (арифметический)

delta[] >= 0

больше чем или равно

Логические компараторы могут сравнивать одиночные узлы, шины и числа без неопределенных (X) значений. При сравнении шин или чисел, шины должны иметь одинаковый размер. Компилятор MAX+PLUS II выполняет побитовое сравнение шин, возвращая VCC, когда сравнение истинно, и GND, когда сравнение ложно.

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

2.9.4 Приоритеты логических и арифметических операторов

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

Таблица 8. Приоритеты логических и арифметических операторов и компараторов

Приоритет:

Оператор/Компаратор:

1

- (минус)

1

! (НЕ)

2

+ (сложение)

2

- (вычитание)

3

== (равно)

3

!= (не равно)

3

< (меньше чем)

3

<= (меньше чем или равно)

3

> (больше чем)

3

>= (больше чем или равно)

4

& (И)

4

!& (И-НЕ)

5

$ (Исключающее ИЛИ)

5

!$ (Исключающее ИЛИ-НЕ)

6

# (ИЛИ)

6

!# (ИЛИ-НЕ)

2.10 Прототипы логических функций

2.10.1 Примитивы

MAX+PLUS II обеспечивает большое многообразие примитивных функций для разработки схем. Так как AHDL и VHDL логические операторы, порты и некоторые операторы замещают примитивы в AHDL и VHDL файлах, то примитивы являются подмножеством их, доступных для GDF файлов, как показано ниже. Примитив - один из основных функциональных блоков, применяющийся для проектирования схем с помощью программы MAX+PLUS II. Примитивы используются в графических файлах (.gdf), текстовых файлах (.tdf), и VHDL файлах (.vhd). Символы примитивов для графического редактора поставляются в директории \maxplus2\max2lib\prim, созданной во время инсталляции.

Прототипы функций встроены в программу MAX+PLUS II.

2.10.2 Массивы примитивов

Массив примитивов - это примитив, который представляет несколько идентичных примитивов. Вы можете использовать примитивные массивы для создания более компактных GDF или OrCAD Schematic файлов путем ввода единственного примитива, который экстрактор списков связей компилятора переведет в несколько примитивов.

Вы можете создать примитивный массив двумя способами:

Если все порты символа (pinstub) примитива соединяются с шинами, состоящими из n членов, примитив переводится в массив n индивидуальных примитивов. Каждый индивидуальный узел шины соединяется с соответствующим портом символа каждого индивидуального примитива в массиве. Например

Рис. 1. Массив примитивов (вариант 1)

В этом примере примитивный массив создается при соединении трех шин A[0..2], B[0..2], и C[0..2] с двумя выводами INPUT, выводом OUTPUT и вентилем AND2.

Во время обработки компилятор переводит этот примитивный массив в 6 выводов INPUT, 3 вывода OUTPUT и 3 вентиля AND2 следующим образом:

Один AND2 вентиль соединяется с узлами A0, B0, и C0.

Один AND2 вентиль соединяется с узлами A1, B1, и C1.

Один AND2 вентиль соединяется с узлами A2, B2, и C2.

Входные выводы A0, A1, и A2 соединяются с узлами A0, A1, и A2, соответственно.

Входные выводы В0, В1, и В2 соединяются с узлами В0, В1, и В2, соответственно.

Выходные выводы С0, С1, и С2 соединяются с узлами С0, С1, и С2, соответственно.

Примитивы выводов INPUT, INPUTC, OUTPUT, OUTPUTC, BIDIR, или BIDIRC, которым даны шинные имена переводятся в массив примитивов. Вы не можете использовать перечислимое имя шины для обозначения примитива вывода.

Если некоторые порты символа примитива соединяются с шинами с n членами, а некоторые с одиночными узлами, примитив переводится в массив n примитивов. В этом случае каждый индивидуальный узел шины соединяется с соответствующим портов символа каждого примитива в массиве, а каждый узел, который не является частью шины, соединяется с тем же самым портом символа каждого примитива. Например

Рис. 2. Массив примитивов (вариант 2)

Для создания массива примитивов необходимо обозначить все используемые узлы и шины, за исключением тех случаев, где имена узлов и шин не обязательны:

Одиночный узел, который соединяется с примитивным массивом.

Шинный проводник, который соединяется с примитивным массивом, если не меньше одного сегмента сети, которая содержит этот проводник, явно обозначено перед любыми точками соединения или, если сеть соединяется с выводом с шинным именем. Например,

Рис. 3. Массив примитивов (вариант 3)

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

Проба - уникальное имя, связанное с любым узлом, например, вход или выход примитива, мегафункции или макрофункции, которое можно использовать вместо полного иерархического имени узла в любом месте MAX+PLUS II. Таким образом пробное имя обеспечивает быструю идентификацию узла.

Примитивы буферов

CARRY OPNDRN

CASCADESOFT

EXP TRI

GLOBAL (SCLK)WIRE (только GDF)

LCELL (MCELL)

Примитивы триггеров и защелок

DFF SRFF

DFFESRFFE

JKFF TFF

JKFFE TFFE

LATCH

Примитивы/Порты входов и выходов

BIDIR или INOUT BIDIRC (только GDF)

INPUT или IN INPUTC (только GDF)

OUTPUT или OUT OUTPUTC(толькоGDF)

Логические примитивы

AND NOR

BAND (только GDF) NOT

BNAND (только GDF) OR

BNOR (только GDF) VCC (только GDF)

BOR (только GDF) XNOR

GND (только GDF) XOR

NAND

Другие примитивы (только GDF)

CONSTANT

PARAM

Title Block

Прототипы функций для примитивов в TDF файлах не нужны. Однако Вы можете переопределить порядок вызова входов примитива, вводя оператор Function Prototype в Ваш TDF.

2.10.3 Макрофункции

MAX+PLUS II предлагает свыше 300 макрофункций.

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

Для просмотра схемы или AHDL файла содержащего макрофункцию, укажите символ макрофункции в графическом редакторе или имя макрофункции в текстовом редакторе и выберите Hierarchy Down (меню File).

Категории макрофункций:

СумматорыТриггеры-защелки

АЛУ Умножители

Буферы Мультиплексоры

Компараторы Генераторы четности

Конвертеры Быстрые умножители

Счетчики Регистры

Декодеры Сдвиговые регистры

ЦифровыеРегистры хранения

фильтры

EDAC SSI функции

Шифраторы Элементы ввода/вывода

Делители частоты

2.10.4 Мегафункции и библиотеки параметризуемых модулей

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

Библиотека параметризуемых функций (LPM) - технологически-независимая библиотека логических функций, параметризуемая для достижения масштабируемости и адаптируемости. Altera реализовала параметризуемые модули (называемые также параметризуемые функции) из LPM в версии 2.1.0, которые предлагают архитектурно-независимый ввод проекта для всех, поддерживаемых MAX+PLUS II устройств. Компилятор включает встроенную поддержку компиляции LPM для функций, используемых во входных файлах (схемном, AHDL, VHDL, и EDIF).

Мегафункция - сложный или высокоуровневый строительный блок, который можно использовать совместно с примитивами вентилей и триггеров и/или с макрофункциями старого типа в файлах проекта.

Altera поставляет библиотеку мегафункций, включая функции из библиотеки параметризуемых модулей (LPM) версии 2.1.0, в директории \maxplus2\max2lib\mega_lpm, созданной во время инсталляции.

Для просмотра файла, содержащего логику мегафункции, укажите символ мегафункции в графическом редакторе или ее имя в текстовом редакторе и выберите Hierarchy Down (меню File).

Мегафункции Мегаядра - предварительно проверенные HDL файлы для сложных функций системного уровня, которые можно приобрести у Altera. Они оптимизированы под архитектуры FLEX 10K, FLEX 8000, FLEX 6000, MAX 9000, и MAX 7000 устройств. Мегафункции Мегаядра состоят из нескольких файлов. Файл для последующего синтеза используется для реализации проекта (подгонки) в заданном устройстве. Кроме этого прилагаются VHDL или Verilog HDL функциональные модели для проектирования и отладки со стандартными EDA средствами моделирования.

Altera поставляет библиотеку мегафункций, включая любые приобретаемые мегафункции Мегаядра в директории \maxplus2\max2lib\mega_lpm, созданной во время инсталляции.

Если Ваш код доступа для мегафункции Мегаядра содержит разрешение просмотра источника файла проекта, Вы можете просмотреть его, указывая символ мегафункции в графическом редакторе или имя в текстовом редакторе и выбирая Hierarchy Down (меню File).

MAX+PLUS II предлагает большое разнообразие мегафункций, включая LPM функции а также параметризуемые функции.

Ниже приводится список мегафункций.

Таблица 9. Мегафункции логических вентилей

lpm_and

lpm_inv

lpm_bustri

lpm_mux

lpm_clshift

lpm_or

lpm_constant

lpm_xor

lpm_decode

mux

busmux

Таблица 10. Мегафункции арифметических компонентов

lpm_abs

lpm_counter

lpm_add_sub

lpm_mult

lpm_compare

Таблица 11. Мегафункции запоминающих компонентов

csfifo

lpm_ram_dq

csdpram

lpm_ram_io

lpm_ff

lpm_rom

lpm_latch

lpm_dff

lpm_shiftreg

lpm_tff

Таблица 12. Другие мегафункции

clklock

pll

ntsc

Таблица 13. Мегафункции мегаядра

a16450

a8255

a6402

fft

a6850

rgb2ycrcb

a8237

ycrcb2rgb

a8251

Ниже приводится описание наиболее часто применяемых мегафункций. Полные сведения по всем мегафункциям можно найти в системе помощи (меню Help, команда Megafunctions/LPM).

lpm_and (вентиль И)

Altera рекомендует использовать примитивы вентилей И или их операторы вместо lpm_and для более легкой реализации и улучшения времени компиляции. Тем не менее lpm_and могут быть полезны при необходимости иметь параметризуемые входы.

Прототип функции

FUNCTION lpm_and

(data[LPM_SIZE-1..0][LPM_WIDTH-1..0])

WITH (LPM_WIDTH, LPM_SIZE)

RETURNS (result[LPM_WIDTH-1..0])

Порты:

Таблица 14. Порты входа

Имя порта

Необходим

Описание

Комментарии

data[][]

Да

Вход данных в вентиль И

Размер порта LPM_SIZE x LPM_WIDTH

Таблица 15. Порты выхода

Имя порта

Необходим

Описание

Комментарии

result[]

Да

Побитовое И.

Размер порта LPM_WIDTH.

Параметры

Параметр

Тип

Необходим

Описание

LPM_WIDTH

Целый

Да

Ширина портов data[][] и result[]. Количество AND вентилей.

LPM_SIZE

Целый

Да

Количество входов в каждый AND вентиль. Количество входных шин.

Таблица 16. Функции вентилей "И"

Входы

Выходы

data[LPM_SIZE-1]_[LPM_WIDTH-1]

result[LPM_WIDTH-1]

0XXX...

0

X0XX...

0

XX0X...

0

...

...

1111...

1

Используемый ресурс:

Простые вентили lpm_and используют приблизительно одну логическую ячейку на вентиль.

2.10.5 Не используемые входы примитивов, мегафункций и макрофункций

К не подсоединенным входным портам примитива, мегафункции, символов макрофункций и экземпляров применяются следующие правила.

Не используемые входы примитивов триггеров имеют следующие значения по умолчанию:

CLRN: VCC (неактивный)

PRN:VCC (неактивный)

ENA:VCC (активный)

Требуются входы data и Clock в триггеры и входы data и ENA в защелки.

Неиспользуемый вход OE буфера TRI по умолчанию имеет значение VCC (активный).

В файлах графического редактора неиспользуемые входы логических примитивов должны соединяться с VCC или GND.

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

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

2.11 Порты

Порт - это вход или выход логической функции. Порт может находится в двух местах:

Порт, который является входом или выходом текущего файла, объявляется в разделе Subdesign.

Порт, который является входом или выходом экземпляра примитива или файла разработки более низкого уровня, используется в разделе Logic.

Порты текущего файла

Порт, который является входом или выходом текущего файла объявляется в следующем формате в разделе Subdesign:

<имя порта>: <тип порта> [ = <значение по умолчанию> ]

2.11.1 Типы портов

Доступны следующие типы портов:

INPUT MACHINE INPUT

OUTPUT MACHINE OUTPUT

BIDIR

Когда текстовой файл проекта является старшим в иерархии, имя порта синонимично с именем вывода. Дополнительное значение порта по умолчанию, которое может быть или VCC или GND, можно определить для типов портов INPUT и BIDIR. Это значение используется только если слева порт не подсоединен, когда экземпляр TDF применяется в файле разработки более высокого уровня.

Например:

SUBDESIGN top

(

foo, bar, clk1, clk2, c[4..0][6..0] : INPUT = VCC;

a0, a1, a2, a3, a4 : OUTPUT;

b[7..0]: BIDIR;

)

Вы можете импортировать и экспортировать конечные автоматы между TDF и другими файлами разработки, описывая входы и выходы как MACHINE INPUT или MACHINE OUTPUT в разделе Subdesign. Прототип функции, который представляет файл, должен указывать, какие порты принадлежат конечному автомату. MACHINE INPUT и MACHINE OUTPUT можно использовать только в файлах более низкого уровня в иерархии проекта.

2.11.2 Порты экземпляров

Порт, который является входом или выходом экземпляра логической функции присоединяется в разделе Logic. Для соединения логической функции с другими частями TDF, Вы вставляете экземпляр функции с помощью подставляемой ссылки, объявления Instance или конечного автомата с помощью State Machine и затем используете порты функции в разделе Logic.

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

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

В следующем примере D триггер объявляется как переменная reg в разделе Variable, а затем используется в разделе Logic:

VARIABLE

reg : DFF;

BEGIN

reg.clk = clk

reg.d = d

out = reg.q

END;

Имена портов используются в следующем формате в разделе Logic:

<имя экземпляра>.<имя порта>

<имя экземпляра> - это имя функции, данное пользователем. <имя порта> идентично с именем порта, который объявляется как вход или выход файла в разделе Subdesign TDF файла более низкого уровня или имя вывода в файле разработки другого типа....


Подобные документы

  • Описание комбинационных и последовательностных логических устройств, групповых операций, цифровых таблиц истинности с учетом архитектурных особенностей. Особенности языка AHDL. Зарезервированные ключевые слова. Реализация иерархического проекта.

    реферат [2,2 M], добавлен 23.01.2014

  • Графический ввод схемы и симуляция в Quartus II. Основные логические элементы. Описание логических схем при помощи языка AHDL, его элементы. Зарезервированные ключевые слова. Моделирование цифровых схем с использованием параметрических элементов.

    курсовая работа [1,7 M], добавлен 07.06.2015

  • Разработка структурной схемы системы. Выбор и обоснование не указанных в задании элементов. Анализ временных параметров системы. Разработка файла конфигурации для системы сбора-обработки данных на языке AHDL. Моделирование цифровой части системы.

    курсовая работа [1,1 M], добавлен 26.10.2014

  • Элементы языка Object Pascal: идентификаторы, константы, переменные, выражения. Структура проекта Delphi. Операторы и метки. Типы данных языка OPascal. Статические и динамические массивы. Записи с вариантными полями. Совместимость и преобразование типов.

    курс лекций [385,4 K], добавлен 18.02.2012

  • Символьный тип данных как составляющая языка программирования: управляющие символы, лексемы и разделители. Разработка программного обеспечения для практической реализации решения задач, содержащих символьные величины языка программирования Turbo Pascal.

    курсовая работа [37,7 K], добавлен 03.05.2012

  • История разработки языка программирования Си. Программа на Си как одна или несколько единиц компиляции (файлов), стадии работы компилятора. Идентификаторы и ключевые слова, типы констант. Форма Бекуса-Наура описания синтаксиса формальных языков.

    презентация [257,7 K], добавлен 05.01.2014

  • Идентификаторы, объекты и операции языка VHDL. Последовательные и параллельные операторы. Описание интерфейса устройства. Синтез схем по описаниям на языке VHDL. Последовательность букв и цифр произвольной длины. Цифровое устройство и его модель.

    курсовая работа [132,5 K], добавлен 28.06.2009

  • Создание приложения по выбору варианта заполнения прямоугольной матрицы: случайными числами или из текстового файла. Идентификаторы метода "main". Расчет количества столбцов, содержащих хотя бы один нулевой элемент. Инструкция по работе с программой.

    курсовая работа [563,8 K], добавлен 28.10.2014

  • Создание программы для перевода кодов с языка Pascal на язык Си. Обработка программ операторами case, assign, rewrite и write. Способы объявления файла, комментария, переменных, логических и арифметических выражений. Виды синтаксических анализаторов.

    курсовая работа [461,0 K], добавлен 03.07.2011

  • Общая характеристика языков программирования. Описание языка Паскаль: основные субъекты языка; структура Паскаль-программы; типизация и объявление данных. Операторы присваивания и выражения. Структурные операторы, организация ветвлений и циклов.

    дипломная работа [276,6 K], добавлен 26.01.2011

  • Переменные и операции языка СИ: используемые символы, константы, идентификаторы и ключевые слова. Использование комментариев в тексте программы. Типы данных и их объявление. Приоритеты операций и порядок вычислений. Функции, переменные, макроподстановки.

    учебное пособие [135,0 K], добавлен 17.02.2012

  • История создания и применение языка Basic. Стандартные математические и строковые функции. Операции и выражения языка. Блоки данных и подпрограммы. Операторы управления, цикла, ввода-вывода и преобразования информации. Константы, переменные, массивы.

    контрольная работа [2,3 M], добавлен 04.05.2015

  • Ознакомление со структурой, комментариями, переменными и типами данных, константами, перечислениями, преобразованием типов языка программирования высокого уровня С++. Ключевые понятия языка, идентификаторы, ключевые слова, функции, операторы, выражения.

    контрольная работа [31,2 K], добавлен 12.12.2009

  • Главная идея LaTeX, возможности системы. Структура документа - текстового файла, содержащего специальные команды языка разметки. Формат текста и вспомогательные программы. Отображение математических и других формул, символы функций и исходные команды.

    курсовая работа [704,6 K], добавлен 21.02.2015

  • Стандартизированный процедурный язык программирования. Создание системного программного обеспечения и прикладных программ. Особенности языка Си, его основные недостатки. Передача параметров в функцию по значению. Стандартная библиотека языка Си.

    презентация [396,3 K], добавлен 12.11.2012

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

    курсовая работа [1,2 M], добавлен 26.05.2022

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

    курсовая работа [305,9 K], добавлен 03.07.2011

  • Составление Win32 App проекта - простейшего текстового редактора, который позволяет выполнять такие операции: редактирование текста, копирование и вставку из одного окна проекта в другое окно проекта. Методы вызова диалогов сохранения и открытия файла.

    курсовая работа [716,3 K], добавлен 09.11.2010

  • Информационные технологии и защиты данных. Методы защиты информации. Виды информационной безопасности и умышленные угрозы. Программирование на языке Turbo Pascal. Типы числовых данных. Функции ввода и вывода. Логические операторы, символьные переменные.

    курсовая работа [1,7 M], добавлен 16.05.2016

  • Ознакомление со структурой языка программирования Turbo-Pascal 7.0, его алфавитом, выражениями и простейшими конструкциями (метками, идентификаторами). Способы описания арифметических, вещественных, логических и символьных операций в программной среде.

    реферат [68,2 K], добавлен 07.02.2011

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.