intruction涵盖了接口的需求,如何实例化接口并将其与设计连接。可以通过两种方式编写设计:
【1】通过使用现有的接口名来专门使用该接口;
【2】通过使用任何接口都可以传递到的通用接口句柄。
在这种情况下,设计将参考实际的接口名称来访问其信号。 下面的示例显示,设计模块myDesign和yourDesign都在端口列表中声明了一个名为if0的端口,其类型为myInterface,以访问信号。
module myDesign ( myInterface if0,
input logic clk);
always @ (posedge clk)
if (if0.ack)
if0.gnt <= 1;
...
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
使用通用句柄的示例
在这种情况下,设计将interface关键字用作实际接口类型的占位符。 下面的示例显示,设计模块myDesign和yourDesign都使用占位符句柄来引用信号。 然后在设计模块实例化过程中传递实际接口。 此通用接口引用只能使用ANSI样式的端口声明语法声明,否则是非法的。
module myDesign ( interface a,
input logic clk);
always @ (posedge clk)
if (if0.ack)
if0.gnt <= 1;
...
endmodule
module yourDesign ( interface b,
input logic clk);
...
endmodule
module tb;
logic clk = 0;
myInterface _if;
myDesign md0 ( .*, .a(_if)); // 使用部分隐式端口连接
yourDesign yd0 ( .*, .b(_if));
endmodule
参考文献:
【1】https://www.chipverify.com/systemverilog/systemverilog-interface-bundles