GTX/GTH QPLL CPLL学习之Aurora

        

目录

1 基础知识

2 Aurora  使用过程中报错


1 基础知识

Xilinx的7系列FPGA随着集成度的提高,其高速串行收发器不再独占一个单独的参考时钟,而是以Quad来对串行高速收发器进行分组,四个串行高速收发器和一个COMMOM(QPLL)组成一个Quad,每一个串行高速收发器称为一个Channel。

QPLL和CPLL的区别,在于两者支持的线速率不同,对于CPLL来说,支持的线速率位1.6GHz到3.3GHZ之间,而对于QPLL来说,GTX支持的线速率分两档,Lower Baud支持5.93GHz~8.0GHz,Upper Baud支持9.8GHz~12.5GHz,对于GTH则不分档位,支持的线速率为8.0GHz~13.1GHz。

Xilinx的7系列FPGA根据不同的器件类型,集成了GTP、GTX、GTH以及GTZ四种串行高速收发器,四种收发器主要区别是支持的线速率不同,下图可以说明在7系列里面器件类型和支持的收发器类型以及最大的收发器数量。

以XC7K325T为例,GTX在FPGA内部如下图所示:

 

对于每一个串行高速收发器,其包含了发送部分和接收部分,内部结构如下图

 

 

发送端和接收端功能独立,均由PMA(Physical Media Attachment,物理媒介适配层)和PCS(Physical Coding Sublayer,物理编码子层)两个子层组成。其中PMA子层包含高速串并转换(Serdes)、预/后加重、接收均衡、时钟发生器及时钟恢复等电路。PCS子层包含8B/10B编解码、缓冲区、通道绑定和时钟修正等电路。

GTX发送端处理流程:首先用户逻辑数据经过8B/10B编码后,进入一个发送缓存区,该缓冲区主要是PMA子层和PCS子层两个时钟域的时钟隔离,解决两者时钟速率匹配和相位差异的问题,最后经过高速Serdes进行并串转换,有必要的话,可以进行预加重、后加重。值得一提的是,如果在PCB设计时不慎将TXP和TXN差分引脚交叉连接,则可以通过极性控制来弥补这个设计错误。接收端和发送端过程相反,相似点较多,这里就不赘述了,需要注意的是RX接收端的弹性缓冲区,其具有时钟纠正和通道绑定功能。

如果用户需要使用其他Quad的参考时钟源来作为当前Quad的参考时钟,在满足下面三个条件的情况下可以使用:

1、只能使用当前Quad上方的Quad的参考时钟;

2、只能使用当前Quad下方的Quad的参考时钟;

3、一个Quad的参考时钟源不能驱动超过3个Quad的收发器(只能驱动当前Quad和上下方相邻两个Quad);

参考网址:

https://cloud.tencent.com/developer/article/1528849

 

2 Aurora  使用过程中报错

 

从这个错误里,提示我们两点:

A)

在配置IP核第二页的时候,其实就是每个通路分配引脚的过程。这里选择通路的时候,要和引脚分配严格对应。否则,生成bit文件可能不会报错(在只使用一个bank接口的时候,LAN就选错了,但是也顺利生成了bit文件)。对应方式如下:

 

 

GTHQ8 对应bank 118这个quad,上图对应的就是bank118 的MGTX1。

B)

 QPLL时钟驱动该QUAD以外的GTX模块报错。虽然错中提示中让添加时序约束,把错误降为warning。但是,也说明了不建议用,同时也尝试过,不能正常生成bit文件。

差分时钟可以最多驱动12个GTX正常工作,但是在驱动时要注意GTX_COMMOM模块,即一个GTX_COMMON最多可以驱动同一个QUAD上的4个GTX_CHANNEL,如果说要驱动超过四个或者其他QUAD上的GTX,必须要生成新的GTX_COMMON模块,来保证其他QUAD上的GTX可以正常工作。

 

这是检查了一下工程发现了问题,主核的Aurora IP核中包含了GTX_COMMON模块,但是从核GTX_COMMON模块在IP核的外面被注释掉了,因为在之前的设计中,两个IP核的四个GTX在同一个BANK中,所以在从核的顶层将GTX_COMMOM模块删掉了,所以该模块产生的信号(gt_qpllclk_quad1_in_i和gt_qpllrefclk_quad1_in_i)采用了主核产生后外接到从核的工作模式。

 

发现问题后,将从核的GTX_COMMON模块添加到从核的顶层,并且将gt_qpllclk_quad1_in_i和gt_qpllrefclk_quad1_in_i这两个信号从外接改成了从核的GTX_COMMON模块产生后再接到IP核的方式,问题解决。

 

参考网址:https://blog.csdn.net/d179212934/article/details/84852890

根据2  修改代码

修改Xilinx自带IP核源码的方法:

https://blog.csdn.net/FPGADesigner/article/details/81807296

 

代码结构如下:

 

 

   Aurora_8b10b  是最顶层,看有个链接,有人说顶层更改一些IO端口以后,更改IP核报错,为了躲避这个风险,就没有更改最顶层的IO端口。所以在Aurora_8b10b_8_core这个文件里删除端口上的公共时钟。

 调用 _core 的时候common的信号没用到。这些信号在 _core里面自己生成。

 

 

Aurora_8b10b  中更改:  定义下面5个公共端口为 wire 型,同时初始化为0(没有初始化为0 编译最终结果会报严重警告,端口未连接).

 

Aurora_8b10b_8_core 中修改:

端口上删除 公共模块中 的5个信号,代码中定义为wire型。把代码中原本需要外部输入的信号变换成用gt_common输出。gt_common的输入有复位  和initclk

core  代码的 aurora_8b10b_8_GT_WRAPPER 中添加这一部分,具体不会的抄第一个核的代码

 添加gt_common模块。IP核源码中不会添加.V 文件,所以,gt_common直接在改模块中添加,不做成独立的.V

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章