Предположим, я объявил очередь: axi4_req_txn_t wr_req_queue[$];
Теперь я хочу иметь хэш очереди, ключ — это адрес, а данные — указатель на очередь; Возможно ли это в systemverilog?
когда я пишу такой код: typedef wr_req_queue waw_hash[*]; компилятор сообщает, что wr_req_queue не является допустимым типом.
@Serge Привет, Серж, как правильно определить хэш (ассоциативный массив) очередей в systemverilog? Если я напишу так: axi4_req_txn_t waw_hash[*]; это хэш акси-запроса; не хэш массива. Дело в том, что я хочу сделать запись после проверки записи здесь, поэтому мне нужен адрес в качестве ключа и массив запроса в качестве значения.
Вставляю в ответ.





Эмпирическое правило заключается в том, чтобы выражать любую сложную структуру как определение типа, если вы хотите использовать ее в другом определении типа. Итак, вот простой пример массива очередей:
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
Опубликуйте точное сообщение об ошибке. Также не используйте
[*]в качестве типа индекса. Используйте тип адреса.