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

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

dav*_*_59 6

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.