Скачиваний:
31
Добавлен:
29.12.2022
Размер:
8.96 Mб
Скачать

Побитовые операторы - Bitwise Operators

 

Символ

 

Функция

 

Примеры

 

 

 

(применяется к

 

 

 

оператора

 

 

ain = 3’b101 ; bin = 3’b110 ; cin = 3’b01x

 

 

 

 

каждому биту)

 

 

 

 

 

 

 

 

 

 

 

 

 

~

 

Инверсия

 

~ain Ю 3b’010

~cin Ю 3’b10x

 

 

 

 

 

 

 

 

 

 

&

 

AND

 

ain & bin Ю 3’b100

bin & cin Ю 3’b010

 

 

 

 

 

 

 

 

 

 

|

 

OR

 

ain | bin Ю 3’b111

bin | cin Ю 3’b11x

 

 

 

 

 

 

 

 

 

 

^

 

XOR

 

ain ^ bin Ю 3’b011

bin ^ cin Ю 3’b10x

 

 

 

 

 

 

 

 

 

 

^~ or ~^

 

XNOR

 

ain ^~ bin Ю 3’b100

bin ~^ cin Ю 3’b01x

 

 

 

 

 

 

 

 

 

n Операторы выполняются побитно

nЕсли один из операндов имеет меньший размер, то он дополняется слева необходимым числом разрядов

(дополняется нулями).

nЗначения X и Z рассматриваются как неизвестные, но результат может иметь значение 0 ( 0&x=0) или 1 (1 | x=1)

Пример

122

© 2014 СПбГПУ, каф. КСПТ, доц. Антонов А.П. ( dilab@scideco.ru )

Операторы свертки - Reduction

 

Символ

 

Функция

 

Пример

 

 

 

 

оператора

 

 

ain = 4’b1010 ; bin = 4’b10xz ; cin = 4’b111z

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

&

 

AND all bits

 

&ain Ю 1’b0

&bin Ю 1’b0

&cin Ю 1’bx

 

 

 

 

 

 

 

 

 

 

 

~&

 

NAND all bits

 

~&ain Ю 1’b1

~&bin Ю 1’b1

~&cin Ю 1’bx

 

 

 

 

 

 

 

 

 

 

 

|

 

OR all bits

 

|ain Ю 1’b1

|bin Ю 1’b1

|cin Ю 1’b1

 

 

 

 

 

 

 

 

 

 

 

~|

 

NOR all bits

 

~|ain Ю 1’b0

~|bin Ю 1’b0

~|cin Ю 1’b0

 

 

 

 

 

 

 

 

 

 

 

^

 

XOR all bits

 

^ain Ю 1’b0

^bin Ю 1’bx

^cin Ю 1’bx

 

 

 

 

 

 

 

 

 

 

 

^~ or ~^

 

XNOR all bits

 

~^ain Ю 1’b1

~^bin Ю 1’bx

~^cin Ю 1’bx

 

 

 

 

 

 

 

 

 

 

n Сворачивает вектор в однобитовое значение

n X и Z рассматриваются как неопределенные значения

Пример

module ex5 (a_in, b_in, res_xor, bit_xor );

input [7:0] a_in, b_in; output [7:0] res_xor; output bit_xor;

assign res_xor = a_in ^ b_in; assign bit_xor = ^ a_in;

endmodule

Логические операторы - Logical

 

Символ

 

Функция

 

Пример

 

 

 

 

 

оператора

 

 

ain = 3’b101 ; bin = 3’b000 ; cin = 3’b01x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

!

 

Expression not

 

!ain Ю 1’b0

!bin Ю 1’b1

!cin Ю 1’bx

 

 

 

 

true

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

&&

 

AND of two

 

ain && bin Ю 1’b0

bin && cin Ю 1’bx

 

 

 

 

expressions

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

||

 

OR of two

 

ain || bin Ю 1’b1

bin || cin Ю 1’bx

 

 

 

 

expressions

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

nИспользуются для оценки выражения или сравнения нескольких выражений

-Каждый операнд рассматривается как отдельное выражение

-Выражение с нулевым значением рассматривается как false (0)

-Выражение с ненулевым значением рассматривается как true (1)

n Возвращает 1-битное значение true (1) / false (0)

nX и Z рассматриваются как неизвестные и результат – неизвестное значение

Пример

module ex8 (a_in, b_in, rez_not, rez_and, exp_and );

input [7:0] a_in, b_in;

output rez_not, rez_and, exp_and;

assign rez_not = ! a_in;

assign rez_and = a_in && b_in;

assign exp_and = ^a_in && (a_in | b_in);

endmodule

Операторы сдвига - Shift

 

Символ

 

Функция

 

Examples

 

 

 

 

оператора

 

 

ain = 3’b101 ; bin = 3’b01x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

<<

 

Logical shift left

 

ain << 2 Ю 3’b100

bin << 2 Ю 3’bx00

 

 

 

 

 

 

 

 

 

 

>>

 

Logical shift right

 

ain >> 2 Ю 3’b001

bin >> 2 Ю 3’b000

 

 

 

 

 

 

 

 

 

 

 

 

<<<

 

Arithmetic shift

 

ain <<< 2

Ю 3’b100

bin <<< 2

Ю 3’bx00

 

 

 

 

left

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

>>>

 

Arithmetic shift

 

ain >>> 2

Ю 3’b111

bin >>> 2

Ю3’b000

 

 

 

 

right

 

(signed)

 

(signed)

 

 

 

 

 

 

 

 

 

 

 

 

n Сдвигает вектор влево или вправо на определенное число бит

nСдвиг влево (логический или арифметический): освобождающиеся разряды заполняются нулями

nСдвиг вправо

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

-Арифметический (без знаковый): освобождающиеся разряды заполняются нулями

-Арифметический (знаковый): освобождающиеся разряды заполняются знаковым разрядом

n Сдвигаемые биты теряются

nСдвиг на значение X или Z (правый операнд) дает результат - незаданное значение

Пример

module ex9 (a_in, rez_la, rez_ra, rez_ll, rez_rl );

input [7:0] a_in;

output [7:0] rez_la, rez_ra, rez_ll, rez_rl;

assign rez_la = a_in <<< 2; assign rez_ra = a_in >>> 2; assign rez_ll = a_in << 2; assign rez_rl = a_in >> 2; endmodule

Арифметические операторы Arithmetic

 

Символ

 

Функция

 

пример

 

 

 

 

оператора

 

 

ain = 5 ; bin = 10 ; cin = 2’b01 ; din = 2’b0z

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

+

 

Add, Positive

 

bin + cin Ю 11

+bin Ю 10

ain + din Ю x

 

 

 

 

 

 

 

 

 

 

 

 

Subtract, Negate

 

bin – cin Ю 9

-bin Ю -10

ain – din Ю x

 

 

 

 

 

 

 

 

 

 

 

*

 

Multiply

 

ain * bin Ю 50

 

 

 

 

 

 

 

 

 

 

 

 

 

/

 

Divide*

 

bin / ain Ю 2

 

 

 

 

 

 

 

 

 

 

 

 

 

%

 

Modulus

 

bin % ain Ю 0

 

 

 

 

 

 

 

 

 

 

 

 

 

**

 

Exponent*

 

ain ** 2 Ю 25

 

 

 

 

 

 

 

 

 

 

 

 

nЕсли результат имеет большую разрядность чем операнды, то сигналы переноса реализуются автоматически

nПереносы теряются если операнды и результат имеют одинаковую разрядность

*Не все средства синтеза поддерживают

Пример ADD

module ex1 (a_in, b_in, res_add );

input [7:0] a_in, b_in; output [8:0] res_add;

assign res_add = a_in + b_in;

endmodule