Следующий кодИспользование параметризированный совокупный тип данных в ANSI-стиль списка модуль порта
module test #(A = 1, B = 2) (output t_my sig);
typedef struct {
logic [A-1:0] fA;
logic [B-1:0] fB;
} t_my;
initial $display("hello\n");
endmodule
возвращает ошибку
Error-[SV-UIOT] Undefined interface or type
test.vs, 1
t_my, "sig"
The definition for the forward-referenced interface 't_my' is missing or
't_my' is the name of an undefined user type.
Check to see if the interface definition file/work library is missing or the
definition of the user type is missing.
VCS Если я вместо этого сделать
typedef struct {
logic [A-1:0] fA;
logic [B-1:0] fB;
}t_my;
module test #(A = 1, B = 2) (output t_my sig);
initial $display("hello\n");
endmodule
тогда я получаю
Error-[IND] Identifier not declared
test.vs, 2
Identifier 'A' has not been declared yet. If this error is not expected,
please check if you have set `default_nettype to none.
Error-[IND] Identifier not declared
test.vs, 3
Identifier 'B' has not been declared yet. If this error is not expected,
please check if you have set `default_nettype to none.
Есть ли способ сделать то, что я хочу, используя списки портов модуля стиля ANSI? Обратите внимание, что я могу сделать это без ANSI списков стиль порта следующим образом:
module test #(A = 1, B = 2) (sig);
typedef struct packed {
logic [A-1:0] fA;
logic [B-1:0] fB; } t_my;
output t_my sig;
initial $display("hello\n");
endmodule
module top;
logic topsig [2:0];
test test1 (.sig ({>>{topsig}}));
endmodule
Спасибо за ваш ответ - 2-й вариант интересен, и я сделал это к сведению на будущее. Но я не согласен с основополагающей предпосылкой, что оба модуля «top» и «test» должны знать определение «T». Я знаю это, потому что следующий код компилирует и имитирует только штраф ....... модуль test # (A = 1, B = 2) (sig); typedef struct packed { логика [A-1: 0] fA; логика [B-1: 0] fB; } t_my; выход t_my sig; начальный $ display ("hello \ n"); endmodule ----------- модуль сверху; логика topsig [2: 0]; test test1 (.sig ({>> {topsig}})); endmodule – user2400361
Упакованная структура - это совсем другая история. Все интегральные типы упакованы и нет проверки типа. Правила Verilog применяются, и биты будут усечены или дополнены для установления соединений или назначений. –