定向测试(二)
可以,我们换一个更直观的类比。
你把“验证”想成做实验:
给 DUT 一个输入
观察 DUT 输出
拿标准答案对比
判断对不对
这件事本身叫验证逻辑,不叫 UVM。
比如 FPU 加法:
输入:+0 和 NaN
DUT 输出:某个 NaN,fflags = NV?
reference model 输出:标准规定的结果
比较:DUT 是否等于 reference
这个“比较 DUT 和标准答案”的动作,不管你用什么语言写,都存在。
UVM 是什么?UVM 是一种搭实验室的方式。
它规定你最好把实验室分成这些角色:
sequence:负责产生测试
driver:负责把测试送给 DUT
monitor:负责观察 DUT 输出
scoreboard:负责和 reference model 对比
coverage:负责统计覆盖率
所以如果你用 SystemVerilog/UVM 写,就像这样:
UVM sequence
-> UVM driver
-> DUT
-> UVM monitor
-> UVM scoreboard
-> reference model compare
这里叫 UVM,是因为你用了 UVM 的 sequence/driver/monitor/scoreboard 这套工程结构。
但同一件事,也可以不用 UVM。
比如用 cocotb:
Python test
-> drive DUT signals
-> DUT
-> read DUT signals
-> Python checker
-> reference model compare
它也有:
产生输入
驱动 DUT
观察输出
对比 reference model
统计 coverage
但是它不是 UVM,因为它没有用 SystemVerilog UVM 类库,也没有 UVM 的 phase、factory、sequence、sequencer、agent 那一套。
再举一个更简单的例子。
“考试判卷”这件事类似于 reference model 对比:
学生答案 vs 标准答案
这不叫“高考”。高考只是组织考试的一种制度。
同理:
DUT 输出 vs reference model 输出
这不叫 UVM。UVM 只是组织验证工程的一种制度。
所以这三层要分开:
第一层:你要做什么测试?
directed test / random test / formal
这是测试策略。
第二层:怎么判断对不对?
assertion / scoreboard / reference model compare
这是检查机制。
第三层:用什么工程框架组织?
UVM / cocotb / pure SV / C++ Verilator
这是实现框架。
你的情况是:
测试策略:directed test,具体是 LLM 生成 fixed/direct assembly tests
检查机制:reference model comparison + semantic coverage
实现框架:可以是 UVM,也可以是 cocotb
所以:
UVM 不是“reference model 对比”本身。
UVM 是“用 SystemVerilog 标准组件组织验证环境”的一种方式。
你现在用的第一种大概是:
directed verification implemented with UVM
而我们设想的新框架是:
LLM-assisted directed verification implemented with cocotb/Python
验证思想相似,但工程框架不同。

浙公网安备 33010602011771号