这一篇在干嘛?
这篇笔记带你从零读懂安路 EG4S20 的《LVDS.IP 设计概述》。我们按”LVDS 是什么 → 要实现什么功能 → 协议长啥样 → 发送端怎么做 → 接收端怎么做 → 怎么自适应对齐 → 怎么配置”的顺序,把官方手册的每个重要章节都翻译成大白话。
先认识几个词
看手册之前,先把几个缩写摆平,后面就不会晕了:
| 缩写 | 全称 | 人话解释 |
|---|---|---|
| LVDS | Low-Voltage Differential Signaling | 低电压差分信号,本篇主角 |
| VESA | Video Electronics Standards Association | 视频电子标准协会(美国那边的标准) |
| JEIDA | Japan Electronic Industry Development Association | 日本电子产业发展协会(日本那边的标准) |
| TTL | Transistor-Transistor Logic | 晶体管-晶体管逻辑电平,老的并行传输方式 |
| RSDS | Reduced Swing Differential Signal | 低摆幅差分信号,LVDS 的”亲戚” |
| MIPI | Mobile Industry Processor Interface | 移动产业处理器接口,手机屏幕常用 |
这里有两个”标准协会”的名字要特别记住:VESA 和 JEIDA。它们是液晶屏 LVDS 传输的两大协议流派,后面会反复出现。
LVDS 到底是个啥?
LVDS(低电压差分信号)是一种信号传输方式。它的核心思路是:用一对信号线(一正一负)来传数据,接收端看的是这两根线的电压差,而不是单根线对地的电压。
这带来几个好处:
- 抗干扰强:外界噪声一般会同时砸到两根线上(共模干扰),一减就没了,差值不受影响。
- 速率高:因为摆幅小、抗噪好,可以跑很高的速率。
- 功耗低、协议简单。
所以液晶屏的数据传输方式虽然有 TTL、LVDS、RSDS、MIPI 好几种,LVDS 凭借高速、低功耗、抗干扰强、协议简单这几板斧,在液晶屏上应用特别广。
那为什么用 FPGA 来做?因为 FPGA 有三大优势:可编程灵活性(协议随便改)、IO 多电平标准支持(LVDS 电平直接支持)、高速串行接口支持。所以在液晶屏驱动、传输协议转换这些场合,FPGA 是常客。
小提醒
手册里说:本文涉及的 LVDS,若无特殊说明,默认指** LVDS 在液晶屏上的传输方式**。也就是说这不是泛泛讲 LVDS 物理层,而是聚焦”怎么把视频画面用 LVDS 甩到屏幕上”这件事。
这个设计要实现什么功能?
手册分两块列了需求,其实就是”能力清单”:
功能需求——支持什么:
- 支持 VESA 标准协议
- 支持 JEIDA 标准协议
- 支持用户自定义协议
- 支持 6bit、8bit、10bit 数据模式(每通道色深的位数)
- 支持单路、双路、四路传输方式
- 支持自适应接收:数据包边界自动识别、数据采样位置自动对准
性能需求——跑多快:
| 传输方式 | 带宽 | 能传的视频 |
|---|---|---|
| 单路 | 3.2 Gbps | 1280×720@60Hz 或同等带宽视频 |
| 双路 | 6.4 Gbps | 1920×1080@60Hz 或同等带宽视频 |
| 四路 | 12.8 Gbps | 2K@60Hz 或 4K@30Hz 或同等带宽视频 |
记忆窍门
单路 3.2 Gbps,双路翻倍 6.4,四路再翻倍 12.8——路数每加一倍,带宽线性翻倍,屏幕分辨率上限也就水涨船高。
两大协议:VESA 和 JEIDA
LVDS 在液晶显示上有两个标准协议,区别主要在于 bit 的排列映射方式不一样(同一个像素数据的各个位放在哪个通道、哪个时隙)。
VESA 协议的位映射长这样:

JEIDA 协议则长这样:

常见的坑
屏幕点不亮或者颜色乱跳,第一件要查的事就是:屏要求的协议和 FPGA 发的协议是不是同一种。VESA 和 JEIDA 的位序不同,接错了轻则花屏、重则黑屏。买屏时一定问清楚屏支持哪种协议。
发送接口:FPGA 往屏里”灌”数据
先看发送端对外长什么样:

管脚一栏表(发送端):
| 管脚名 | 方向 | 位宽 | 说明 |
|---|---|---|---|
| CLK | input | 1 | 视频像素时钟 |
| VS | input | 1 | 视频场同步信号 |
| HS | input | 1 | 视频行同步信号 |
| DE | input | 1 | 视频像素使能信号 |
| RGB | input | 18-30 | 视频像素信号 |
| LVDS_TX_CLK | output | 1 | LVDS 发送时钟 |
| LVDS_TX_LINE0 | output | 3-5 | LVDS 发送通道 0 |
| LVDS_TX_LINE1 | output | 3-5 | LVDS 发送通道 1 |
| LVDS_TX_LINE2 | output | 3-5 | LVDS 发送通道 2 |
| LVDS_TX_LINE3 | output | 3-5 | LVDS 发送通道 3 |
用人话串一遍:你把**像素数据(RGB)+ 三个指挥信号(VS 场同步、HS 行同步、DE 像素使能)+ 像素时钟(CLK)**喂给模块,模块把它们打包成串行差分流,从 LVDS_TX_CLK(时钟对)和 LINE03(数据对)甩出去。RGB 位宽是 1830 位,正好对应 6bit/8bit/10bit 模式下三个颜色分量的总位数(6×3=18,8×3=24,10×3=30);LINE03 位宽 35,是因为每根数据线在物理上是一对差分线。
接收接口:把屏那边(或别处)的 LVDS 收回来
接收端就是发送端的镜像,信号方向整体反过来:

管脚一栏表(接收端):
| 管脚名 | 方向 | 位宽 | 说明 |
|---|---|---|---|
| CLK | output | 1 | 视频像素时钟 |
| VS | output | 1 | 视频场同步信号 |
| HS | output | 1 | 视频行同步信号 |
| DE | output | 1 | 视频像素使能信号 |
| RGB | output | 18-30 | 视频像素信号 |
| LVDS_RX_CLK | input | 1 | LVDS 发送时钟 |
| LVDS_RX_LINE0 | input | 3-5 | LVDS 发送通道 0 |
| LVDS_RX_LINE1 | input | 3-5 | LVDS 发送通道 1 |
| LVDS_RX_LINE2 | input | 3-5 | LVDS 发送通道 2 |
| LVDS_RX_LINE3 | input | 3-5 | LVDS 发送通道 3 |
对比一下就能发现规律:发送端的 input 到了接收端全变成 output,反之亦然。接收端吃进差分线,吐出还原好的并行视频流。注意 RX 侧的 LINE 管脚说明里写的也是”LVDS 发送通道”——手册这里沿用发送端的叫法,指的都是同一组物理线对。
发送端内部怎么转?——3.5 倍时钟的魔法
发送框图如下:

流程用一句话概括:视频时钟进锁相环,倍频出 3.5 倍时钟,用这个 3.5 倍时钟做并串转换,最后以 ODDR 方式输出。
为什么是 3.5 倍?因为 VESA/JEIDA 协议里,每个像素时钟周期内每根 LVDS 数据线要传 7 个 bit。用 3.5 倍时钟做双边沿采样(上升沿+下降沿都干活),3.5 × 2 = 7 个时隙,正好把 7 个 bit 依次排上流水线。
框图里几个模块各司其职:
- 相位同步模块:保证输出的 LVDS 数据和 LVDS 时钟满足 VESA/JEIDA 协议要求的相位关系。
- 协议处理模块:选择 VESA 或 JEIDA 协议,把视频数据按协议映射成并行数据。
- 宏定义模块:整个发送端的配置开关,可选协议类型(VESA/JEIDA/自定义)、色深(6/8/10bit)、通道数(单/双/四)。所有配置通过宏定义选择,代码内部用条件编译处理。
设计风格
这个 IP 用”宏定义 + 条件编译”来做配置,编译期就定死所有参数,不占任何运行时资源——对 FPGA 来说这是很省资源、也很稳妥的做法,代价是改配置要重新综合一遍。
接收端内部怎么转?——自适应是灵魂
接收框图如下:

接收模块要干的事:数据时钟恢复、采样位置自适应调节、数据包边界自适应识别、VESA/JEIDA 协议解析。
其中相位跟踪、相位同步、误码率统计、采样相位调节这 4 个模块,是实现 LVDS 自适应接收的关键。
宏定义模块除了发送端那些选项(协议、色深、通道数),还多一个选择:手动采样相位还是自适应调节相位。
自适应接收原理:用 1100011 找到边界
这是全篇最有意思的部分。先说前提条件,自适应接收成立要满足两条:
- LVDS 时钟和数据延时相等(时钟线和数据线延迟一致,才好对齐)。
- 数据最高速率 < 1/(IO 寄存器建立时间 + IO 寄存器保持时间 + 时钟抖动 + 数据抖动)。通俗讲:跑得不能太快,得给采样留出足够的”安全窗口”。
时钟和数据的采样关系如下图:

那怎么知道采样位置对不对呢?这里用了一个很聪明的技巧。以 VESA 协议为例,看下面这张图(红色时钟是 LVDS 接收时钟的 3.5 倍频):

关键知识:LVDS_CLK 本身是个先验已知的信号,它高低电平的比例是 4:3。如果我们用 LVDS_CLK 的 7 倍时钟单边沿采样(或 3.5 倍时钟双边沿采样),那么采到的时钟序列一定是 1100011,或者 1100011 的各种移位版本。
于是判据就来了:
- 用 LVDS_CLK_3P5X 去采 LVDS_CLK,如果结果不是
1100011及其移位——说明采样时钟没对齐安全采样区间,就动锁相环的移相功能,挪一点再采,直到采样结果永远是1100011及其移位为止。 - 如果采样结果刚好是
1100011——此时采样时刻正对应数据包的起始位置,边界找到了!
精髓一句话
拿”已知形状”的时钟线当标尺去校准采样相位——采样图案对上
1100011,就说明眼睛睁在了正确的位置。这就是”数据包边界自动识别 + 采样位置自动对准”的全部秘密。 手册还补了一句:LVDS 有 7 个相位可配置,PLL 可选内置或外部。
怎么配置:软件接口
发送端和接收端都通过宏定义来配置。发送端的配置界面如图:

接收端的配置参数直接看代码更清楚:
`define VESA // 模块处理VESA协议
`define JEIDA // 模块处理JEIDA协议
`define USER // 模块处理用户自定义协议
`define RGB6 // 图像数据使用6bit模式
`define RGB8 // 图像数据使用8bit模式
`define RGB10 // 图像数据使用10bit模式
`define CHAN_NUM1 // 使用单通道传输
`define CHAN_NUM2 // 使用双通道传输
`define CHAN_NUM4 // 使用四通道传输
`define AUTO_PHASE // LVDS接收采用自适应相位识别
`define FIXED_PHASE // LVDS接收采用手动相位配置
parameter PHASE = 0; // 配置LVDS3.5倍时钟相位配置逻辑就是”四选一 + 四选一”:协议三选一(VESA/JEIDA/USER),色深三选一(RGB6/8/10),通道数三选一(1/2/4),相位模式二选一(AUTO/FIXED)。注意 AUTO_PHASE 和 FIXED_PHASE 只有接收端才有——发送端不需要对齐,发送时相位是它自己说了算的。
别忘了你的屏是谁
配置前先弄清楚三件事:屏的协议(VESA 还是 JEIDA)、屏的色深(6/8/10bit)、要走几路。这三个宏选错任何一个,出来的图像都不会正常。
收个尾
回顾一下整条链路:视频并行数据(RGB+同步信号)进来 → 按协议(VESA/JEIDA)映射成 7bit 一组的串行帧 → 锁相环产生 3.5 倍时钟做并串转换 → ODDR 差分输出;接收端反着来,先用 1100011 图案自适应对齐采样相位、找到数据包边界,再解协议还原并行视频。整个设计的灵活性全靠宏定义开关,跑多快、传多大屏看路数:单路 3.2 Gbps 传 720p,双路 6.4 Gbps 传 1080p,四路 12.8 Gbps 传 2K/4K。
自测
- 接收端为什么可以用 LVDS_CLK 的采样结果来判断相位是否对齐?如果用 3.5 倍时钟双边沿采样 LVDS_CLK,正常情况下应该采到什么图案?
- 某项目要用 FPGA 驱动一块 1920×1080@60Hz 的屏,应该选几路 LVDS?对应的总带宽是多少?