在 Verilog 中写入位数的最佳方法是什么?

What is the best way to write bit number in Verilog?

关于用Verilog写bit,以下写法比较好:

假设 32 位数据和所有 32 位都设置为零:

1) 32'b0

2) 32{1'b0} ?

另一方面,我想将 5 个 MSB 位更改为一个:

1) {5'b1,26'b0}

2) {5{1'b1},26{1'b0}}

1还是2更好?或者他们的行为相同?提前致谢。

谢谢
崇瀚

Verilog 处理表达式位宽的方法有好有坏。一方面,您可以轻松地将特定宽度的表达式分配给另一个宽度的变量,它会自动填充或截断表达式以适应变量。另一方面,您可以将特定宽度的表达式分配给另一个宽度的变量,它会默默地填充或截断表达式以适应变量。

在SystemVerilog中,如果你想把一个变量的所有位都设置为0,你写

VariableName = '0;

表达式 '0 的大小将根据它所赋值的变量的上下文进行调整。无需声明特定宽度。但即使你写

VariableName = 0;

不需要调整 0 的大小,因为它会被截断或用 0 填充以适应变量。 您编写的前两个表达式没有区别。这归结为您如何将值视为整数或一组 32 个独立位。

后两个表达式不表示相同的值。 {5'b1,26'b0} 是 32'h0800_0000 和 {5{1'b1},26{1'b0}} 是 32'hF800_0000。如果你真的想设置一个位的位置,大多数人从 0 开始从 LSB 排序他们的位,并且会写类似 32'b1 << 26.