欢迎光临散文网 会员登陆 & 注册

HDLBits (14) — 按位运算符

2021-09-16 00:51 作者:僚机Wingplane  | 我要投稿

本题链接:

https://hdlbits.01xz.net/wiki/Vectorgates

构建一个具有两个 3 位输入的电路,用于计算两个向量的按位或、两个向量的逻辑或以及两个向量各自的逻辑非 (NOT)。 将 b 取非 作为上半部分(即bits [5:3])将 a 取非作为下半部分拼接为 out_not 。

按位运算 vs. 逻辑运算

在此之前,我们有提到有各种布尔运算符(例如非门)的按位和逻辑版本。在 使用向量时,两种运算符类型之间的区别十分重要。 按位运算会将两个 N 位向量之中的每一位按位运算并产生 N 位输出,而逻辑运算则会将整个向量视为布尔值(真 = 非零,假 = 零)并产生 1 位输出。

可以通过模拟波形,了解按位或和逻辑或的不同之处。

模块声明:

module top_module( 
    input [2:0] a,
    input [2:0] b,
    output [2:0] out_or_bitwise,
    output out_or_logical,
    output [5:0] out_not
);

提示

在一次分配中部分选择左侧,然后通过多次重复操作分配给线网。而不需要在一条语句中为整个向量赋值。

题目

module top_module( 
    input [2:0] a,
    input [2:0] b,
    output [2:0] out_or_bitwise,
    output out_or_logical,
    output [5:0] out_not
);

endmodule

答案

module top_module( 
    input [2:0] a,
    input [2:0] b,
    output [2:0] out_or_bitwise,
    output out_or_logical,
    output [5:0] out_not
);
    assign out_or_bitwise[2:0] = a[2:0] | b[2:0];
    assign out_or_logical = a[2:0] || b[2:0];
    assign out_not[2:0] = ~a[2:0];
    assign out_not[5:3] = ~b[2:0];
endmodule

输出波形


按位操作符包括:取反(~),与(&),或(|),异或(^),同或(~^)。

按位操作符对 2 个操作数的每 1bit 数据进行按位操作。

如果 2 个操作数位宽不相等,则用 0 向左扩展补充较短的操作数。

取反操作符只有一个操作数,它对操作数的每 1bit 数据进行取反操作。

参考内容:

2.4 Verilog 表达式 | 菜鸟教程:https://www.runoob.com/w3cnote/verilog-expression.html

HDLBits (14) — 按位运算符的评论 (共 条)

分享到微博请遵守国家法律