Systemverilog inside匹配规则

Systemverilog支持集合操作符inside,有时合理使用inside操作,可以使得编码更为高效和简洁。inside操作符可以方便的比较一个数值、多个可能值或连续区间值之间的关系。它的语法格式为:

inside_expression ::= expression inside { open_range_list }

open_range_list可以是单个取值的列举,也可以是使用[a:b]表达的范围,或者unpacked数组,或者几者的混用组合。open_range_list的值可以重复,所以单个取值和范围取值可以有重叠的。如果[a:b]中左边的值大于右边的值,那么该range会被认为时无效的,没有包含任何value。

例子如下:

int array [$] = '{3,4,5};

if ( ex inside {1, 2, array, [10:12} ) ... // same as { 1, 2, 3, 4, 5, 10, 11, 12}

inside操作符会将左边expression的值与右边open_range_list里的值逐一比较,如果找到匹配的值,返回1,反之返回0。那么inside是如何判断两个值是否相等的呢?我们可以先来看一下systemverilog里支持的三种值比较操作符。

  • Logical equality:==, !=,该运算符中如果运算数包含有x/z态,那么结果就是x态。只有在两边的bit都不包含x/z态,最终结果才会为0(False)或1(True);
  • Case equality:===, !==,该运算符中会把两边运算数的x/z态都考虑进去,最终结果肯定是0或1;
  • Wildcard equality:==?, !=?,该运算符的右边是wildcard匹配,右边操作数的x或z bit对应于左边的bit可以为任何数字,但左边的x或z不能被认为是wildcard。因此该运算符的结果可能有x/0/1三种结果,如果左边的x/z态不能被右边的wildcard匹配,那么结果就是x态,如果左边的x/z态会被右边的wildcard匹配,那么结果就为0/1;

结论:

对于非整形值,inside是采用logical equality(==)运算符来比较的。对于整形值,inside是使用wildcard equality(==?)来比较的,所以open_range_list中值含有的x/z bit不参与比较,但inside左边的x/z仍然是需要比较的。inside没有匹配到相等的值时,如果一些比较结果有x,那么将整体返回1'bx。

例子如下:

logic [2:0] val;

while ( val inside {3'b1?1} ) ... // matches 3'b101, 3'b111, 3'b1x1, 3'b1z1

wire r;

assign r = 3'bz11 inside {3'b1?1, 3'b011}; // r = 1'bx

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
SystemVerilog是一种硬件描述语言(HDL),它是对Verilog的扩展和增强。SystemVerilog提供了一些新的特性和功能,使得硬件设计和验证更加方便和高效。以下是SystemVerilog的一些主要特点: 1. 对象导向编程(OOP):SystemVerilog引入了类和对象的概念,使得硬件设计和验证可以更加模块化和可重用。通过使用类和对象,可以更好地组织和管理设计和验证代码。 2. 事务级建模(TLM):SystemVerilog引入了TLM的概念,使得设计和验证可以在更高的抽象级别上进行。TLM允许设计和验证人员以事务的方式进行交互,从而提高了开发效率和代码可读性。 3. 强大的数据类型支持:SystemVerilog提供了丰富的数据类型,包括整数、实数、枚举、结构体等。这些数据类型的支持使得设计和验证可以更加灵活和精确。 4. 接口和端口:SystemVerilog引入了接口和端口的概念,使得设计和验证可以更好地进行模块化和连接。通过使用接口和端口,可以更好地定义模块之间的通信和交互。 5. 断言和约束:SystemVerilog引入了断言和约束的概念,使得验证可以更加全面和准确。通过使用断言和约束,可以对设计进行静态和动态的验证,从而提高了验证的可靠性和效率。 6. UVM集成:SystemVerilogUVM(通用验证方法)紧密集成,使得验证工程师可以更好地使用UVM进行验证。UVM提供了一套验证方法和工具,可以帮助验证工程师更好地组织和管理验证环境。 总之,SystemVerilog是一种功能强大的硬件描述语言,它提供了丰富的特性和功能,可以帮助设计和验证人员更好地进行硬件开发和验证工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谷公子的藏经阁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值