Я пытаюсь передать одну структуру в качестве входных данных и получить вывод в другой структуре. Однако во время моделирования возникают некоторые проблемы. В следующем примере кода компилируется штраф в questasim, однако моделирование дает следующее сообщение об ошибке:Systemverilog: Ошибка моделирования при передаче структур как вход модуля выходы
Connection type 'core_tb_sv_unit.struct ' is incompatible with 'core_sv_unit.struct ' for port (struct_in): Struct/union types must match.
MyStruct.sv
`ifndef _DEF_
`define _DEF_
typedef struct {
real instr;
real addr;
} instr_packet_s;
`endif
core.sv
`timescale 1ns/1ns
`include "MyStruct.sv"
module core(
input instr_packet_s struct_in,
output instr_packet_s struct_out
);
initial begin
$display("Initial");
end
endmodule
core_tb.sv
`include "MyStruct.sv"
module core_tb();
instr_packet_s struct_in_tb,struct_out_tb;
assign struct_in_tb.instr=2;
assign struct_in_tb.addr=3;
core u_core(
.struct_in(struct_in_tb),
.struct_out(struct_out_tb)
);
endmodule
Что я пропущу г?.
Я знаю, что интерфейсы - это предлагаемый рабочий процесс, но вход для модели будет передан подпрограмме C с использованием DPI. Интерфейс DPI поддерживает структуры, я не думаю, что он поддерживает интерфейсы. Вот почему я хотел бы придерживаться простых структур.
Это работает, если элементы в struct являются 'int' вместо' real'? – Greg
Нет, он все еще терпит неудачу, однако, похоже, он специфичен к квестасим. В резком это работает отлично. – user3716072