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
假设我声明了一个队列: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