用于在Verilog中写入该位,这在以下写作中更好:
假设32位数据和所有32位都设置为零:
1)32'b0
或
2)32 {1'b0}?
另一方面,我想将5个MSB位更改为1:
1){5'b1,26'b0}
或
2){5 {1'b1},26 {1'b0}}
1或2更好?或者他们的行为是一样的?提前谢谢。
感谢
崇汉
答案 0 :(得分:6)
Verilog有很好的处理表达式位宽的方法。一方面,您可以轻松地将一定宽度的表达式指定给另一个宽度的变量,并自动填充或截断表达式以适合变量。另一方面,您可以将一定宽度的表达式指定给另一个宽度的变量,并以静默方式填充或截断表达式以适合变量。
在SystemVerilog中,如果要将变量的所有位设置为0,则编写
VariableName = '0;
表达式'0
的大小将调整为它所分配的变量的上下文。无需声明特定宽度。但即使你写了
VariableName = 0;
无需调整0
的大小,因为它会被截断或用0填充以适应变量。
您编写的前两个表达式没有区别。它归结为如何将值视为整数或一组32个单独的位。
后两个表达式不代表相同的值。 {5&#39; b1,26&#39; b0}是32&#39; h 08 00_0000和{5 {1&#39; b1},26 {1&#39; b0}}是32& #39; H的 F8 强> 00_0000。如果你真的想要设置一个比特位置,大多数人从LSB开始从0开始命令它们的位,并写出类似32'b1 << 26
的东西。