跳转至

验证环境架构

1. UVM 验证环境

1.1 顶层架构

┌─────────────────────────────────────────────────────┐
│                   UVM Test                          │
│  ┌───────────────────────────────────────────────┐  │
│  │               Environment                     │  │
│  │  ┌─────────┐  ┌─────────┐  ┌─────────┐      │  │
│  │  │ Agent   │  │ Agent   │  │ Agent   │      │  │
│  │  │ (AXI-I) │  │ (AXI-D) │  │ (APB)   │      │  │
│  │  └─────────┘  └─────────┘  └─────────┘      │  │
│  │  ┌──────────────────────────────────────┐    │  │
│  │  │           Scoreboard                │    │  │
│  │  └──────────────────────────────────────┘    │  │
│  │  ┌──────────────────────────────────────┐    │  │
│  │  │        Coverage Collector           │    │  │
│  │  └──────────────────────────────────────┘    │  │
│  │  ┌──────────────────────────────────────┐    │  │
│  │  │          Reference Model            │    │  │
│  │  └──────────────────────────────────────┘    │  │
│  └───────────────────────────────────────────────┘  │
└─────────────────────────────────────────────────────┘

2. Agent 架构

2.1 AXI Agent

┌─────────────────────────────────────────┐
│            AXI Agent                    │
│  ┌─────────────┐  ┌─────────────┐      │
│  │  Sequence   │  │   Driver    │      │
│  │  Item       │─►│  (AXI)      │      │
│  └─────────────┘  └─────────────┘      │
│  ┌─────────────┐  ┌─────────────┐      │
│  │  Sequence   │  │  Monitor    │      │
│  │  (Master)   │─►│  (AXI)      │      │
│  └─────────────┘  └─────────────┘      │
└─────────────────────────────────────────┘

2.2 APB Agent

┌─────────────────────────────────────────┐
│            APB Agent                    │
│  ┌─────────────┐  ┌─────────────┐      │
│  │  Sequence   │  │   Driver    │      │
│  │  Item       │─►│  (APB)      │      │
│  └─────────────┘  └─────────────┘      │
│  ┌─────────────┐  ┌─────────────┐      │
│  │  Sequence   │  │  Monitor    │      │
│  │  (Master)   │─►│  (APB)      │      │
│  └─────────────┘  └─────────────┘      │
└─────────────────────────────────────────┘

3. Scoreboard

3.1 功能

  • 从 Monitor 接收实际数据
  • 从 Reference Model 接收预期数据
  • 比较实际与预期结果
  • 报告错误

3.2 架构

┌─────────────────────────────────────────┐
│            Scoreboard                   │
│  ┌─────────────┐    ┌─────────────┐    │
│  │  Actual Q   │    │ Expected Q  │    │
│  │  (Monitor)  │    │ (Ref Model) │    │
│  └──────┬──────┘    └──────┬──────┘    │
│         │                  │           │
│         ▼                  ▼           │
│  ┌─────────────────────────────────┐  │
│  │        Comparator               │  │
│  └─────────────────────────────────┘  │
└─────────────────────────────────────────┘

4. Coverage Collector

4.1 功能覆盖率

  • 指令覆盖
  • 地址覆盖
  • 数据覆盖
  • 状态覆盖
  • 交叉覆盖

4.2 覆盖率模型

covergroup instr_cg;
    instr_type: coverpoint instr {
        bins alu = {ADD, SUB, AND, OR};
        bins load = {LB, LH, LW};
        bins store = {SB, SH, SW};
        bins branch = {BEQ, BNE};
    }

    addr_range: coverpoint addr {
        bins low = {[0:1023]};
        bins mid = {[1024:2047]};
        bins high = {[2048:4095]};
    }

    instrXaddr: cross instr_type, addr_range;
endgroup

5. Reference Model

5.1 功能

  • 模拟 DUT 行为
  • 生成预期结果
  • 用于 Scoreboard 比较

5.2 实现

  • SystemVerilog 行为级模型
  • 与 RTL 并行运行
  • 独立时钟域

6. 验证流程

┌─────────┐    ┌─────────┐    ┌─────────┐    ┌─────────┐
│  编写   │───►│  编译   │───►│  仿真   │───►│  分析   │
│  测试   │    │  代码   │    │  运行   │    │  结果   │
└─────────┘    └─────────┘    └─────────┘    └─────────┘
                                              ┌─────────┐
                                              │  回归   │
                                              │  测试   │
                                              └─────────┘

7. 回归测试

7.1 自动化流程

  1. 编译所有测试
  2. 并行运行测试
  3. 收集覆盖率
  4. 生成报告
  5. 比较基线

7.2 回归套件

套件 测试数 运行时间 频率
Smoke 10 5 分钟 每次提交
Full 100 2 小时 每日
Regression 500 8 小时 每周