Xilinx Aurora 8B/10B IP核详解和仿真

参考文献 XilinX PG046
Xilinx® LogiCORE™ IP Aurora 8B/10B

支持
AXI4-Stream用户接口

VIVADO为Aurora提供具有可配置的8B/10B内核的数据位宽的源代码。这些IP核可以是单工的或全双工的,并具有两个简单的用户界面之一和可选的流控制功能。

Aurora8B/10B核是一种可扩展的、轻量级的链路层协议,可用于高速串行通信。该协议是开放的,可以使用Xilinx FPGA技术来实现。该协议通常用于需要简单、低成本、高速数据通道的应用,用于使用一个或多个收发器在设备之间传输数据。


当Aurora8B/10B核连接到Aurora通道parter,它们会自动初始化通道,并作为数据帧或数据流通过通道自由传输数据。帧可以是任何大小的,并可以随时中断。有效数据字节之间的间隙会自动填充空闲时间,以保持锁定和防止过度的电磁干扰。流量控制可用于降低传入数据的速率,或通过该通道发送简短的、高优先级的消息。
应用
芯片对芯片的链路:用高速串行连接替换芯片之间的并行连接可以显著减少PCB上所需的trace和层数。该核心提供了使用GTP、GTX和GTH收发器所需的逻辑,以及最小的FPGA资源成本。
板到板或背板链路:核使用标准的8B/10B编码,使其与许多现有的电缆和背板硬件标准兼容。Aurora8B/10B核心可以在线率和通道宽度上进行缩放,以允许廉价的遗留硬件用于新的、高性能的系统。
单工连接(单向):Aurora协议提供了执行单向信道初始化的替代方法,使在没有back通道的情况下使用GTP、GTX和GTH收发器成为可能,由于未使用的全双工资源,而降低了成本。
延时
2bytes位宽的帧的设计(默认的配置),不包括高速串口连接线长延时,其总共的最小延时约为37个用户时钟周期。
4bytes位宽的帧的设计(默认的配置),不包括高速串口连接线长延时,其总共的最小延时约为41个用户时钟周期。
接口
顶层架构

AXI4-Stream Bit顺序

用户接口
当IP核配置为帧接口,其用户接口如下:

用户I/O接口(TX)

  1. [n:0] Little Endian
  2. [0:n] Big Endian


用户I/O接口(RX)

  1. [n:0] Little Endian
  2. [0:n] Big Endian

    注意:如果接口为Stream接口,则接口没有tlast和tkeep引脚。

传输数据
用户应用操作控制信号传输数据的过程如下:
• 当确认s_axi_tx_tvalid和s_axi_tx_tready信号置位时,从s_axi_tx_tdata总线上获取数据。
• 从Aurora 8B/10B通道剥离数据。
• 使用s_axi_tx_tvalid信号来传输数据。用户应用通过拉低s_axi_tx_tvalid信号来插入idle来暂停传输数据。

IP核接收到数据后的处理过程
• 检测并去除控制bytes(idle, 时钟补偿,通道PDU起始,通道数据单元的结束和PAD。
• 置位m_axi_rx_tlast,指定最后一个数据中的有效字节数(m_axi_rx_tkeep)。
• 从通道中恢复数据
• 置位m_axi_rx_tdata,将数据呈现给用户界面。

只有当s_axi_tx_tready和s_axi_tx_tvalid都为High时,Aurora8B/10B核采样数据。

Aurora 8B/10B Frames(帧)
TX子模块将每个接收到的用户帧转换为Aurora 8B/10B帧。
SOF(start of frame, 2-byte SCP(start of channel protocol))
EOF(End of frame, 2-byte ECP)

典型的通道的Frame
/SCP1/ /SCP2/ /DATA0/ / DATA1/ /DATA2/ … /DATAN-1/ /DATAN/ /ECP1/ /ECP2/

发送数据的用户接口时序

注意:Aurora8B/10B核在发送时钟补偿序列时,会自动中断数据传输。时钟补偿序列每10000字节每通道添加12字节的开销。

接收数据的用户接口时序
RX子模块没有针对用户数据的内置弹性缓冲区。结果,在RX AXI4-S接口上没有m_axi_rx_tready信号。

流接口
当IP核配置为流接口,其用户接口如下:

TX数据传输时序:

RX数据接收时序:

流控制
对于帧接口有两个可选的流控制接口,NFC(调节全双工通道接收端的数据的传输速率),UFC(提供更高优先级消息的操作)。
UFC接口

注意:这里的s_axi_ufc_tx_tdata端口用来制定传输的UFC数据的大小:
例如:0 --> 1个AXI4 Interface Width个byte(16bits位宽表示2 Byte);
1 --> 2个AXI4 Interface Width个byte(16bits位宽表示4 Byte);

UFC与正常传输数据的切换

UFC数据一定是在正常数据流的tx_tready信号拉低时传输,此时s_axi_ufc_tx_tready置位。
UFC数据传输时序
下面时一个2bytes位宽的AXI4-S接口,传输4bytes UFC数据的时序图。

UFC数据接收时序
下面是一个4bytes位宽的AXI4-S接口,接收8bytes UFC数据的时序图

NFC接口

注意:
s_axi_nfc_tx_tdata信号用来指示通道另一端parter在接收到NFC消息时必须发送的暂停次数。必须保持,直到s_axi_nfc_tx_tready信号置位。
m_axi_nfc_tx_tdata信号用来指示接收到的NFC的PAUSE的值。
发送NFC时序

接收NFC时序(插入了idle数据)

状态、控制和收发端子接口
状态和控制接口

Rx_reset
OUTPUT
user_clk
当RX通道的模块需要TX模块重启并初始化时断言

全双工IP核
全双工核心提供了一个TX和一个RX Aurora8B/10B通道连接。
状态和控制接口

在Aurora8B/10B通道运行时,设备问题和通道噪声可能会导致错误。8B/10B编码允许Aurora8B/10B核检测在信道中发生的所有单bit错误和大多数多位错误,并在每个周期中断言soft_err。TX单形核不包含soft_err端口。除非出现设备问题,否则假设所有传输数据都是正确的。
IP核还监视每个收发器的硬件错误,如缓冲区溢出/欠溢出和锁的丢失,并置位hard_err信号。
一旦检测到了硬件错误,IP核自动复位,并尝试重新初始化。
IP核的AXI4-S数据接口也能检测到帧的错误,并置位frame_err信号。帧错误包括:帧中无数据;连续的帧起始符号和连续的帧的结束符号。帧错误通常紧跟在soft_err错误后,soft_err是导致帧错误的主要原因。
Simplex Cores
下图分别是Simplex的TX和RX模块。

Simplex核不依赖 Aurora 8b/10b通道的信号进行初始化,他们通过边带的初始化信号:aligned, bonded, verify和reset信号来通知其初始化状态。
有两种方法来初始化simplex模块:
1. 从RX的边带初始化端口发送初始化信号到TX的边带初始化端口。
2. 使用定时的初始化间隔,不依赖RX边带接口初始化TX。

反向通道
在RX和TX之间没有通道的情况下,使用反向通道是初始化和维护Simplex通道的最安全的方法。back通道只需要将消息传递到TX侧,以指示在信号发生变化时置位的是哪一个边带初始化信号。

使用定时器
如果无法实现反向信道,则可以通过使用一组计时器驱动TX Simplex初始化来初始化串行信道。计时器必须仔细设计以满足系统的需要,因为初始化的平均时间取决于许多通道特定的条件,如时钟速率、信道延迟、通道之间的Skew和噪声。C_ALIGNED_TIMER、C_BONDED_TIMER和C_VERIFY_TIMER分别是用于置位tx_aligned、tx_bonded和tx_verify信号的计时器。这些计时器使用从corner case函数模拟中获得的最坏情况值,并在<组件名称>_core模块中实现。

Aurora8B/10B通道通常只在出现故障的情况下才会重新初始化。当没有可用的反向通道时,对于大多数错误,不可能发生事件触发的重新初始化,因为通常,RX端检测到故障,而必须由TX端处理错误情况。解决方案是使定时器驱动的TX Simplex定期重新初始化。如果发生灾难性错误,该通道将被重置,并在下一个重新初始化周期到达后重新运行。系统设计人员应平衡重新初始化所需的平均时间与其系统能够容忍通道的最大不工作的时间(失效时间),以确定其系统的最佳重新初始化周期。
WATCHDOG_TIMEOUT参数位于 tx_channel_init_sm/ rx_channel_init_sm模块中。

收发器接口(略)

时钟接口
包括收发器的参考时钟和IP核与应用逻辑共享的并行时钟。
端口列表(略)

CRC

工程设计
使用Example设计作为工程的开始
每个创建的Aurora 8B/10B IP核的实例都带了一个示例设计,可用于FPGA的仿真和实施。
难度
Aurora 8B/10B IP核工程设计的难度与下面的因素相关:
• 最大的时钟频率
• 目标设备的架构
• 应用程序的性质
为了简化定时和增加系统的性能,建议在所有的用户应用和IP核各自的时钟域的输入和输出添加FIFO。
用户不要随便修改IP核,建议只通过VIVADO IDE来配置Aurora 8B/10B IP核。

串行收发器参考时钟接口
IP核需要高质量低抖动的参考时钟来驱动高速的TX时钟和时钟恢复电路。
还需要至少一个频率锁定的并行时钟用于用户逻辑的同步操作。
Aurora8B/10B核在UltraScale™和UltraScale+™系列、Virtex®-7、Kintex®-7和Zynq®-7000系列芯片的设计中配置通道锁相环(CPLL)。
多Quad收发器公用时钟
7系列FPGAs中由外部时钟对(mgtrefclkn/mgtrefclkp)驱动的GTX或GTH收发器总数不得超过3个quad,即包括时钟本身所在的quad和其上下各一个quad,或12个GTXE2_CHANNEL/GTHE2_CHANNEL收发器。如果超过12个收发器或超过3个quad的设计应使用多个外部时钟引脚。

复位和断电
复位信号用来将IP核复位到一个已知的初始状态,复位时,IP核停止任何当前的操作,并重新初始化一个新的通道。
复位后的3个时钟周期,channel_up信号也会拉低deasserted。
gt_reset,tx[rx]_system_reset复位信号至少需要保持6个以上的时钟周期。
上电时复位信号的时序

正常的复位时序

Simplex模块的上电时序

1. 拉低TX端的gt_reset;
2. 拉低RX端的gt_reset;
3. 拉低RX端的reset;
4. 拉低TX端的reset。
Simplex的正常的复位时序

低功率模式
powerdown信号置位时,Aurora 8B/10B核的收发器关闭,并进入无操作、低功率模式。
powerdown信号拉低时,IP核自动复位。

共享的逻辑Shared Logic
如果配置IP核,选择了Shared Logic选项,将包括一些共享的资源,比如收发器的quad PLL和差分refclk buffer (IBUFDS_GTE2)和IP核中或者示例代码中的时钟和复位逻辑。共享的资源可以在多个IP核实例中公用,已最小化HDL程序的修改,同时保留架构的灵活性。
该共享的逻辑层次称为<component_name>_support。
下图时IP核中包含的共享层。

下图为示例工程中包含的共享层

Zynq-7000 and 7 series 芯片 GTX/GTH/GTP transceivers 2-byte 模式的共享层次包括:
• IBUFDS_GTE2: transceiver reference clock
• GT*_COMMON: transceiver clocking;
• BUFG: clocking
• IBUFDS: init_clk
Zynq-7000 and 7 series 芯片 GTX/GTH/GTP transceivers 4-byte 模式的共享层次包括:
• IBUFDS_GTE2: transceiver reference clock
• GT*_COMMON: transceiver clocking
• MMCM: clocking
• 2xBUFG: clocking;
• IBUFDS: init_clk

gt_refclk1_out和gt_refclk2_out可以被相邻的quad的收发器共享使用,前提是遵循收发器的时钟连接指南。

使用扰码器和解扰器
由由多项式
G(x) = X16 + X5 + X4 + X3 + 1
实施
代码位于_scrambler.v[hd]中。

使用CRC
CRC代码位于_crc_top.v[hd]模块中,16bit的CRC用于2 byte的设计,32bit CRC用于4byte

Hot-plug逻辑
基于IP核的时钟补偿。
Aurora RX接口定期收到时钟补偿字符已表示链路是可用的,没有断开,如果没有定时收到时钟补偿字符,Hot-plug逻辑将复位IP核和收发器。
时钟补偿模块在设计中是必须的。
时钟补偿的指标为±100ppm的参考时钟的差异。
标准的时钟模块的代码位于<component_name>_standard_cc_module.v[hd],随IP核自动生成。

字节序
默认的用户接口的字节序为大端字节序,但是也支持小端字节序。

设计流程
定制和生成IP核
IP整合器在验证和生成IP核时会自动计算某些配置的值。
通过TCK命令validate_bd_design可以查看这些参数的值。

IP定制
• Lane Width,定义了收发器的byte宽度,默认值为2。
• Line Rate,传输线的速率,0.5-6.6Gb/s,默认3.125。
• GT REFCLK (MHz),默认值 125.000 MHz。
• INIT clk (MHz),默认值 50 MHz
• DRP clk (MHz),默认值, 50 MHz
• Dataflow Mode, channel 的方向和工作模式,可以为全双工和Simplex RX和Simplex TX模式。
• Interface, Framing对应AXI4-S接口,Streaming对应Simple AXI4-S接口,默认为Framing。
• Flow Control,流控接口,UFC/NFC等…
• Back Channel,反向通道,只针对simplex IP核。Sidebands/Timer,默认为Sidebands。
• Use Scrambler/Descrambler扰码器/解扰器
• Little Endian Support,小端字节序
• Use CRC

GT selections
在定制Aurora 8B/10B IP核的过程中,需要注意GT selections的选择,每个下拉选项对应的设备器件中的GTX的分布如下图(X表示不选择该GTX,注意与后面的引脚分配相对应)

这里选择了X0Y9的GTX,其对应的引脚可以查找芯片手册-UG585文档(这里我用的ZYNQ7000系列的芯片)。

约束
时钟频率
• GT参考时钟约束
• TXOUTCLK时钟约束
• INIT CLK时钟约束

收发器的位置
IO标准和位置

Simulation
IP核包括了一个用于仿真的Testbench

Example设计

仿真流程
• 在源码的导航窗口右键点击IP核,单击Open IP Example Design可以创建一个仿真测试工程。
• 默认的Testbench文件的名称为:aurora_8b10b_0_tb.v文件
• 仿真测试工程的框架图如下图所示

此外Testbench中还例化了两个Aurora 8b/10b模块,分别用于全双工数据链路的两端。参考上面的Example设计图。

其中frame_gen_i模块用来产生Aurora IP发送的数据,fram_check_i模块用来对接收到的数据进行校验。
点击Vivado Flow Navigator中的SIMULATION-run simulation,选择run behavorial simulation/function simulation,并设置仿真时间(1ms),运行仿真程序。

仿真波形如下图所示

其中channel_up信号置位1,标志着Aurora 8b/10b IP核成功建立链路通道。
TCL 命令窗口信息如下

其中INFO: Test Completed Successfully标志着数据的发送和校验成功,代表Aurora 8B/10B IP核的仿真测试成功。
附件文档包括了上述的全部内容和额外的代码和约束文件的修改的说明以应用于实际的工程中。
链接地址如下:https://download.csdn.net/download/weixin_43354598/69622930

Xilinx Aurora 8B/10B IP核详解和仿真相关推荐

  1. 一天上手Aurora 8B/10B IP核(4)----从Streaming接口的官方例程学起

    Xilinx的技术生态做的非常好,基本上所有常用的IP核都有官方例程(example design)供开发者学习,咱不用白不用,今儿咱就一起白嫖他一手----从官方例程开始学习如何具体使用这个IP核. ...

  2. 一天上手Aurora 8B/10B IP核(5)----从Framing接口的官方例程学起

    文章目录 写在前面 1.IP核定制与官方例程的生成 1.1.第一页配置:物理层以及链路层信息选择 1.2.第二页配置:对应GT收发器的物理位置选择 1.3.第三页配置:共享逻辑的位置 1.4.官方例程 ...

  3. 一天上手Aurora 8B/10B IP核(2)----Aurora概述及数据接口(Framing接口、Streaming接口)

    写在前面 系列汇总:一天上手Aurora 8B/10B IP核----汇总篇(直达链接) 1.Aurora 8B/10B 协议 Aurora 协议是一个用于在点对点串行链路间移动数据的可扩展轻量级链路 ...

  4. 8B / 10B Encode/Decode详解

    转载 http://blog.chinaaet.com/justlxy/p/5100052814 8B / 10B Encode/Decode详解 1.编码技术基础理论 在高速的串行数据传输中,传送的 ...

  5. 【高速接口-RapidIO】Xilinx SRIO IP 核详解

    目录 原文链接:https://www.cnblogs.com/liujinggang/p/10072115.html 一.RapidIO核概述 二.RapidIO核接口说明 2.1 逻辑层接口 2. ...

  6. FPGA--简易DDS信号发生器 (内涵DDS与CORDIC IP核详解)附源码

    学习内容 简易DDS信号发生器的设计与验证,产生所需的正弦波.方波锯齿波,并进行verilog验证. 实现功能 可以通过按键控制来输出不同的波形. 开发环境 xilinx spartan6开发板.IS ...

  7. 8B/10B编码原理详解、Verilog实现及在JESD204B中的应用

    目录 1.8B/10B介绍 2.原理 3.Verilog实现 4.实例:在JESD204B中的应用 参考资料: 1.8B/10B介绍 8B/10B编码的目的是防止串行的数据出现长时间的连0连1,因为这 ...

  8. 【转载】8B/10B Encode/Decode详解

    1.编码技术基础理论 在高速的串行数据传输中,传送的数据被编码成自同步的数据流,就是将数据和时钟组合成单一的信号进行传送,使得接收方能容易准确地将数据和时钟分离,而且要达到令人满意的误码率,其关键技术 ...

  9. Aurora 8B/10B、PCIe 2.0、SRIO 2.0三种协议比较

    在高性能雷达信号处理机研制中,高速串行总线正逐步取代并行总线.业界广泛使用的Xilinx公司Virtex-6系列FPGA支持多种高速串行通信协议,本文针对其中较为常用的Aurora 8B/10B和PC ...

最新文章

  1. Ubuntu版本更新一路走来:朕就是这样的汉子
  2. 关于RSS技术 和应用
  3. Dolphin Smalltalk 7 遵循 MIT 开源
  4. 怒怼腾讯加班的应届生本人回应:已找到新工作
  5. 2017-2018-2 1723《程序设计与数据结构》每周成绩 (更新完毕)
  6. linux如何使用eth0网卡,Linux运维学习之如何取出网卡eth0的ip地址?
  7. 360的编码html怎么写,html5之meta charset网页字符编码简写
  8. 手机运作html实现弹窗,html5实现手机弹窗留言对话框(摘)
  9. PS学习总结二:色彩
  10. 云虚拟主机bch 和 云服务器bcc,云虚拟主机bch和云服务器bcc
  11. r语言抓取维基百科表格数据
  12. Android Studio导入ZXING
  13. SuMa++:Efficient LiDAR-based Semantic SLAM
  14. oracle tovarchar2_oracle to_char() 函数的使用, 数字转换为字符串各种格式总结
  15. eLife | 利用进化信息预测蛋白质界面间残基-残基相互作用
  16. Android10 FFmpeg开发案例之实现一个简易视频编辑器
  17. 用继承的方式实现一个打印机,父类(打印机),子类(黑白打印机、彩色打印机)...
  18. python学习第十三节:模块
  19. 详解HHTPS-图解HTTP
  20. 百度李彦宏登上《时代周刊》整个互联网都在比心

热门文章

  1. flink1.14.0+mysql5.7+mysqlcdc2.2.1报错org.apache.flink.shaded.guava18.com.google.common.util.concurren
  2. js通过Ajax传递数组
  3. jmeter使用BeanShell Sampler测试自己写的java接口(一)
  4. 浪潮存储:基于系统级可靠性设计,为数据存储保驾护航
  5. 矩阵的行列式、秩的意义
  6. Tablayout设置间距
  7. 如何精准查找 Maven 依赖
  8. 详解Bash命令行处理
  9. 诺基亚C2-03 - 简单应优先处理的诺基亚C2-03
  10. 一文带您读懂FCC、CE、CCC认证的区别