一、接口是什么?
接口可以看做一捆线,它们连接了设计块和测试平台,包含了连接、同步、两个或者更多块之间的通信功能。
二、接口如何使用?
(1)模块外定义:使用接口时需要确保在你的模块和程序块之外声明接口变量。如果你忘了这一点,就会带来很多的错误。有些编译器可能不支持在模块中定义接口。即使允许,那么接口就只是所在模块的局部变量,所以对设计的其他部分来说是不可见的。
interface arb_if(input bit clk);
logic[1:0] grant,request;
logic rst;
endinterface
(2)需要用到这些接口的模块:
module arb (arb_if arbif);// 接口arb_if的实例名为arbif,应当定义越短越好,但不要产生歧义
always @ (posedge arbif.clk or posedge arbif.rst)
begin
if (arbif.rst)// 使用接口arbif中的rst信号
arbif.grant<=2'b00;// 接口信号必须使用非阻塞赋值来驱动
else
arbif.grant<=2'b01;
end
endmodule
(3)顶层模块实例化:所有的块都在top模块中例化和连接
module top ;
bit clk;
always # 5 clk=~clk;
arb_if arbif(clk);// 接口arb_if例化为arbif,把clk传进去
arb a1 (arbif);
test t1(arbif);
endmodule:top
三、接口中的modport
1.modport有什么用?
在接口中使用modport结构能够将信号分组并指定方向。
2.如何在接口中使用modport?
(1)在接口内定义
interface arb_if(input bit clk);
logic [1:0] grant,request;
logic rst;// 没有方向
modport TEST (output request,rst,
inout grant,clk);
modport DUT (input request,rst,clk,
output grant);
// 分成了两组并各自指定了方向
endinterface
(2)在模块首部声明
module arb (arb_if.DUT arbif);// 应当指出的是你需要将modport名即DUT放在接口名即arb_if的后面
...
endmodule
四、接口的优缺点有哪些?
优点:便于设计重用;减少犯错误的可能性;增加信号较容易;modport方便工具自动检查;
缺点:冗长;少用的协议会有较多的工作;连接多个不同的接口很困难。
五、接口中为什么使用时钟块?
接口块可以使用时钟块来指定同步信号相对于时钟的时序。时钟块中的任何信号都将同步地驱动或采样,这就保证了测试平台在正确的时间点与信号交互。
总结
要根据实际的工作需求进行使用接口。