我有一个函数,如果队列包含元素,则返回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