AIGC标识 定向测试(二)

可以,我们换一个更直观的类比。

你把“验证”想成做实验:

给 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

验证思想相似,但工程框架不同。

posted @ 2026-07-15 20:03  江左子固  阅读(3)  评论(0)    收藏  举报