我想知道是否有可能以某种方式确定开发人员是否错误地在 UVM 驱动程序内部写入 DUT 输出信号而不是输入信号。我已经尝试过了,没有编译/运行时错误消息。示例在这里(试用是在我的机器上用 Incisive 完成的,后来上传了代码):
http://www.edaplayground.com/x/386
'some_signal' 上的分配模拟 DUT 输出(连续驱动器)。每当我尝试从类中驱动“some_signal”时说信号是多重驱动的,但类驱动程序“获胜”并更新信号时,我会预料到会出现运行时错误。
前段时间,当我刚开始做 SV 时,我玩过 modports。我会在 modport 中声明一些信号作为输入,但我注意到驱动它们仍然是合法的。之后我停止使用它们。显然这是众所周知的事情,正如这篇文章所说:https ://verificationacademy.com/forums/systemverilog/modports-sv
我最近从一位同事那里继承了一些在类中使用 modports 的代码。我制作了以下示例来说明该代码的作用:
http://www.edaplayground.com/x/2W_
我尝试在这两个类中使用 modports,但 ModelSim 抱怨不应该在分层路径中使用 modports。Incisive 的代码没有问题,也没有发出任何警告。ModelSim 错误,以及 2012 年标准中的这句话“为了限制模块内的接口访问,有 modport 列表以及在接口内声明的方向。” 有点暗示 modports 并不是真的打算在类中使用。
有人可以确认 modports 不是去这里的方式吗?另外,有谁知道是否可以以任何方式捕获此类错误(从类中驱动 DUT 输出)?