提问人:yasara malshan 提问时间:8/13/2019 更新时间:8/13/2019 访问量:5897
在Verilog中,大小写“内部”有什么用?它是可合成的吗?
what are the uses of case 'inside's in verilog ? is it synthesizable?
问:
在Verilog中,我们有案例“内部”。它的用途是什么,它是可合成的吗?
例如:
case(in) inside
4'b0000, 4'b00?1: ; // 0 and 1,3
[5:7]: ; // 5,6,7
default: ;
endcase
答:
9赞
Matthew Taylor
8/13/2019
#1
在Verilog中,您没有 - 那就是SystemVerilog。在Verilog中,如果要在语句中使用通配符,则必须使用或。在声明中,手段不在乎;在语句中,a 或 an 表示不在乎,例如case
inside
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
或者,因为 a 是 : 的确切同义词:?
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
[5:7]: ; // 5,6,7
因为它是不对称的。使用是Verilog中的第二大罪过(仅次于使用有序端口映射)。这是因为是对称的(原样)。我的意思是,在输入表达式中使用 (在您的示例中)也意味着不在乎,这意味着如果输入表达式转到,则所有分支都匹配(并且执行第一个分支,因为第一个匹配分支是在 Verilog 语句中执行的)。这样做的结果是,如果一个网络或变量转到 ,将过滤掉它而不是传播它,这意味着错误可能会被隐藏。这不会发生在 上,因为输入表达式中的 (or ) 并不意味着不在乎(这就是我所说的不对称的意思)。casex
casex
casez
casex
X
in
X
case
X
casex
case
inside
X
Z
因此,你可以使用任何你想要带有通配符或范围的语句。是的 - 它是可合成的。case
inside
case
casez
在 Verilog 中被认为更安全,因为输入表达式不太可能虚假地转到 。Z
评论
1赞
onlinespending
2/14/2021
Verliog 中一个不错的小技巧是使用 casez(in |'h0)。对高 Z 进行 0 的 OR 处理会产生 X。允许在 case 语句中使用通配符,同时在仿真期间仍将高 Z 和 X 作为未知数传播。综合将忽略多余的 OR,0
上一个:如何相应地聚集鲨鱼攻击?
评论