基于Chipscope的多片FPGA同时调试——奇怪现象之
某一FPGA在线Configuration时,也会造成其他几片FPGA同时重新加载程序
0 前言
最近的项目涉及5片FPGA在板级之间基于Aurora 8b10b协议互相通信,其中1个主FPGA和4个从FPGA,拓扑结构为星形拓扑结构,各个从FPGA与主FPGA之间通信相互独立,采用的接口为基于GTX硬核的双向差分接口。程序编写完毕后,需要涉及到主FPGA和从FPGA同时交互调试。
1 调试之奇怪现象
5片FPGA采用串行模式依次下载和调试,见下图所示。
调试工具选择ISE 自带的Chipscope工具。为简化调试难度,只对主FPGA和一个从FPGA之间进行点对点通信调试,其他从FPGA节点可以类比,调试过程大致如下:
Step1. 调试主FPGA收发通信。首先将从FPGA程序烧写完毕,然后采用Chipscope对主FPGA进行在线调试;设置对应的触发条件和抓取波形;测试结果与仿真结果相一致。
Step2. 调试从FPGA收发通信。首先将主FPGA程序烧写完毕,然后采用Chipscope对从FPGA进行在线调试;设置对应的触发条件和抓取波形;测试结果与仿真结果不一致。分析抓取的测试结果波形可知:从FPGA在Chipscope的Configuration完毕后,设置好触发条件,每次抓取的波形均为主机发送的第2帧数据,而不是第1帧数据,这是一个有规律的现象。
2 奇怪现象分析
说明:主FPGA和从FPGA通信链路建立完毕,且握手成功后,主机会自动发送第一帧数据给从机。
结合上述奇怪现象分析:每次从FPGA烧录完毕后,在线调试抓取的波形均为第2帧数据,那么请问:第1帧数据主机是在什么时候发送的呢?
猜想1: 从FPGA烧录完毕后,与主机握手成功,主机发送了第1帧数据。此时作者还尚未设置触发条件和开启触发按钮,故第1帧数据没有被抓到。
分析1:这个猜想初步看是成立的,符合奇怪现象的解释。但是有一个疑问:主FPGA程序是最先下载到板级SRAM中,且首次握手指令已发送完毕,此时的从FPGA尚未烧录程序,故当从FPGA在线调试时,未启动触发条件,主FPGA不会再次发送握手指令的,从而第1帧数据也就不会在触发条件未设置前就被发送给从机。
猜想2: 猜想1是根据奇怪现象进行倒推,得到的分析结果,但是不符合程序的逻辑解释。但抓取的波形结果表明,第一帧数据确实是在Chipscope触发条件尚未触发前就已成功发送。
百思不得其解后,故我提出一个大胆设想:从FPGA在chipscope烧录时,同时也不知以某种原因,造成主FPGA也重新加载其bit文件。可以等价于从FPGA烧录bit文件的同时,主FPGA也重新加载其bit文件,于是当二者均烧录完毕后,主FPGA和从FPGA握手成功,于是第1帧数据就被发送给从FPGA。此时,我尚未设置触发条件和在线抓取波形。
3 猜想验证
为了验证猜想,我对主FPGA发送握手指令进行了人为的延迟,设置延迟时间为10s。烧录主FPGA程序后,我通过chipscope在线调试从FPGA。设置好触发条件后,我重新Configuration从FPGA程序,Configuration完毕后,直接点击抓取波形按钮,故该过程没有启动vio核的外部触发按键,即从FPGA没有给主FPGA发送触发指令。果然经过大约10s后,触发条件被满足,抓取到波形信号,经分析,果然为第1帧数据波形。猜想被验证。
后记: 虽然自己的猜想得以验证,但是此时内心既激动又有点复杂,这个奇怪现象困扰了我有1天时间,自己之前尚未涉及多FPGA板级在线调试,故无法解释该现象。 虽然现在知道改现象产生的表面原因,但是却不知道该现象出现的本质原因,所以内心还是有点复杂的。
Mark一下,希望可以给遇到相同问题的网友一点启发,如果有网友知道改现象的本质原因,请帮忙指教,谢谢了!!!