【问题标题】:Systemverilog interface - nested interface vs modportSystemverilog 接口 - 嵌套接口与 modport
【发布时间】:2018-04-12 01:30:45
【问题描述】:

我可以使用嵌套接口代替 modport 吗?

这样做的目的是实现许多不同模块的大规模互连,同时利用接口来简化连接。我不喜欢使用泛型接口——它们在源代码中很难遵循。

如果我有一个被许多模块使用的通用模块(例如,reset_synchronizer),那么我可以在每个接口中定义一个 modport 来定义该模块的信号,例如:

interface xyz(input clk, input arst);
    logic srst;
    modport reset_synchronizer_mp (input clk, input arst, output srst);
endinterface

我可以在需要同步重置的每个界面中定义它。但是当我需要更改 reset_synchronizer 模块时,也许是为了传递一个启用,我需要更新接口端口(添加启用信号),并更新所有为 reset_synchronizer 创建 modport 的接口中的每个 modport。

interface xyz(input clk, input enable, input arst);
    logic srst;
    modport reset_synchronizer_mp (input clk, input enable, input arst, output srst);
endinterface

如果我使用嵌套接口 (reset_synchronizer_intf) 而不是 modport,我不能只在主接口中执行此操作吗:

interface xyz(input clk, input arst);
    logic srst;
    reset_synchronizer_intf reset_synchronizer_mp (clk, arst, srst);
endinterface

为了简化这一点(假设信号名称匹配):

interface xyz(input clk, input arst);
    logic srst
    reset_synchronizer_intf reset_synchronizer_mp (.*);
endinterface

要添加启用,我只需更新主 reset_synchronizer.sv(定义模块和接口的地方)并更新所有接口,但仅在端口列表或信号声明中:

interface xyz(input clk, input enable, input arst);
    reset_synchronizer_intf reset_synchronizer_mp (.*);
endinterface

当我正在寻找的信号存在于主界面中时,这变得更加有吸引力,但我现在想将它们带入一些通用模块中。例如,通常只有 srst 的电源门控模块,但现在我也想传入 rst。我可以在电源门控模块的接口级别而不是在每个接口内部进行更改。

【问题讨论】:

    标签: system-verilog


    【解决方案1】:

    虽然这适用于定义结构化的信号束,但您无法使用 modport 指定方向,因为它们不能分层组合。这也意味着在连接 xyz 接口时需要知道嵌套。

    module top;
    xyx xyz_if(.*)
    
    mymodule inst(xyx_if);
    
    endmodule
    
    module mymodule (xyz xyz_p);
    
    ...
    
       xyz.reset_synchronizer_mp.enable = 1;
    
    
    endmodule
    

    这很可能无法合成。

    【讨论】:

    • 谢谢。根据标准这是非法的吗?我现在刚查了一下,和我用的工具不能合成。
    • 标准允许接口实例的嵌套,但没有办法从嵌套接口组合 modports。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多