UVM1.2 examples
文章平均质量分 92
愤怒学习的白菜
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
13 hello_world:生产者-消费者模型详解
机制作用代码示例类比注册类到UVM工厂餐厅菜单登记系统注册组件到UVM工厂餐厅部门登记系统设置配置参数餐厅老板设置菜单数量发送数据包的接口传送带(生产者到FIFO)中间缓冲队列传菜区run_phase组件工作阶段厨师工作时间accept_trbegin_trend_tr事务生命周期管理end_tr(p);订单接收、开始处理、完成处理对象克隆参考食谱制作新菜品这个"生产者-消费者"示例是理解UVM验证框架的绝佳起点。它展示了UVM如何组织验证环境、处理事务以及管理组件交互。原创 2025-11-27 00:02:37 · 714 阅读 · 0 评论
-
11-0 register整体概述
这个registers文件夹实现了一个完整的UVM寄存器验证框架,展示了从基础到高级的寄存器验证方法和最佳实践。endpackageconfig.sv丰富的操作类型READ/WRITERMWdriver.svcommon/├── 通用层 (Protocol Agnostic)│ ├── any_agent.sv ← 通用Agent模板│ ├── any_config.sv ← 通用配置管理│ └── reg_agent.sv ← 寄存器抽象层├── apb/ (APB协议实现)原创 2025-12-31 12:19:39 · 869 阅读 · 0 评论 -
10-3 tlm2:nonblocking_simple UVM非阻塞TLM通信机制解析:USB协议验证示例
组件角色TLM接口类型关键方法通信方向HostTLM发起者(Initiator)主机→设备DeviceTLM目标(Target)双向(主机↔设备)本环境精准实现USB协议核心机制三阶段传输模型:严格遵循USB协议的流程;异步响应机制:用模拟设备延迟,与主机解耦;事务级抽象:屏蔽物理层细节(如差分信号、时钟),专注协议逻辑验证。原创 2025-12-23 00:16:48 · 613 阅读 · 0 评论 -
10-2 tlm2:blocking_simple UVM-TLM2 读-改-写最小验证环境概述1
本示例是UVM-TLM2的最小可运行模板,通过“事务对象+阻塞接口+组件连接”实现APB总线的读-改-写闭环验证。apb_rw:封装读写请求的事务对象;initiator:发起总线操作的主设备;target:响应请求的从设备(模拟寄存器);tb_env:集成组件并完成TLM端口连接;仿真结果验证了数据流转的正确性:初始寄存器值0xDEADBEEF→读→取反→写回→最终值0x21524110。// 定义寄存器// 地址映射// 32位、读写// 绑定地址// 锁定模型(禁止修改)原创 2025-12-21 23:24:05 · 975 阅读 · 0 评论 -
10-1 tlm2:temporal decoupling(时间解耦) UVM-TLM2 读-改-写最小验证环境概述0
本文基于UVM-TLM1阻塞传输实现最小可运行测试平台,覆盖事务定义→socket连接→objection控制→读-改-写流程,是理解UVM组件通信的入门模板。示例通过APB总线的读改写操作,完整展示TLM“发起方-目标方”的交互逻辑,适合快速掌握UVM核心机制。核心价值:本示例完整展示了UVM TLM1的解耦通信范式——组件通过标准化TLM接口交互,无需关心对方内部实现,为复杂SoC验证奠定基础。工业级扩展方向用uvm_reg实现寄存器自动化;原创 2025-12-24 01:05:37 · 912 阅读 · 0 评论 -
9-4 tlm1:hierarchy UVM TLM : Analysis port
这是一个基于UVM-TLM(事务级建模)的最小闭环验证环境,核心目标是验证事务从生成到终端接收的完整性,覆盖“生成→中转→监控→接收”全流程。📦:承载激励数据的基础对象;⚙️gen:随机化生成事务的生产者;🔀conv:事务中转与广播的“路由器”;🖥️bfm:模拟DUT接收端的总线功能模型;📤producer:集成gen与conv的事务分发中枢;📥consumer:集成bfm的事务接收终端;🔍listener:通过订阅机制实时监控事务的观察者。原创 2025-12-21 13:38:53 · 856 阅读 · 0 评论 -
9-3 tlm1:fifo UVM TLM FIFO阻塞非阻塞:验证环境的“数据同步中枢”
endclass解耦生产与消费:生产者无需知道消费者的存在,消费者无需关心数据来源,组件复用性提升50%。灵活的流量控制:通过try_*接口实现高吞吐,通过put/get接口保证数据可靠,平衡“性能”与“正确性”。轻量级同步:比自定义同步机制(如事件、旗语)少写50%代码,调试效率提升3倍。可配置性:调整FIFO深度即可模拟真实芯片的“缓存压力”,提前发现死锁、溢出等bug。一句话总结。原创 2025-12-21 01:32:15 · 653 阅读 · 0 评论 -
9-2 tlm1:bidir UVM TLM双向通信:最小可运行例程解析
概念作用本例实现UVM TLM端口组件间解耦通信,定义数据流向blocking_put_port(发送)、blocking_get_port(接收)内置请求/响应FIFO,自动同步生产/消费相位机制(Phase)控制仿真生命周期,避免提前退出阻塞语义天然流量控制,防止数据丢失put/get的阻塞等待数据封装传输复杂数据(如地址、命令)本例用int,实际用transaction class解耦:Master/Slave独立开发,通过TLM端口连接,降低耦合度。流量控制。原创 2025-12-20 22:29:20 · 931 阅读 · 0 评论 -
9-1 tlm1:fifo UVM TLM FIFO生产者-消费者模型:核心范式与实践
核心价值🧩解耦设计:生产者/消费者通过FIFO通信,互不依赖,可独立修改;🔄同步机制:阻塞式端口保证“数据传输的可靠性”;📦复用性:FIFO、生产者、消费者均可作为“基础组件”,快速搭建复杂验证环境。工业实践建议参数化所有配置:延迟、FIFO深度、数据量等通过注入,避免硬编码;添加监控机制:用f.used()获取FIFO当前深度,当深度>阈值(如80%)时触发告警(事务升级:将int替换为自定义事务类(如bus_req),支持协议级验证(如AXI、APB);超时保护:在消费者的get()原创 2025-12-21 12:43:50 · 748 阅读 · 0 评论 -
8 sequence:basic_read_write_sequence UVM基本总线验证环境示例解析
🌟核心价值与应用建议UVM最佳实践优先使用宏:减少代码量,提高可维护性始终使用:确保类注册到UVM工厂设计原则组件化:将验证环境分解为可重用的组件可扩展性:设计时考虑未来扩展需求代码复用:重用基类功能,避免重复代码实际应用建议在项目中,从宏开始,需要特殊逻辑时再考虑手动实现在复杂环境中,添加详细的错误处理和日志,便于调试设计时考虑地址范围、数据宽度等边界条件💡关键学习点:UVM的核心是组件化和可重用性。原创 2025-12-20 19:03:45 · 558 阅读 · 0 评论 -
7-3 phase:timeout UVM测试平台层次结构与Phase执行顺序解析
提高验证效率:自动检测并终止卡死的仿真,避免人工干预,提高测试效率。增强验证可靠性:防止因个别测试用例的异常导致整个验证环境崩溃。提升测试质量:通过及时发现超时问题,可以快速定位设计或验证环境的缺陷。支持自动化:是构建自动化回归测试系统的关键组件。关键提醒:在UVM验证中,超时机制不是替代正确的验证设计,而是作为"安全网",确保验证环境在异常情况下能够及时、安全地终止,避免资源浪费和验证进度延误。通过合理使用超时机制,我们可以构建更健壮、更可靠的IC验证平台,为芯片设计的高质量交付提供坚实保障。原创 2025-12-14 21:59:35 · 874 阅读 · 0 评论 -
7-2 phase:run_test UVM测试平台层次结构与Phase执行顺序解析
项目代码1代码2顶层成员类型中间包装类有class AA无组件全名示例top.a1.b1层级深度4 层 (3 层 (AA 是否打印日志否(未重写 phase 方法)💡 正是因为AA的存在,你在日志中看到的是而不是top.a1.b1。UVM的Phase执行顺序是验证平台设计的基础,理解组件层次结构对执行顺序的影响至关重要。组件层次结构是决定UVM Phase执行顺序的关键自底向上执行是UVM的核心机制,不是自顶向下日志输出顺序与执行顺序不同,日志是按名称字典排序的。原创 2025-12-14 13:53:16 · 721 阅读 · 0 评论 -
7-1 phase:basic UVM测试平台层次结构与Phase执行顺序解析
自底向上构建组件树run_phase:自顶向下执行主要测试逻辑结束阶段:自底向上执行提取、检查和报告。原创 2025-12-13 03:06:24 · 736 阅读 · 0 评论 -
6 objections UVM结束机制解析:uvm_test_done.raise/drop_objection(this) set_drain_time(this, 10)
UVM异议机制的核心原则“测试结束的条件是:所有异议被降低后,等待排空时间。本例完美展示了UVM异议机制设置了10ns的排空时间启动了4个并行任务,每个任务都正确提高了和降低了异议使用了异议回调函数来监控异议状态变化测试在50ns(最后一个任务完成)+10ns(排空时间)=60ns结束这是UVM验证方法学中测试结束协调的标准实践,展示了如何正确使用异议机制。避免过时代码:使用会导致警告,且可能在未来的 UVM 版本中失效。更精细的控制。原创 2025-12-12 23:57:49 · 1042 阅读 · 0 评论 -
5 interface UVM虚拟接口与资源数据库深度解析:接口连接机制
bit rst;bit rw;bit req;bit ack;bit err;// 主设备视图// 从设备视图// 监视器视图endpackageUVM虚拟接口机制的核心原则虚拟接口通过资源数据库在UVM组件之间共享,modport定义了接口的信号方向视图。本例验证了UVM虚拟接口机制的三个关键点虚拟接口是UVM组件与DUT之间的桥梁资源数据库用于在组件间共享虚拟接口modport定义了接口的信号方向,确保正确的信号连接问题解答modport 到底干啥?原创 2025-12-11 23:49:40 · 850 阅读 · 0 评论 -
4 factory UVM工厂模式解析:类型覆盖与实例覆盖机制
/ 在packet_pkg中`uvm_object_utils(packet) // 注册packet类到工厂// 在gen_pkg中`uvm_component_utils(gen) // 注册gen类到工厂UVM工厂机制的核心原则工厂覆盖的优先级:实例覆盖 > 类型覆盖 > 默认类型在UVM中,工厂覆盖机制允许类型覆盖:改变对象的类型(如packet→mypacket实例覆盖:为特定实例提供自定义行为(如gen→mygen工厂覆盖的使用场景在不修改原始类代码的情况下,改变对象类型。原创 2025-12-09 23:44:42 · 634 阅读 · 0 评论 -
3-2 configuration:manual `uvm_field_*` 宏详解:字段自动化机制
字段自动化 vs 手动管理cfg0:使用宏,UVM 自动处理配置加载、打印、复制等。cfg1:全部手动调用和实现do_print。关联数组配置支持cfg0:通过自动支持myaa[key]配置。cfg1:需手动解析字段名并赋值。配置加载时机cfg0:在之前自动加载(由 UVM 框架完成)。cfg1:必须在内部显式调用get()。顶层配置项错误cfg0 错误地设置了,而不是"debug",导致debug字段始终为 0。cfg1 正确设置了"debug",所以组件能读到debug=1。原创 2025-12-08 00:06:44 · 619 阅读 · 0 评论 -
3-1 configuration:automated UVM配置机制深度解析:优先级规则与仿真验证
本文展示了一个基于UVM验证方法学的层次化测试环境实现。通过class A、B、C构建了包含嵌套组件的测试结构,其中class C包含可配置参数v、s和字符串数组myaa。在顶层模块中,通过uvm_config机制实现了多层次的参数配置:1)全局参数设置;2)特定组件参数覆盖;3)字符串数组元素级配置。仿真结果显示配置信息能正确传递到各层级组件,验证了UVM配置机制的有效性。测试环境最终通过print_topology()展示了完整的组件层次结构和配置值,包括inst1.u1的v=30(16进制1e)、in原创 2025-12-07 20:44:22 · 578 阅读 · 0 评论 -
2 callback:UVM回调机制深度解析:bus_driver示例
本文通过一个SystemVerilog UVM示例详细解析了回调机制(callback)的实现原理。示例包含事务类bus_tr、回调基类bus_driver_cb和驱动器类bus_driver,展示了回调在事务处理流程中的典型应用。重点演示了回调注册、回调链执行以及多个回调实例的协同工作方式,其中my_bus_driver_cb和my_bus_driver_cb2分别实现了trans_received和trans_executed回调方法。通过uvm_do_callbacks宏实现了回调触发,完整呈现了UV原创 2025-12-06 14:28:30 · 985 阅读 · 0 评论 -
1-3 basic_pkg:UVM工厂机制与配置数据库综合解析
这个示例展示了UVM中**工厂机制(Factory)和配置数据库(uvm_config_db)**的综合用法,同时还包含了组件生命周期管理。它演示了如何手动注册组件到工厂、如何通过配置数据库设置参数、以及如何动态终止组件运行。本示例展示了UVM中工厂机制(Factory)和配置数据库(uvm_config_db)的综合用法,同时还包含了组件生命周期管理。手动注册组件到工厂通过配置数据库设置参数动态终止组件运行写剧本(定义组件类)注册演员名单(工厂注册)搭建舞台(创建组件实例)分配角色台词。原创 2025-12-02 00:08:51 · 576 阅读 · 0 评论 -
1-2 basic_module:UVM配置数据库详解:组件参数传递与验证环境定制
这篇文章展示了一个基于UVM(Universal Verification Methodology)的测试平台实现。代码定义了一个层次化的验证组件结构,包含顶层模块top、中间组件myunit和底层组件lower。在初始化阶段通过uvm_config机制配置参数值,并在run_phase中进行验证检查。结果显示测试成功完成,打印了组件层次结构及其配置值,包括数组数据。验证平台实现了基本的UVM组件通信和配置功能,能够正确传递和检查配置参数。原创 2025-11-30 00:34:17 · 712 阅读 · 0 评论 -
1-1 basic_event_pool:uvm_event uvm_event_pool详解
这个示例展示了UVM中的基本用法,创建两个事件对象并打印事件池内容。它是一个非常基础的UVM事件机制演示,适用于理解UVM中事件管理的核心概念。!!\n");end关键点:获取UVM报告服务器,总结测试结果作用:检查测试中是否有错误,决定输出"通过"或"失败"通过创建事件管理池使用get()获取或创建事件通过print()查看事件池内容通过UVM报告系统验证测试结果。原创 2025-11-27 00:40:32 · 803 阅读 · 0 评论 -
0 trivial:UVM的空壳平台
上面是极其简单的UVM用例,算起走入UVM的钥匙,没啥好分析的。“trivial” :“微不足道的”或“简单的”原创 2025-12-19 23:18:12 · 149 阅读 · 0 评论
分享