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