以下代码展示的是Interface的一种推荐写法,如下面的代碼所示:
interface bsi_slv_if (input bit clk_ck, input bit rst_n);
parameter setup_time = 0.5;
parameter hold_time = 0.5;
logic [0:0] bsi_req;
logic [0:0] bsi_ack;
logic [31:0] bsi_data;
logic [0:0] bsi_status;
clocking ck @ (clk_ck);
default input #0;
input clk_ck;
endclocking
//Master Clocking Block
clocking mck @(posedge clk_ck);
default input #setup_time output #hold_time;
output bsi_req;
inout bsi_ack;
output bsi_data;
output bsi_status;
endclocking : mck
//Monitor Clocking Block
clocking monck @(posedge clk_ck);
default input #setup_time output #hold_time;
input bsi_req;
input bsi_ack;
input bsi_data;
input bsi_status;
endclocking : monck
modport mst(clocking ck, clocking mck, input clc_ck, input rst_n);
modport mon(clocking ck, clocking monck, input clc_ck, input rst_n);
endinterface : bsi_slv_if
1、如何在Sequence中拿到Interface的值
先set interface到Sequencer,然後在Sequence中申明virtual interface,最後在Sequence中透過透过p_sequencer去拿mon.monck.signal的值。
2、modport的使用
如果不透過monck讀取,直接從modport中採樣,即為異步讀取。如果modport中没有申明端口方向,则default为input
3、同步和異步信號的處理
4、如果需要同步讀取Interface,只能透過mon.monck這個層次去讀。
转载:https://blog.csdn.net/gsjthxy/article/details/101613273
查看评论