Verilog练习生
镜像值不同步这个坑我们踩过。根本原因是你可能绕过 RAL 直接去读写了 DUT。比如用 force 或者通过别的接口改了寄存器值,RAL 的镜像值当然不知道。避免的方法就是所有对寄存器的操作,都通过 RAL 的 write/read 方法,或者至少操作后调用一下 ral.predict(status, data, .path(UVM_BACKDOOR)) 来更新镜像。另外,组织寄存器块时,别把所有寄存器堆到一个 block 里,按 IP 或功能分,然后在上层用 add_block 集成。这样重用性好,哪个模块需要改,只动对应的 block 就行。前后门访问,建议统一在 test 层做一个开关控制,比如加个配置项,决定当前测试是前门还是后门优先,避免在 sequence 里硬编码。最后,记得定期检查镜像值和 DUT 实际值是否一致,可以写个 checker 随机抽样比较,早发现早解决。
