typedef struct packed {
logic wr;
t_bram_addr addr;
logic [WIDE-1:0] rd_data;
logic [WIDE-1:0] wr_data;
} t_memt;
t_memt memt, memt_ff;
xpm_memory_spram #(
.SIM_ASSERT_CHK (1),
.READ_LATENCY_A (1),
.ADDR_WIDTH_A ($bits(t_bram_addr)),
.BYTE_WRITE_WIDTH_A (WIDE),
.MEMORY_SIZE (2*DEPTH*WIDE),
.READ_DATA_WIDTH_A (WIDE),
.WRITE_DATA_WIDTH_A (WIDE),
.WRITE_MODE_A ("write_first")
) bram_inst (
.clka (clk),
.rsta (rst),
.ena ('1),
.wea (memt.wr),
.addra (memt.addr),
.douta (memt.rd_data),
.dina (memt.wr_data),
.sbiterra (),
.dbiterra (),
.injectdbiterra ('0),
.injectsbiterra ('0),
.regcea ('1),
.sleep ('0)
);
always_comb begin
memt = memt_ff;
memt.wr = '0;
end
Questa 给我一个错误
# ** Error (suppressible): (vsim-3839) Variable '/tb/DUT/memt', driven via a port connection, is multiply driven. See ../file.sv(***).
为什么? 以前的版本从未出现过任何问题。
它是一个打包结构,我使用 xpm 实例的输入/输出字段。
对我来说这是误报。 我可以抑制错误,但它不会再告诉我真正的积极错误。
将一组信号连接到模块实例端口时,更常见的是使用
interface
而不是 struct
。 也许 Questa 在这种情况下不支持 struct
。