接口(interface)
1.接口可以用作设计,也可以用作验证
2.与module的使用性质很像,可以定义端口,也可以定义双向信号;可以使用initial和always,也可以定义function和task。
3.TB和DUT是相互独立的,通过interface连接。
4.在interface的端口列表中只需要定义时钟、复位等公共信号,或者不定义任何端口信号。
module调用interface
interface arb_if(input bit clk);
logic [1:0] grant,request;
logic rst;
endinterface
module arb (arb_if arbif);
...
always @ (posedge arbif.clk or negedge arbif.rst) begin
if (arbif.rst)
arbif.grant <= 2'b00;
else
arbif.grant <= next_grant;
...
end
endmodule
TB调用interface
module test (arb_if arbif);
...
initial begin
@(posedge arbif.clk);
arbif.request <= 2'b01;
$display("@%0t:Drove req = 01",$time);
repeat(2)
@(posedge arbif.clk);
if (arbif.grant != 2'b01)
$display("@%0t: al:grant != 2'b01",$time);
$finish;
end
endmodule
top层
module top;
bit clk;
always #5 clk = ~clk;
arb_if arbif(clk);
arb_al(arbif);
test_tl(arbif)'
endmodule
module和Interface的区别:
module内部可以例化module和interface,而interface内部只能例化interface不能例化module。