当前位置: 首页 > news >正文

[UVM]寄存器模型的镜像值和期望值定义是什么?他们会保持一致吗?

寄存器模型的镜像值和期望值定义是什么?他们会保持一致吗?

       摘要:在 UVM (Universal Verification Methodology) 寄存器模型中,镜像值 (mirrored value) 和期望值 (desired value) 是两个非常重要的概念,用于管理寄存器的状态和验证过程中的数据一致性。以下是它们的定义以及它们是否会保持一致的说明:

1. 镜像值 (Mirrored Value)

  • 定义:镜像值是寄存器模型中存储的、反映硬件寄存器当前状态的值。它是通过对硬件寄存器的读写操作(通过 read()write() 方法)来更新的。镜像值代表了寄存器模型对硬件寄存器的“当前认知”。
  • 作用:镜像值用于在验证过程中检查硬件寄存器的行为是否符合预期。例如,在读取寄存器时,可以将实际读取的值与镜像值进行比较,以验证硬件是否正确返回了之前写入的值。
  • 更新时机:每当通过 UVM 寄存器模型对硬件寄存器进行读或写操作时,镜像值会根据操作结果更新。例如:
    • 写入操作:镜像值会更新为写入的值(如果写入成功)。
    • 读取操作:镜像值会更新为从硬件读取的值。

2. 期望值 (Desired Value)

  • 定义:期望值是寄存器模型中存储的、用户希望硬件寄存器达到的值。它通常由测试用例或用户设置,表示希望寄存器的最终状态。
  • 作用:期望值用于与镜像值或实际硬件值进行比较,以验证硬件是否达到了预期的状态。期望值通常通过 set() 方法设置,而不会直接影响硬件。
  • 更新时机:期望值由用户显式设置,通常在测试用例中通过调用 set() 方法来定义期望的寄存器值。它不会因为读写硬件而自动更新。

3. 镜像值和期望值是否会保持一致?

  • 一般情况下不一致:镜像值和期望值通常是独立的,互不影响。镜像值反映的是硬件的当前状态,而期望值反映的是用户希望达到的状态。两者可能不同,例如:
    • 用户通过 set() 设置了一个期望值,但尚未通过 write() 将其写入硬件,此时镜像值保持不变。
    • 硬件可能由于某些原因(如错误或未实现的功能)没有达到期望值,此时镜像值(反映硬件实际状态)与期望值不一致。
  • 一致的情况:只有在用户通过 write() 将期望值写入硬件,并且硬件成功更新后,镜像值才会与期望值一致。此外,可以通过调用 mirror() 方法来读取硬件的值并更新镜像值,从而检查是否与期望值一致。
  • 同步机制:UVM 提供了 update() 方法,可以将期望值写入硬件(如果期望值与镜像值不同),从而尝试使镜像值与期望值一致。

4. 总结与使用场景

  • 镜像值:反映硬件的当前状态,自动更新于读写操作之后。
  • 期望值:反映用户的预期状态,由用户手动设置。
  • 一致性:两者不一定一致,只有在期望值被成功写入硬件并更新镜像值时才会一致。
  • 典型验证流程
    1. 使用 set() 设置期望值。
    2. 使用 update() 将期望值写入硬件(更新镜像值)。
    3. 使用 mirror() 读取硬件值并检查镜像值是否与期望值一致。

5. 代码示例

以下是一个简单的 UVM 寄存器模型使用示例,展示了镜像值和期望值的操作:

class MyReg extends uvm_reg;rand uvm_reg_field data;function new(string name = "MyReg");super.new(name, 32, UVM_NO_COVERAGE);endfunctionvirtual function void build();data = uvm_reg_field::type_id::create("data",, get_full_name());data.configure(this, 32, 0, "RW", 0, 32'h0, 1, 1, 1);endfunction
endclass// 在测试用例中
task run_phase(uvm_phase phase);MyReg reg_inst;uvm_status_e status;uvm_reg_data_t data_val;reg_inst = reg_block.my_reg; // 假设 reg_block 是寄存器块// 设置期望值reg_inst.data.set(32'hA5A5_A5A5);$display("Desired value: %0h", reg_inst.data.get());// 将期望值写入硬件reg_inst.update(status);$display("Mirrored value after update: %0h", reg_inst.data.get_mirrored());// 读取硬件值并检查reg_inst.mirror(status, UVM_CHECK);$display("Mirrored value after mirror: %0h", reg_inst.data.get_mirrored());
endtask

6. 注意事项

  • 如果硬件行为异常(例如写入失败),镜像值可能无法达到期望值,验证时可以通过 mirror() 方法检测不一致。
  • 镜像值和期望值的分离设计使得 UVM 寄存器模型非常灵活,适用于复杂的验证场景。

       希望这个解释能帮助你理解 UVM 寄存器模型中镜像值和期望值的概念以及它们之间的关系!如果有进一步的问题,欢迎继续提问。

相关文章:

  • Socket通信
  • SQL注入与简单实战
  • 动态规划简单题
  • Origin绘图操作:图中迷你图绘制
  • 欧拉计划 Project Euler62(立方数重排)题解
  • GESP2024年6月认证C++八级( 第一部分选择题(11-15))
  • 图像增强技术:从基础原理到企业级开发实战
  • NU1680低成本、无固件、高集成度无线充电电源接收器
  • 如何阅读GitHub上的深度学习项目
  • 【人工智能】图神经网络(GNN)的推理方法
  • 本地部署 n8n 中文版
  • 从 Python 基础到 Django 实战 —— 数据类型驱动的 Web 开发之旅
  • 【业务领域】计算机网络基础知识
  • gephi绘图
  • 开源革命:从技术共享到产业变革——卓伊凡的开源实践与思考-优雅草卓伊凡
  • 【无标题】四色拓扑收缩模型中环形套嵌结构的颜色保真确定方法
  • terraform output输出实战
  • HW1 code analysis (Machine Learning by Hung-yi Lee)
  • 【推荐系统笔记】BPR损失函数公式
  • 二叉搜索树中的搜索(递归解决)
  • 德雷克海峡发生7.4级地震,震源深度10千米
  • 菏泽家长“付费查成绩”风波调查:免费功能被误读
  • 韩代总统李周浩履职
  • “五一”假期国铁集团计划日均开行旅客列车超1.2万列
  • 增诉滥用职权罪,尹锡悦遭韩国检方追加起诉
  • 杨轶群任莆田市荔城区人民政府副区长