systemverilog 中 '0 和 'b0 的类型是什么?
what is the type of '0 as opposed to 'b0 in systemverilog?
对于像
这样的表达式
wire matched2 = (a == '0);
wire matched1 = (a == 'b0);
'0 和 'b0 有不同的类型吗?
'b0 -- 是未调整大小的文字,其宽度为 32 位 (32'b0)。所以,有 32 位的零。
'0 -- 是一位未定大小的常量,是一种系统 Verilog 语法,用于确保在表达式的上下文中有尽可能多的零。
出于实际原因,这两个行为相同,只是因为它们是无符号零。
但是'b1
和'1
会有很大的区别;前者最终会是一个 32 位的 '1' (32'b1),后者是否会用 1 (111111...).all 填充它的位。
'b0
等同于写 32'b0
,但有一个例外——在串联中使用隐式大小的文字作为操作数是非法的,例如 {1,'b0}
。这是因为人们误以为他们写的是 2'b10。
但是您可以使用 {'1,'0}
,因为在自定义上下文中 '0
始终是一个位。在表达式上下文中,'0
和 '1
将根据其所在上下文的大小填充 0 或 1。
在您的示例中,'0
处于由等式 ==
运算符确定的上下文中,较小宽度的操作数宽度将调整为较大的操作数。
对于像
这样的表达式wire matched2 = (a == '0);
wire matched1 = (a == 'b0);
'0 和 'b0 有不同的类型吗?
'b0 -- 是未调整大小的文字,其宽度为 32 位 (32'b0)。所以,有 32 位的零。
'0 -- 是一位未定大小的常量,是一种系统 Verilog 语法,用于确保在表达式的上下文中有尽可能多的零。
出于实际原因,这两个行为相同,只是因为它们是无符号零。
但是'b1
和'1
会有很大的区别;前者最终会是一个 32 位的 '1' (32'b1),后者是否会用 1 (111111...).all 填充它的位。
'b0
等同于写 32'b0
,但有一个例外——在串联中使用隐式大小的文字作为操作数是非法的,例如 {1,'b0}
。这是因为人们误以为他们写的是 2'b10。
但是您可以使用 {'1,'0}
,因为在自定义上下文中 '0
始终是一个位。在表达式上下文中,'0
和 '1
将根据其所在上下文的大小填充 0 或 1。
在您的示例中,'0
处于由等式 ==
运算符确定的上下文中,较小宽度的操作数宽度将调整为较大的操作数。