5.2 时钟结构


上一章阐述了发送部分所有的模块,本章就开始对实现高速串行数据发送所需的模块进行详细的阐述。本章主要描述的有两个模块,一是数据接口,二是8B/10B编码。对于8B/10B编码的实现机制可参考我另一篇文章

第一步,我们先大致了解下用户接口是怎么配置的。

如下图是我们用户接口中涉及到的数据发送相关信号,看到这些信号,我想你会有这样三个疑问,一是这些信号都是干嘛的?如何实现数据发送呢?为啥会有两个时钟呢?接下来就对此一一解答。

image.png

首先,第一个问题,这些信号都是干嘛的?如下表所示

端口

方向

时钟域

描述

TXCHARDISPMODE [3:0]

In

TXUSRCLK2

这两个信号是搭配使用的

禁用8B / 10B编码时

用于扩展20位和40TX接口的数据总线。

当启用8B / 10B编码时

用于手动实现运行差异(RD)的控制

TXCHARDISPVAL [3:0]

In

TXUSRCLK2


 

 

 

TXDATA [310]

In

TXUSRCLK2

用于传输数据的总线。此端口的宽度取决于TX_DATA_WIDTH

TX_DATA_WIDTH = 16,20TXDATA [150] = 16
TX_DATA_WIDTH = 32,40TXDATA [310] = 32

位宽是2040,则禁用8B / 10B编码器 TXCHARDISPVALTXCHARDISPMODE端口与TXDATA端口连接。

TXUSRCLK

In

Clock

该端口用于为内部TX PCS数据路径提供时钟。

TXUSRCLK2

In

Clokc

该端口用于将FPGA逻辑与TX接口同步。当用户提供TXUSRCLK时,该时钟必须与TXUSRCLK正边沿对齐。

接下来我们来做进一步的阐述,以此了解如何实现数据发送的

对于发送端的数据接口,我们有4种选择,也就是上表中的16203240。这在我们配置选项卡里可以通过配置实现,如下表。另外内部数据位宽“Internal Data Wudth(bits)”只有1620两种选择,也就是说如果用户端选择了3240,在其内部会进行一次转换。

image.png

对于8B/10B编码,我们可以使能也可以不使能也可以选择64B/66B编码。

如果不使能的话,如上表所说,当我们数据接口在IP中配置为2040时就需要“TXCHARDISPMODE”和“TXCHARDISPVAL”的帮忙了,如下表所示,我们可以定义一个20bit40bit的寄存器,在赋值时按照下图分别赋值。

image.png

我们一般情况下是使能的,这样使用起来更简单,这时“TXCHARDISPMODE”和“TXCHARDISPVAL”就有了极性控制的作用。高速串行接口需要保证直流平衡,需要计算不平衡度,这是硬核模块会帮我们实现的,但我们也可以自己来控制,你看,不是说接口复杂呢?什么都可以让你看操作。如果自己控制就需要这两个信号了

TXCHARDISPMODE

TXCHARDISPVAL

作用

0

0

这俩信号没用,有8B/10B硬核自动计算“RD”

0

1

翻转运行差异

1

0

强制RD为负

1

1

强制RD为正

再插一句,如果上面有什么概念不懂,可参考《1.5 深入探究下高速串行通信常用的编码方式—8B/10B编码 (fpgaup.com)》一文,看来就懂了,如下是GTP8B/10B编码方式,大概看看就行,而且ug482的附录C有具体的编码表。

image.png

再来说下最后一个问题,为什么俩时钟,这俩时钟干嘛的?具体的呢会在发送端口的时钟接口这章节描述,在这只需要知道,

如果用户数据接口是1620bit,那么,TXUSRCLk= TXUSRCLK的,如果户数据接口是3240bit2TXUSRCLk= TXUSRCLK,就这么点关系,TXUSRCLK可以说没啥用

最后总结下,如果我们使能8B/10B编码且自己不控制不平衡度的话,那么数据发送接口只需要3个信号,如下图,另外那两或者在配置IP时不勾选,或者直接写0即可。

image.png

而且实现起来也很简单,将gt0_rxcharisk_out置一表示发送K码,否则就是发送数据

image.png

    最后不得不说,GTP就是个纸老虎,看着那么多接口让人头疼,其实是为了实现其灵活性,真正的使用起来却是简单得很,所以不要畏难,那是你的双眼被蒙蔽了。







快来扫描下方二维码关注公众号,领取站内所有相关资料,所有哦~

有建议、有需求、有疑问、联系我

<