- 主题:请教一下 一个收发器的奇怪问题
背景:使用FPGA是A家cyclone 10 gx芯片,用两块完全一样的板子,使用10GBASE-R内核,外部使用光模块。两块板子用光纤互联,一块板子A从串口收到命令后通过光纤发送一段数据给板子B,板子B收到数据后回发给板子A,板子A再将数据通过串口发出去。数据量不大,内部缓冲足够大,所以数据不会溢出。
问题是:程序烧写到flash后,上电加载板子A发送能工作,板子B的接收不工作,iopll和atx pll锁定都正常,rx_block_lock也正常。板子B的程序不作任何改动,通过jtag重新下载一次,工作就正常了……尝试将板子B掉电重新上电不好使。尝试过增加重校准也不好使。
各个大神有类似的经验吗,麻烦不吝指教…………被困扰了很久。尝试了很多方法都不好使。。
指点个方向也好……感谢大家了!!
--
FROM 223.72.74.*
感觉可能和上电校准相关。FPGA程序启动前100Mhz校准时钟和Transceiver参考时钟有没有保持稳定输出?另外有没有控制FPGA的上电时序?
【 在 idnil 的大作中提到: 】
: 背景:使用FPGA是A家cyclone 10 gx芯片,用两块完全一样的板子,使用10GBASE-R内核,外部使用光模块。两块板子用光纤互联,一块板子A从串口收到命令后通过光纤发送一段数据给板子B,板子B收到数据后回发给板子A,板子A再将数据通过串口发出去。数据量不大,内部缓冲足够大,所以数据不会溢出。
: 问题是:程序烧写到flash后,上电加载板子A发送能工作,板子B的接收不工作,iopll和atx pll锁定都正常,rx_block_lock也正常。板子B的程序不作任何改动,通过jtag重新下载一次,工作就正常了……尝试将板子B掉电重新上电不好使。尝试过增加重校准也不好使。
: 各个大神有类似的经验吗,麻烦不吝指教…………被困扰了很久。尝试了很多方法都不好使。。
: ...................
--
修改:gzsz FROM 113.90.42.*
FROM 113.90.42.*
非常感谢回复!
有控制上电时序的,外部使用了个单片机控制。100MHz时钟和参考时钟refclk都是自由运行。按上电控制时序留的时间都比较富裕,完成最后一步上电前应该都能稳定。。有一个问题是参考时钟refclk是飞线操作的。之前准备用cdcm6208生成,后来发现生成不了这个频率。就飞线另加了一片差分晶振。也许飞线质量不太好。但是我尝试过上电后直接重新校准了一遍也不好使啊。
按个人理解,jtag下载一遍应该不会引起重新校准吧,所以就排除了校准问题。。jtag重新加载一遍就正常了是因为什么改变了呢
【 在 gzsz 的大作中提到: 】
: 感觉可能和上电校准相关。FPGA程序启动前100Mhz校准时钟和Transceiver参考时钟有没有保持稳定输出?另外有没有控制FPGA的上电时序?
--
FROM 121.69.2.*
JTAG下载程序后是会重新校准的。自动校准是在程序加载后进行的。之前我遇到过类似的问题,上电从flash加载程序Transceiver工作异常,用JTAG再下一遍就能正常,后来检查发现从flash加载完程序后参考钟还没完全稳定,就把flash加载模式由X4改成X1,并且加载时钟速度选了最慢的一档,延长程序加载时间,上电从flash加载就能正常工作了。不过你的参考时钟信号质量不好可能也是个问题点。
【 在 idnil 的大作中提到: 】
: 非常感谢回复!
: 有控制上电时序的,外部使用了个单片机控制。100MHz时钟和参考时钟refclk都是自由运行。按上电控制时序留的时间都比较富裕,完成最后一步上电前应该都能稳定。。有一个问题是参考时钟refclk是飞线操作的。之前准备用cdcm6208生成,后来发现生成不了这个频率。就飞线另加了一片差分晶振。也许飞线质量不太好。但是我尝试过上电后直接重新校准了一遍也不好使啊。
: 按个人理解,jtag下载一遍应该不会引起重新校准吧,所以就排除了校准问题。。jtag重新加载一遍就正常了是因为什么改变了呢
: ...................
--
FROM 113.90.42.*
太赞了,这个经验太有参考意义了


我按这个思路调整一下。。谢谢。
【 在 gzsz 的大作中提到: 】
: JTAG下载程序后是会重新校准的。自动校准是在程序加载后进行的。之前我遇到过类似的问题,上电从flash加载程序Transceiver工作异常,用JTAG再下一遍就能正常,后来检查发现从flash加载完程序后参考钟还没完全稳定,就把flash加载模式由X4改成X1,并且加载时钟速度选了最慢的一档,延长程序加载时间,上电从flash加载就能正常工作了。不过你的参考时钟信号质量不好可能也是个问题点。
--
FROM 121.69.2.*
如果是这个问题,板载的硬件复位一下就知道了。
【 在 idnil (活着) 的大作中提到: 】
: 太赞了,这个经验太有参考意义了


: 我按这个思路调整一下。。谢谢。
--
FROM 120.245.132.*
谢谢回复,
单纯的硬件复位不会引起重校准操作。上电或者进行校准寄存器使能操作才行。
今天没什么进展。又试了一次在fpga上电前留2s以上的时间给外部参考时钟稳定,还是没见效果。
Ps:之前对mac的数据读写用的是312.5mhz的时钟,没有参照例程先进行了一次降频的操作。现在想来觉得有点冒进了。准备先照例程调整一下再说。
后续如果有进展我再上来贴出来,便于有需要的人参考。
【 在 jiu 的大作中提到: 】
: 如果是这个问题,板载的硬件复位一下就知道了。
:
--
FROM 221.222.20.*
大家好,问题终于解决了。问题点有点偏,可能对多数情况借鉴意义不大。但是还是简述一下,做个总结。
问题出在从.sof文件转换成.jic文件的软件上。
如前所述,我用了两块一样的板子来调试,程序有两个,用master和slave来代指。
slave工程是由复制master工程文件夹并修改了其中一个文件功能生成。
在“从.sof文件转换成.jic文件的软件”中有一项是选择.sof文件。我原以为这个文件是相对目录,所以slave工程自动指向了新的.sof文件。但实际这个软件采用的是绝对目录,也就是说它还是引用的master工程的.sof文件,而且软件里没有这个文件的目录信息。所以这就导致了生成了.jic文件其实一直是不对的,一直是master工程一样的.jic。。所以导致每次上电功能都不正确,而重新下载.sof功能又正确了。。。
再次感谢大家的帮助!
【 在 idnil 的大作中提到: 】
: 谢谢回复,
: 单纯的硬件复位不会引起重校准操作。上电或者进行校准寄存器使能操作才行。
: 今天没什么进展。又试了一次在fpga上电前留2s以上的时间给外部参考时钟稳定,还是没见效果。
: ...................
--
FROM 121.69.2.*