Оператори виконують операцію над одним або кількома операндами у виразі. Вираз об’єднує операнди з відповідними операторами, щоб створити бажаний функціональний вираз.
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. Пріоритет операторів
Порядок таблиці показує, яка операція виконується першою. Перший має найвищий пріоритет. () можна використовувати для заміни типового значення.
| Пріоритет операторів |
|---|
| +, -, !, ~ (унарний) |
| +,- (двійковий) |
| <> |
| ,= |
| ==, != |
| & |
| ^, ^~ або ~^ |
| | |
| && |
| || |
| ?: |