前段时间接触一个关于USB FPGA验证的工作,将SOC中设计好的USB RTL在FPGA上综合,并设计usb子板完成整个项目,在该项目中整理以下几点遇到的问题:
1.USBD在板上调试时不能正常执行,现象是产生中断后程序莫名跑飞,原因是在SOC移植到FPGA中调整了架构,中断向量表指向错误的地址空间;
2.USBD正常运行后,通过子板的接口和PC相连无反应,查询设备管理器看到未知设备,使用USB协议分析仪抓取到到的数据中只看到host部分的协议包,经过仔细排查,发现还是在FPGA移植中产生的问题,SOC中设计的usb controller是低复位,FPGA中所用的PHY芯片是高复位,导致子板一直处于复位状态;
3.通过USB协议分析仪看到正确的host协议包,但是device仍无响应,通过vivado中chipscope工具抓取UTMI信号,发现UTMI总线中的datain信号上的数据不是预期的数据,通过排查,发现原因是FPGA子板中的几个接口存在问题,导致datain的数据产生错误,重新xdc管脚约束后datain上看到预期数据;
4.虽然datain上数据正常,但是datain的8bit数据在拼接成16bit数据传输时存在错误,拼接了许多垃圾数据,发现是rxvalid信号存在问题,导致多次拼接数据,原因是utmi模块的clk信号是由PHY芯片提供,信号传输存在延时,将该信号延迟半个时钟周期(反相处理)后正确。
后续问题继续补充。
以下是SOC验证中的几点经验:
1.任何一个系统或是模块,首先需要测试的是电源,时钟,复位等信号;
2.关于FPGA的架构如下: