系统验证日志中的参数化接口



>我有一个完整的AXI接口和一个精简的AXI接口,如下所示:

interface axi_full ();
logic [63:0] wdata;
logic .      wid;
logic wcredit;
endinterface
interface axi_lite();
logic [63:0] wdata;
logic wcredit;
endinterface

有没有办法我可以只使用一个带有参数 lite 的接口,如下所示,而不是两个单独的接口?唯一的区别是在AXI lite的情况下没有wid。

interface axi #(bit Lite = 1'b0) ();
...
...
endinterface

不幸的是不是。您应该能够使用axi_full,而不使用wid信号。

标准中没有任何内容会阻止在接口中使用生成块。因此,以下内容应该有效:

interface axi #(FULL=1)();
logic [63:0] wdata;
logic       wid;
if (FULL != 0) begin: fff
logic wcredit;
end
endinterface
module top;
axi#(1) full();
axi#(0) lite();
imod fm(full);
//imod lm(lite);
endmodule
module imod(axi i);
initial begin
$display(i.wdata, i.wid, i.fff.wcredit);
end
endmodule

问题始终在于供应商实施。以上似乎在节奏的nc中效果很好。取消注释"lite"字符串将导致它生成错误。

然而,synopsys vcs,至少是 eda playground 中的那个拒绝编译它,抱怨 xmrs 未实现的功能到接口中。

综合可能对此有自己的想法。因此,最好的方法是使用单独的定义。

这也取决于您如何使用它们,modports可以很方便。它们实现得更好,以下示例应该在任何地方都有效:

interface axi_if;
logic [63:0] wdata;
logic       wid;
logic wcredit;
modport full (input wdata, wid, wcredit);
modport lite(input wdata, wid);
endinterface
module top;
axi_if intf();
fmod fm(intf);
lmod lm(intf);
endmodule

module fmod(axi_if.full i);
initial begin      
$display(i.wdata, i.wid, i.wcredit);
end
endmodule
module lmod(axi_if.lite i);
initial begin      
$display(i.wdata, i.wid); //, i.wcredit);
end
endmodule

你说的是不可能的,但你可以把 wid 信号放在 ifdef 编译指令中,如下所示

interface axi();
logic [63:0] wdata;
`ifdef AXI_FULL
logic       wid;
`endif
logic wcredit;
endinterface

定义不使用 AXI-Lite 时的AXI_FULL 连接 AXI 接口时也要考虑到这一点

最新更新