2017-01-22 30 views
0

有人可以给我一个提示,为什么与modports和时钟模块这个界面可能无法正常工作?使用时钟模块和modports内部接口

interface axis (input logic aclk); 
logic [15:0] tdata_s; 
logic  tvalid_s; 
logic  tready_s; 

logic [15:0] tdata_m; 
logic  tvalid_m; 
logic  tready_m; 


// clocking block for AXI Stream master 
clocking cb_axis_mst @(posedge aclk); 
    default input #1step output #3ns; 
    output tdata_m; 
    output tvalid_m; 
    input tready_m; 
endclocking 



// clocking block for AXI Stream slave 
    clocking cb_axis_slv @(posedge aclk); 
    default input #1step output #1ns; 
    input tdata_s; 
    input tvalid_s; 
    output tready_s; 
    endclocking 


    // AXI stream master modport for testbench only 
    modport tb_axis_mst_mp(clocking cb_axis_mst); 

    // AXI stream slave modport for testbench only 
    modport tb_axis_slv_mp(clocking cb_axis_slv); 

endinterface 

QuestaSIM 10.5c给了我这样的一系列错误:

**错误:(VSIM-3773)../../../../ RTL/test_driver.sv( 37):接口项'tvalid_m'不在modport'tb_axis_mst_mp'中。

的问题消失,如果我的端口加入到modport,但我的理解是,这是足以只使用时钟块。

全部代码是在这里:https://www.edaplayground.com/x/5FzC

回答

1

你的理解是不正确的。将时钟模块添加到modport只允许您访问由时钟模块创建的信号,而不是其参考的信号。

当使用计时块信号需要引用的计时块范围,即AXIS_MST.cb_axis_mst.tvalid_m。而不是@posedge AXIS_MST.aclk,只需使用@AXIS_MST.cb_axis_mst

你的测试平台的另外一个评论:删除嵌套program/endprogram报表;他们没有任何目的。 Do not use program blocks