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

4.7 学习UVM中的阶段机制,应用到具体示例分为几步?

文章目录

  • 前言
  • 示例一:AXI总线验证环境
    • 1. 环境结构
    • 2. 阶段执行顺序与依赖实现
    • 3. 关键阶段代码详解
    • 4. 执行顺序验证
    • 5. 设计要点
    • 附:阶段依赖关系示意图
  • 示例二:AXI-Lite寄存器控制验证环境
    • 1. 验证组件结构
    • 2. 阶段执行流程详解
      • Phase 1: build_phase
      • Phase 2: connect_phase
      • Phase 3: run_phase
      • Phase 4: extract_phase
      • Phase 5: check_phase
      • Phase 6: report_phase
    • 3. 阶段依赖关系实现
    • 4. 关键设计要点


前言

UVM 阶段按照严格的顺序执行,确保验证环境的正确初始化、运行和结果分析。以下是主要阶段的执行顺序:
Build → Connect → Run → Extract → Check → Report
依赖关系:
Build 阶段必须在 Connect 阶段之前完成,因为需要先实例化组件才能连接它们。
Run 阶段依赖于 Connect 阶段,确保所有通信通道已建立。
Extract 和 Check 阶段依赖于 Run 阶段,因为它们需要仿真结果进行分析。
Report 阶段是最后一个阶段,依赖于所有其他阶段的结果。


以下是一个基于UVM阶段执行顺序的完整验证项目示例,结合阶段依赖关系与典型应用场景:


示例一:AXI总线验证环境

1. 环境结构

class axi_test extends uvm_test;
    `uvm_component_utils(axi_test)
    axi_env env;        // 验证环境
    axi_vseq vseq;      // 虚拟序列

    function void build_phase(uvm_phase phase);
        super.build_phase(phase);
        env = axi_env::type_id::create("env", this);  // 实例化环境
    endfunction

    task run_phase(uvm_phase phase);
        phase.raise_objection(this);
        vseq = axi_vseq::type_id::create("vseq");
        vseq.start(null);  // 启动虚拟序列
        phase.drop_objection(this);
    endtask
endclass

class axi_env extends uvm_env;
    `uvm_component_utils(axi_env)
    axi_agent master_agent;  // AXI主设备代理
    axi_scoreboard scb;      // 计分板

    function void build_phase(uvm_phase phase);
        super.build_phase(phase);
        master_agent = axi_agent::type_id::create("master_agent", this); // 实例化组件
        scb = axi_scoreboard::type_id::create("scb", this);
    endfunction

    function void connect_phase(uvm_phase phase);
        super.connect_phase(phase);
        master_agent.monitor.item_port.connect(scb.imp);  // 连接监视器到计分板
    endfunction
endclass

2. 阶段执行顺序与依赖实现

阶段 代码实现 依赖关系说明
Build 实例化axi_envaxi_agent等组件 必须优先完成组件创建
Connect 连接monitorscoreboard的TLM端口 依赖Build阶段的组件实例化
Run 启动虚拟序列生成AXI事务并驱动到DUT 依赖Connect阶段的端口连接
Extract 在计分板中收集事务统计信息 依赖Run阶段的仿真结果
Check 比较DUT输出与预期值 依赖Extract阶段的数据收集
Report 输出覆盖率报告和错误统计 汇总所有阶段结果

3. 关键阶段代码详解

Extract阶段(数据提取)

class axi_scoreboard extends uvm_scoreboard;
    int

相关文章:

  • uniapp uni.request重复请求处理
  • “以数治税”时代 数据要素的价值挖掘
  • C 指针和整数的加减法运算
  • 六、soul源码学习-SpringCloud项目本地运行
  • 【核心算法篇十七】《深度解析DeepSeek概率图模型:贝叶斯网络推理引擎的技术内核》
  • 【如何基于Debian构建Kali Linux】
  • Linux-进程概念
  • 配置haproxy实现MySQL服务器负载均衡
  • 【技术前沿】中安购物小票识别系统:1秒内精准识别,助力商场智能化升级!
  • 撕碎QT面具(7):container控件被spacer挤扁,无法进行控件添加的处理方案。
  • YOLOv12从入门到入土(含结构图)
  • Mysql测试连接失败
  • 【机器学习】K折交叉验证(K-Fold Cross-Validation)
  • Jenkins插件管理切换国内源地址
  • 基于STM32+ESP8266+手机 APP+阿里云的智能小车设计与实现(系统资料)
  • B树和B+树
  • 2013年下半年试题一:论软件架构建模技术与应用
  • 堆和栈的区别
  • 自制操作系统分享第四天
  • 数据库服务器是指什么?
  • 陕西省市监局通报5批次不合格食品,涉添加剂超标、微生物污染等问题
  • 媒体:“重病老人银行取款身亡”涉事家属称已和解,银行将支付十万
  • 收到延期付款利息,该缴纳增值税吗?
  • 选址江南制造总局旧址,上海工业博物馆建设有新进展
  • 古巴外长谴责美国再次将古列为“反恐行动不合作国家”
  • 夜读|尊重生命的棱角