183、PCIE IP核仿真与测试:从踩坑到调通的血泪实战

📅 2026/7/11 8:09:01
183、PCIE IP核仿真与测试:从踩坑到调通的血泪实战
183、PCIE IP核仿真与测试:从踩坑到调通的血泪实战上周调一块FPGA板卡,PCIE链路死活训练不起来。LTSSM状态机卡在Recovery状态,眼瞅着示波器上的参考时钟干净利落,配置空间寄存器读出来全是0。折腾两天才发现,原来是仿真阶段漏测了一个关键场景——下游设备在100ms内没有回复PME消息,导致主机侧误触发复位。今天索性把PCIE IP核仿真测试的坑摊开讲讲,这些经验可都是真金白银换来的。仿真环境搭建那些事儿很多工程师直接拿IP厂商给的example design就跑仿真了,这绝对要栽跟头。厂商例程通常只覆盖最理想路径,实际项目里各种边界条件才是魔鬼。建议自己搭一套分层验证环境:// 顶层testbench结构 module pcie_tb_top; // 千万别用绝对路径,移植会死人 `include "../../project_defines.v" // 时钟生成模块要带jitter模拟 clk_gen #(.JITTER(0.02)) refclk_100m(); // 这两个BFM(总线功能模型)必须自己调过 pcie_rc_bfm host_model(); // 主机端模型 pcie_ep_bfm endpoint_model(); // 设备端模型 // 抓训练过程的debug信号 initial begin $dumpfile("waves.vcd"); $dumpvars(0, pcie_tb_top); end end