Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебники / Язык AHDL.DOC
Скачиваний:
56
Добавлен:
13.06.2014
Размер:
995.84 Кб
Скачать
      1. Встроенные оценочные функции

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

  • 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)

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

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

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

  1. Операнд

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

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

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

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

Например, !c

  1. Два булевых выражения, разделенных бинарным оператором

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

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

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

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

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

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

Оператор:

Пример:

Описание:

!

!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.