Оператори виконують операцію над одним або кількома операндами у виразі. Вираз об’єднує операнди з відповідними операторами, щоб створити бажаний функціональний вираз.
1. Арифметичні оператори
Для FPGA поділ і множення дуже дорогі, і іноді ми не можемо синтезувати поділ. Якщо ми використовуємо Z або X для значень, результат невідомий. Операції розглядають значення як беззнакові.
характер | Проведена операція | приклад |
+ | додати | b + c = 11 |
- | Відняти | b - c = 9, -b = -10 |
/ | Розділити | b/a = 2 |
* | Помножити | a * b = 50 |
% | Модуль | b % a = 0 |
2. Порозрядні оператори
Кожен біт обробляється, результатом є розмір найбільшого операнда, а менший операнд розширюється нулями до розміру більшого операнда.
характер | Проведена операція | приклад |
~ | Інвертуйте кожен біт | ~a = 3'b010 |
& | І кожен біт | b & c = 3'b010 |
| | Або кожен біт | a | b = 3'b111 |
^ | Xor кожен біт | a ^ b = 3'b011 |
^~ або ~^ | Xnor кожен біт | a ^~ b = 3'b100 |
3. Оператори редукції
Ці оператори зводять вектори лише до одного біта. Якщо є символи z і x, результатом може бути відоме значення.
характер | Проведена операція | приклад |
& | І всі шматочки | &a = 1'b0, &d = 1'b0 |
~& | Nand усі біти | ~&a = 1'b1 |
| | Або всі біти | |a = 1'b1, |c = 1'bX |
~| | Ні всі біти | ~|a= 1'b0 |
^ | Xor усі біти | ^a = 1'b1 |
^~ або ~^ | Xnor усі біти | ~^а = 1'b0 |
4. Оператори відношення
Ці оператори порівнюють операнди та отримують 1-бітне скалярне логічне значення. Оператори рівності та нерівності можна використовувати для невідомих або високих значень імпедансу (z або x), і якщо два операнди невідомі, результатом буде 1.
характер | Проведена операція | приклад |
> | Більш чим | a > b = 1'b0 |
< | Менше | a |
>= | Більше або дорівнює | a >= d = 1'bX |
<=< td> | Менше або дорівнює | a<= e='1'bX</td'> => | =<>
== | Рівність | a == b = 1'b0 |
!= | Нерівність | a != b = 1'b1 |
=== | Рівність регістрів | e === e = 1'b1 |
!=== | Нерівність регістрів | і !== d = 1'b1 |
5. Логічні оператори
Ці оператори порівнюють операнди та отримують 1-бітне скалярне логічне значення.
характер | Проведена операція | приклад |
! | Неправда | !(a && b) = 1'b1 |
&& | Обидва вирази вірні | a && b = 1'b0 |
|| | Один або обидва вирази вірні | та || b = 1'b1 |
6. Оператори зсуву
Ці оператори зсувають операнди вправо або вліво, розмір залишається постійним, зміщені біти втрачаються, а вектор заповнюється нулями.
: на java
характер | Проведена операція | приклад |
>> | Зсув праворуч | b >> 1 результати 4?b010X |
<< | Зсув ліворуч | a << 2 результати 4?b1000 |
7. Оператори присвоєння
Є три оператори присвоювання, кожен з яких виконує різні завдання та використовується з різними типами даних:
- призначити (постійне призначення)
- <= (non-blocking assignment)< li>
- = (присвоєння блокування) =>
8. Інші оператори
Це оператори, які використовуються для перевірки умов і створення векторів.
характер | Проведена операція | приклад |
?: | Тестування умов | умова випробування ? якщо правда, зробіть це, якщо ні, зробіть це |
{} | Конкатенація | c = {a,b} = 8'101010x0 |
{{}} | Тиражувати | {3{2'b10}}= 6'b101010 |
9. Пріоритет операторів
Порядок таблиці показує, яка операція виконується першою. Перший має найвищий пріоритет. () можна використовувати для заміни типового значення.
Пріоритет операторів |
---|
+, -, !, ~ (унарний) |
+,- (двійковий) |
<> |
,= |
==, != |
& |
^, ^~ або ~^ |
| |
&& |
|| |
?: |