如何在SystemVerilog中进行交叉?

问题描述 投票:2回答:1

我想在SystemVerilog中找到两个列表之间的交集。来自斯特曼的话

var intersect: list of my_enum;
intersect = listA.all(it in listB);

我觉得这很古怪。但最好能在SystemVerilog中提出的是:

typedef enum {A, B, C, D} my_enum;
my_enum listA[$] = {A, B, C};
my_enum listB[$] = {B, C, D};
my_enum intersect[$];

foreach(listA[i])
  if(listA[i] inside listB)
    intersect.push_back(listA[i]);

IEEE 1800-2012确实提到了一个交叉关键字,但似乎并不适用于这种情况。有更优雅的方式吗?

system-verilog
1个回答
3
投票

intersect是SVA中使用的关键字。建议不要使用任何关键字作为变量名。

查看IEEE Std 1800-2012§7.12数组操作方法

我相信这是期望的等效功能:

myIntersect = listA.find with ( item inside {listB} );
© www.soinside.com 2019 - 2024. All rights reserved.