带有参数的系统verolog接口



我正在尝试构建一个接口来连接两个模块。接口采用下一种格式:

interface my_if #( 
parameter H_WIDTH = 64,
parameter L_WIDTH = 8
);
logic [H_WIDTH -1:0]  a;
logic [L_WIDTH -1:0]  b;
logic                 ready;
modport in ( input a, input b, output valid);
modport out( output a, output b, input ready);
endinterface;

我需要使用这个接口连接两个模块,而我对每个连接都有不同的地址和索引参数(例如,3个my_if接口正在连接我的两个模块。但每个接口都有不同地址和索引的参数(。我该怎么做?

您的问题听起来像是有两个模块,它们通过3个具有不同参数的接口连接。如果我的猜测是正确的,答案很简单。

  1. 要使用任何接口连接模块,必须使用不同的正确参数进行实例化:
my_if #(64, 8) if64_8;
my_if #(32,4) if32_4;
my_if #(16,2) if16_2;

现在,该方法必须用于处理接口

module m1(my_if in1, my_if in2, my_if in3);
// ...
endmodule
module m2(my_if out1, my_if out2, my_if out3);
// ...
endmodule

你可以连接它们:

m1 m1 (if64_8.in, if32_4.in, if16_2.in);
m2 m2 (if64_8.out, if32_4.out, if16_2.out);

以下是一个可编译的示例

interface my_if #( 
parameter H_WIDTH = 64,
parameter L_WIDTH = 8
);
logic [H_WIDTH -1:0]  a;
logic [L_WIDTH -1:0]  b;
logic valid;
logic ready;
modport in ( input a, input b, output valid);
modport out( output a, output b, input ready);
endinterface
module top;
my_if #(64, 8) if64_8();
my_if #(32,4) if32_4();
my_if #(16,2) if16_2();
m1 m1 (if64_8.in, if32_4.in, if16_2.in);
m2 m2 (if64_8.out, if32_4.out, if16_2.out);
endmodule
module m1(my_if in1, my_if in2, my_if in3);
// ...
initial begin
$display("%0d, %0d, %0d", $bits(in1.a), $bits(in2.a), $bits(in3.a));
end
endmodule
module m2(my_if out1, my_if out2, my_if out3);
// ...
endmodule

$display语句显示,对于每个不同的"in",信号的宽度都不同。

最新更新