在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 162|回复: 2

[原创] uvm基础2-UVM phase仿真是怎么开始启动的?

[复制链接]
发表于 2024-8-28 23:49:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
UVM phase仿真是怎么开始启动的?
UVM(Universal Verification Methodology)的仿真启动过程是通过一系列精心设计的phase来控制的。以下是UVM仿真启动的主要步骤:
仿真启动:仿真的启动通常是通过在测试平台的顶层模块中调用run_test()函数来开始的。这个函数可以带有一个参数,指定要运行的测试用例的名称,或者不带参数,此时可以通过仿真命令行加上+UVM_TESTNAME=<test_name>来指定测试用例。
UVM Test Top实例化:run_test()函数会创建一个uvm_test_top的实例,这个实例是UVM测试环境的根组件。
Phase执行UVM中的phase分为两大类:function phase和task phase。function phase不消耗仿真时间,而task phase会消耗仿真时间。仿真的启动和执行主要通过这些phase来控制。
Build Phase:在仿真开始时,首先执行的是build phase,它负责实例化和配置UVM组件。这是自上而下执行的,即从顶层组件开始,一直到最底层的组件。
Connect Phase:在build phase之后,执行connect phase,它负责组件间的连接,包括TLM端口的连接和配置数据库的设置。
End of Elaboration Phase:这个阶段用于在仿真开始之前对测试台的结构、配置或连接进行最终的调整或检查。
Start of Simulation Phase:这是在耗时的仿真部分开始之前执行的一个function phase,通常用于显示信息,如测试台拓扑结构、组件配置信息等。
Run Phase:这是UVM中最关键的task phase,它负责实际的仿真运行,包括激励的产生、监测和检查。在这个阶段,所有的组件如驱动器(drivers)、监视器(monitors)和记分板(scoreboards)都会并行执行。
Objection机制:在run phase中,UVM使用objection机制来控制仿真的结束。当所有的组件都放下了objection(通过drop_objection()调用),并且没有其他组件或序列持有objection时,run phase结束,仿真继续进行到下一个phase。
Clean Up Phases:在run phase之后,执行的是清理阶段的phase,包括extract_phase、check_phase、report_phase和final_phase,这些phase用于收集仿真结果、进行最后的检查和报告。
整个过程是由UVM框架自动管理的,验证工程师只需要在相应的phase中填充自己的验证逻辑即可。这样的设计使得UVM能够以一种结构化和可预测的方式执行仿真,同时也便于验证环境的维护和扩展。

 楼主| 发表于 2024-8-28 23:50:09 | 显示全部楼层
uvm_config_db和uvm_resource_db有什么区别?
uvm_config_db 和 uvm_resource_db 都是 UVM 中用于资源配置和共享的机制,但它们之间存在一些关键的区别:
层次关系:
uvm_config_db 考虑了 UVM 组件的层次关系,允许在不同层级的组件之间进行资源的配置和覆盖。它遵循“父级优先”原则,即更高层级的配置会覆盖较低层级的同名配置。
uvm_resource_db 不考虑层次关系,它使用“最后写入优先”原则,即对同一资源的最后配置会覆盖之前的配置,不论配置来自哪个层级。
使用方式:
uvm_config_db 提供了 set 和 get 方法,这些方法通常在组件的 build_phase 中被调用,以确保在组件构建过程中资源被正确配置。
uvm_resource_db 提供了 set、get_by_name、get_by_type 等方法,允许在任何时候对资源进行读写,但不具备 uvm_config_db 的层次覆盖特性。
优先级:
uvm_config_db 中的资源可以设置优先级,这在资源冲突时非常有用,可以明确哪个资源应该被优先使用。
uvm_resource_db 中的资源优先级不是由数据库管理的,它更多依赖于资源被写入的顺序。
应用场景:
uvm_config_db 适用于需要在 UVM 组件层次结构中传递配置信息的场景,如传递虚拟接口、配置参数等。
uvm_resource_db 适用于不需要考虑层次结构的简单资源共享,或者在测试环境中需要跨越组件层次进行资源访问的情况。
共享同一套数据库:
尽管 uvm_config_db 和 uvm_resource_db 在功能上有所不同,但它们实际上共享同一套数据库(uvm_resource_pool),这意味着通过 uvm_config_db::set() 存入的信息可以通过 uvm_resource_db::read_by_name() 读取,反之亦然。
总的来说,uvm_config_db 更适合 UVM 环境中的大多数配置需求,因为它支持层次化的配置管理,而 uvm_resource_db 则提供了一种更灵活但不那么结构化的资源访问方式。在实际应用中,推荐优先使用 uvm_config_db 以充分利用 UVM 的层次化特性。
 楼主| 发表于 2024-8-28 23:53:55 | 显示全部楼层
analysis ports和TLM ports之间有什么区别?
Analysis ports和TLM ports在UVM(Universal Verification Methodology)中都是用于组件间通信的端口,但它们之间存在一些关键的区别:
一对多通信:
Analysis ports支持一对多的通信模式,即一个analysis port可以连接到多个analysis imp(实现),实现数据的广播。这意味着当数据通过analysis port发送时,所有连接的analysis imp都会收到数据。
TLM ports(如put, get, transport等)通常支持一对一的通信模式,即一个port或export只能连接到一个对应的imp。
阻塞与非阻塞:
Analysis ports的操作不区分阻塞和非阻塞,因为它们是基于广播的,不需要等待任何特定响应,所以它们本质上是非阻塞的。
TLM ports则有阻塞和非阻塞之分,例如uvm_blocking_put_port和uvm_nonblocking_put_port,这允许用户根据需要选择适当的通信方式。
操作类型:
Analysis ports只有一种操作,即write()方法,用于发送数据。
TLM ports支持多种操作,如put()、get()、transport()等,提供了更灵活的数据传输方式。
使用场景:
Analysis ports常用于不需要即时响应或者需要将数据广播给多个观察者的场景,例如monitor组件收集数据并广播给scoreboard或其他分析组件。
TLM ports适用于需要同步或特定顺序的数据传输,例如driver发送事务给sequencer,或者agent之间的数据传递。
端口连接:
Analysis ports可以连接到analysis exports,也可以直接连接到analysis imps。
TLM ports需要根据类型(port或export)正确连接,例如port连接到export,而export连接到imp。
跨层次连接:
在复杂的UVM测试环境中,analysis ports可以通过跨层次连接实现数据的传递,例如从monitor到scoreboard。
TLM ports也可以实现跨层次连接,但需要遵循UVM的连接规则和层次结构。
总结来说,analysis ports提供了一种简便的广播通信机制,适合于数据监控和分析的场景,而TLM ports提供了更为复杂和可控的通信方式,适用于需要精细控制数据流的场景。在设计UVM环境时,根据具体的通信需求选择合适的端口类型是非常重要的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

×

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-9-20 23:36 , Processed in 0.013983 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表