Логические и побитовые операторы
В Verilog выделяют логические (&&
, ||
, !
) и побитовые (&
, |
, ~
, ^
) операторы.
Результатом логического И (&&
) является 0 (false), когда хотя бы один его операнд 0; 1 (true), когда оба операнда 1; иначе X. Аналогично для логического ИЛИ (||
). Оператор логического отрицания (!
) преобразует истинный операнд в 0, а ложный операнд в 1, иначе X.
Побитовые операторы объединяют биты в одном операнде с соответствующим битом в другом операнде для вычисления побитового результата. Унарные побитовые операторы объединяют биты единственного операнда между собой и возвращается однобитовое значение.
Пример
// <тип данных> <переменная> <оператор> <выражение>
module logical_operators_tb;
reg [7:0] a, b;
initial begin
a = 8'd4; b = 8'd5;
$display("a_bin = %b, b_bin = %b ", a, b);
$display("~a = %b", ~a); // побитовое логическое НЕ (унарный оператор)
$display("a & b = %b", a & b); // побитовое логическое И (бинарный)
$display("a | b = %b", a | b); // побитовое логическое ИЛИ (бинарный)
$display("a ^ b = %b", a ^ b); // побитовое логическое Искл. ИЛИ (бинарный)
$display("&a = %b", &a); // горизонтальное логическое И (унарный)
$display("|a = %b", |a); // горизонтальное логическое ИЛИ (унарный)
$display("^a = %b", ^a); // горизонтальное логическое Искл. ИЛИ (унарный)
$display("^~a = %b", ^~a);
$display("1 && 0 = %b", 1 && 0); // логическое И (бинарный)
$display("1 || 0 = %b", 1 || 0); // логическое ИЛИ (бинарный)
$display("!1 = %b", !1); // логическое НЕ (унарный)
end
endmodule
Результат исполнения
a_bin = 00000100, b_bin = 00000101
~a = 11111011
a & b = 00000100
a | b = 00000101
a ^ b = 00000001
&a = 0
|a = 1
^a = 1
^~a = 0
1 && 0 = 0
1 || 0 = 1
!1 = 0
Last updated