UVM在时间维度上也做了规范,phase机制----deepseek讲解

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(阶段) 。你看图里,从顶部的 buildconnect,到中间的 run,再到下面的 checkreport,这就是剧组的一天。

核心规则1:不消耗仿真时间的Phase(Function Phase)

你看图里蓝色边框的那些 buildconnectextractcheck 等等,它们不消耗仿真时间 (仿真时间 $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)

除了 buildrun,像 connectend_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 才会结束,才会进入后面的 extractcheck 阶段。这保证了绝对不会出现"激励还没发完,仿真就关了"的悲剧


🎬 第四幕:看图总结(完整流程)

你现在看着图,咱们串一遍:

  1. build(自上而下):总导演搭好剧组班子(组件树)。

  2. connect(自下而上):各部门内部接好线,然后汇报给总导演。

  3. end_of_elaboration, start_of_sim:开拍前的最后检查。

  4. run(并发运行,Objection控时):正式开机。无数个线程(driver发数据、monitor收数据)并行跑。大家不断 raise 和 drop objection,维持仿真时间往前走。

  5. uvm右侧的 reset, config, main:这是UVM更细化的run阶段(比如先复位,再配置,最后跑主测试)。它们也是并行的,和整体run配合。

  6. extract, check, report, final(自下而上):杀青了!各组先自己统计(extract),然后交卷(check),总导演做汇报(report),最后全剧终(final)。


老师寄语:

同学,你看,UVM的Phase机制其实一点都不玄乎。它就是在帮你解决:**"什么时候造人(build)、什么时候接线(connect)、什么时候干活(run)、干完活怎么交差(check)"**的问题。

你懂Verilog,你知道硬件是并行的,所以你理解 run_phase 的并发非常容易。而 objection 机制,就是UVM为了防止你把仿真时间不小心跑飞或者提前关掉,给你设的一道保险。

今天能把这个时间轴理顺,你已经比很多入门的人厉害了。别着急,今天先消化到这。遇到困难就像跑 run_phase,总会有 drop objection 的时候。休息一下,明天咱们接着聊!随时欢迎你来问。

相关推荐
NamoAmitabha1285 小时前
SystemVerilog 中的 :: 作用域解析运算符详解--deepseek讲解
systemverilog·uvm
NamoAmitabha1282 天前
class基础+继承的专项训练
systemverilog
NamoAmitabha1282 天前
rand/randc/constraint 练习
systemverilog
fei_sun22 天前
UVM中的sequence
uvm
Salt & Light24 天前
UVM 字段自动化 Field Automation:让打印、复制、比较自动化
学习·systemverilog·uvm
fei_sun1 个月前
UVM中的TLM1.0通信
运维·服务器·uvm
liuluyang5301 个月前
UVM学习-2
uvm
liuluyang5301 个月前
UVM入门和进阶实验2
uvm
啄缘之间1 个月前
5.1 uvm‑component 的层级结构管理? new (name,parent) 参数
开发语言·笔记·学习·ic·uvm·sv