Verilog/SV 中是否有类似 casex 的 ifx-elsex 语句?

Ujj*_*wal 4 verilog system-verilog

假设我有一个场景,我只需要比较寄存器的几个位,而我不关心其他位。eq,我需要检查 3 位寄存器 (A[2:0]) 的第一位和最后一位,我不关心中间位,比如比较向量是 3'b1X0(参数)。

  1. 最简单的方法是选择我关心的所有位,然后我生成了一个控制信号: if ((A[2]==1) & ((A[0]==0))这里if语句中的条件是我的控制信号。

  2. 另一种方法是使用一个casex声明:casex(A) begin 3'b1?0: ... , ... endcase

  3. 是否有类似 ifx-elsex 语句或可用于在不使用第一种和第二种方法的情况下进行此类操作的东西?

谢谢!

Gre*_*reg 5

if (A[2:0] inside {3'b1?0} )

SystemVerilog 关键字inside。它至少从 Accellera 的 SystemVerilog 3.1(在 SystemVerilog 成为 IEEE 的一部分之前)开始就得到支持。IEEE Std 1800-2012 11.4.13 有使用示例。inside是可合成的。

还有if ( A[2:0] ==? 3'b1?0 )IEEE Std 1800-2012 11.4.6)。我手头唯一的参考资料(一本 2004 年出版的书)说它尚不支持合成。欢迎您尝试。

  • 谢谢!根据参考书,我正在使用 `if ( A[2:0] ==? 3'b1?0 )` 是可合成的,但是 `if ( A[2:0] ==? B )` where `B`是一些寄存器不是。所以唯一需要注意的是,在使用 `==?` 时,RHS 应该是一个用于综合的常量。 (2认同)