假设a= 4'b1110, b= 4'b0010
A&& amp;和B和A& B和A || B和A |之间有什么区别B'每个人的结果是什么以及如何完成?
我尝试在SO上阅读一些问题/答案,但我找不到任何确定的答案。
答案 0 :(得分:3)
logical
纯粹使用true / false值。组件位是无关紧要的,只有全零(假),而不是全零(真)。
bitwise
完全按照顾名思义 - 它考虑个别位。
a = 42 00101010
b = 23 00010111
c = 0 00000000
a || b -> true a && b -> true
a | b -> 63 a & b -> 2
a || c -> true a && c -> false
a | c -> 42 a & c -> 0
更详细:
a || b -> 00101010
|| 00010111
-----------
00111111 -> 63, which is non-zero, therefore -> TRUE
a | b
完全相同,但由于它只处理这些位,因此计算在63
停止。
a && b -> 00101010
&& 00010111
-----------
00000010 -> 2 -> non-zero, therefore -> TRUE
如果我们添加d = 21
:
a && d -> 42 && 21 -> 00101010
&& 00010101
-----------
00000000 -> all-zeroes, therefore false
答案 1 :(得分:1)
通过创建Verilog测试平台并运行模拟来完成:
module tb;
reg [3:0] a, b;
initial begin
a= 4'b1110;
b= 4'b0010;
$display("a&b = 'b%b", a&b);
$display("a&&b = 'b%b", a&&b);
$display("a|b = 'b%b", a|b);
$display("a||b = 'b%b", a||b);
#5 $finish;
end
endmodule
/*
Output:
a&b = 'b0010
a&&b = 'b1
a|b = 'b1110
a||b = 'b1
*/
有关Verilog运算符的详细信息,请参阅IEEE Std 1800-2012。