gpt4 book ai didi

system-verilog - 系统verilog中的虚拟接口(interface)也不能在VI内部使用动态数组

转载 作者:行者123 更新时间:2023-12-02 21:30:06 26 4
gpt4 key购买 nike

1) 有人可以解释一下在 SystemVerilog 中使用虚拟接口(interface)的概念吗?

尽管在 LRM 和其他站点中提到它可以用于驱动物理接口(interface)等的不同实例,并且由于类是动态的而 DUT 是静态的,我们需要虚拟接口(interface)。

但是我对这个概念还是不太清楚。请简单解释一下为什么我们使用虚拟接口(interface)。

2)我们可以在界面内部使用动态数组吗?为什么不呢?如果不是,还有什么替代方案?

最佳答案

到目前为止,有一些很好的答案,但在“动态”一词的使用及其与虚拟接口(interface)的关系方面似乎存在一些困惑。

首先是动态大小的类型,例如数组、字符串和队列。这些是通常不可综合的通用数据类型。但如果供应商有足够的积极性,他们可能会这样做。这些类型可以在module内声明。 , interface ,或class ,但与 interfaces 的讨论并不真正相关和virtual interfaces .

然后是动态构造的类对象。类对象是通过在运行时执行过程代码来构造的,而不是在编译时静态地详细说明它们。静态精化还通过展平层次结构并创建对端口连接的信号的直接引用来处理模块之间的端口连接。您不能使用类来做到这一点,因此除了端口连接之外,您还需要另一种机制来在类对象外部进行通信。

一个简单的解决方案是使用分层引用 - 只需使用您想要读取或写入的分层路径进入 DUT 即可。然而,由于多种原因,该解决方案很快就变得行不通。这不利于可重用性。每当 DUT 的层次结构发生变化,或者您尝试从 block 级移动到 SOC 验证时,您都必须更新测试平台类中的路径。许多人尝试使用诸如

之类的文本宏来管理此问题
`define PATH top.design.block1

然后写入 `PATH.sig1 <= 1;在他们的测试台上。当测试台对象的多个实例需要与 DUT 的多个路径进行通信时,此方法不起作用。另一个问题是大多数类都是在 SystemVerilog 包内编写的,并且除了其他包导入之外,包不应具有任何外部依赖项。

因此,已经具有对类对象的动态引用的 SystemVerilog 添加了对接口(interface)实例的动态引用,并将其称为 virtual interface 。它的工作方式与没有继承的抽象类引用非常相似。一个virtual interface变量可以动态地接受实际接口(interface)实例的句柄。然后您就可以动态引用该接口(interface)实例的成员。

关于system-verilog - 系统verilog中的虚拟接口(interface)也不能在VI内部使用动态数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22531745/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com