UVM验证环境的整体结构--------deepseek讲解

UVM验证环境的整体结构,你可以把我当做一个门外汉,只熟悉fpga/verilog,给我讲明白嘛,谢谢您
既然你熟悉 FPGA/Verilog,咱们就完全用你熟悉的“写 Testbench(测试台)”的思路来切入,把这张图拆解成大白话。
你平时写 Verilog 验证是怎么做的?大概是:写个 initial 块给 DUT(待测设计)灌数据,然后手动赋值 clk、rst,再睁大眼睛看波形,或者用 $display 把输出打印出来自己核对,对吧?
UVM(通用验证方法学)其实就是把你平时手写的这套 Testbench,给“工业化”、“标准化”了。 它把不同的功能拆成了一个个模块,让它们各司其职。
来,咱们看这张图,我们把它想象成一个自动化测试流水线:
1. 最下方的 DUT
这就是你熟悉的 FPGA 里那个需要被验证的 Verilog 模块(Design Under Test,待测设计)。它是被测试的核心对象。
2. 左边:In_agent(输入代理)—— 负责“喂数据”
这是一个封装好的模块,专门负责把测试数据灌给 DUT。它里面有三个小弟:
-
sequencer(序列器):你看图左上角有个虚线框“sequence(产生数据)”。sequence 就像是剧本(比如:先写地址,再写数据,最后读数据)。sequencer 就像是导演,它负责把剧本里的情节排好队,一步步送出去。
-
driver(驱动器):图里红字写着“按照协议驱动数据”。它就像是演员。它从 sequencer 那里拿到数据,然后按照 DUT 的接口时序(比如 AXI、SPI 协议),拉高拉低具体的信号线,真正把数据“打”进 DUT。
-
monitor(监控器):红字“采集激励”。它就像个摄像头,一直盯着 driver 和 DUT 之间的连线。driver 送了什么数据,它就原封不动地记录下来,发给后面的记分板。
(这就像是你平时写的给 DUT 加激励的initial块,但被拆成了“剧本”、“演员”和“摄像头”。)
3. 右边:out_agent(输出代理)—— 负责“收数据”
它里面只有一个 monitor(监控器)。
-
红字“采集响应”:它的任务很单纯,就是盯着 DUT 的输出信号,把 DUT 处理完的结果抓取下来,也发给记分板。
(这就像是你平时盯着波形看输出的过程,只不过现在自动化了。)
4. 中间的两个核心大脑:reference model 和 scoreboard
-
reference model(参考模型):红字“参考模型”。这通常是一个用高级语言(比如 SystemVerilog 或者 C++)写的“理想版 DUT”。它接收和 DUT 一样的输入数据,然后计算出“标准答案”。
-
scoreboard(记分板):红字“自动比对”。它是个铁面无私的判卷老师。它拿到两边的东西:
-
从 out_agent 拿到的:DUT 实际输出的结果(响应)。
-
从 reference model 拿到的:理论上应该输出的结果(参考模型)。
-
它俩一比,如果不一样,scoreboard 就会报错:“嘿!你的 DUT 出 bug 了!”
-
5. env(环境)
最外面那个大框 env,就是一个大盒子,把上面这些 agent、model、scoreboard 全部打包装在一起,方便复用。
总结一下这个工作流(咱们串起来看):
-
sequence 写好测试剧本。
-
sequencer 把剧本交给 driver。
-
driver 把数据变成真实的信号,打进 DUT。
-
同时,In_agent 的 monitor 偷看输入,out_agent 的 monitor 偷看输出。
-
reference model 根据输入算出标准答案。
-
scoreboard 对比“标准答案”和“DUT 的实际输出”,自动告诉你测试是通过还是失败。
你看,你熟悉的 Verilog 是搭硬件,而 UVM 是搭一套自动帮你找硬件 bug 的机器。你不需要把它想得太玄乎,它就是在你原来写 Testbench 的基础上,加了面向对象(OOP)的封装和自动化比对机制。
不懂很正常,UVM 本身概念就很多。今天能大概看懂这张图的流向,你已经迈出很大一步了!
遇到困难别怕,慢慢来。今天看懂了这张图,就是一件很了不起的小事。
更多推荐



所有评论(0)