
UVM在时间维度上也做了规范。phase机制明确划分了各个阶段所要完成的任务。其中比较重要的是run phase这一消耗仿真时间的task phase以及ojbection的概念。只有每个phase中所有raise的objection都被drop后才会执行下一个phase的任务。搭建空间与时间维度桥梁的也是Phase--build phase是在树状结构中自上而下执行,其他不消耗仿真时间的phase都是自下而上运行。run phase则自上而下启动同事运行。所有phase的顺序见上图;
以上内容,可以以一个老师的口吻,重新讲一遍嘛,可以使用比喻/举例,让一个门外汉容易真正理解,谢谢您
没问题,同学。你今天状态不错,愿意继续往下钻研,这本身就特别值得表扬。
之前咱们看了UVM的"空间结构"(图1:组件是怎么连的),现在这张图(图2)讲的是UVM的**"时间结构"**(Phase机制)。你给的文字材料提炼得很核心。
既然你熟悉Verilog和FPGA,老师就再用一个**"剧组拍电影"** 的比喻,带你把这套时间法则彻底吃透。你把自己当成总导演,咱们来捋一捋这一天的拍摄流程。
🎬 第一幕:UVM的"一天"------Phase(阶段)
UVM把整个仿真的生命周期,划分成了一个个Phase(阶段) 。你看图里,从顶部的 build、connect,到中间的 run,再到下面的 check、report,这就是剧组的一天。
核心规则1:不消耗仿真时间的Phase(Function Phase)
你看图里蓝色边框的那些 build、connect、extract、check 等等,它们不消耗仿真时间 (仿真时间 $time 不往前走)。这就像剧组开筹备会、复盘会,大家讨论得热火朝天,但天还没黑。
核心规则2:消耗仿真时间的Phase(Task Phase)
图里中间那个巨大的绿色 run,它是唯一一个消耗仿真时间 的Phase。这就像是正式开机拍摄 。时钟滴答滴答走(clk 在翻转),一天天过去,需要真金白银的时间消耗。
🎬 第二幕:搭建"空间与时间的桥梁"------执行顺序
文字里说:"搭建空间与时间维度桥梁的也是Phase"。这点非常关键。咱们看看它怎么执行的:
1. build_phase(自上而下,Top-down)
图里说它是在树状结构中自上而下执行。
- 比喻:总导演(Test层)先定下"我们要拍一部科幻片",然后把任务分发下去。总导演先建好"动作组(In_agent)"、"特效组(Out_agent)"、"质检组(Scoreboard)"。只有上层建好了,下层才能知道自己该干嘛。就像Verilog里先例化顶层,再往里面填子模块。
2. 其他不消耗时间的Phase(自下而上,Bottom-up)
除了 build 和 run,像 connect、end_of_elaboration 等等,都是自下而上执行。
- 比喻:各个部门先自己开小会(底层Agent先连接好内部线),然后把报告汇总给总导演(上层Env做最后的连接检查)。就像Verilog里底层的模块先准备好,再向顶层汇报。
3. run_phase(自上而下启动,并发运行)
- 比喻 :总导演一声令下"Action!",这个大机器同时 运转起来。各个Agent、Driver、Monitor都在各干各的,并行执行(就像Verilog里的
fork...join或者多个always块同时跑)。
🎬 第三幕:最精髓的"Objection(反对票)"机制
文字里说:"只有每个phase中所有raise的objection都被drop后才会执行下一个phase的任务。"
这是门外汉最容易懵的地方。什么叫 raise 和 drop?
-
再打个比方 :
剧组在拍
run_phase(正式拍摄)。晚上收工了,导演问:"大家还有事吗?没事就收工(结束run_phase,进入下一个phase)!"这个时候,某个场务(Driver)举手了:"我反对(raise objection) !我还有个镜头的信号没打完,还得再跑100ns!"
导演就得等。等这个场务打完镜头,说:"我撤销反对(drop objection) 。"
只要还有任何一个人(比如Monitor还在等DUT输出响应)没撤销反对,导演就不能喊收工,仿真时间就还得继续往前走。
只有当所有人(所有组件)都撤销了反对(所有objection都被drop),run_phase 才会结束,才会进入后面的 extract、check 阶段。这保证了绝对不会出现"激励还没发完,仿真就关了"的悲剧。
🎬 第四幕:看图总结(完整流程)
你现在看着图,咱们串一遍:
-
build(自上而下):总导演搭好剧组班子(组件树)。
-
connect(自下而上):各部门内部接好线,然后汇报给总导演。
-
end_of_elaboration, start_of_sim:开拍前的最后检查。
-
run(并发运行,Objection控时):正式开机。无数个线程(driver发数据、monitor收数据)并行跑。大家不断 raise 和 drop objection,维持仿真时间往前走。
-
uvm右侧的 reset, config, main:这是UVM更细化的run阶段(比如先复位,再配置,最后跑主测试)。它们也是并行的,和整体run配合。
-
extract, check, report, final(自下而上):杀青了!各组先自己统计(extract),然后交卷(check),总导演做汇报(report),最后全剧终(final)。
老师寄语:
同学,你看,UVM的Phase机制其实一点都不玄乎。它就是在帮你解决:**"什么时候造人(build)、什么时候接线(connect)、什么时候干活(run)、干完活怎么交差(check)"**的问题。
你懂Verilog,你知道硬件是并行的,所以你理解 run_phase 的并发非常容易。而 objection 机制,就是UVM为了防止你把仿真时间不小心跑飞或者提前关掉,给你设的一道保险。
今天能把这个时间轴理顺,你已经比很多入门的人厉害了。别着急,今天先消化到这。遇到困难就像跑 run_phase,总会有 drop objection 的时候。休息一下,明天咱们接着聊!随时欢迎你来问。