当前位置:   article > 正文

Aurora_aurora协议详解

aurora协议详解

一、基于 Aurora 8/10b 光纤传输协议

1、SFP+光电转换模块

        随着互联网技术的快速发展,使得现有的数据传输技术越来越难以满足用户需求,近年来,光纤传输技术在数据传输领域中被广泛使用,主要是因为其具有良好的传输特性。基于光纤的高速数据传输技术正在向低成本、低损耗、远距离传输和波分复用等方向发展。光纤入网将会是最适应未来发展的数据传输解决方案。
        光纤通信的核心是光电器件。SFP 的全称是 Small Form-Factor Pluggable SFP 与早期的 GBIC 相比,两个模块的功能相差无几,差异主要体现在尺寸大小上, SFP 拥有更小的体积,几乎是 GBIC 的一半,这就意味着相同大小的板子, SFP 可以集成更多的端口资源,拥有更高的性能,故可将 SFP 叫做小型 GBIC 。而 SFP+ SFP 的升级版本,自然具备了 SFP 的所有优点。不仅如此,SFP+相较于 SFP 体积更小,同时,由于模块对 CDR 不做要求,所以 SFP+拥有更低的功耗。这些优良特性使得 SFP+光模块逐渐取代 GBIC、SIP、和 SFP 等成为高速收发器市场的主流产品,在万兆Ethernet 光纤数据通信领域占据重要地位。

2、Aurora协议简介

        Aurora 是一个用于在点对点串行链路间移动数据的可扩展轻量级链路层协议,其可为物理层提供透明接口,让专有协议或业界标准协议上层能方便地使用高速收发器。虽然使用的逻辑资源非常少,但 Aurora 能提供低延迟高带宽和高度可配置的特性集。
        Aurora 协议具体阐述了数据信息在通道上的传输流程,一般情况下,一个通道有好几条数据链路,每一条链路都可以进行全双工的通信。通道两端的设备被称为通道对。Aurora 通信协议支持用户自定义控制逻辑接口,可以与用户自定义的应用程序进行通信。其中 Aurora 用户接口和用户程序之间的数据信息由用户 PDUs 和控制信息组成,Aurora 通道间传输的数据信息主要由 PDUs 组成, Aurora 通信协议定义了两类不同的流控制 PDUs 格式。 Aurora 协议对于下面这些方面做出了规范:
1 )物理层接口:主要包括时钟信息的编码和底层的电气接口属性;
(2)初始化和错误处理机制:分别在单一通道和多通道的情形中进行通信前的
必要准备,通道在检查到出错的状况下是如何处理这些错误的。
(3)数据队列:介绍了多个数据通道如何传输一个信道的信息。
(4)链路层:描述的是如何启动和结束一次用户数据传输。在传输过程中,当有一些重要的数据包需要优先传输时,暂停本次数据传输,规定了此时可以在链路上加入一些高优先级的数据信息,让高优先级的数据先传输,等其传输完成后再传输上次未完成的数据传输。

3、Aurora64/66b编码 

     64B/66B编码将64bit“数据或控制信息”编码成66bit块来进行传输,这66bit中,前两位表示同步头(2bit Sync Header),主要用于接收端的数据对齐和接收数据位流的同步。

        同步头有“01”和“10”两种:

(1)“01“表示后面的64bit都是数据。

(2)“10”表示后面的64bit是数据和控制信息的混合,其中紧挨着同步头的8b是类型域,后面的56bit是控制信息或者数据或者两者的混合

①对于纯数据Pure data

同步头:01,后面的信息:8*8=64bit数据
②对于纯控制Pure Control (Type = 0x1E)

同步头:10,后面的信息:8bit类型表示+7*8控制信息
③  对于数据和控制信息的混合

同步头:10,后面的信息:数据信息和控制信息的混合。

64B/66B编码格式图如下图所示:其中,D表示数据编码,每个数据码8bit;Z表示控制码,每个控制码7bit;S表示包的开始,T表示包的结束。S只会出现在8字节中的第0和第4字节,T能够出现在任意的字节。

        Aurora 通道概述如图1所示,两个 Aurora 核建立一个 Channel ,这两个核就称为 Aurora Channel Partners ,这些 Channel 又可以是多条通道( lane ),每条lane 对应一个高速收发器。 Xilinx 为设计者提供两个 Aurora 核用于实现不同用户需求,分别是 Aurora 8/10B 以及 Aurora 64/66B 8/10B 编码可实现高速串行总线 DC 平衡,但会带来 20%的带宽开销,Line rate范围为0.5~6.6Gbps。 64B/66B编码相对8B/10B编码提供了理论上的性能提升,因为它的传输开销非常低(3%)。
        为满足工程传输数据的速度需求,本课题采用Aurora64/66b核实现用户应用VC707和ZCU102板间的数据传输以保证数据传输达到10Gbps。
      

                                                        1 Aurora 64B/66B 通道概述

二、系统实现

2.1、Aurora 64/66b IP 核配置

        创建一个aurora_64b66b_0 模块。首先需要对物理层进行配置, 指定链路速率为10Gbps ,该值越大,表明传输速率越高,同时,数据传输出错的概率也越大,GT Refclk 选项用于配置参考时钟,其由专用晶振提供,将其设置为 156.25MHz。接着配置数据链路层。10 Gb 光模块同时具有收发端口,将内核配置为双工模式。Aurora 64/66b 核心配置如图2所示。之后再对物理层的吉比特收发器进行配置。目前测试只需使用一条数据通路,即将 Lane 数量设置为 1。DrpMode设置为Native接口。此外,还需将接口与芯片端口绑定。

图2 Aurora 64B/66B IP核心配置

        最后还需为 IP 核配置时钟资源,吉比特收发器需搭配专用时钟管理模块使用, 选择 Include Share Logic in Core 可让 IP 核自行管理时钟单元,初始化操作所用的时钟必须由系统时钟传递,故使能单端 INIT CLK ,不使能单端 GTREF CLK ,因为该时钟由外部晶振提供 Aurora 64/66b IP 模块如图 3 所示。

        GT_SERIAL_TX、 GT_SERIAL_RX REFCLK1 分别为 GT 的发送端口、接收端口以及参考时钟端口,且这些信号需要与开发板相连。CORE_CONTROL 作为用户接口,可控制 IP 核工作。 USER_DATA_S_AXI_TX USER_DATA_S_AXI_RX 分别是用户发送数据端口和用户接收数据端口。该 IP 模块还将 GT 的复位端口开放给用户,当 GT 工作不正常时,可通过复位端口对其进行重置。 drpclk_in init_clk为输入时钟信号。剩余信号主要起标志作用,用于表征 IP 核工作状态。

2.2、Framing/帧接口简介

在s_axi_tx_tvalid和s_axi_tx_tready同时为高时,发送数据。

在m_axi_tx_tvalid为高时,接收数据

代码如下,m_axis_tvalid && m_axis_tready为1时,数据累加

  1. `timescale 1ns / 1ps
  2. module user_req_generate #(
  3. parameter USER_WR_DATA_WIDTH = 64
  4. )(
  5. input clk,
  6. input reset,
  7. input lane_up,
  8. input channel_up,
  9. output reg m_axis_tvalid,
  10. input m_axis_tready,
  11. output reg [USER_WR_DATA_WIDTH-1:0] m_axis_tdata,
  12. output [USER_WR_DATA_WIDTH/8-1 :0] m_axis_tkeep,
  13. output reg m_axis_tlast
  14. );
  15. localparam CNT_MAX = 150;
  16. reg [7:0] reset_timer;
  17. reg reset_sync_d0;
  18. reg reset_sync_d1;
  19. reg reset_sync;
  20. wire vio_wr;
  21. reg vio_wr_d0;
  22. reg vio_wr_d1;
  23. reg vio_wr_d2;
  24. reg [7:0] cnt;
  25. assign m_axis_tkeep = {USER_WR_DATA_WIDTH/8{1'b1}};
  26. always @(posedge clk or posedge reset) begin
  27. if (reset)
  28. reset_timer <= 8'd0;
  29. else if (~ (lane_up | channel_up) )
  30. reset_timer <= 8'd0;
  31. else if (reset_timer <= 8'haf)
  32. reset_timer <= reset_timer + 1'b1;
  33. else
  34. reset_timer <= reset_timer;
  35. end
  36. always @(posedge clk or posedge reset) begin
  37. if (reset)begin
  38. reset_sync_d0 <= 1'b1;
  39. reset_sync_d1 <= 1'b1;
  40. reset_sync <= 1'b1;
  41. end
  42. else begin
  43. reset_sync_d0 <= reset_timer <= 8'haf;
  44. reset_sync_d1 <= reset_sync_d0;
  45. reset_sync <= reset_sync_d1;
  46. end
  47. end
  48. always @(posedge clk) begin
  49. vio_wr_d0 <= vio_wr;
  50. vio_wr_d1 <= vio_wr_d0;
  51. vio_wr_d2 <= vio_wr_d1;
  52. end
  53. always @(posedge clk) begin
  54. if (reset_sync)
  55. cnt <= 8'd0;
  56. else if (cnt == CNT_MAX && m_axis_tvalid && m_axis_tready)
  57. cnt <= 8'd0;
  58. else if (m_axis_tvalid && m_axis_tready)
  59. cnt <= cnt + 1;
  60. end
  61. always @(posedge clk) begin
  62. if (reset_sync)
  63. m_axis_tvalid <= 1'b0;
  64. else if (vio_wr_d1 && ~vio_wr_d2)
  65. m_axis_tvalid <= 1'b1;
  66. else if (cnt == CNT_MAX && m_axis_tvalid && m_axis_tready)
  67. m_axis_tvalid <= 1'b0;
  68. end
  69. always @(posedge clk) begin
  70. if (reset_sync)
  71. m_axis_tlast <= 1'b0;
  72. else if (cnt == CNT_MAX - 1 && m_axis_tvalid && m_axis_tready)
  73. m_axis_tlast <= 1'b1;
  74. else if (cnt == CNT_MAX && m_axis_tvalid && m_axis_tready)
  75. m_axis_tlast <= 1'b0;
  76. end
  77. always @(posedge clk) begin
  78. if (reset_sync)
  79. m_axis_tdata <= 0;
  80. else if (m_axis_tvalid && m_axis_tready)
  81. m_axis_tdata <= m_axis_tdata + 1;
  82. else
  83. m_axis_tdata <= m_axis_tdata;
  84. end
  85. vio_0 vio_0 (
  86. .clk(clk), // input wire clk
  87. .probe_out0(vio_wr) // output wire [0 : 0] probe_out0
  88. );
  89. endmodule

 三、上板验证

讲ZCU102板作为发射端,VC707板作为接收端,光口10G模块测试收发。

ZCU102发送从0开始的递增数

VC707接受到0开始的递增数,验证成功。

四、后续工作

        后续将用PCIE与Aurora进行数据交互

        需要改进的地方:

对于TX端,可连接一个异步FIFO,这样解决了数据源的数据到aurora IP核tx_data的跨时钟域问题。tx_fifo的输入和rx_fifo的输出,tx_fifo的写时钟和rx_fifo的读时钟速率小于user_clk(156.25Mhz),所以对于可以向tx_fifo一直写入数据,rx_fifo中也一直由数据读出.

与aurora 64B66B 发送端 AXI4-Stream接口 相连的FIFO设置_aurora fifo-CSDN博客

Aurora使用技巧详解_aurora的gtselections-CSDN博客

FIFO用法详解(附有代码)_fifo读使能代码-CSDN博客

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/622166
推荐阅读
相关标签
  

闽ICP备14008679号