LCD显示技术完全指南:原理·制造·驱动·FPGA实现之点屏四 LVDS

篇11:LVDS接口深潜——差分信号与高速显示

前面我们用RGB接口点亮了屏幕,但那是并行的TTL电平,线多、速度慢、抗干扰差。当你需要驱动一块7寸以上、分辨率超过800×480的屏幕时,RGB接口的局限性就暴露了——PCLK冲到50MHz以上,十几根数据线同时跳变,EMI和串扰让你头痛不已。
LVDS(Low Voltage Differential Signaling) 就是为解决这些问题而生的。它用几对差分线取代了二十多根并行线,用几百mV的摆幅实现了几百Mbps的速率。这一篇,我们深入LVDS的物理层、协议层和FPGA实现,让你彻底搞懂:为什么LVDS能跑这么快,以及怎么用FPGA驱动一块LVDS接口的屏幕。


一、为什么需要LVDS?

1.1 并行RGB接口的“三座大山”

问题具体表现
线束太多24位RGB + 3个同步信号 + PCLK = 28根线,FPC排线粗、成本高、易断
频率瓶颈高分辨率下PCLK过高(如1080p@60需~150MHz),信号完整性极差
EMI严重多个CMOS信号同时跳变(地弹、串扰),辐射超标,过不了EMC认证

1.2 LVDS如何破局

  • 差分传输 :一对线传输一个信号,正负相减抵消共模噪声,抗干扰能力强
  • 低压摆幅 :350mV(vs CMOS的3.3V),功耗低、电磁辐射小
  • 串行化 :将多路并行数据合并成几路高速串行流,线数从28根降到8~10根

一个比喻 :并行RGB是很多辆小车并排走,车道多但每辆车跑得慢,还互相干扰;LVDS是把小车上的货物卸下来装到几辆大卡车(串行数据流)上,卡车跑得快、车道少、互不干扰。


二、LVDS电气特性速览

2.1 关键参数

参数典型值说明
差分摆幅(Vod)250~450mV通常350mV,驱动电流3.5mA×100Ω
共模电压(Vcm)1.2V对地平均值,允许±50mV漂移
终端电阻100Ω接收端跨接在差分对上,必须匹配
数据速率100Mbps ~ 1Gbps取决于传输距离和线材
传输距离最长10米(但屏内<30cm)

2.2 为什么是100Ω?

差分线的特性阻抗通常设计为100Ω(±10%)。在接收端并接100Ω电阻:

  • 消除反射,保证信号完整性
  • 将电流信号转换为电压信号(I×R = V)

⚠️ 踩坑预警 :很多工程师忘记在接收端加100Ω终端电阻,或者加错位置(应该靠近接收器引脚)。没有终端电阻时,信号会反射,导致眼图闭合,屏幕出现雪花或闪烁。

2.3 LVDS不是唯一的差分标准

市面上还有 miniLVDS (摆幅更低,用于屏内)、 MIPI D-PHY (有HS/LP两种模式)、 SubLVDS (用于图像传感器)。它们的电气层略有差异,不能混接。本篇聚焦标准LVDS(ANSI/TIA/EIA-644),也就是大多数工控屏和笔记本屏使用的接口。


三、串行化与映射:把并行数据塞进差分线

3.1 常见LVDS通道配置

通道数串行化比每周期传输位数典型应用
1对数据+1对时钟7:17小尺寸(≤800×480),18位色
2对数据+1对时钟7:114800×480~1024×768
4对数据+1对时钟7:128最常见 ,支持24位色,1366×768以上
8对数据+1对时钟7:156大尺寸4K电视(需更高带宽)

核心概念 :串行化因子7:1的意思是:每个像素时钟周期内,每条数据线串行发送7个比特。因此4通道LVDS每周期共发送28比特,正好可以打包24位RGB + 3位同步信号 + 1位保留。

3.2 标准映射表(VESA vs JEIDA)

24位色的映射存在两个互不兼容的标准:

标准数据映射特点常见于
VESA按照R[7:0]、G[7:0]、B[7:0]顺序排列,高位在低通道欧美、台湾屏
JEIDA与VESA相比,RGB的高低bit反转(高位变低位)日本屏(如Sharp)

示例(VESA,4通道,7:1映射)

通道每周期7位(位6~位0)
CH0R2, R1, R0, G2, G1, G0, B2
CH1R5, R4, R3, G5, G4, G3, B5
CH2B4, B3, R7, R6, G7, G6, B7
CH3B6, DE, VSYNC, HSYNC, B1, B0, 保留

注意 :不同芯片厂商的映射表可能不同。TI的DS90CF384与NS的对应型号略有差异。 使用前必须核对规格书 ,否则颜色会完全错乱(红蓝互换、色阶颠倒)。

3.3 串行化的时钟关系

LVDS接口需要两种时钟:

  • 像素时钟(PCLK) :频率与RGB接口的PCLK相同,决定了每秒钟传输的像素数。例如1024×768@60,PCLK≈65MHz。
  • 串行时钟(Serializer Clock) :频率 = PCLK × 串行化因子。对于7:1,串行时钟 = 7×PCLK。例如PCLK=65MHz,串行时钟=455MHz。

LVDS差分时钟对的频率等于 串行时钟 ,而不是PCLK。接收端用这个时钟来采样串行数据。


四、FPGA实现LVDS发送器

4.1 硬件要求

  • I/O电平支持LVDS :Xilinx 7系列及以上的HP Bank支持LVDS_25;某些Artix-7的HR Bank可能只支持LVCMOS,需要外部电平转换。
  • 高速串行接口 :需要 OSERDES (并行转串行)和 OBUFDS (差分输出)。
  • PLL :用于生成串行时钟(7×PCLK)以及内部的并行时钟。

4.2 模块结构

PCLK (并行时钟) ──┬──> 并行数据锁存 ──> OSERDES ──> OBUFDS ──> LVDS_P/N
                  │
                  └──> PLL ──> 串行时钟(7×PCLK) ──> OSERDES的CLK
                                    │
                                    └──> 差分时钟输出 (另一对OBUFDS)

4.3 OSERDESE2原语配置(Xilinx 7系列)

4通道LVDS,7:1串行化为例。每个通道需要一个OSERDESE2,配置为:

  • 宽度扩展模式 :将一个字节(8位)转换成串行,但我们需要7位,所以使用两个OSERDES级联(Master+Slave),设置DATA_RATE_TQ = “DDR”,DATA_WIDTH = 7。
  • 时钟 :CLK为串行时钟(7×PCLK),CLKDIV为PCLK。
  • 并行数据输入 :D1~D8,其中D8不用(或接0)。

关键代码 (一个通道,CH0):

verilog

OSERDESE2 #(
    .DATA_RATE_OQ("DDR"),
    .DATA_RATE_TQ("DDR"),
    .DATA_WIDTH(7),
    .SERDES_MODE("MASTER"),
    .TRISTATE_WIDTH(1)
) oserdes_master (
    .CLK(serial_clk),     // 7×PCLK
    .CLKDIV(pclk),        // 像素时钟
    .D1(parallel_data[0]),
    .D2(parallel_data[1]),
    .D3(parallel_data[2]),
    .D4(parallel_data[3]),
    .D5(parallel_data[4]),
    .D6(parallel_data[5]),
    .D7(parallel_data[6]),
    .D8(1'b0),
    .OCE(1'b1),
    .RST(rst),
    .OQ(serial_out),
    .SHIFTIN1(slave_shiftin1),
    .SHIFTIN2(slave_shiftin2),
    // ... 其他端口
);

OSERDESE2 #(
    .DATA_RATE_OQ("DDR"),
    .DATA_WIDTH(7),
    .SERDES_MODE("SLAVE"),
    ...
) oserdes_slave (
    .CLK(serial_clk),
    .CLKDIV(pclk),
    .D1(1'b0),
    .D2(parallel_data[7]), // 第8位(实际不用)
    .D3(1'b0),
    .D4(1'b0),
    .D5(1'b0),
    .D6(1'b0),
    .D7(1'b0),
    .D8(1'b0),
    .SHIFTOUT1(slave_shiftin1),
    .SHIFTOUT2(slave_shiftin2),
    // ...
);

4.4 OBUFDS:差分输出

verilog

OBUFDS #(.IOSTANDARD("LVDS_25")) obufds_inst (
    .O(lvds_p),
    .OB(lvds_n),
    .I(serial_out)
);

时钟通道类似:将串行时钟(7×PCLK)直接送给OBUFDS,注意也需要100Ω端接在接收端。

4.5 并行数据打包逻辑

我们需要将24位RGB + HSYNC/VSYNC/DE打包成4个7位通道。以VESA映射为例,写一个组合逻辑:

verilog

wire [6:0] ch0_data, ch1_data, ch2_data, ch3_data;

assign ch0_data = {R[2:0], G[2:0], B[2]};
assign ch1_data = {R[5:3], G[5:3], B[5]};
assign ch2_data = {B[4:3], R[7:6], G[7:6], B[7]};
assign ch3_data = {B[6], DE, VSYNC, HSYNC, B[1:0]};  // 保留位填0

然后每个PCLK周期,将这4个7位数据锁存到寄存器,再分别送入四个OSERDES。


五、时序约束与信号完整性

5.1 关键时序约束

LVDS发送器的时序要求主要是 数据与时钟的对齐 。接收端使用差分时钟的边沿来采样串行数据。因此,发送端必须保证串行数据的跳变沿相对于时钟边沿的建立/保持时间满足接收端的要求。

在FPGA中,我们通过PLL相位调整来优化这个关系。通常将串行时钟设置为0°相位,数据由OSERDES直接输出,内部已经对齐。但受限于布线延迟,可能需要在输出IOB中插入延迟。

XDC约束示例

tcl

set_output_delay -clock [get_clocks serial_clk] -max 1.5 [get_ports {lvds_data_p[*]}]
set_output_delay -clock [get_clocks serial_clk] -min 0.5 [get_ports {lvds_data_p[*]}]

5.2 PCB布线注意事项

  • 差分对等长 :P与N之间的长度差控制在5mil以内。
  • 对内等长 :同一通道的P/N需要严格匹配。
  • 对间等长 :不同数据通道之间的长度差控制在50mil以内,时钟与数据通道的长度差控制在100mil以内(取决于速率)。
  • 阻抗控制 :差分阻抗100Ω±10%,单端阻抗50Ω。
  • 避免过孔 :差分线上尽量不要有过孔,若必须则成对打过孔。
  • 终端电阻 :100Ω电阻尽可能靠近接收端引脚。

踩坑经历 :曾经有一个项目,LVDS屏偶尔闪屏,查了三天发现是FPC排线的地线不够,导致共模噪声超标。最后在排线两端加共模扼流圈解决。

5.3 眼图测试

调试LVDS接口时,眼图是最直观的工具。理想眼图应该:

  • 眼睛张开高度 ≥ 200mV
  • 眼睛宽度 ≥ 0.7 UI
  • 抖动小,交叉点清晰

如果眼图闭合,检查:终端电阻、差分走线、电源噪声、时钟抖动。


六、接收端视角(反向理解)

虽然我们通常只做发送端(FPGA驱动屏),但理解接收端有助于调试。LVDS接收器内部有:

  • 时钟恢复 (当没有独立时钟通道时):从数据流中恢复时钟(CDR)
  • 串并转换 (ISERDES):将串行数据转换为并行
  • 字对齐 (bitslip):找到7位数据的边界

这正是我们将在下一篇(miniLVDS)中详细讲解的内容。


七、调试实战:LVDS屏幕点不亮怎么办?

现象排查步骤
屏幕完全不亮(背光亮)1. 测量LVDS差分时钟是否有信号(频率=7×PCLK)2. 测量各数据通道是否有活动3. 检查终端电阻是否焊接
显示内容错位、颜色异常1. 确认映射表(VESA/JEIDA)是否正确 2. 检查RGB位顺序(是否高低位反转)3. 检查同步信号极性
屏幕闪烁、噪点1. 用示波器看眼图(可能信号质量差)2. 降低PCLK频率测试(排除时序问题)3. 检查FPGA IO电平标准是否为LVDS_25
图像有水平条纹串行化因子配置错误(如8:1而不是7:1)
图像颜色偏紫缺少一个颜色通道(如蓝色通道没数据),检查CH2或CH3输出

终极工具 :逻辑分析仪无法直接抓取LVDS(需要适配器),但可以用示波器的数学函数做差动测量(CH_A - CH_B)。


八、☕ 工程师私房话

面试题:LVDS为什么用7:1而不是8:1?

答案 :历史原因。早期的LVDS芯片(如DS90C031)设计为7位并行输入,因为当时RGB 18位色(6+6+6)加同步信号正好21位,3通道每通道7位。后来24位色扩展为4通道,仍然沿用7:1。8:1存在(如某些HDMI到LVDS桥片),但非主流。7:1还有一个好处:串行时钟频率不是整倍数关系,减少EMI峰值。

设计经验:FPGA LVDS输出的电流驱动能力

Xilinx LVDS_25的驱动电流固定为3.5mA,对应350mV摆幅(100Ω)。如果需要更长距离(如2米线),可以尝试使用LVDS_25_HP或外部驱动器。不要试图用LVCMOS模拟LVDS——电平不匹配,会烧接收端。

冷知识:LVDS信号可以热插拔吗?

理论上可以,因为LVDS是电流驱动,短路电流被限制在3.5mA左右。但实际插拔时可能会产生过冲,损坏ESD保护二极管。建议设计时在FPC接口上加ESD器件(如RCLAMP0524P),并避免频繁热插拔。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值