有人可以给我一个提示,说明为什么这个带有modport和时钟模块的接口可能不起作用?
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,问题就会消失,但我的理解是只使用时钟块就足够了。
答案 0 :(得分:1)
您的理解不正确。将时钟块添加到modport只允许您访问由时钟块创建的信号,而不是它引用的信号。
使用时钟模块信号时,需要参考时钟模块范围,即AXIS_MST.cb_axis_mst.tvalid_m
。而不是@posedge AXIS_MST.aclk
,只需使用@AXIS_MST.cb_axis_mst
。
关于testbench的另一条评论:删除嵌套的program/endprogram
语句;他们没有任何目的。 Do not use program blocks。