队列
system verilog 中队列是一种先进先出的存储结构,它的存储大小可变。类似于自动增长与收缩一维非压缩数组。
队列的语法规则
有界数组
有界数组深度有限,其深度为N,当存储满后不能存储新的数据。
data_type name [$:N];
logic data [$:10]
无界数组
无界数组深度无限
data_type name [$];
bit [&:0] test [$]
demo
[运行代码]
module tb;
int data [$];
initial begin
data = {1,3,5,7,9};
foreach(data[i])
$display("data[%d] = %d",i,data[i]);
$display("data = %p",data);
//delete all elements
data = {};
$display("data = %p",data);
end
endmodule
[运行结果]
队列的内建方法
function int size () | 返回队列中的项数,如果为空,则为 0 |
---|---|
function void insert (input integer index, input element_t item) | 在指定的索引位置插入给定项 |
function void delete ( [input integer index] ) | 删除指定索引处的元素,如果未提供,则将删除所有元素 |
function element_t pop_front () | 删除并返回队列的第一个元素 |
function element_t pop_back () | 删除并返回队列的最后一个元素 |
function void push_front (input element_t item) | 将给定元素插入队列的前面 |
function void push_back (input element_t item) | 在队列末尾插入给定元素 |
[运行代码]
module tb;
int test [$];
initial begin
test = {10,12,13,18,20};
$display("number of test = %d,test = %p",test.size(),test);
test.insert(1,23);
$display("insert 23 test.size = %d,test = %p",test.size(),test);
test.delete(4);
$display("delete 18 test.size = %d,test = %p",test.size(),test);
$display("pop_front = %d,size = %d,test = %p",test.pop_front,test.size(),test);
test.push_front(99);
$display("size = %d,test = %p",test.size(),test);
$display("pop_back = %d,size = %d,test = %p",test.pop_back ,test.size(),test);
test.push_back(120);
$display("size = %d,test = %p",test.size(),test);
end
endmodule
[运行结果]