SystemVerilog -- 6.2 Interface Bundles

Introduction涵盖了对接口的需求,如何实例化接口并将其与设计连接起来。设计有两种编写方式:

  • 通过使用现有接口名称专门使用该接口
  • 通过使用可以将任何接口传递到的泛型接口句柄

显然,当接口定义更新到具有不同名称的较新版本时,泛型方法效果最佳,并且需要支持使用它的旧设计。

Example using a named bundle

在本例中,设计引用实际接口名称来访问其信号。下面的示例显示,设计模块myDesignyouryDesign都在端口列表中声明了一个名为if0的端口,类型为myInterface以访问信号。

module myDesign ( myInterface if0,
                  input logic clk);
    always @(posedge clk) begin
      if (if0.clk)
        if0.gnt <= 1;
    end
endmodule

module yourDesign ( myInterface if0,
                    input logic clk);
    ...

endmodule

module tb;
    logic clk = 0;
    myInterface _if;
    myDesign   md0 (_if, clk);
    yourDesign yd0 (_if, clk);
endmodule

Example using a generic bundle

在本例中,设计使用关键字作为实际接口类型的占位符。下面的示例显示,设计模块myDesign和youryDesign`都使用占位符句柄来引用信号。然后,在设计模块实例化期间传递实际接口。此泛型接口引用只能使用 ANSI 样式的端口声明语法进行声明,否则是非法的。

module myDesign (interface a,
                 input logic clk);
    always @(posedge clk) begin
      if (if0.ack)
        if0.gnt <= 1;
    end
endmodule

module yourDesign (interface b,
                   input logic clk);
    ...
endmodule

module tb;
    logic clk = 0;
    myInterface   _if;
    myDesign   md0 (.*, .a(_if));    // use partial implicit connections
    yourDesign yd0 (.*, .b(_if));
endmodule

posted @ 2024-04-19 15:13  松—松  阅读(56)  评论(0)    收藏  举报