logo

Оператори на Verilog

Операторите извършват операция върху един или повече операнди в израз. Един израз комбинира операнди с подходящи оператори, за да произведе желания функционален израз.

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 всички битове ~^a = 1'b0

4. Релационни оператори

Тези оператори сравняват операндите и водят до 1-битова скаларна булева стойност. Операторите за равенство и неравенство могат да се използват за неизвестни или високи стойности на импеданс (z или x), а ако двата операнда са неизвестни, резултатът е 1.

Характер Извършена операция Пример
> По-велик от a > b = 1'b0
< По-малък от а
>= По-голямо или равно a >= d = 1'bX
<=< td> По-малък или равен а<= 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. Оператори на смяна

Тези оператори изместват операндите надясно или наляво, размерът се поддържа постоянен, изместените битове се губят и векторът се запълва с нули.

char към низ в java
Характер Извършена операция Пример
>> Shift надясно 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. Приоритет на операторите

Редът в таблицата показва коя операция се извършва първа. Първият е с най-висок приоритет. () може да се използва за отмяна на стойността по подразбиране.

Приоритет на операторите
+, -, !, ~ (унарни)
+,- (двоичен)
<>
,=
==, !=
и
^, ^~ или ~^
|
&&
||
?: