系统verilog参数化接口,如何

ras*_*mus 2 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 b, output valid);
modport out( output a, output b, input ready);
endinterface;
Run Code Online (Sandbox Code Playgroud)

我想将其用作模块中的端口

module my_module (
logic input clk,
logic input rst,
my_if.in    my_if
);
Run Code Online (Sandbox Code Playgroud)

首先我不知道如何设置我的接口的参数我尝试了以下而不是上面的:

my_if(#.H_WIDTH((64), .L_WIDTH(64)) my_if()
Run Code Online (Sandbox Code Playgroud)

my_if(#.H_WIDTH((64), .L_WIDTH(64)).in my_if()
Run Code Online (Sandbox Code Playgroud)

哪个不编译...

但是我该如何设置我的界面参数呢?PLZ 帮助我在谷歌上搜索了大量示例,但它们都非常基础。

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

dav*_*_59 6

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

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


And*_*esM 5

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

my_if(#.H_WIDTH((64), .L_WIDTH(64)) my_if()
Run Code Online (Sandbox Code Playgroud)

my_if # (.H_WIDTH(64), .L_WIDTH(64)) my_if()
Run Code Online (Sandbox Code Playgroud)

你应该很高兴去。在IEEE 1800至2012年LRM对这个话题,你应该去通过部分(25.8参数接口)。