多通道Aurora 8b10b核收发通信

                                                        多通道Aurora 8b10b核之参考时钟如何合理分配  

0    背景

        最近项目涉及到采用Aurora 8b10b IP核进行多通道收发通信,即一片主FPGA与4片从FPGA采用独立的aurora通信链路进行数据收发通信。程序编写完毕后,在ISE14.7工具进行编译阶段,遇到各个GTXE2_CHANNEL链路通道与GTXE2_COMMON参考时钟管理单元二者位置不匹配的问题,见下文图1所示。

 

1   问题分析

       

多通道Aurora 8b10b核收发通信_第1张图片

多通道Aurora 8b10b核收发通信_第2张图片

        由上述log信息可知,ERROR:Place:1390 - Unroutable Placement! 问题出错的地方为:4个GTXE2_CHANNEL链路通道与其各自对应的GTXE2_COMMON参考时钟管理单元二者位置不匹配的问题。4个GTXE2_CHANNEL链路通道已进行了位置约束,但是4个GTXE2_COMMON没有进行位置约束。

        我初步思路:给4个GTXE2_COMMON添加位置约束。查看planahead工具,分配的4个GTXE2_CHANNEL均位于同一个GTX_QUAD中,对应的GTXE2_COMMON位置为GTXE2_COMMON_X0Y3。于是我给4个链路通道的GTXE2_COMMON均添加约束为LOC=GTXE2_COMMON_X0Y3。再次进行编译,提示错误为4个GTXE2_COMMON无法组合在同一个GTXE2_COMMON中。问题信息见下图2所示。

 

2   问题再分析

        上述log信息提示错误4个GTXE2_COMMON无法组合在同一个GTXE2_COMMON中。按照log信息的意思:需要4个独立的GTXE2_COMMON才可以?    但是,之前4个GTXE2_COMMON不添加位置约束时,对应的就是4个独立的GTXE2_COMMON,结果编译错误。查阅Xilinx官方手册UG482 7 Series FPGAs GTP Transceivers User Guide,得到信息:位于同一个GTX_QUAD中的4个GTXE2_CHANNEL可以共用一个GTXE2_COMMON。示意图见下图3所示。

多通道Aurora 8b10b核收发通信_第3张图片

多通道Aurora 8b10b核收发通信_第4张图片

        如果GTXE2_CHANNEL通道数目超过4个,即GTXE2_CHANNEL位于2个不同的GTX_QUAD,则需要额外增加1个GTXE2_COMMON,单一IBUFDS_GTE2差分参考时钟上限支持12个GTXE2_CHANNEL。

        那么,把4个独立的GTXE2_CHANNEL约束在同一个GTXE2_COMMON中,应该是满足设计要求的,那么为什么会提示错误信息Error:Pack:2811呢?

 

3   问题解决

        由上图fig2-5可知:4个GTXE2_CHANNEL共享一个GTXE2_COMMON,意思就是程序中只能出现一个GTXE2_COMMON,但是打开程序例化的Aurora IP核源文件发现,每个IP核均包含GTXE2_COMMON这个原语。因此,需要对Aurora IP核源文件进行修改。

多通道Aurora 8b10b核收发通信_第5张图片

Step1:  只在第1个IP核中保留GTXE2_COMMON原语,其余3个IP核中,将GTXE2_COMMON原语删除;

Step2: 修改4个GTXE2_CHANNEL的输入的PLLCLK和PLLREFCLK 均采用上述GTXE2_COMMON输出得到;

那么,就可以间接得出,该4个GTXE2_CHANNEL采用的是同一时钟源,故它们的工作频率必须相同,否则不满足设计要求。

    经过上述对Aurora IP核源文件进行修改后,再次编译,则错误消失,问题得到解决。

 

参考资料:

1.  UG482     7 Series FPGAs GTP Transceivers User Guide;

2.  网友博客:《AURORA核多通道绑定使用注意事项》http://www.pianshen.com/article/2341132403/

非常感谢这位网友博客的分享,启发了我解决问题的思路,再此表示非常感谢!!!

 

 

 

你可能感兴趣的:(FPGA应用篇)