2015-08-27 3 views
2

Я хотел бы найти пересечение между двумя списками в SystemVerilog. От Specman естьКак сделать перекрестки в 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 упоминает об пересекаться ключевое слово, но это, кажется, не относится к этому случаю. Есть ли более элегантный способ?

ответ

3

intersect - это ключевое слово, используемое в SVAs. Не рекомендуется использовать любое ключевое слово в качестве имени переменной.

ЗАКАНЧИВАТЬ IEEE Std 1800-2012 § 7,12 методы манипуляции массива

Я считаю, что это нужный эквивалент функция:

myIntersect = listA.find with (item inside {listB}); 
+0

Ах, это правда. Я должен был использовать другое имя для моего примера. Эта функция именно то, что я искал, спасибо. –

+1

FYI: назначение распакованных массивов должно быть использовано '' {} '(с главной одинарной кавычкой) вместо' {} '. 'listA [$] = {A, B, C};' должен быть 'listA [$] = '{A, B, C};' См. § 7 для примеров. – Greg

Смежные вопросы