Verilog_radar1
.pdfПобитовые операторы - 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