如何将open_range_list传递给函数以在"内部"运算符中使用



我有一个函数,如果队列包含元素,则返回1或0。我想通过使用'inside'操作符来增强这个函数来检查队列是否包含集合中的任何元素。例如,我的函数是这样工作的:

function bit queue_exists(int n);
foreach(m_queue[x]) begin
if (m_queue[x] == n) return 1;
end
return 0;
endfunction

现在我想让我的函数像这样工作:

function bit queue_exists(/*open_range_list elements*/);
foreach(m_queue[x]) begin
if (m_queue[x] inside {elements}) return 1;
end
return 0;
endfunction

在SystemVerilog中可以这样做吗?我不确定语法应该是什么。我引用了open_range_list"SV-LRM 1800-2017第11.4.13条:

inside_expression::= expression inside {open_range_list}//from A.8.3

像这样声明函数:

function bit queue_exists (int elements []);

下面是一个可运行的例子:

module tb;
int m_queue [$];
function bit queue_exists (int elements []);
foreach(m_queue[x]) begin
if (m_queue[x] inside {elements}) return 1;
end
return 0;
endfunction
initial begin
for (int i=0; i<5; i++) m_queue.push_back(i);
$display(queue_exists('{3, 6}));
$display(queue_exists('{8, 9, 10}));
end
endmodule

输出是:

1
0

最新更新