我想在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确实提到了一个交叉关键字,但似乎并不适用于这种情况。有更优雅的方式吗?
intersect
是SVA中使用的关键字。建议不要使用任何关键字作为变量名。
查看IEEE Std 1800-2012§7.12数组操作方法
我相信这是期望的等效功能:
myIntersect = listA.find with ( item inside {listB} );