1. PCIe 内存交易异常验证概述
在芯片验证领域,PCIe总线的异常场景验证是确保设备可靠性的关键环节。今天我们将深入探讨PCIe内存交易(MemRd/MemWr)的异常处理机制,这是每位验证工程师必须掌握的核心技能。
PCIe规范明确要求,当Root Complex(RC)发起非法内存访问时,Endpoint(EP)必须返回特定的错误完成包(Completion with Error),而不是简单地丢弃请求或导致系统挂死。这种机制保证了系统的健壮性和可调试性。
2. PCIe核心错误响应类型解析
2.1 不支持的请求(UR)
UR(Unsupported Request)是最常见的错误响应类型,主要发生在以下场景:
- 访问未配置或超出BAR地址范围的地址空间
- 发送设备不支持的TLP类型
- 32位访问使用了不对齐的奇数地址
在验证过程中,我们需要特别关注:
- 异常交易后必须返回UR响应
- UR响应格式必须严格符合PCIe规范要求
- 系统链路状态应保持稳定(LTSSM状态为L0)
2.2 配置请求错误(CA)
CA(Configuration Request Error)主要针对配置空间的非法访问:
- 访问配置空间的保留位
- 无权限的配置空间写操作
- 非法的配置交易长度
关键区别点:
- CA仅用于配置类异常
- 内存交易异常不应返回CA
- CA有特定的错误码格式
3. 典型内存异常场景与UVM实现
3.1 验证环境准备
我们复用Day8搭建的基础验证环境:
systemverilog复制class pcie_transaction_c extends uvm_sequence_item;
// TLP类型字段
bit [7:0] tlp_type;
// 32位地址
bit [31:0] addr;
// 数据负载
bit [31:0] data;
// 传输长度
bit [9:0] length;
// ...其他必要字段
endclass
class pcie_env_c extends uvm_env;
pcie_sequencer_c sequencer;
pcie_driver_c driver;
pcie_monitor_c monitor;
pcie_scoreboard_c scoreboard;
// ...其他组件
endclass
3.2 非法地址访问场景
以下是完整的非法地址读序列实现:
systemverilog复制class mem_rd_ur_addr_seq extends uvm_sequence #(pcie_transaction_c);
`uvm_object_utils(mem_rd_ur_addr_seq)
pcie_transaction_c tlp;
// BAR0范围:0x8000
