一个软复位引发的问题

本文转载自: FPGA的现今未微信公众号

前面介绍了关于软复位的一些设计思路,这里介绍一个曾经遇到的案例:软复位处理不当导致寄存器通路挂死的问题。

背景:如下图所示,FPGA通过PCIE接口与X86通信,QDMA出一个axi_lite接口的配置通道,软复位寄存器就是通过这个通道配置。原来的设计思路就是想通过软复寄存器可以复位除QDMA以外的所有逻辑,复位的方式采用的是手动复位、自动解复位。

现象:每次配置软复位寄存器后,PCIe通道就挂死,配置其他寄存器没有问题。

定位过程:
1、该问题是修改软复位寄存器后出现的问题,只有配置软复位寄存器才会出现问题,所以初步断定是和软复位寄存器有关。
2、因为寄存器通道已经挂死,无法读取寄存器,只能通过抓信号的方式定位,抓取QDMA的axi_lite接口,查看写通道,发现写命令和写数据通道都是正常,但是没有抓到写响应通道的信号。
3、通过分析想到,有没有可能是复位后,配置通道逻辑也复位了,所以写响应就发送不出去?后来抓写响应信号,发现配置软复位寄存器后,一直抓不到,说明写响应信号确实没有产生。
4、分析代码发现,配置通道产生软复位寄存器以后,立马(一个时钟周)就复位了整个逻辑,包括配置通道逻辑,而写响应就是由配置通道逻辑产生的,被复位后无法及时产生。

解决方案:

解决的方案很简单,就是写软复位寄存器以后,并不能马上复位,所以复位方案修成延时复位即可。具体实现可以参考软复位的一些设计思路
总之,复位问题是一个说简单也简单,说复杂也复杂的问题,关键是在项目方案阶段做好规划和设计,有清晰明确的复位路径即可。