Ujj*_*wal 4 verilog system-verilog
假设我有一个场景,我只需要比较寄存器的几个位,而我不关心其他位。eq,我需要检查 3 位寄存器 (A[2:0]) 的第一位和最后一位,我不关心中间位,比如比较向量是 3'b1X0(参数)。
最简单的方法是选择我关心的所有位,然后我生成了一个控制信号:
if ((A[2]==1) & ((A[0]==0))
这里if
语句中的条件是我的控制信号。
另一种方法是使用一个casex声明:casex(A) begin 3'b1?0: ... , ... endcase
。
是否有类似 ifx-elsex 语句或可用于在不使用第一种和第二种方法的情况下进行此类操作的东西?
谢谢!
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 年出版的书)说它尚不支持合成。欢迎您尝试。