1.流水线设计debug
- 仿真时出现同一信号在不同输入下,内部电路信号翻转出现不一致。
- 首先对于控制信号,检查所有的控制信号是否都进行了流水线同步传输。
- 检查数据处理电路中,数据赋值是否出现错误,选择电路是否出现错误。
- 检查数据赋值时,左右两边的位宽是否一致,一定要避免接收寄存器位宽小于源寄存器的情况,这样会 导致右侧的计算结果不能正确传输。
- 注意复位电路,在仿真的时候在不同的输入的情况下,可能会受到影响。
-
检测某一信号发生错误时,按照寄存器的流水线,找到该流水线的每个寄存器,然后从发端寄存器向后进行排查,直到找到第一个发生错误的寄存器,然后检查该寄存器周边电路,进行排查。
-
在流水线设计中,还有个发生错误的可能,就是在流水线某一段模块中,肯能会有反馈电路的存在,比如前级流水线寄存器计算所需要的数据,需要后级寄存器的结果,如果某一段数据的参考是连续的,这种反馈电路会导致前级寄存器所需要的数据不能及时更新,这时电路的设计思路可能就需要进行修改了,以个人经验来看,可以从两个方向进行修改:
- 从合适的地方中断流水线,增加FIFO、ram缓存数据,重新整理一条流水线。
- 降低流水线的速度,比如我们计算数据是一组一组进行的,而每一组数据都需要使用上一组的计算结果,这时,可能每一组的前几个数据的计算就会因为后级流水线还未将前一组数据计算完毕,而无法更新当前组所需要的数据,我们可以在每一组数据开始的地方,将数据等待几个时钟,等到后级寄存器数据将前一组的最后一组数据更新完成,再开始计算当前组的数据,这样就可以错开更新数据的延时,如果不在乎那几个延时之中的话,就可以这样设计,可以减小很大的电路面积。而且其复杂度也有很大的降低。
总之,流水线设计功能发生错误,绝大部分都是控制信号早了几个clk或晚了几个clk,时序过早和过晚是最常见的,也是最头疼的;其次就是数据流水线的问题,可能部分数据计算上不会发生错误,当测试的数据量多了,就会有几组数据计算错误,这种可以按照上面思路进行debug,但大部分如果不是因为控制脉冲过早或过晚,极有可能是因为流水线上,某一部分选择电路少了一级或多级寄存器导致的。