verilog - 在 verilog 中 case 'inside's 的用途是什么?可以合成吗?
问题描述
在verilog中,我们有case'inside's。它的用途是什么?它可以合成吗?
例如:
case(in) inside
4'b0000, 4'b00?1: ; // 0 and 1,3
[5:7]: ; // 5,6,7
default: ;
endcase
解决方案
在 Verilog 你没有case
inside
- 那是SystemVerilog。在Verilog中,如果要在case
语句中使用通配符,则必须使用casez
or casex
。在casez
声明中,Z
手段不在乎;在casex
声明中,aZ
或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 added case
inside
,这更好,因为它允许使用范围(就像在您的原始示例中一样):
[5:7]: ; // 5,6,7
并且因为它是不对称的。使用casex
是 Verilog 中的第二大罪过(仅次于使用有序端口映射)。这是因为casex
是对称的(原样casez
)。通过这个,我的意思是casex
在X
输入表达式中(in
在你的例子中)也意味着不关心,这意味着如果输入表达式去X
然后所有分支都匹配(并且第一个被执行,因为第一个匹配的分支被执行在 Verilogcase
声明中)。这样做的结果是,如果一个网络或变量转到X
,casex
将过滤掉它而不是传播它,这意味着一个错误可能会被隐藏。不会发生这种情况case
inside
,因为X
(或Z
) 在输入表达式中并不意味着不关心(这就是我所说的不对称的意思)。
因此,您可以case
inside
在任何需要case
带有通配符或范围的语句的地方使用。是的 - 它是可综合的。
casez
在 Verilog 中被认为更安全,因为输入表达式不太可能虚假地转到Z
.
推荐阅读
- c# - ViewData 返回 null 而不是列表元组
- botframework - 新聊天机器人 - Facebook 频道的 Workplace - Workplace 不支持
- python - 我怎样才能运行一个函数仅 5 分钟?
- python - Kivy 中屏幕文本的分辨率
- python - 在没有 pip 的 virtualenv 中安装 redis 5.x 包
- json - 飞镖中的jsondecode加载问题
- google-api - 在最新的 Google Cloud SDK 291.0.1 中无法通过 REST API 获取 access_token 信息
- r - 在 R studio 中加载 keras 包时出错
- uwp - 如何将传输控制按钮添加到任务栏预览窗口
- python - llvmlitelandingpad throw RuntimeError:LandingPadInst 需要在一个有个性的函数中?