FPGA探索者
简单直接说几点实操建议。
回归种子:固定一组种子是必须的,否则无法稳定回归。但这组种子怎么来?在项目中期,设计功能稳定后,集中机器资源,用不同的初始种子跑上成千上万次测试。然后做分析:找出那些每次都能稳定触发高覆盖率的种子,剔除那些运行时间超长或者覆盖率波动剧烈的。精选出几百个,这就是你的基础回归库。以后每次回归,随机从库里选一部分来跑(比如100个),而不是每次都跑全部,以平衡时间和覆盖。
约束怎么写:
1. 优先级:合法约束 > 偏向约束。首先确保随机产生的激励是设计能处理的(合法),然后再考虑用dist或if-else让某些值的概率高一点。
2. 对于难触发的角落,别指望主约束能搞定。单独写一个“角落案例序列”(corner case sequence)。在回归时,以较低的概率(比如5%)随机插入这个序列。这样既不影响主随机流,又能系统性地攻击那个角落。
3. 多利用UVM的随机控制机制。比如,用`uvm_config_db`在测试层动态设置某些约束的权重或开关,这样可以在不修改代码的情况下,为不同的回归运行配置不同的随机倾向。
最后,记住回归测试是个持续过程。每周或每两周,回顾一下覆盖率的增长情况,如果停滞了,就说明当前的种子和约束已经挖掘不出新东西了,这时候就需要补充新种子,或者重新审视和加强你的约束了。
