高速接口----使用Aurora8b10b完成光口收发数据(1)

1 Xilinx高速收发器简介

  Xilinx的高速收发器是以QUAD为单位的,每一个Q里面有4个channel,每个channel都可以分配给特定的资源使用,比如在一个Q里,可以将4个channel全部分配给PCIe设备,配置成一个PCIe-X4的端设备,也可以将其中的某些通道分配给特定的资源,比如分配两个高速收发器给到光口,其中一个收发器给到PCIe,最后一个给到SSD控制都是可以的。分配到的高速收发器的数量越多呢,传输的效率也就越高。

2 Aurora 8b10b IP核

2.1 IP核简介

  Aurora 8B / 10B是可扩展的,轻量级的,用于高速串行通信的链路层协议。 该协议是开放的,可以使用Xilinx FPGA技术实现。 该协议通常用于需要简单,低成本,高速率数据通道的应用中,并用于使用一个或多个收发器在设备之间传输数据。
在这里插入图片描述
  当Aurora 8B / 10B IP 连接到Aurora通道时,它们会自动初始化通道,并以帧或数据流的形式在通道中自由传递数据。 Aurora帧可以是任何大小,并且可以随时中断。 有效数据字节之间的间隙将自动用 idles 填充,以保持锁定并防止过多的电磁干扰。 流控制可用于降低传入数据的速率或通过通道发送简短的高优先级消息。
  该IP的主要用途有以下三种:

  1. chip to chip:芯片之间的连接,由于串行收发数据,能够减少PCB走线
  2. board to board :由于使用8b/10b编码,因此可以能够兼容现有的硬件,可以将传统硬件应用于高性能系统中
  3. 单工方式连接

2.2 IP 核的所实现的功能

在这里插入图片描述
可以看到该IP主要有4个部分分别是Lane Logic、 用户接收,用户发送,全局控制。

名称作用
Lane Logic初始化每个收发器,并且 进行数据的编解码和错误检测
Global Logic执行通道初始化的绑定和验证该模块生成Aurora协议所需的随机idles,并监视所有通道逻辑模块中是否有错误。
Rx User interface用户接收侧,AXI-Stream格式数据,将数据从Lane通道搬移到用户逻辑侧
Tx User Interface用户发送侧,AXI-Stream格式数据

2.3 IP 的端口

  该IP的用户端口支持两种数据组成方式一种是帧的结构,一种是数据流的结构,使用数据帧的方式,可以添加帧界定符和校验值,使用数据流的方式能够减小开销。
  从这个图上可以直观地看到该IP地各个接口,我刚开始例化IP的时候,看着几十个信号都不知道它的作用是什么,其实从这个IP地端口上是可以很直观地看出各个信号的作用的。所以我感觉在Block Design中来进行Aurora的设计要人性化一点。
在这里插入图片描述

2.3.1用户发送、接收端口

  在发送数据时可以看到发送数据地方式有[0 : 8(n-1)]和[8(n-1) : 0]这两种,其实这两种表示方法在Verilog中都是表示同样的数据,只是采用的排序方式不同,其实就是大小印第安序。

在这里插入图片描述在这里插入图片描述

2.3.2 Frame interface(数据帧端口)

  最终生成的Aurora IP是数据流形式还是数据帧的形式,可以在IP的配置界面中进行配置。
在这里插入图片描述
  手册上关于用户发送和接收数据说了一大堆,其实简单看就是满足AXI-Stream协议才会进行数据地传输,其余时间要么没传输数据,要么传输的是控制字。
  也就是说,在发送数据端口,当s_axi_tx_tvalid和s_axi_tx_tready共同有效的时候,才会将用户数据从用户端口传输到通道中。在接收数据时,需要在m_axi_rx_tvalid有效时,才会将通道中的数据传输到用户端口。其实就是一个简单的握手协议。


下面这些图中,就表示了一些简单的发送数据的方式:他们其实都是同一个意思。
s_axi_tx_tvalid和s_axi_tx_tready共同有效的时候发送数据,发送的最后一个数据需要使用s_axi_tx_last来指示。
在最后一个传输节拍中,通过s_axi_tx_tkeep可以来指定最后传输的一个数据中有哪几个字节是有效的,通过这种方式呢,就能够传输任意长度的数据了。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


  下面这些时序图表示了一些接收数据的过程,由于在Aurora IP的接收子模块中是没有缓冲的,因此,不会有tready这个信号,因此,就当m_axi_tx_tvalid有效的时候,就进行数据的传输就行了。
在这里插入图片描述


2.3.3 数据流端口

  数据流端口和前面的数据帧端口基本一致,接口上的信号还要少一些,传输数据时的开销更少。传输数据的方式是一样一样滴。最终生成的Aurora IP是数据流形式还是数据帧的形式,可以在IP的配置界面中进行配置。
在这里插入图片描述


数据流发送
在这里插入图片描述
数据流接收
在这里插入图片描述


2.3.4 流控制----UFC

  当在IP核中配置了UFC选项的时候,就会生成这么一个UFC通道。流控制接口的信号传输,其实也是AXI-Stream这种的接口。
需要注意的是UCF发送数据通道中,传输的数据位宽是3bit的,它可以用来表示UCF message的字节数。
3’b000==>2B;
3’b001==>4B;

3’b111==>16B;
在这里插入图片描述
在这里插入图片描述
发送通道:
在这里插入图片描述
接收通道:
在这里插入图片描述在这里插入图片描述
  在进行UFC信息发送的时候,根据每个lane传输的数据位宽和UFC的长度,可以确定发送UFC数据需要几拍的时间。其对应关系,在手册上有如下表格:
在这里插入图片描述
  至于UFC的具体的传输过程,就是axi_stream的传输过程,熟悉了axi_stream的协议就十分简单了。

2.3.5 状态、控制和收发器接口

  对于状态和控制接口呢,主要就是用来监视Aurora IP的一个状态。其实这些信号都比较简单,在手册里面也有详细的介绍。在这里介绍几个常用的信号

信号作用
channel_up当Auroa 8b/10b 初始化完成后,并且当前已经可以进行数据的传输时,会断言该信号
lane_up[0 : n-1]收发器中的每一个lane 对应了lane_up中的每一个bit,
当对应的Lane初始化完成后,会断言lane_up中的对应bit
resetAurora 8b/10b IP 复位信号,高电平有效至少保持6个user_clk
gt_reset每个通道的复位信号,上电时的复位信号
init_clk_in输入的初始化时钟,在复位阶段会使用到的时钟

  在上面表格中所给出的信号,是在状态端口中,比较重要的信号。通过channel_up和lane_up可以判断当前光口是否已经正确链接。
  通过reset和gt_reset能够对系统进行复位,其中这两个信号需要满足一定的关系。这个将在下一篇博客中再来具体介绍一下,这两个复位信号的设计。

  对于收发器接口,再高速收发器中,最终数据都是转换成高速的串行数据发送出去,因此只能根据高速收发器接口发送出去。对应在IP中就是对应的lane。
在这里插入图片描述

2.3.6 时钟端口

  时钟端口有许多信号,在这里先介绍我已经掌握了的几个时钟

  1. gt_ref_clk_p/n :收发器通道的参考时钟,该时钟可以用于从高速串行数据中恢复时钟信息
  2. init_clk_in :初始化阶段的时钟 ,在上电初始化阶段,可以使用该时钟来驱动一些逻辑
  3. user_clk_out : 在前面的部分中,经常看到的这个时钟域,就是这一个用户端口的失踪,这个时钟是用户APP端口的时钟

  对于其他一些时钟信号,暂时我也还没有太掌握,在之后再慢慢学习。

2.3.7 CRC端口

  CRC校验端口地这两个信号呢,能够用来校验数据是否正确。可以在crc_valid有效时,判断crc_pass_fail_n信号来判断一帧数据是否有效。若crc_valid为高时,crc_pass_fail_n为低,则表示,这一帧数据错误。
在这里插入图片描述

😭😭😭😭😭😭😭😭😭😭😭😭😭😭😭😭

  准备睡觉了。后面,介绍一下,两块板子之间使用Aurora 8b10b这个IP来进行高速通信,FPGA芯片是ZYNQ,上面带有一个一个QUAD,这两块板子,都是有两个高速收发器用作光口。先做个简单的,两个板子之间相互发送数据和接收数据。就是把相同的代码,分别下载到两块板子里面。

  • 18
    点赞
  • 102
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值