System verilog 系统verilog参数化接口,如何

System verilog 系统verilog参数化接口,如何,system-verilog,System Verilog,嗨,我正在努力让我的头围绕接口。。。起初,它们看起来很简单,但一旦我开始使用参数化接口,我就无法将各个部分放在适当的位置 说我有接口 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

嗨,我正在努力让我的头围绕接口。。。起初,它们看起来很简单,但一旦我开始使用参数化接口,我就无法将各个部分放在适当的位置

说我有接口

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;
我想在我的模块中将其用作端口

module my_module (
logic input clk,
logic input rst,
my_if.in    my_if
);
首先,我不知道如何设置iterface的参数 我尝试了以下方法,而不是上述方法:

my_if(#.H_WIDTH((64), .L_WIDTH(64)) my_if()

它不编译

但是我该如何设置接口的参数呢? PLZ帮助我在谷歌上搜索了大量的例子,但它们都是非常基本的


顺便说一句,解决方案必须进行综合,因为这不是为了验证

您设置
接口
实例的参数的方式与设置
模块
的参数的方式完全相同;当它被实例化时。没有语法允许您设置接口端口的参数。参数值基于实例化模块时连接到端口的接口实例


当您正在合成的顶级模块具有接口端口时,这会出现问题。它类似于顶级模块具有需要重写的参数时。您需要查看正在使用的工具的合成手册,以了解如何手动覆盖参数

你就快到了!在顶层模块(实例化接口的地方)中,您只需更改:

my_if(#.H_WIDTH((64), .L_WIDTH(64)) my_if()


你应该可以走了。在本主题中有一节(25.8参数化接口),您应该仔细阅读。

实际上,这是正确的方法

module my_module (
logic input clk,
logic input rst,
my_if.in    my_if
);
这个 模块my_模块( 逻辑输入时钟, 逻辑输入rst, my_if(.H_WIDTH(64),.L_WIDTH(64))my_if() ); 这显然是不合法的

参数设置在接口连接到另一个模块的位置! my_if#(.H_WIDTH(64),.L_WIDTH(64))使用my_if#()。像这样

module top (
input clk,
input rst
);

my_if # (.H_WIDTH(64), .L_WIDTH(64)) temp();

my_module inst_1
 (
clk           (clk),
rst           (rst),
my_if         (temp_if)
);


 my_module inst_2
 (
clk           (clk),
rst           (rst),
my_if         (temp_if)
);
endmodule

在Synopsys DC流中,建议创建简化的SystemVerilog包装器,以覆盖接口和模块参数

如果您有权访问Synopsys文档,请参阅

SystemVerilog HDL编译器用户指南 自下而上的分层细化

实际模块my_模块(逻辑输入clk、逻辑输入rst、my_if.in my_if);这是正确的解决方案吗
module my_module (
logic input clk,
logic input rst,
my_if.in    my_if
);
module top (
input clk,
input rst
);

my_if # (.H_WIDTH(64), .L_WIDTH(64)) temp();

my_module inst_1
 (
clk           (clk),
rst           (rst),
my_if         (temp_if)
);


 my_module inst_2
 (
clk           (clk),
rst           (rst),
my_if         (temp_if)
);
endmodule