systemverilog 中的复杂数据类型(队列哈希)

Complex DataType in system verilog(hash of queues)

假设我声明了一个队列:axi4_req_txn_t wr_req_queue[$]; 现在我想要一个队列的散列,key是地址,data是指向队列的指针;在 systemverilog 中可以吗?

当我编写如下代码时:typedef wr_req_queue waw_hash[*]; 编译器报告 wr_req_queue 不是有效类型。

一个经验法则是,如果您想在另一个类型定义中使用,则将任何复杂的结构表示为一个类型定义。所以,这是队列数组的一个简单示例:

package pkg;
   typedef int mytype_t; // whatever the type of queue elements 
   typedef mytype_t queue_type_t[$];  // queue of mytype_t
   typedef queue_type_t array_type_t[int]; // associative  array of queues
endpackage // pkg

// test the above
module tb;
   import pkg::*;
   
   array_type_t arr;

   initial begin
      arr[0] = {0};
      arr[1] = {1};
      arr[3] = {arr[0], arr[1]};

      $display(arr);
   end
endmodule // tb

反之亦然,数组队列:

package pkg;
   typedef int/*your type*/ mytype_t;
   typedef mytype_t array_type_t[int];
   typedef array_type_t queue_type_t[$];
endpackage // pkg

module tb;
   import pkg::*;
   
   array_type_t arr;

   initial begin
      array_type_t arr1, arr2;
      queue_type_t que;

      arr1[0] = 0;
      arr2[0] = 1;
      arr2[1] = 2;

      que = {arr1};
      que = {que,arr2};

      $display(que);
   end
endmodule // tb