基于Xilinx FPGA的LVDS高速串行通信系统(三)--数据训练及握手机制【文末源码】

章节合集:

基于Xilinx FPGA的LVDS高速串行通信系统(一)

基于Xilinx FPGA的LVDS高速串行通信系统(二)

核心功能模块

1. LVDS接收端

物理层接收(lvds_rx_recv.v)

  • Xilinx SelectIO原语封装(ISERDES)

  • 10:1串并转换

  • IDELAY输入延迟控制(0-31抽头)

  • 异步FIFO跨时钟域缓冲

  • 差分信号接收处理

训练同步模块(lvds_rx_training.v)

  • 训练序列检测(K28.5同步字符)

  • IDELAY抽头扫描算法

  • Bitslip位边界对齐

  • 状态机控制的训练流程

8b/10b解码器(lvds_receive.v)

  • 10位到8位解码

  • 控制字符识别(SOF/SYNC/EOF/TTC/ATC)

  • 64位有效载荷数据提取

  • 帧状态标志输出

2. LVDS发送端

8b/10b编码器(lvds_send.v)

  • 8位数据到10位编码转换

  • 运行差异(RD)跟踪

  • DC平衡维护

  • 控制字符生成

  • 帧格式组装

物理层发送(lvds_tx_top.v)

  • 异步FIFO缓冲

  • 训练序列生成

  • SelectIO并串转换(OSERDES)

  • LVDS差分输出

  • 时钟输出生成

3. 系统集成(lvds_top.v / gsds_LVDS.v)

  • 完整收发器整合

  • 时钟管理

  • 复位控制

01 ISERDESE2、、OSERDESE2原语

ISERDESE2、OSERDESE2作为串并转换器时,有两种模式SDR模式和DDR模 式。SDR属于单速率模式在时钟的上升沿进行数据的采集,DDR属于双速率模式在 时钟的上升沿和下降沿均进行数据的采集。SDR模式支持的并行数据的位宽为2、3、4、5、6和8,而DDR模式支持的并行数据的位宽为4、6、8、10和14。因此在本 次设计中8 B/10 B编码后数据的位宽为10 bit,故选择DDR设计模式。那么当输入 时钟为200 MHz的条件下,此时LVDS的速率为400 MHz。但是从原语框图中可知, 单个的ISERDESE2或OSERDESE2只支持8 bit的并行数据位宽,对于10 bit的并行 数据需要将两个 ISERDESE2 进行级联。级联模式下的原语框图如图 3-13 所示。两 个 ISERDESE2 模块可用于构建大于 1:8 的串并联转换器。在每个 I/O 块中有两个 ISERDESE2 模块,一个主机和一个从机。通过将主机ISERDESE2的 SHIFTOUT端 口连接到从机ISERDESE2的 SHIFTIN端口,串行到并行转换器可以扩展到 1:10和 1:14。在 1:10 的串并转换的情况下,从机端口的Q3-Q4引脚用于输出并行数据的最 后两位。对于差分信号输入,主机ISERDESE2必须位于差分输入对的正极管脚。

在对数据进行对齐训练时,必须用到 ISERDESE2 的Bitslip模式。Bitslip模式 将根据设置属性对输入FPGA的并行数据的顺序进行重新排列。通过对ISERDESE2 模块的滑动引脚进行操作,直到ISERDESE2输出的序列为我们想要的序列。图3-14 说明了Bitslip的DDR模式下的具体滑动方式。

假设数据的位宽为8 bit时,在DDR模式下,每一次的位滑操作都会使模块的数据在右移1位和左移3位之间交替输出。在执行第8次Bitslip操作时,输出模式恢 复到初始模式。通过对上述所有的 SelectIO 的资源介绍,阐明了自动对齐训练所需 要的模块及其功能。

02 握手机制

本次LVDS的通信是点对点的全双工通信,主机端既有LVDS发 送模块也有LVDS接收模块,同理从机端也有LVDS的收发模块。一共有两条LVDS 通信链路,必须确保主机端知道发送通道已经通信握手成功,接收通道通信握手成 功,从机端也必须知道接收通道握手成功,发送通道握手成功。

根据上述问题设计 了LVDS通信的握手机制以及训练机制。LVDS通信握手训练机制如下图所示。

在 LVDS 的握手机制中,首先由主机端发送规定明确的序列码 10'b0010010011, 当从机端收到序列码是 10'b0010010011,从机端认为主从 LVDS 通信链路对齐训练 完成。此时从机端将发送序列码 10'b0010010011,如果主机成功收到序列码 10'b0010010011 代表从主 LVDS 通信链路对齐训练完成。当两条通信链路的对齐训 练完成后,主机端的训练完成标志位会拉高,表明整个通信回路握手成功。

03 训练原理

当主机端循环的发送 10'b0010010011 时,由于走线布局和不等长等原因。从机 端的ISERDESE2模块转换到并行数据后输出的数据有10种情况,如下表3-2所示。

根据上述表格从机端接收到的数据是不稳定的,理想情况下从机端接收到的数 据应该与主机端发送的数据相同。数据对齐训练的首要目的就是首先使数据的输出 保持稳定,再根据稳定后的数据进行移位操作从得到理想数据。数据不稳定的原因 主要是:由于采样时钟和数据没有对齐或者在数据没有稳定的时候时钟的上升沿就来临,此时需要对IDELAY2模块中的tap值进行调节。其调节原理如图3-16所示。

在图3-16中,时钟clk_tip的上升沿在 t1时刻来临时,代表一个10bit序列码的 采集开始,在t3时刻下一个上升沿来临代表采集结束。Data1代表了未进行延迟调节 的数据,此时采集时钟Ref_clk的上升沿刚好位于数据变换处,从而导致数据采集 不稳定。通过对tap值进行调节得到延迟后的数据 Data2,在调节的过程中必须保证 tap1 和tap2的值输出的值相同,当实际的tap值取平均值时才能保证时钟的上升沿 采集时处于数据稳定的时刻。调节完成后,输出端的数据将保持稳定的输出表的其 中一个 ,此时需要对ISERDESE2进行Bitslip模式的调节。根据图3-14的调节滑动 方式得到规定好的序列码,此时整个数据训练对齐完成。

源码:

1、IP核版本:【IP核 】Xilinx FPGA LVDS 高速接口完整解决方案IP,含验证工程与板级测试用例

2、所有源码版本:【LVDS工程源码】LVDS 高速接口完整解决方案,含验证工程与板级测试用例(所有源码均包含)

相关推荐
upper202018 小时前
coremark移植坑之-nostartfiles -nostdlib参数
学习·fpga开发·coremark移植·riscv设计
Eloudy1 天前
Vivado 纯命令行构建 FPGA 项目教程
fpga开发
upper20201 天前
FPGA部署卷积神经网络识别MINST图片
fpga开发·卷积神经网络·minst·minst识别·部署神经网络·神经网络识别图片
你是我的解忧王子2 天前
嵌入式 ADC采样 原始数据分析上层(平均值 波动率 正态分布 线性补偿 系统误差)
fpga开发·数据挖掘·数据分析
9527华安2 天前
FPGA纯verilog代码ISP图像处理培训教程,基于IMX214,提供工程源码+视频教程+FPGA开发板
图像处理·fpga开发·isp·imx214·mipi
千寻xun3 天前
二、实战篇-NVME SSD控制之ZYNQ实现(六)-读写NVME SSD硬盘数据
fpga开发·nvme·nvme ssd
千寻xun3 天前
二、实战篇-NVME SSD控制之ZYNQ实现(三)
fpga开发·nvme ssd·nvme协议
忆锦紫3 天前
vivado报错及解决【十】
fpga开发·fpga·vivado
喵喵苗3 天前
FPGA 核心资源解析:FF 触发器(Flip-Flop)—— 时序逻辑的“记忆心脏”
fpga开发