Vivado 中实现 LVDS 串行通信的设计流程
LVDS(Low-Voltage Differential Signaling)在机器视觉、雷达信号处理等领域成为高速接口首选,具备抗干扰能力强、功耗低、传输距离远等优势。Xilinx 7 系列及以后的 FPGA 原生支持 LVDS 电平标准,无需外挂 PHY 芯片。
FPGA 里是怎么'看懂'LVDS 信号的?
FPGA 内部有一套完整的差分信号处理链路。
差分输入:IBUFDS 是第一道门
外部 LVDS 信号进入 FPGA 的第一站是 IBUFDS —— 差分输入缓冲器。
IBUFDS u_ibuf ( .I(clk_p), // 正端
.IB(clk_n), // 负端
.O(clk_250m) // 单端输出
);
该模块接收一对差分电压,判定逻辑高低,输出标准 CMOS 电平供内部逻辑使用。必须确保这对引脚位于支持 LVDS 的 Bank 内。可通过参数控制是否启用片内终端:
IBUFDS #( .DIFF_TERM("TRUE") ) u_ibufds (...);
开启后,PCB 上可省掉外接的 100Ω电阻;长距离或驱动多负载建议外置终端。
差分输出:OBUFDS 把数据送出去
发送数据需使用 OBUFDS。
OBUFDS #( .IOSTANDARD("LVDS_25") ) u_obuf ( .I(data_from_fpga), .O(data_p), .OB(data_n) );
注意 .IOSTANDARD 必须和 Bank 电压匹配,否则可能烧毁 IO。
Vivado 工程怎么搭才不翻车?
推荐目录布局:
lvds_camera_project/
├── src/
│ ├── top.v
│ ├── lvds_rx.v
│ └── frame_buffer_ctrl.v
├── constraint/
│ └── pin.xdc
├── ip/
│ └── clk_wiz_0.xci
└── sim/
└── tb_lvds_rx.v

