嗨我正在努力让我的脑袋环绕界面......起初它们看起来很简单但是一旦我开始使用参数化界面,我就不能将这些部分放到适当位置。
说我有接口
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()
和
my_if(#.H_WIDTH((64), .L_WIDTH(64)).in my_if()
无法编译...
但是如何设置界面的参数呢? PLZ帮助我搜索了大量的例子,但它们都非常基本。
BTW解决方案必须合成,因为这不是用于验证
答案 0 :(得分:4)
你快到了!在您的顶层模块(实例化界面)中,您只需要更改:
my_if(#.H_WIDTH((64), .L_WIDTH(64)) my_if()
到
my_if # (.H_WIDTH(64), .L_WIDTH(64)) my_if()
你应该好好去。 IEEE 1800-2012 LRM有一个关于这个主题的部分(25.8参数化接口),你应该检查一下。
答案 1 :(得分:3)
您设置interface
实例的参数与设置module
参数的方式完全相同;当它被实例化时。没有语法允许您设置接口端口的参数。参数值基于实例化模块时连接到端口的接口实例。
当您要合成的顶级模块具有接口端口时,这会出现问题。它类似于顶级模块具有需要重写的参数。您需要检查所用工具的综合手册,以了解如何手动覆盖参数。
答案 2 :(得分:1)
实际上这是第一个正确的方法
module my_module (
logic input clk,
logic input rst,
my_if.in my_if
);
此 模块my_module( 逻辑输入clk, 逻辑输入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
答案 3 :(得分:1)
在Synopsys DC流程中,建议创建一个简化的SystemVerilog包装器来覆盖接口和模块参数。
如果您可以访问Synopsys文档,请参阅
SystemVerilog用户指南的HDL编译器 自下而上的分层次精化