点击进入高速收发器系列文章导航界面
1、Aurora 64B/66B原理
Aurora 64B/66B的原理与Aurora 8B/10B的原理基本上一致,通道概述如下所示。
上图的Aurora 64B/66B Core就是该IP,一个IP可以驱动多个高速收发器,该内核的主要内容如下图所示,也与Aurora 8B/10B的内部构成一致。
Aurora 64B/66B的全双工模式构成如下图所示,发送端和接收端都可以给用户提供AXI4-Stream和Stream两种接口,最右侧是高速收发器。中间就是该IP内部的一些处理逻辑,因此可知该IP就是在GTX的基础上封装得到的,内部很多内容与GTX是一致的。
Aurora 64B/66B的内核时钟架构如下所示,如果看过我前面GTX相关的文章,那么理解下图就水到渠成了,应该都不需要我在分析。
紫红色方框是高速收发器参考时钟与QPLL的处理,蓝色方框就是高速收发器结构,tx_out_clk经过TX_MMCM后生成txusrclk和txusrclk2,这部分也与GTX的设计一致。
txusrclk2作为用户逻辑的参考时钟user_clk,因此user_clk的频率与txusrclk2的频率一致,计算方式与GTX的txusrclk2计算方式一致,本文就不再赘述了。
红色方框包含发送端的加扰模块和接收端的解扰模块,因此用户使用该IP时,就不需要考虑加扰和解扰了。
由上图知,Aurora 64B/66B的初始化时钟与其余时钟是独立的,便于复位和初始化内核,因此需要单独提供。
上述的讲解与前文通过GTX实现自定义64B66B的功能基本一致,但是该IP还具备流控和CRC校验等功能,在Aurora 8B/10B文中已经讲解过,本文就不再赘述。
在讲解一下该IP复位和初始化相关内容,如下图所示,该IP会给用户提供一些状态和控制信号,便于用户调试。
该IP复位和初始化流程如下所示,Lane_up指示通道中的哪些通道已完成通道初始化部分。仅当内核(所有通道和内部逻辑)完成整个初始化过程后,channel_up才会被拉高。
Aurora 64B/66B内核可以在Channel_up拉高之前接收数据,但Channel_up拉高之前不能发送数据,因此可以把Channel_up取反用作全双工模式下发送端的复位信号。
双工模式下,Aurora 64B/66B上电时序如下图所示,pma_init(gt_reset)和Reset_pb(reset)信号均为高电平,INIT_CLK和GT_REFCLK必须始终保持稳定。
当两个时钟都稳定时,先拉低pma_init(gt_reset),之后拉低Reset_pb(reset)。
双工模式下的正常复位时序如下图所示,先把Reset_pb(reset)拉高128个时钟周期,然后再拉高pma_init(gt_reset)一段时间(图中为1S)。之后先拉低pma_init(gt_reset),最后拉低Reset_pb(reset)信号。
通过上述讲解可知,Aurora 64B/66B包含Reset_pb和pma_init两个复位信号,他们的区别是什么呢?
pma_init(gt_reset)的范围大一些,会先复位高速收发器,然后复位内核逻辑。而Reset_pb(reset)只会复位内核逻辑,不会复位底层的高速收发器。
下图是双工模式下Reset_pb(reset)的复位时序,Reset_pb(reset)拉高的最短时间为128个user_clk周期。经过一段时间后,channel_up被拉低,表示传输通道建立失效。
下图是双工模式下的pma_init(gt_reset)复位时序,pma_init(gt_reset)至少拉高128个init_clk周期。经过一段时间后,user_clk会暂停产生时钟(因为user_clk的时钟来源是GT收发器,pma_init(gt_reset)复位从底层的物理层复位)。随后拉低channel_up信号,表示传输通道建立失效。
高速收发器一般都会使用双工模式,单工模式应该使用的比较少。因此本文不对单工的时序进行讲解,详情参考手册,与双工模式的相关时序大同小异。
2、生成Aurora 64B/66B IP
Aurora 64B/66B IP的配置界面如下图所示,与Aurora 8B/10B的配置基本一致。线速率设置为10Gbps,高速收发器的参考时钟设置为156.25MHz,初始化时钟和DRP时钟频率均设置为100MHz,后续共用同一个时钟信号。
在2处将IP设置为双工模式,用户端口设置为Framing,关闭流控模块,其余设置保持默认即可。
如果只需要使用单个高速收发器,“GT Selections”界面全部保持默认即可,如下图所示,后续可以通过分配管脚来达到使用对应收发器的目的。
最后是配置“Shared Logic”界面,将共享逻辑放置在示例工程中,便于后续扩展高速收发器,与前文的高速收发器设置一致。
然后生成IP即可。
3、分析Aurora 64B/66B示例工程
通过上述IP生成示例工程,然后打开示例工程的RTL视图,如下所示。
示例工程的相关IP设置如下图所示,与前面讲解的高速收发器相关结构基本一致,包含QPLL、复位、用户时钟生成等几个模块。
前面详细讲解过GTX和Aurora 8B/10B的信号流向,Aurora 64B/66B的设计类似,本文就不再赘述了。
运行示例工程的仿真结果如下所示,运行时间会比较长,因为高速收发器的初始化需要的时间比较长,等到Channel_up拉高,表示高速收发器初始化完成。
下图蓝色方框表示用户发送的一帧数据,发送的第一个数据为四个16’h4eb3,最后两个有效字节数据为16’h5b7a。
下图是另一个高速收发器接收上述数据的时序,接收的起始数据为四个16’h4eb3,最后两个字节数据为16’h5b7a,与上述发送的数据一致,证明高速收发器收发数据正常。
Aurora 64B/66B IP的简介和官方示例工程的讲解到此结束,下文整理该IP,并且上板和仿真测试。
该IP的手册依旧可以在公众号后台回复“xilinx手册”(不包含引号),在Aurora 64B/66B的文件夹下获取。