uvm中set_check_on_read的用法实例
在UVM(Universal Verification Methodology)中,uvm_check_on_read 是一个与寄存器模型(RAL, Register Abstraction Layer)相关的配置选项,主要用于控制寄存器读取操作时的值检查行为。以下是其核心用法和功能总结:
- 基本功能
作用:当启用 uvm_check_on_read 时,寄存器模型会在执行 read 或 mirror 操作时,自动比较从DUT(Device Under Test)读取的值与寄存器模型中的镜像值(mirrored value)。如果两者不一致,会触发错误报告。
适用场景:常用于验证寄存器的实际值与模型预期值的一致性,例如在测试复位值或状态寄存器时。
- 配置方法
通过 uvm_reg_map 设置:
在寄存器模型的 uvm_reg_map 中,可以通过 set_check_on_read(1) 启用检查功能。例如:
reg_model.default_map.set_check_on_read(1); // 启用检查
关闭检查则传入 0。
与 auto_predict 的关系:
根据UVM源码分析,do_check(实际比较函数)仅在 auto_predict 启用时生效。若关闭 auto_predict,需通过显式预测(如 uvm_reg_predictor)来更新镜像值,此时 check_on_read 可能不直接生效。
3. 行为细节
检查对象:
默认比较的是 期望值(desired value) 而非镜像值(mirrored value),这可能与用户预期不符(需注意镜像值需通过 predict 或 mirror 更新)。
若需检查镜像值,需在 mirror 任务中显式设置 check=UVM_CHECK。
错误处理:
若检查失败,UVM会通过 uvm_error 报告,并标记操作状态为 UVM_NOT_OK。
4. 典型应用示例
寄存器复位值验证:
在测试中,通过 read 或 mirror 读取DUT值,并与模型复位值比较:
reg_model.reg1.mirror(status, UVM_CHECK); // 启用检查
若DUT值与模型不匹配,会报错。
动态检查:
在随机测试中,可通过临时启用 check_on_read 来验证特定寄存器的读写一致性。
5. 注意事项
性能影响:频繁启用检查可能增加仿真开销,建议仅在关键验证阶段使用。
与预测模式协调:显式预测模式下需确保 predictor 正确更新镜像值,否则检查结果可能无效。
总结
uvm_check_on_read 是寄存器验证中用于自动化值检查的重要配置,需结合 auto_predict 和 mirror 任务灵活使用。其核心目的是确保DUT与模型状态的一致性,但需注意其默认比较的是期望值,必要时需手动调整镜像值。
浙公网安备 33010602011771号