Aurora工程搭建与代码分析

本文档详细介绍了如何在Vivado2019.1中使用Xilinx ZCU102开发板搭建1lane的Aurora64B/66B自回环测试工程。通过设置参数如LineRate为10Gbps,阐述了AuroraIP的配置过程,并提到了在多lane设计中GT时钟的注意事项。同时,文章还分析了代码架构并给出了仿真前的准备,强调了在移植前可运行exampledesign来理解AuroraIP的工作行为。

前言

版本:Vivado2019.1
平台:Xilinx ZCU102开发板

官方文档:PG074

背景知识

工程搭建

计划搭建一个1lane的自回环测试工程,可以进行自发自收。

作者本人没有在Block Design中使用过Aurora IP,但是我看别人用过,有机会自己也捣鼓一下。
选择Aurora 64B/66B,双击打开
64B/66B 和 8B/10B 是算法的不同,8位信息使用10位数据进行传输,时钟也是从数据中直接恢复。很明显,64B/66B的传输效率会高很多。
在这里插入图片描述

参数设置按照需求,为了省事,我将Line Rate设置成了10Gbps,这样我的GT时钟和我IP的INIT时钟都能设置为156.25MHz。

  1. GT Type 没得选只有GTH,差别可以看这篇博文GTX/GTH/GTY/GTP/GTZ/GTM有什么区别?-张大侠
  2. Line Rate 选择10
  3. Column Used 排序方式,因为数据时并行传输的,在组合数据时要选择排序方式。
  4. Lanes 选1
  5. GT Quad 和 GT Lane默认
  6. GT Refclk和INIT clk都选择为156.25
  7. 下面的保持默认
  8. interface选Framing(数
虽然给定引用中未直接提及从Transceiver开始搭建aurora协议代码的实现方法,但可以从现有信息中获取一些相关思路。 在现代数字通信中,GTX作为一种高速数据传输接口,广泛应用于FPGA等可编程逻辑设备,可实现数Gbps的数据传输速率,这是搭建aurora协议的重要基础环境 [^3]。要实现基于GTX高速收发器的Aurora 64B66B数据回环传输,可参考给定的2套工程源码(Kintex7 - 325T版本和Zynq7100版本),这其中可能包含从Transceiver开始搭建aurora协议代码的部分实现 [^1]。 在代码实现过程中,需要关注Aurora 64B66B的基本结构、发送流程、接收流程以及时钟架构等方面。例如,Aurora 64B66B需要配合加扰和解扰功能一起使用,该功能由逻辑代码完成,这是确保通信数据准确无误的关键步骤。若不使用加扰和解扰功能,在对方通信时,对方接收的数据可能会是乱码,因为GT链路发送数据不能是全1或全0,或者长时间的1或0,使用加扰和解扰可提高抗干扰能力 [^4]。 对于时钟方面,在Aurora 8B/10B通道中,时钟补偿功能允许每一侧使用的参考时钟频率有高达±100 ppm的差异,标准时钟补偿模块会根据Aurora 8B/10B协议规范内核一起生成,并且其处理产生时钟补偿字符的周期可以用CC_FREQ_FACTOR控制,这在代码实现中也需要进行相应的配置 [^2]。 由于没有直接的代码示例,可按照以下大致思路进行代码实现: ```verilog // 假设的顶层模块,包含GTX Transceiver和Aurora协议相关部分 module aurora_gtx_top ( // 时钟和复位信号 input wire clk, input wire rst_n, // GTX接口信号 input wire [n-1:0] gtx_rx_data, output wire [n-1:0] gtx_tx_data, // 用户数据接口 input wire [m-1:0] user_data_in, output wire [m-1:0] user_data_out ); // 实例化GTX Transceiver模块 gtx_transceiver gtx_inst ( .clk(clk), .rst_n(rst_n), .rx_data(gtx_rx_data), .tx_data(gtx_tx_data) ); // 实例化Aurora 64B66B模块 aurora_64b66b aurora_inst ( .clk(clk), .rst_n(rst_n), .gtx_rx_data(gtx_rx_data), .gtx_tx_data(gtx_tx_data), .user_data_in(user_data_in), .user_data_out(user_data_out) ); // 加扰和解扰模块(示例) scrambler_descrambler scrambler_inst ( .clk(clk), .rst_n(rst_n), .data_in(user_data_in), .data_out(user_data_out) ); endmodule // GTX Transceiver模块示例 module gtx_transceiver ( input wire clk, input wire rst_n, input wire [n-1:0] rx_data, output wire [n-1:0] tx_data ); // 这里实现GTX Transceiver的具体逻辑 // ... endmodule // Aurora 64B66B模块示例 module aurora_64b66b ( input wire clk, input wire rst_n, input wire [n-1:0] gtx_rx_data, output wire [n-1:0] gtx_tx_data, input wire [m-1:0] user_data_in, output wire [m-1:0] user_data_out ); // 这里实现Aurora 64B66B的具体逻辑 // ... endmodule // 加扰和解扰模块示例 module scrambler_descrambler ( input wire clk, input wire rst_n, input wire [m-1:0] data_in, output wire [m-1:0] data_out ); // 这里实现加扰和解扰的具体逻辑 // ... endmodule ``` 以上代码只是一个简单的示例框架,实际实现中需要根据具体的FPGA型号、Aurora协议版本以及硬件平台进行详细的配置和调试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bigbeea

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值