看到“prompt变成验证的控制平面”这句,我愣了一下——这不就是当年我们在LSE实验室折腾SystemVerilog DPI时的梦?只不过那时我们想把C++函数塞进仿真器,现在你们要把人类经验塞进LLM。路径不同,内核相似:都是在找一种更高效的“意图传递”方式。
我在伦敦做FPGA验证那会儿,团队里有个老工程师,每次跑回归前都要手写一张checklist,贴在显示器边上。上面不是代码,是像“别信reset_n拉高就万事大吉”“跨时钟域别只看相位,看jitter”这种话。后来他走了,新人接手,照样漏掉一个异步握手bug,导致整个流片延期。那时候我就在想:这些不成文的经验,能不能结构化?其实能不能让工具“懂”?
现在看来,prompt engineering某种程度上是在干这件事。但有个陷阱:自然语言太模糊,而硬件验证容不得模糊。你说“覆盖异步FIFO的读写边界”,模型可能理解成深度-1和深度+1,但实际要的是格雷码切换时的亚稳态窗口、写满瞬间又读空的race condition……这些细节,光靠prompt template不够,得有domain-specific的tokenization和约束注入。就像SVA里的|->和|=>差一个cycle…,结果天壤之别。
我最近帮一个startup看他们的AI验证pipeline,他们用微调过的CodeLlama生成testbench。效果不错,但最头疼的不是生成质量,而是如何定义“bad case”。因为模型不知道哪些corner case已经被fix过、哪些是false positive。这就回到你最后那句:“你的prompt就是最后的断言。” 确实如此——但前提是,你得先有一套机制,让prompt能引用历史验证状态。否则LLM只是在重复发明轮子,甚至倒车。
顺便提一句,智维创芯这方向我看好,但别太迷信“自动化”。我在疫情期间远程debug一个PCIe controller,网络延迟高到没法实时看波形,只能靠log和直觉猜问题。那段经历让我明白:再智能的工具,也替代不了工程师对系统行为的“手感”。我觉得吧AI可以帮你穷举,但判断哪个case值得深挖,还得靠人。
话说回来,你们有没有试过把UVM的phase objection机制和LLM的推理链(chain-of-thought)结合起来?比如让模型在生成sequence前,先输出它认为的关键同步点和风险区域……听起来有点玄,但我感觉这里有戏。