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


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

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

 

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

• выражений в разделе Define Statement;

• значений констант в разделе Constante Statement;

• границ диапазонов изменения индексов групп;

• границ диапазона переменной в операторе FOR GENERATE;

• выражения в операторах IF GENERATE и ASSERT.

 

Результат арифметического выражения должен быть целым положи­тельным числом, если это не так, то он округляется до большего целого. Существуют две функции для явного задания правил округления: CETL - округление до большего целого; FLOOR - округление до меньшего целого. Арифметические и логические операции, операции сравнения (компарато­ры) имеют следующие приоритеты при вычислении арифметических вы­ражений:

 

Таблица 3.7.

 

Операция/ Компаратор Пример Описание Приоритет
+ (унарный) +1 плюс
- (унарный) -1 минус
!NOT !a отрицание
^ a^2 степень
MOD 4 MOD 2 модуль
DIV 4 DIV 2 деление
* a*2 умножение
LOG2 LOG2 (4-3) логарифм по основанию 2
+ 1+1 сложение
- 1-1 вычитание
= = (numeric) 5= =5 равенство чисел
= = (string) "a"= ="b" равенство строк
       
!= 5! =4 не равно
> 5>4 больше
>= 5>=5 больше или равно
< a<b+2 меньше
Операция/ Компаратор Пример Описание Приоритет
<= a<=b+2 меньше или равно
& a & b AND
AND a AND b    
!& 1 !& 0 NAND
NAND 1 NAND 0    
$ 1 $ 1 XOR
XOR 1 XOR 1    
!$ 1 !$1 XNOR
       
XNOR 1 XNOR 1    
# a # b OR
OR a OR b    
!# a !# b NOR
NOR a NOR b    
? (5<4) ? 3:4 условная операция

 

Приоритеты операций могут изменяться при помощи скобок.

 

Булевы выражения и уравнения. Булевы выражения - это операнды (числа, цепи, группы), разделенные знаками арифметических и логиче­ских операций, компараторами (операторами сравнения), сгруппирован­ные с помощью скобок. Эти выражения используются в булевых уравне­ниях и операторах CASE и IF_ТНЕN.

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

• операнд

Пример: a, b[5..1], 7, VCC

• ссылка на логическую функцию

Пример: out [15..0]=16dmux(q[3..0]);

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

Пример: !с

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

Пример: d1 $ d3

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

Пример: (!foo & bar)

Результат булева выражения имеет ту же ширину, что и операнды.

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

Порядок следования булевых уравнений в программе не важен, логи­ческие состояния устанавливаются одновременно.

 

SUBDESIGN boole1

(

a0, a1, b: INPUT;

out1, out2: OUTPUT;

BEGIN

out1=a1 & !a0;

out2=out1 # b;

END;

 

Здесь выходам out1 и out2 присваиваются значения, определяемые булевыми выражениями, в которых участвуют имена входных и выходных портов. Используются операции И, ИЛИ.

Это же устройство можно описать по-другому, используя переменную типа NООЕ.

 

SUBDESIGN boole2

(

a0, al, b: INPUT;

out1, out2: OUTPUT;

)

VARIABLE

a_equals_2 : NODE;

BEGIN

a_equals_2 = a1 & !a0;

out1 = a_equals_2

out2 = a_equate_2 # b;

END;

 

Если имя переменной типа NООЕ используется в нескольких выраже­ниях, то ее описание позволяет экономить ресурсы ПЛИС.

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

Таблица 3.8.

 

 

Операция Пример Описание
! NOT !music NOT music инверсия
& AND a & b a AND b И
!& NAND a [3..1] !& b [5..3] a [3..1] NAND b [5..3] И-НЕ
Операция Пример Описание
!$ XNOR x2 !$ x4 x2 XNOR x4 инверсия исключающего ИЛИ
# OR tris # tran tris OR tran ИЛИ
!# NOR c [8..5] !# d [5..4] c [8..5] NOR d [5..4] ИЛИ-НЕ

 

Унарная операция NOT может применяться к одноразрядной перемен­ной, группе переменных и к числу. При одноразрядной переменной ре­зультатом является инвертированное значение. В случае группы инверти­руется каждый член группы. В случае числа инвертируется каждый раз­ряд его двоичного представления.

Бинарные операции AND, NAND, ОR, NOR, ХОR, NXOR допускают следующие комбинации операндов:

• оба операнда одноразрядные (переменные, порты, VСС, GND);

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

• один оператор одноразрядный, а другой является группой - однораз­рядный операнд тиражируется до группы, затем к двум группам по­разрядно применяется операция;

• оба операнда числа - они представляются в двоичном формате и к группам двоичных разрядов применяется операция;

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

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

Таблица 3.9.

 

Компаратор Пример Описание
= = (логическое) Bus [15..0]= =H "B800" равно
!= (логическое) a1 !=a3 не равно
> (арифметическое) c [ ] > d [ ] больше
>= (арифметическое) fiu [ ] >= fiu [ ] больше или равно
< (арифметическое) c < d+2 меньше
<= (арифметическое) e <= f-2 меньше или равно

 

Результатом операции сравнения является логический ноль (GND), если условие не выполнено, и логическая единица (VСС), если условие выполнено.

Из таблицы видно, что компараторы делятся на логические и арифме­тические. При логическом сравнении осуществляется поразрядное сравне­ние операндов, а при арифметическом сравнении группа разрядов интер­претируется как двоичное число без знака.

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

Таблица 3.10.

Операция Пример Описание
+ (унарный) + 2 Плюс
• (унарный) -f [ ] Минус
+ dd [2..0] + са[2..0] Сложение
- gamma [ ] – sigma [ ] Вычитание

 

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

 

Приоритет операций в булевых выражения следующий:

Таблица 3.11.

 

Приоритет Операция/ Компаратор: Описание
- минус, дополнение до 2 (negative)
! инверсия, логическое НЕ (NOT)
+ сложение (addition)
- вычитание (subtraction)
= = Равно (equal to)
!= не равно (not equal to)
< Меньше (less than)
<= меньше или равно (less than or equal to)
> Больше (greater than)
>= больше или равно (greater than or equal to)
& И (AND)
!& И-НЕ (NAND)
$ ИСКЛЮЧАЮЩЕЕ ИЛИ (XOR)
!$ ИНВЕРСИЯ ИСКЛЮЧАЮЩЕГО ИЛИ (XNOR)
# ИЛИ (OR)
!# ИЛИ-НЕ (NOR)

 

Пример сложного булева уравнения:

a [ ] = ((с [ ] &-В "001101")+е [6..1] ) # (р, q, г, s, t, v);

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

Двоичное число В"001101" дополняется до 2 и становится В"001101". Унарный (-) имеет высший приоритет.

2. Выполняется операция AND над В"001101" и группой с [ ]. Эта операция имеет второй приоритет из-за скобок.

3. Результат складывается с группой е[6..1].

4. Выполняется операция ОR над результатом и группой (р, q, г, s, t, v).

Общий результат присваивается группе а [ ]. Для правильности урав­нения разрядность группы слева должна быть кратна разрядности группы справа.

 



Дата добавления: 2021-09-07; просмотров: 396;


Поиск по сайту:

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

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.014 сек.