酒店网站建设 源码上海aso苹果关键词优化
文章目录
- 前言
- 示例一: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); // 实例化环境endfunctiontask run_phase(uvm_phase phase);phase.raise_objection(this);vseq = axi_vseq::type_id::create("vseq");vseq.start(null); // 启动虚拟序列phase.drop_objection(this);endtask
endclassclass 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);endfunctionfunction void connect_phase(uvm_phase phase);super.connect_phase(phase);master_agent.monitor.item_port.connect(scb.imp); // 连接监视器到计分板endfunction
endclass
2. 阶段执行顺序与依赖实现
阶段 | 代码实现 | 依赖关系说明 |
---|---|---|
Build | 实例化axi_env 、axi_agent 等组件 | 必须优先完成组件创建 |
Connect | 连接monitor 与scoreboard 的TLM端口 | 依赖Build阶段的组件实例化 |
Run | 启动虚拟序列生成AXI事务并驱动到DUT | 依赖Connect阶段的端口连接 |
Extract | 在计分板中收集事务统计信息 | 依赖Run阶段的仿真结果 |
Check | 比较DUT输出与预期值 | 依赖Extract阶段的数据收集 |
Report | 输出覆盖率报告和错误统计 | 汇总所有阶段结果 |
3. 关键阶段代码详解
Extract阶段(数据提取)
class axi_scoreboard extends uvm_scoreboard;int