System verilog 在接口内使用时钟块和modports

System verilog 在接口内使用时钟块和modports,system-verilog,System Verilog,有人能给我一个提示,为什么这个带有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 St

有人能给我一个提示,为什么这个带有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\u driver.sv(37):接口项“tvalid\u m”不在modport“tb\u axis\u mst\u mp”中

如果我将端口添加到modport,问题就会消失,但我的理解是,只使用时钟块就足够了


完整代码如下:

您的理解不正确。将时钟块添加到modport只允许您访问时钟块创建的信号,而不是它引用的信号

使用时钟块信号时,您需要参考时钟块范围,即
AXIS\u MST.cb\u AXIS\u MST.tvalid\u m
。不要使用
@posedge-AXIS\u-MST.aclk
,只需使用
@AXIS\u-MST.cb\u-AXIS\u-MST

关于测试台的另一个注释是:删除嵌套的
program/endprogram
语句;他们毫无用处