当前位置: 首页 > news >正文

uvm验证环境中struct(结构体)和class的区别与联系

新手常常会问:为什么在验证中要使用类类型而不是结构体?

为了更好地理解为何使用类而非结构体,对比 SystemVerilog 中类和结构体的不同能力是很有帮助的。

  • 类和结构体都可包含多个字段。
  • 类能包含可随机化的字段,而结构体的字段无法自动被随机化。
  • 类可包含随机化约束,而结构体无法包含自动的随机化约束。
  • 类可拥有重要的内置方法,而结构体不能有内置方法。
  • 类是动态类型,你可以在运行时根据需要生成任意多个类的实例;而结构体是静态类型,用户必须在仿真开始时就预先声明所有需要的结构体。
  • 类类型可以被扩展(继承),而结构体的新版本必须从原始版本复制后再添加新字段。
  • 类可以放入 UVM 工厂中,以便在运行时轻松实现替换;而结构体不能。

        类本质上是动态的、超灵活的 “结构体”—— 它们可以轻松被随机化、轻松控制随机化过程,还能在需要时被创建。类具备结构体所拥有的多字段封装能力,除此之外还有更多特性。这就是为什么类是表示测试平台事务的首选结构。

        类和结构体还共享另一个优势:无论事务中包含 1 个信号还是 1000 个信号,它们都能作为一个整体在测试平台中传递。因此,通过 “单一单元操作” 就能很容易地在测试平台环境中传递信号。如果信号被添加到事务中或从事务中移除,测试平台的大部分结构都无需修改。只有少数测试平台组件需要单独与所有组件信号交互、

具体比对如下

类(Classes)

  • ✓ 可以包含多个字段。
  • ✓ 可以包含可随机化的字段。
  • ✓ 可以包含随机化约束。
  • ✓ 拥有内置的 randomize() 方法。
  • ✓ 可以包含重要的用户自定义方法(如 copycompare 和 print-my-contents)。
  • ✓ 是动态类型,可根据需要生成。
  • ✓ 类类型可以被扩展,从而轻松创建添加了字段和方法的新版本。
  • ✓ 类可以放入 UVM 工厂,以便在运行时轻松替换。

结构体(Structs)

  • ✓ 可以包含多个字段。
  • × 不能拥有自动可随机化的字段。
  • × 不能包含随机化约束。
  • × 没有内置的 randomize() 方法。
  • × 不能包含用户自定义方法。
  • × 是静态类型,要求所有用户定义的结构体在仿真开始时就声明。
  • × 结构体的新版本需要用户将原始版本完整复制到新结构体中,然后添加新字段。
  • × 非动态的结构体不能放入 UVM 工厂。
http://www.dtcms.com/a/359741.html

相关文章:

  • 使用AdaLoRA 自适应权重矩阵微调大模型介绍篇
  • 接口测试总结-含接口测试和前端测试的区别与比较
  • PyTorch 张量(Tensor)详解:从基础到实战
  • 1.9 初始Memory Profiler Package
  • 面试 八股文 经典题目 - HTTPS部分(一)
  • Qt组件布局的经验
  • 深度学习数据加载实战:从 PyTorch Dataset 到食品图像分类全流程解析
  • 实现需求精准预测、运输路径优化及库存高效管理的智慧物流开源了
  • 利用 Java 爬虫获取淘宝拍立淘 API 接口数据的实战指南
  • 图片格式转换v2_tif转png tif转jpg png转tif
  • mysql深度分页
  • JVM的四大组件是什么?
  • 【贪心算法】day5
  • 暄桐林曦老师关于静坐常见问题的QA
  • 矩阵待办ios app Tech Support
  • 好用的电脑软件、工具推荐和记录
  • Labview使用modbus或S7与PLC通信
  • 微服务01
  • Java与分布式系统的集成与实现:从基础到应用!
  • 从 JDK 8 到 JDK 17
  • 【Python语法基础学习笔记】函数定义与使用
  • Spring Security 6.x 功能概览与代码示例
  • 【四位加密】2022-10-25
  • 电感值过大过小会影响什么
  • 基于VS平台的QT开发全流程指南
  • 杂谈:大模型与垂直场景融合的技术趋势
  • 线程池八股文
  • 语义分析:从读懂到理解的深度跨越
  • Python基础:函数
  • Visual Studio Code中launch.json的解析笔记