在 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
.
关于用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
.