在接口内使用时钟块和 modports
Using clocking blocks and modports inside Interfaces
有人可以提示我为什么这个带有 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 [=23 中=].
如果我将端口添加到 modport,问题就会消失,但我的理解是只使用时钟块就足够了。
你的理解不正确。将时钟块添加到 modport 只能让您访问时钟块创建的信号,而不是它引用的信号。
使用时钟块信号时,您需要引用时钟块范围,即 AXIS_MST.cb_axis_mst.tvalid_m
。而不是 @posedge AXIS_MST.aclk
,只需使用 @AXIS_MST.cb_axis_mst
.
关于您的测试台的另一条评论:删除嵌套的 program/endprogram
语句;它们毫无用处。 Do not use program blocks。
有人可以提示我为什么这个带有 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 [=23 中=].
如果我将端口添加到 modport,问题就会消失,但我的理解是只使用时钟块就足够了。
你的理解不正确。将时钟块添加到 modport 只能让您访问时钟块创建的信号,而不是它引用的信号。
使用时钟块信号时,您需要引用时钟块范围,即 AXIS_MST.cb_axis_mst.tvalid_m
。而不是 @posedge AXIS_MST.aclk
,只需使用 @AXIS_MST.cb_axis_mst
.
关于您的测试台的另一条评论:删除嵌套的 program/endprogram
语句;它们毫无用处。 Do not use program blocks。