问题描述
系统verilog中的通配符运算符是什么?我已经在网上搜索过,但存在一些歧义。
它们也可以合成吗?
下面的答案?
4'b1010 ==? 4'b10x0
4'b10x0 ==? 4'b1010
解决方法
您似乎没有搜索IEEE 1800-2017 SystemVerilog LRM。 11.4.6通配符相等运算符部分定义了此运算符。搜索会给出许多其他示例,例如here。
通配符相等运算符旨在可合成,只要X在RHS上以文字或常量表达式形式出现即可。 RHS上的X被视为无关匹配。 LHS上的X不匹配任何内容,仅用于仿真。 inside
运算符和case inside
条件语句都使用此非对称通配符匹配来实现可综合的无关紧要。
从“ IEEE标准Verilog寄存器传输级别综合标准”的第5.5节开始,IEEE Std 1364.1-2002(1364是IEEE-1800扩展的基本规范,而1361.1定义了1364的可综合子集):
The value x may be used in case item expressions (may be mixed
with other expressions,such as 4'b01x0) in a casex statement to
imply a don't care value for synthesis.
由于Wildcard运算符是casex表达式的明显扩展,因此可以合理地预期它是可合成的。我不知道定义可合成子集的1800 IEEE标准。或者该信息是否包含在IEEE-1800标准本身中。
已故的Stuart Sutherland在他的论文https://sutherland-hdl.com/papers/2006-DVCon_SystemVerilog_synthesis_subset_paper.pdf
中提出了IEEE-1800的可综合构造列表,其中包括通配符平等。从实用性的角度来看,检查该问题的明确方法是使用此结构编写一个小示例,然后将其提供给您实际打算使用的综合工具,以查看是否收到警告,错误或工作代码!