基于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)

  • 完整收发器整合

  • 时钟管理

LVDS是美国国家半导体(National Semiconductor, NS,现TI)于1994年提出的一种信号传输模式的电平标准,它采用极低的电压摆幅高速差动传输数据,可以实现点对点或一点对多点的连接,已经被广泛应用于串行高速数据通讯场合当中。

01


LVDS原理结构

本次设计的LVDS通信协议是点对点的全双工协议。整个传输模块可以分为物理层、传输层和应用层。物理层主要是包含收发功能的两对数据差分传输线,以及随路时钟的差分传输对,其设计需要满足传输线的电压和阻抗匹配要求。一般LVDS数据通信由帧加载器,数据编码器,并串转换器、传输路径、串并转换器、数据解码器、帧卸载器组成。帧加载器就是把需要传输的数据加载到帧格式中去,每一次数据的传输以帧的形式传输。

数据编码器是将数据进行编码以保证数据在传输的过程中不受信道因素的干扰。并串转换器的功能是通过并行数据通转化成串行的数据;传输路径主要指传输电缆,必须应考虑匹配电阻和布局布线等因素;串并转换器是将接收到的串行数据转换为并行数据;数据解码器按照编码的格式和协议对数据解码。帧卸载器将需要的数据从帧格式中提取出来。LVDS传输模块的原理框图,如图所示。

LVDS传输模块的原理框图

02


帧加载器的格式封装设计

为了保证数据通信的可靠性和抗干扰能力,本章节设计了符合在LVDS通信链路上的传输协议。该协议的数据单元称作帧,一个完整的帧格式的示意图如3-7所示。LVDS帧主要可以分为三个部分,分别为帧初始码、数据帧和帧结束码,其中以帧初始码和帧结束码均为特殊字符,数据帧可以分为四部分,分别为帧头(Frame Header)、数据域、同步位和校验位。

LVDS帧格式示意图

帧初始码标志一个LVDS帧的开始,对应控制代码中的逗号序列为 占用一个字节大小。帧头(Frame Header)的大小有四个字节,第一个字节表示数据传输的长度,传输的范围为 个数据域;第二个字节为源地址表示数据传输的起始地址;第三和第四个字节为用户自定义字节。同步位占用一个字节大小,用于数据的同步。数据域是数据帧中包含的有效传输数据,其大小为四个字节。四个字节的位置是低字节在左边高字节在右边。整个数据域在传输的过程中是连续加载的,其加载的长度由上述 帧头(Frame Header) 定义。帧结束码代表一个LVDS帧的结束,其大小为一个字节,对应控制代码中的逗号序列为 。

03


数据编解码器模块设计

首先,LVDS的传输属于串行的差分传输。串行的传输会出现一个现象,在一段传输的时间内连续传输的是高电平"1",或者连续传输的是低电平"0"。假设,在某一时刻出现的一个电磁干扰导致电平的逻辑发生了跳变,那么会导致电平紊乱,同时连续的电平状态也会导致信息提取困难。为了解决上述问题,需要一种能够抑制码流中连续"0"和连续"1"数目,提高电平反转的频率的方法。8B/10B编码就是一种具有 平衡和连续抑制"0"、"1"特性的信道编码方式,极其适用于高速串行线路。

8B/10B编码最早由A X Widmer和P Franaszek于1983年提出。10B的传输码由256 种8B的数据组合和12个控制字符组成,总共有268个有效的10B传输码。在这268个10B传输码中,有134个10B传输码具有中性。 编码方案所采用的基本传输码中,每个10B传输码最多只能传输6个"1"或6个"0",且连续的"l"或连续的"0"不会超过5个比特。其控制字符的定义如下

8B/10B编码是将8B的并行数据转化为10B的数据。一个未被编码的数据可以表示为A、B、C、D、E、F、G和H,其中H表示高位,A表示低位。编码后的数据可以表示为a、b、c、d、e、f、g、h、i和j,其中j表示高位,a表示低位。转换的示意图如图所示。

一个数据可以分为高三位和低五位。在转换的过程中,高三位采用的方式转换,低五位采用5B/6B的编码方式进行转换。假设数据的高三位F、G、H对应的十进制位x ,低五位A、B、C、D、E对应的十进制为y

无论对于控制字符还是数据编码,同一个序列对应着两种编码方式一个是RD-,另一个是RD+。因此对于8B/10B编码一个重要的概念"极性偏差"(RD,running disparity),也称为游程值。RD的含义是计算10-bit数据中"1"和"0"的个数的差值。当RD为"+"时,0比1的个数多两个。当RD为"-"时,0比1的个数少两个。当0和1的个数相等时,为最理想的状态称为平衡码。因此,当10bit数据中1比0的数量多时RD为"+"。当0比1的个数多时,RD为"-"。当1和0的数量相等时,RD保持不表。通过调节RD的变化,就可以很好的控制信道中的直流平衡性。

下一章节将讲解数据对齐的自动训练。。。

源码:

1、源码版【LVDS工程源码】LVDS 高速接口

2、IP核版本

相关推荐
国科安芯3 小时前
航天器多路并联大功率电源系统设计与ASP4644均流特性分析
单片机·嵌入式硬件·fpga开发·安全性测试
techdashen1 天前
从网络栈继续往下:micro:bit、2.4GHz、调制方式,以及一个不太靠谱但很有趣的想法
网络·fpga开发
FPGA小徐1 天前
FIR 数字滤波器 --verilog设计实现
fpga开发
zlinear数据采集卡1 天前
从协议解析到波形实时显示:硬核拆解ZLinear采集卡上位机软件的开发架构
arm开发·单片机·嵌入式硬件·fpga开发·架构·开源
pcjiushizhu1 天前
ModelSim 仿真时 Simulate 无反应或只显示 Loading 的解决方法:网卡问题排查
fpga开发
FPGA小迷弟2 天前
vivado中的AXI Interconnect到底应该怎么用,他的底层原理是什么,一篇文档全部理清楚!!!
网络协议·tcp/ip·fpga开发·verilog·fpga
国科安芯2 天前
ASC4T245S分组双向控制架构深度解析:独立DIR/OE控制、QFN16封装与混合方向总线桥接
单片机·嵌入式硬件·物联网·fpga开发·架构·risc-v
尤老师FPGA2 天前
GT系列2:GT基础架构(二)
fpga开发
想你依然心痛2 天前
电源时序控制:多路电源的上电顺序与监控——复位、看门狗
fpga开发