Systemverilog modport访问接口clk而不被声明为输入

时间:2019-07-12 22:28:01

标签: interface system-verilog

当接口上有端口输入时,我会在线看到不同的示例,这些示例针对接口使用modports。即使Modport是接口输入,是否应该在modport上包含clk并进行重置?

下面是modport中未包含的clk的示例:https://www.doulos.com/knowhow/sysverilog/tutorial/interfaces/部分:接口中的Modports

将clk放入modport会产生Spyglass棉绒错误(非驱动变量),这是该错误的一般概念:

interface MY_IF (input clk);
signal my_sig;
modport master (input clk, my_sig);
endinterface

MY_IF if (.clk(clk));

MY_MOD (.my_if(if.master)); // claims clk is undriven

如果缺少clk,并且我将虚拟接口传递给使用clk的类,则Cadence会出现问题。

哪种方法正确? Modport是否必须列出所有信号,或者端口接口信号始终可用?

2 个答案:

答案 0 :(得分:0)

您可以在modport中包含接口端口。但是只是端口方向(输入,输出,输入输出)不能在modports中更改。

这里是一个例子。

interface simple_bus (input logic clk);
  logic req, gnt;
  logic [7:0] addr, data;
  logic [1:0] mode;
  logic start, rdy;

  modport slave (input req, addr, mode, start, clk, 
                 output gnt, rdy,
                 ref data);

  modport master(input gnt, rdy, clk,
                 output req, addr, mode, start,
                 ref data);
endinterface: simple_bus

答案 1 :(得分:0)

根据https://verificationacademy.com/forums/systemverilog/using-modports-restrict-access-interface-signals,节奏似乎是正确的: “这就是modport的全部内容-它们定义了子信号,这些信号成为模块的端口。不属于modport的信号不会连接,因此您无权访问它们。定义后,modport仅是在端口连接中引用。”