Главная страница  Автономные управляющие системы 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 [ 24 ] 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40

3.8.2. Символы

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

Символ

Функция

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

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

-(гире)

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

-(два гире)

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

%(процент)

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

0 (крутые скобки)

Заключают и определяют последовательные имена фупп. Заключают имена выводов в секции подпроекта (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

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

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

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

- внутренних и внешних узлов (вершин),

- констант,

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

- примеров (instance)

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

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

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

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

Если разработчик создает символ по умолчанию для файла TDFj который включает в себя имена портов в кавычках, собственно кавычки не входят в имена выводов

Ниже в таблице указаны все возможные варианты записи имен в языке AHDL-

Разрешенные символы

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

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

Имя порта

Без кавычек

кавычках

Без кавычек

кавычках

Без кавычек

кавычках

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

Косая черта (/)

Тире(-)

Толысо цифры (0-9)

Ключевое слово

Максимальное число символов

Примеры

Символические имена без кавычек

а, /а. разрешенные

-foo, node, 55 неразрешенные Символические имена в кавычках -bar, table, 1221 bowling4$, has a space , a name with more than 32 characters

разрешенные

неразрешенные

3.8.4. Группы

Символические имена и порты одного и того же гипа можно объявить и использовать как группы в булевых выражениях и уравнениях Группа, в которую может входить до 256 элементов (или битов ), обрабатывается как коллекция узлов (вершин) и считается единым целым

Группа в логической секции файла TDF может состоять из узлов или чисел Одиночные узлы и константы GND и VCC могут дублироваться для образования групп в булевых выражениях и уравнениях

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

384 t ФОРМА ЗАПИСИ ГРУПП

Существует две формы записи при объявлении групп 1 Десятичное имя группы состоит из символического имени (или имени порта), за которым следует диапазон десятичных чисел, заключенный в квадратные скобки, например а[4. 1] После этого имени группы указывается только один диапазон Всего сим-



волическое имя (или имя порта) вместе с самым длинным (по написанию) номером в диапазоне может содержать до 32 символов

Если группа определена, квадратные скобки обеспечивают самый краткий путь задания всего диапазона Вместо диапазона можно также указывать только одно десятичное число, например а[5] Однако такая форма записи означает единственное символическое имя, а не имя группы, и эквивалентно имени а5

2. Последовательное имя группы состоит из заключенного в скобки перечня символических имен, имен портов или чисел, разделенных запятыми, например (а, Ь, с). В этом перечне могут быть также десятичные имена групп, например (а, Ь, с[5 .1]). Такая запись используется для задания имен портов.

Например.

reg. (d, elk, elrn, prn)

В следующем примере показаны варианты записи одной и той же группы Ь[5. 0]

(Ь5,Ь4, ЬЗ,Ь2,Ы,Ь0) Ь[]

3842 ДШПАЗОНИПОДДИтЗОН ГРУПП

Диапазоны в десятичных именах групп обозначаются десятичными номерами, обычно перечисляемыми в порядке убывания Для того чтобы указать диапазон в порядке возрастания или в обоих порядках, разработчик должны установить опцию В1Т0 в обьяв-лении опций Options, тогда компилятор не будет выдавать предупреждающие сообщения

Поддиапазоны включают подмножество узлов, заданных в обь-явлении группы, их можно указывать различными способами Например, если объявили группу с[5 1], Вы можете использовать следующие поддиапазоны этой группы с[3 1], с4, с[5], (с2, с4)

В левой части булевых уравнений или в ссылках (reference) по тексту программы (in-line) на макрофункции или примитивы в написании имени группы можно использовать запятые вместо перечисления имен.

При указании диапазона вместо чисел можно использовать константы. Например, q[MAX..O] является разрешенной формой записи, если константа МАХ определена в объявлении Constant

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

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

Система счисления

Значения

Десятичная

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

Двоичная

ВЧпоследовательность из 0,1, Х>, где символ X обозначает безразличное значение

Восьмеричная

04 последовательность цифр 0-7> или 04 последовательность цифр 0-7>

Шестнадцатеричная

Х < последовательность цифр 0-9, букв A-F> или Н < последовательность цифр 0-9,6yi;eA-F>

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

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

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

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

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

♦ операнд Пример-а, b[5..1J, 7, VCC

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

♦ префиксный оператор {* или -), примененный к булеву выражению Пример. Г с

♦ два булевых выражения, разделенные двоичным (не префиксным) оператором Пример dl $ d3

♦ заключенное в круглые скобки булево выражение Пример: (I fОС i bar)

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

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

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

Оператор:

Пример:

Описание:

!tob

Дополнение (префиксное обращение)

NOT lob

&

bread ibuner

Логическое И

bread AND butter

!&

a[3..1l!&bl5..3l

Обращение логического И

NAND

a[3 r NANDb[5..3)

trck# treat

Логическое ИЛИ

trick OR treat

c[8..5I!#d(7..41

Обращение логического ИЛИ

c[8.,5]NORd[7 4]

foo $ bar

Исключающее ИЛИ

too XOR bar

X2!$x4

Обращение исключающего

XNOR

x2XNORx4

логического ИЛИ

Примеры разрешенной записи чисел в языке AHDL: В 0110Х1Х10 QM671223 H 123AECF

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

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

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

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

С оператором NOT можно использовать три типа операндов ♦ если операнд представляет собой одиночный узел, константы GND или VCC, выполняется одна операция обращения Пример а



♦ если операнд представляет собой группу узлов, каждый элемент группы проходит через инвертор. Пример ia[4 .1 ] интерпретируется как (!а4, !аЗ, ia2, !a1),

♦ если операнд представляет собой число, он обрабатывается как двоичное число, т е как группа соответствующего числа битов, где обращается каждый бит Пример 9 операнд интерпретируется как двоичное число ВЮОГ (группа из четырех элементов), результат В 0110

3.8.9. Выражения с операторами AND, Шй, OR, NOR, XOR и XNOR

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

♦ если операнд представляет собой одиночный узел, константы GND или VCC, оператор выполняет логическую операцию над двумя элементами Пример-(а&Ь),

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

♦ если один оператор представляет собой одиночный узел, константы GND или VCC, а другой операнд - группу узлов, то одиночный узел или константа дублируются для образования группы такого же размера, что и второй операнд Затем выражение интерпретируется как групповая операция Пример а & Ь[2 1] интерпретируется как(а&Ь2, а&Ы),

♦ если оба операнда представляют собой числа, более короткое (в смысле числа битов в двоичном представлении) число дополняется незначащими нулями, чтобы Сравняться по числу битов С другим операндом Затем выражение интерпретируется как групповая операция Пример: в выражении (3#В) 3 и 8 преобразуются в двоичные числа В 0011 и В 1000 Результатом является В 101Г,

♦ если один операнд представляет собой число, а другой - узел или Группу узлов, то число усекается или расширяется до размера группы При усечении значащих битов генерируется сообщение об ошибке Выражение затем интерпретируется как групповая операция Пример (а,Ь,с)&1 интерпретируется как (а&О, Ь&О С&1)

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

operation

(а, Ь, с) 4 1= (О, О, с)

(а, Ь, с) t VCC = (а, Ь, с) .

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

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

Оператор

Пример

Описание

+ (унарный)

Положительное значение

- (унарный)

-а[4 1]

Отрицательное значение

countp 0) + deltaI7 0]

Сложение

nghtmost x[l - leftmost.xd

Вычитание

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

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

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

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

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

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

3,8.11. Компараторы (Операторы сравнения)

Компараторы используются для сравнения одиночных узлов или групп Существует два типа компараторов логические и арифметические В языке AHDL реализованы следующие компараторы

Компаратор

Пример.

Описание:

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

addrll9..4]==B B800

Равны

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

Ы 1=ЬЗ

He равны >

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

faire[l < power[]

Меньше чем

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

money!] <=power[]

Меньше либо равно

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

lovell > money[]

Больше чем ?

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

delta[]>=0

Больше либо равно

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

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



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 [ 24 ] 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40

© 2000 - 2021 ULTRASONEX-AMFODENT.RU.
Копирование материалов разрешено исключительно при условии цититирования.