在verilog中,我们有'inside'的大小写。它的用途是什么?它可以综合吗?
例如:
case(in) inside
4'b0000, 4'b00?1: ; // 0 and 1,3
[5:7]: ; // 5,6,7
default: ;
endcase
答案 0 :(得分:7)
在Verilog中,您没有case
inside
-即 SystemVerilog 。在 Verilog 中,如果要在case
语句中使用通配符,则必须使用casez
或casex
。在casez
语句中,Z
表示无关。在casex
语句中,Z
或X
表示无关,例如
casez (in)
4'b0000, 4'b00z1: ; // 0 and 1,3
4'b0101, 4'b0110, 4'b0111: ; // 5,6,7
default: ;
endcase
或者,因为?
是Z
的确切同义词:
casez (in)
4'b0000, 4'b00?1: ; // 0 and 1,3
4'b0101, 4'b0110, 4'b0111: ; // 5,6,7
default: ;
endcase
或者,用casex
:
casez (in)
4'b0000, 4'b00x1: ; // 0 and 1,3
4'b0101, 4'b0110, 4'b0111: ; // 5,6,7
default: ;
endcase
SystemVerilog添加了case
inside
,这更好,因为它允许使用 ranges (就像您的原始示例一样):
[5:7]: ; // 5,6,7
,因为它是不对称。在Verilog中,使用casex
是第二大麻烦(仅次于使用有序端口映射)。这是因为casex
是对称(casez
也是)。这样,我的意思是在输入表达式中使用casex
和X
(在您的示例中为in
)也表示无关紧要,这意味着如果输入表达式转到{{ 1}},然后所有分支都匹配(并且执行第一个分支,因为第一个匹配分支在Verilog X
语句中执行)。其结果是,如果网络或变量到达case
,则X
会将其过滤掉而不是传播,这意味着可能会隐藏一个错误。 casex
case
不会发生这种情况,因为输入表达式中的inside
(或X
)表示无关紧要(这就是不对称的意思。
因此,您将在需要带通配符或范围的Z
语句的任何地方使用case
inside
。是的-它是可综合的。
case
在Verilog中被认为更安全,因为输入表达式不太可能虚假地进入casez
。