- 博客(136)
- 资源 (3)
- 收藏
- 关注
原创 45. UVM Register Model Classes
摘要:UVM寄存器模型解析:从零件到系统的工厂控制室比喻 本文通过工厂控制室的生动比喻,系统讲解了UVM寄存器模型的组成和工作原理。将寄存器模型分解为: uvm_reg_field(仪表指针) uvm_reg(完整仪表盘) uvm_reg_block(控制室总控台) 重点解析了寄存器模型中三个关键值的区别: 期望值:控制室的设定目标 镜像值:上次读取的记录 实际值:硬件的真实状态 最后通过温度计寄存器的完整创建示例,展示了如何构建寄存器模型。全文采用工厂管理类比,使抽象的UVM概念具象化,适合初学者快速理解
2025-12-19 10:51:04
980
原创 44. UVM Register Abstraction Layer
摘要: UVM寄存器抽象层(RAL)是硬件验证中的关键组件,它像"软件管家"一样统一管理寄存器操作。RAL通过四个核心概念简化流程: 寄存器(设备控制面板) 寄存器字段(控制按钮) 寄存器块(设备集合) 内存映射(地址布局图) 相比传统硬编码方式,RAL提供语义化操作(如reg.ctl.en.write(1)),避免直接操作地址偏移,显著提升代码可读性、可维护性和复用性。RAL架构包含预测器、适配器等组件,实现寄存器操作的自动化管理,是复杂SoC验证的高效解决方案。
2025-12-19 10:27:40
906
原创 43. UVM uvm_config_db Examples
UVM Config Database 路径匹配实战摘要 通过"连连看"游戏掌握UVM配置路径匹配规则: 1️⃣ 路径构造公式:完整路径 = cntxt路径 + "." + inst_name set(null, "uvm_test_top") 和 set(this, "") 在顶层等效 2️⃣ 匹配规则: 完全匹配优先:精确路径配置 通配符匹配:*可匹配任意层级组件 多级控制:m_env.*匹配环境所有子组件 3️⃣ 实战技巧
2025-12-19 10:20:01
749
原创 40. UVM Configure Components
UVM配置机制摘要(150字) UVM配置机制提供三种方式灵活控制验证平台:1)可配置参数直接修改组件属性;2)配置数据库全局共享数据,通过set/get跨组件传递接口和参数;3)配置类封装复杂配置。核心机制是配置数据库,类似智能家居遥控系统,允许在不修改代码的情况下动态调整组件行为。典型应用包括传递虚拟接口、设置测试参数和实现组件复用。配置机制提高了验证平台的可重用性和灵活性,是构建模块化UVM环境的关键技术。
2025-12-19 10:08:23
958
原创 42. UVM config database
UVM Config Database:验证平台的智能配置系统 UVM配置数据库(uvm_config_db)是验证平台的核心机制,它像一个智能快递系统,实现组件间的灵活数据传递。关键特点: 解耦通信:通过set/get方法实现发送方和接收方的间接交互 动态配置:支持运行时修改参数,无需重新编译 精确控制:可通过上下文路径和通配符实现精准配置 主要方法: set():发送配置数据(指定上下文、路径和字段名) get():获取配置数据(必须检查返回值) exists():检查配置是否存在 wait_modif
2025-12-19 10:07:50
954
原创 41. UVM Understanding the resource database
UVM资源数据库:验证平台的"共享云盘" 摘要:UVM资源数据库(uvm_resource_db/uvm_config_db)是验证平台的共享数据存储机制,类似"共享云盘"。它支持组件间灵活传递配置参数和接口句柄,解决硬编码问题。资源数据库提供两种访问方式:uvm_resource_db(基础版)和uvm_config_db(智能版,推荐使用)。每个资源包含名称、值、范围和类型四个关键属性。其内部采用双索引结构(按名称和类型),遵循先到先得的优先级规则。典型应用包括虚
2025-12-19 10:05:58
899
原创 39. UVM Factory Override
UVM Factory机制摘要(147字) UVM Factory是验证平台的动态对象创建机制,通过注册和覆盖实现灵活组件替换。核心特点: 类型注册:使用uvm_component_utils宏注册组件 工厂创建:必须用type_id::create()而非new()实例化 两种覆盖: 类型覆盖(全局替换所有实例) 实例覆盖(局部替换特定路径实例) 优势:无需修改原始代码即可实现测试变体、协议升级等场景,提高验证平台复用性。典型应用包括驱动替换、环境配置和错误注入测试。
2025-12-18 15:45:00
741
原创 38. UVM TLM Non-blocking Get Port
UVM TLM非阻塞Get端口摘要 非阻塞Get端口实现了"主动询问取货"式通信模式,接收方主动请求数据而非被动等待。核心特点包括: 三种交互方法: try_get():立即尝试获取数据,返回成功/失败状态 can_get():仅查询数据可用性 get():阻塞式获取 角色反转: 发送方变为数据提供者,实现try_get()和can_get() 接收方主动发起数据请求 典型应用场景: 接收方需要控制数据获取时机 避免阻塞等待 实现轮询式数据获取 实现要点: 发送方使用uvm_nonblo
2025-12-18 13:42:20
801
原创 37. UVM TLM Port to Export to Imp
摘要: UVM TLM层次化通信通过Port、Export和Imp实现组件间松耦合的数据传递,类似公司文件传递流程。Port(发送方)连接Export(中转)或Imp(接收方),形成单向传递链。典型模式包括: Port→Port→Export→Imp(完整路径,多级传递) Port→Port→Imp(简化版,直接处理) Port→Export→Imp(无子组件时使用) 优势包括解耦、灵活调整路径和易于维护。核心规则是Port不能直连Imp,需通过Export中转,且各组件无需知晓最终接收者。
2025-12-18 13:38:10
816
原创 36. UVM TLM Nonblocking Put Port
UVM TLM 非阻塞Put端口摘要 非阻塞Put端口提供了一种"先询问再发送"的通信机制,发送方通过try_put()或can_put()函数先检查接收方状态,避免无谓等待。相比阻塞式通信,这种方式的优势包括: 发送方不会被无限期阻塞 提高系统资源利用率 支持更灵活的调度策略 典型实现包含三个核心方法: try_put():尝试发送并立即返回结果 can_put():仅查询接收方状态 接收方需实现这两个函数接口 这种通信模式特别适合需要高效资源利用和复杂调度的验证场景。
2025-12-18 13:37:25
663
原创 35. Using _decl macro in TLM
UVM TLM _decl宏摘要(150字) UVM的uvm_*_imp_decl宏解决了TLM多源通信的区分问题。通过声明不同后缀(如_1/_2),可为接收组件创建多个专属接口。例如: `uvm_blocking_put_imp_decl(_A) `uvm_blocking_put_imp_decl(_B) 在接收组件中实例化不同imp端口(put_imp_A/put_imp_B),并分别实现put_A/put_B方法。连接时: compX.put_port.connect(recv.put_imp_A)
2025-12-18 13:34:49
729
原创 34. UVM TLM Sockets
学习TLM Sockets,这是UVM TLM 2.0引入的一个非常强大的通信机制。我会用生活化的比喻帮你彻底理解这个概念。
2025-12-18 13:33:19
757
原创 33. UVM TLM Analysis Port
摘要:UVM TLM Analysis Port实现一对多广播通信 UVM TLM Analysis Port是一种高效的广播式通信机制,类似于电台广播模式。与点对点的Put/Get Port不同,Analysis Port允许一个发送者(如Monitor)向多个接收者(如Scoreboard、Coverage Collector等)同时广播数据,而无需知道接收者的数量或存在与否。其核心特性包括:非阻塞通信(使用function而非task)、支持零到多个接收者、内置自动广播机制。典型实现包含五个关键组件:
2025-12-18 13:20:56
692
原创 32. UVM TLM Example
UVM TLM分层通信架构:企业级物流系统模拟 本文通过跨国物流系统比喻,展示了UVM TLM分层通信架构的实现方法。系统包含四级处理节点: 快速生产线(subComp1)- 50ns/件 区域仓库(componentA)- 含中转站和FIFO缓冲 国家配送中心(componentB)- 带中央仓库 末端配送站(subComp3)- 200ns/件 架构特点: 使用Blocking Put/Get Port实现节点间通信 通过FIFO缓冲解决处理速度差异问题 采用分层设计,各组件可独立开发和复用 支持灵活的
2025-12-18 10:12:44
739
原创 31.UVM TLM Fifo [uvm_tlm_fifo]
UVM TLM FIFO:组件间的数据缓冲机制 摘要:UVM TLM FIFO作为组件间的"数据缓冲池",有效解决了发送方(Producer)和接收方(Consumer)速度不匹配的问题。本文通过快递柜的生动比喻,阐释了FIFO的核心功能:当发送方(如外卖员)速度较快而接收方(如顾客)较慢时,FIFO作为中间缓冲(深度可配置)暂存数据,确保通信顺畅。文章详细分析了FIFO的工作原理,包括其内置的put/get接口、状态监控方法,并通过具体时序案例展示了深度为2的FIFO如何协调不同速率的
2025-12-18 09:53:28
1056
原创 30. UVM TLM Blocking Get Port
摘要: UVM TLM Blocking Get Port实现组件间"请求-响应"通信模式,接收方主动请求数据,发送方响应并返回数据。关键实现包括:发送方定义uvm_blocking_get_imp并实现get()任务,接收方使用uvm_blocking_get_port发起请求,连接方向与Put Port相反。典型应用如Driver从Sequencer获取事务,其阻塞特性确保数据同步传输。通过延时实验证明接收方会等待发送方完成数据处理,适用于需要严格时序控制的场景。
2025-12-18 09:31:41
715
原创 29. UVM TLM Blocking Put Port
UVM TLM Blocking Put Port 核心解析 Blocking Put Port 实现组件间同步数据传递,采用"握手交接"机制确保数据安全传输。关键特点: 阻塞特性:发送方(componentA)通过put()传递数据时会阻塞,直到接收方(componentB)完成处理 三要素架构: 事务类(Packet):定义传输数据结构 发送端(uvm_blocking_put_port):声明端口并调用put() 接收端(uvm_blocking_put_imp):必须实现put(
2025-12-17 13:36:32
694
原创 28. UVM TLM
UVM TLM(Transaction Level Modeling)是一种高效的组件通信机制,它将验证组件间的交互抽象为事务级(Transaction Level),就像商务电话会议一样直接传递完整信息包,而非传统的信号级通信。TLM的核心包括事务对象(封装完整操作信息)、端口类型(如阻塞/非阻塞端口、广播端口)以及连接方式(点对点或一对多)。通过TLM接口,Generator、Driver和Monitor等组件能实现解耦的高效协作,大幅提升验证环境开发效率。典型应用场景包括测试序列生成、驱动信号到DUT
2025-12-17 13:35:43
891
原创 27. UVM [ Sequence action macros for pre-existing items ]
UVM uvm_send 系列宏使用指南 摘要: uvm_send系列宏专为已存在的事务对象提供高效发送通道,与uvm_do宏形成互补。核心区别在于: uvm_do自动完成对象创建、随机化和发送全流程 uvm_send仅发送已存在且配置完成的对象 uvm_rand_send会对已存在对象重新随机化后发送 典型应用场景: 复用预配置对象时使用uvm_send 需要重新随机化时使用uvm_rand_send 需控制执行顺序时使用带优先级的变体 注意事项: 确保对象已创建再使用uvm_send 注意随机化范围,必
2025-12-17 13:34:56
488
原创 26. UVM [ How to use `uvm_do sequence macros ? ]
本文介绍了UVM中的uvm_do序列宏及其家族,将其比作"魔法咒语"来简化激励生成过程。文章通过厨师做菜的三种方式形象比喻了手动创建事务和使用宏的区别,展示了宏家族图谱和三大系列(基础宏、指定sequencer宏、创建相关宏)。重点解析了宏的底层实现uvm_do_on_pri_with,并通过实战示例对比了四种宏的不同效果,最后展示了宏展开后的等效手动代码。这些宏能够自动完成事务创建、随机化和发送的全过程,显著提高验证效率。
2025-12-17 13:34:10
980
原创 25. UVM [ Executing sequence macros ]
UVM序列宏:简化序列启动的快捷方式 UVM序列宏(如uvm_do)提供了一种简化的序列启动方式,相比手动调用start()方法更加便捷。这些宏自动完成了对象创建、随机化、启动等操作,但有一个重要特性:使用宏启动的序列不会调用pre_body()和post_body()方法。 核心要点 宏的工作原理:所有uvm_do宏最终调用uvm_do_on_pri_with,其中call_pre_post参数被硬编码为0,导致pre_body/post_body被跳过 宏家族:包括uvm_do、uvm_do_with、
2025-12-17 11:05:35
641
原创 24. UVM [How to execute sequences via start( ) ]
本文详细解析了UVM Sequence中start()方法的执行流程,将其类比为电影拍摄过程。核心内容包括: 参数详解:start()方法的四个关键参数(sequencer、parent_sequence、priority、call_pre_post)及其作用; 执行流程:通过流程图展示不同参数配置下的调用顺序,包括pre_start、pre_body、body、post_body、post_start等方法; 三种典型场景:对比无父序列默认执行、禁用pre/post_body以及有父序列的分层执行流程;
2025-12-17 11:04:18
705
原创 23. UVM [How to create and use a sequence]
生命周期核心步骤定义Sequence类、指定Sequencer、配置启动方式、连接Driver、执行Sequence。类比电影制作流程,从编写剧本到开机拍摄。
2025-12-17 10:59:07
917
原创 22. UVM Sequence [uvm_sequence]
UVM Sequence:测试激励的"剧本" 摘要:UVM Sequence是测试激励生成的核心机制,类比电影剧本控制测试场景的执行流程。其核心架构包含三层:Test决定测试类型,Sequence编写激励逻辑,Sequencer协调执行顺序。开发Sequence需遵循三步法:1)继承uvm_sequence定义类;2)声明关联的Sequencer;3)在body()方法中实现激励生成。提供uvm_do等宏简化事务创建和发送流程,并支持多级回调方法实现精细控制。典型应用场景包括配置寄存器序
2025-12-17 10:52:24
884
原创 21. UVM Creating user-defined phases
UVM自定义阶段:灵活扩展验证流程 UVM允许通过自定义阶段扩展标准验证流程,但需谨慎使用。实现需完成三步骤: 定义阶段类:继承uvm_task_phase等基类,实现exec_task核心逻辑,采用单例模式确保全局唯一性 插入调度表:获取目标调度域(common/uvm),定位基准阶段后插入自定义阶段 组件实现:在组件中实现与阶段同名的方法 典型应用场景包括特殊硬件初始化或多级复位流程,但需注意: 可能破坏平台可重用性 优先考虑在现有阶段(如run_phase)或使用回调实现需求 必须避免阶段名称冲突和死
2025-12-17 10:51:30
709
原创 20. UVM Objection
UVM Objection机制:精准控制仿真生命周期的关键 Objection是UVM用于管理仿真相位结束的分布式计数系统,通过raise_objection和drop_objection实现协同控制。其核心逻辑是: 工作原理 每个相位维护全局计数器,raise时+1,drop时-1 仅当计数器归零时,仿真才能退出当前相位 最佳实践 测试层:在uvm_test的run_phase中集中管理(推荐) 序列层:虚拟序列可辅助控制子序列生命周期 避免:被动组件(Monitor等)不应使用Objection 常见问
2025-12-17 10:50:37
831
原创 19.1 UVM Phase流程详解?
本文通过生活化类比和技术示例,阐述了UVM验证平台中run_phase的12个子phase的作用与执行逻辑。图1将图2的run_phase细化为pre_reset到post_shutdown的完整流程,就像将学校作息表细化为课堂具体安排。通过FIFO测试等代码示例,展示了各phase的实际应用:reset阶段初始化DUT、configure阶段配置寄存器、main阶段执行核心测试。这种分阶段设计解决了功能冲突、时序混乱等问题,确保验证流程有序进行,最后通过report阶段输出测试结果。
2025-12-16 11:20:52
847
原创 19. UVM Phases
UVM Phases机制详解 UVM Phases是一套强制性的组件协作流程,分为三大阶段: 初始化阶段(函数): build_phase(自顶向下创建组件) connect_phase(自底向上连接端口) 运行阶段(任务): run_phase(主测试逻辑)与12个细化相位并行 收尾阶段(函数): 数据提取(extract)、检查(check)、报告(report) 核心价值:确保组件初始化顺序正确,避免竞态条件,强制代码结构化。 关键实践: 严格区分各相位职责(如build只创建、connect只连接)
2025-12-16 09:50:10
956
原创 18. UVM Scoreboard
UVM中的uvm_scoreboard是验证平台的自动裁判中心,负责比对DUT实际输出与预期结果。它通过TLM端口接收来自Monitor的数据流,利用参考模型提供的期望值进行比对,并统计匹配情况。关键实现包括:1) 定义分析端口接收数据;2) 使用队列/关联数组缓存异步到达的数据;3) 基于地址/ID等关键字段匹配输入输出事务;4) 在check_phase进行最终一致性检查。最佳实践是将复杂检查逻辑分离,使用FIFO处理异步数据流,并通过清晰端口连接实现模块化验证架构。
2025-12-16 09:47:46
922
原创 17. UVM Sequencer [uvm_sequencer]
摘要: UVM验证中,uvm_sequencer是激励分发的核心枢纽,类比物流调度中心。它通过get_next_item和item_done与driver实现拉取式握手,仲裁多个sequence生成的事务(transaction)。关键点包括: 标准用法:直接实例化参数化的uvm_sequencer#(T),无需自定义; 变量区分:m_sequencer(通用基类)与p_sequencer(需宏声明,访问子类特有功能); 实战场景:当需要扩展sequencer功能(如事务限量)时,通过继承创建自定义sequ
2025-12-16 09:47:02
839
原创 16. Subscriber [uvm_subscriber]
摘要:uvm_subscriber是UVM验证平台中的标准化数据接收组件,通过内置analysis_export端口和强制实现write()方法,简化了监听Monitor广播数据的开发流程。相比直接继承uvm_component,使用uvm_subscriber可减少样板代码,使开发者更专注于数据处理逻辑(如覆盖率收集)。典型应用场景包括:1)连接Monitor的广播端口;2)在write()中实现特定功能;3)保持单一职责原则。该组件体现了UVM"广播-订阅"通信模式的优势,是构建模块
2025-12-16 09:45:43
749
原创 15. UVM Monitor [uvm_monitor]
摘要:uvm_monitor是UVM验证平台的关键观察组件,负责被动监测DUT接口信号并将其转换为事务级数据。核心功能包括:1)通过虚拟接口采集信号;2)使用uvm_analysis_port广播事务;3)可选执行协议检查和覆盖率采集。典型实现包含四个步骤:类定义、关键部件声明、构建阶段和运行阶段监控循环。Monitor与Agent的工作模式无关,始终运行,并通过分析端口实现松耦合架构。最佳实践强调保持被动性、分离关注点,并为复杂协议采用多线程监控。该组件是连接物理信号与验证智能分析的关键桥梁。
2025-12-16 09:41:59
658
原创 14.UVM Driver [uvm_driver]
UVM Driver核心摘要 UVM驱动(uvm_driver)是将抽象事务转换为具体硬件信号的关键组件。主要特点: 核心功能:从sequencer获取事务(transaction),按协议转换为时序信号驱动DUT接口 工作流程: 通过seq_item_port与sequencer握手 使用get_next_item()阻塞获取事务 实现协议转换后调用item_done()完成处理 实现要点: 必须参数化指定处理的事务类型 通过config_db获取虚拟接口(vif) 信号驱动需同步时钟沿并使用非阻塞赋值
2025-12-16 09:39:56
780
原创 13. UVM Agent | uvm_agent
本文深入解析了UVM验证方法学中的核心组件uvm_agent。作为协议接口的标准化功能单元,uvm_agent将driver、sequencer和monitor封装成可复用的"协议工具箱"。文章详细介绍了其两种工作模式:Active模式(含完整组件)用于主动激励,Passive模式(仅monitor)用于被动监测。通过配置对象实现灵活控制,提供了标准创建模板和代码实现,并阐述了如何在高层环境中配置Agent。最后总结了最佳实践要点,强调配置对象使用、模式判断和接口传递等关键设计原则。
2025-12-16 09:38:58
977
原创 12.UVM Environment [uvm_env]
摘要:UVM验证环境中的uvm_env是一个标准化、可重用的验证平台单元,它通过封装Agent、Scoreboard等组件实现模块化设计。文章通过图示展示了从简单IP级到复杂SoC级的层次结构,强调uvm_env的四大构建原则:配置对象、工厂化创建、TLM标准化连接和封装实现细节。最后给出了可复用的环境模板,并演示了如何通过"乐高式"集成构建系统级验证环境。这种架构显著提升了验证代码的复用性和可维护性。
2025-12-16 09:36:45
1088
原创 10.基于 MARCH C+ 算法的SRAM BIST
本文介绍了一个SRAM BIST(内建自测试)模块的设计实现。该设计包含三个主要模块:控制模块(CONTROL.V)负责生成测试模式和地址序列,数据比较模块(DATA_COMPARATOR.V)用于比较预期和实际数据,以及顶层模块(MEM_BIST.V)进行整体集成。系统支持8位数据宽度和256字深度,采用多种测试模式(全0、全1、01交替等),通过状态机控制测试流程,能够检测存储器读写错误并输出测试完成信号。设计采用Verilog HDL实现,具有完整的复位控制和错误检测功能。
2025-12-16 09:33:30
3768
6
原创 11. UVM Test [uvm_test]
UVM Test核心概念与实现 UVM Test作为验证环境的顶层控制器,负责配置测试环境并启动验证流程。其核心特点包括: 角色定位:作为可配置的验证方案,通过环境配置和序列控制实现功能验证。 四步流程:继承uvm_test→配置环境→调试拓扑→启动序列(需用objection机制)。 灵活启动:通过run_test()+命令行参数+UVM_TESTNAME实现测试切换,无需重新编译。 重用机制:通过类继承可复用基础测试环境,仅需重写build_phase(修改配置)或run_phase(更换序列)即可创建
2025-12-12 15:06:15
855
原创 10.UVM Testbench Top
摘要: UVM测试平台顶层模块(Testbench Top Module)是连接硬件设计与动态UVM验证环境的核心枢纽。它作为SystemVerilog模块,主要完成三项任务:实例化DUT和接口、生成时钟/复位等基础设施、通过run_test()启动UVM环境并通过uvm_config_db传递虚拟接口。其中,run_test()会构建UVM组件树,而uvm_config_db机制实现静态模块与动态对象的交互。高级技巧包括使用时钟代理实现动态时序控制,以及通过探针监测内部信号。顶层模块的标准化实现模板包含U
2025-12-12 14:41:22
702
原创 1. spi vip 模型实验版本一
本文介绍了一个支持4线模式的SPI协议验证IP模块设计。该模块包含时钟、复位、输入输出信号等接口,新增了对4线SPI模式的支持,通过width_reg参数控制2线/4线模式切换。模块实现了主从模式切换、时钟极性/相位配置、LSB/MSB传输顺序等功能,使用移位寄存器处理数据收发,并支持16/32位数据宽度。设计还包含I2S模式、半双工模式等特殊功能,通过状态寄存器控制各种工作模式。该SPI VIP模块为验证SPI接口功能提供了完整的协议模型支持。
2025-12-12 13:54:48
128
原创 9.UVM Object Copy/Clone
摘要: UVM中的copy和clone是创建对象深度副本的关键方法,用于验证平台数据流管理。copy需先创建目标对象再进行复制,而clone通过工厂机制一步完成创建与复制。两者都需手动实现do_copy方法,处理字段赋值和嵌套对象(需递归调用其copy)。使用时要注意类型转换($cast)、深复制特性及工厂依赖。典型应用场景包括记分板比对、数据暂存和配置传递。掌握这些方法对构建可靠验证机制至关重要,建议通过修改事务类实践两种复制方式,验证深复制效果。(149字)
2025-12-12 13:46:16
858
数字IC测试机架构与测试理论指导书
2025-02-13
Linux命令详解与实战
2025-02-13
【数字电路设计】数字电路整理与优化培训手册:从基础操作到高级功能详解. 文档概述
2025-06-06
硬件验证中的高效Bug发现与定位:关键技能、最佳实践及人员协作策略
2025-02-13
Cadence数字仿真工具Xcelium(xrun)操作指南与高级功能应用
2025-02-13
Vim编辑器用户手册:深入理解和高效应用技巧(文本编辑、程序开发、文件管理)
2025-02-13
IC数字电路设计基础教程PDF:初学者指南,涵盖Verilog HDL与Linux基础命令
2025-02-12
verilog教程.pdf
2020-06-09
Memory bist测试方法.docx
2020-09-02
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅