【问题标题】:system verilog parameterized interfaces, how系统verilog参数化接口,如何
【发布时间】:2016-07-18 15:44:04
【问题描述】:

您好,我一直在努力理解接口...起初它们看起来很简单,但是一旦我开始使用参数化接口,我就无法将这些部分放在适当的位置。

说我有接口

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 帮助 我在 Google 上搜索了大量示例,但它们都非常基础。

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

【问题讨论】:

    标签: system-verilog


    【解决方案1】:

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

    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 参数化接口),您应该阅读。

    【讨论】:

    • 其实是模块my_module(逻辑输入clk,逻辑输入rst,my_if.in my_if);是正确的解决方案
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      其实这才是正确的方式

      module my_module (
      logic input clk,
      logic input rst,
      my_if.in    my_if
      );
      

      这个 模块 my_module ( 逻辑输入时钟, 逻辑输入第一, 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
      

      【讨论】:

      • 上面的代码看起来不对。不应该是my_if # (.H_WIDTH(64), .L_WIDTH(64)) temp_if();吗?
      【解决方案4】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-04-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-14
        • 2023-03-04
        相关资源
        最近更新 更多