【发布时间】:2016-04-28 04:21:45
【问题描述】:
对于在Verilog中写位,下面的写法比较好:
假设 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中写位,下面的写法比较好:
假设 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'hF8 00_0000。如果你真的想设置一个位位置,大多数人从 LSB 开始从 0 开始排序他们的位,并且会写像32'b1 << 26 这样的东西。
【讨论】: