【问题标题】:Systemverilog modport access to interface clk without being declared as inputSystemverilog modport 访问接口 clk 而不被声明为输入
【发布时间】:2019-07-12 22:28:01
【问题描述】:

当接口上有端口输入时,我在网上看到了将 modports 用于接口的不同示例。 modports 是否应该在 modport 上包含 clk 和 reset,即使它们是接口输入?

这是一个 clk 不包含在 modport 中的示例:https://www.doulos.com/knowhow/sysverilog/tutorial/interfaces/ Section: Modports in Interfaces

将 clk 放入 modport 会导致 Spyglass lint 错误(非驱动变量),以下是错误的一般概念:

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 丢失,Cadence 会出现问题,并且我将虚拟接口传递给使用 clk 的类。

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

【问题讨论】:

  • 接口实例端口中的clk是由什么驱动的吗?您的示例缺少任何驱动程序。
  • 是的,我只是展示了少量的伪代码。
  • 那么这看起来像一个望远镜问题。与概要交谈。

标签: interface system-verilog


【解决方案1】:

您可以在 modports 中包含接口端口。但只是端口方向(输入、输出、输入输出)不能在 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

【讨论】:

    【解决方案2】:

    根据https://verificationacademy.com/forums/systemverilog/using-modports-restrict-access-interface-signals,Cadence 似乎是正确的: “这就是 modport 的全部意义——它们定义了成为模块端口的子集信号。不属于 modport 的信号不会被连接,因此您无法访问它们。一旦定义,modports 只能在端口连接中引用。”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-27
      • 2011-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多