Cho*_*Han 1 verilog system-verilog
用于在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更好?或者他们的行为是一样的?提前致谢.
谢谢
Chong Han
Verilog有很好的处理表达式位宽的方法.一方面,您可以轻松地将一定宽度的表达式指定给另一个宽度的变量,并自动填充或截断表达式以适合变量.另一方面,您可以将一定宽度的表达式分配给另一个宽度的变量,并以静默方式填充或截断表达式以适合变量.
在SystemVerilog中,如果要将变量的所有位设置为0,则编写
VariableName = '0;
Run Code Online (Sandbox Code Playgroud)
表达式'0将根据其分配给的变量的上下文进行调整.无需声明特定宽度.但即使你写了
VariableName = 0;
Run Code Online (Sandbox Code Playgroud)
没有必要调整大小,0因为它被截断或用0填充以适应变量.您编写的前两个表达式没有区别.它归结为如何将值视为整数或一组32个单独的位.
后两个表达式不代表相同的值.{5'b1,26'b0}是32'h 08 00_0000并且{5 {1'b1},26 {1'b0}}是32'h F8 00_0000.如果你真的想要设置一个比特位置,大多数人从LSB开始从0开始命令它们的位,并且会写出类似的东西32'b1 << 26.