在开发和使用验证IP中都发挥了作用,我认为交易类是VIP中最重要的组成部分。事务类的质量定义了 VIP 的质量。无论是UVM还是任何其他方法,决定交易类结构都需要充分的规划,因为它会影响整个VIP架构和验证环境。
让我列出一些我认为相关的准则:
协议的所有变体都应在事务类中定义。这使得事务类可用于生成各种可能的激励(同时驱动DUT)。然后,监视器的总线功能模型还能够从 DUT 接口中提取信息并填充事务类的相关字段。特别是对于总线协议,我们应该在事务类中具有随机属性,不仅用于信号值,还用于所有可能的延迟。这将使生成器能够使用约束随机生成来模拟不同的速度,并在交易中创建不同的延迟。然后,BFM 可以使用事务类中嵌入的信息,而不是自行生成任何信息。
分层与扁平化事务模型:扁平化事务易于维护,并且更容易添加新约束。但是,当协议很复杂并且需要在程序上随机化字段时,最好让父类实例化子类对象数组。
在下面的示例中,AXI 突发类实例化特定于突发的每个节拍的数据类队列。生成突发字段后,将在突发的 post randomize() 方法中生成数据字段。如果此事务模型被平展,则axi_data类的所有字段都将是axi_burst类中的数组。这里的缺点是什么?如果必须生成随机突发,则所有数组都将并行生成。如果您有复杂的约束,这可能会导致额外的性能开销。
配置信息应该可以从事务类中访问。任何可重用的 VIP 都必须是可配置的,并且通常具有与之关联的配置描述符。不同的交易需要根据VIP的配置生成信息。因此,通过分层选项 (VMM) 或资源/配置数据库 (UVM) 将 VIP 配置句柄作为引用传递给事务。
提供一组丰富的实用程序方法:UVM 提供了一组预定义的宏,这些宏定义了事务中的复制、比较、显示等实用程序方法。特别是对于验证IP中使用的事务,与要验证的总线协议相关的其他实用程序方法可能非常有用。这可用于 VIP 的不同组件。在下面的AXI示例中,方法get_trans_addr_by_idx()计算并提供“数据节拍”的地址,用户不必担心“突发”是包装型、固定型还是增量型。类似地,你可以有一个 get_data() 方法,它可以提供一个字节队列以及相应的数据。因此,用户无需在其记分牌中单独计算此信息。
我们可以进一步完善这些。最后,重要的是要知道构建有效的事务模型将产生高效的验证IP。在这里,我放下了我的想法。根据要验证的协议和所涉及的复杂性,不同的人可能希望以不同的方式构建他们的交易类。但是,我相信上述准则可以纳入当今使用的大多数协议中。希望这对您有用,我绝对有兴趣知道您对这个主题的看法。
审核编辑:郭婷
全部0条评论
快来发表一下你的评论吧 !