SystemVerilog Queue

SystemVerilog队列是先进先出,队列可变大小来存储相同数据类型的元素。

它类似于自动增长和收缩的一维未压缩(unpacked)数组。 也可以通过索引,连接和切片运算符来操作它们。 队列可以作为ref或non-ref参数传递给任务/功能。

语法和用法

队列的区别在于使用$运算符指定了大小。

[data_type]  [name_of_queue] [$];
 
  string       name_list [$];        // 字符串元素队列
  bit [3:0]    data [$];             //4位元素队列
 
  logic [7:0]  elements [$:127];     // 8位有界队列,最大大小为128个插槽
 
  int  q1 [$] =  { 1, 2, 3, 4, 5 };  // 整数队列,初始化元素
  int  q2 [$];                       // 整数队列,空
  int  tmp;                          // 临时变量来存储值
 
  tmp = q1 [0];            //获取q1的第一项(索引0)并存储在tmp中
  tmp = q1 [$];            // 获取q1的最后一项(索引4)并存储在tmp中
  q2  = q1;                // 将q1中的所有元素复制到q2中
  q1  = {};                // 清空队列(删除所有项目)
 
  q2[2] = 15;              //将索引2处的元素替换为15
  q2.insert (2, 15);       //将值15插入索引#2

SystemVerilog队列的例子

module tb;
    // 创建一个可以存储“字符串”值的队列
    string   fruits[$] =  { "orange", "apple", "kiwi" };
 
  initial begin
       //迭代并访问每个队列元素
      foreach (fruits[i]) 
        $display ("fruits[%0d] = %s", i, fruits[i]);
 
      //显示队列中的元素
      $display ("fruits = %p", fruits);
 
        //删除队列中的所有元素
        fruits = {};
        $display ("After deletion, fruits = %p", fruits);
  end
endmodule
 
Simulation Log
ncsim> run
fruits[0] = orange
fruits[1] = apple
fruits[2] = kiwi
fruits = '{"orange", "apple", "kiwi"}
After deletion, fruits = '{}
ncsim: *W,RNQUIE: Simulation is complete.

参考文献:
【1】https://www.chipverify.com/systemverilog/systemverilog-queues

发布了91 篇原创文章 · 获赞 7 · 访问量 5260

猜你喜欢

转载自blog.csdn.net/qq_43042339/article/details/104456715