基于FPGA实现LVDS_7to1接口显示屏显示

基于FPGA实现LVDS_7to1接口显示屏显示

前言

本设计说明了如何使用 Xilinx Ultralscale FPGA实现 LVDS 7:1 发送功能,本实验用的 FPGA 型号为 KU5P,LVDS外设为 LCD显示屏。

原理

LCD显示屏时序

  • LCD显示屏型号为:TL068HWXH12CT-B1596A

  • 接口时序

    • VS和HS均为低有效

OSERDESE3

  • OSERDESE3 是 UltraScale 器件中的并转串转换器(4-bit 或 8-bit)。
  • 它主要用于源同步接口 (如高速数据传输)或从旧系列(如 7 系列)迁移的设计。
  • 如果需要其他转换比(非 4/8),官方建议改用 ODDRE1 原语或在内部逻辑中实现Gearbox。

OBUFDS

RAM32X1D

用 RAM32X1D 原语实现FIFO功能。

系统框图

OSERDESE3 的 CLK 与 CLKDIV 端口之间的偏斜过大,可能导致发送数据错位。为了最大程度地减少偏斜,本设计中 CLK 与 CLKDIV 来源于同一个 MMCM/PLL 时钟输出,如图上图所示。

为了进一步减少偏斜,必须使用 CLOCK_DELAY_GROUP 约束。以下是 XDC 约束示例。必须使用正确的层次化实例名称。如果使用了多个 tx_clkgen_7to1 模块,每个模块的约束必须具有唯一的名称(例如 ioclockGroup_tx):

xdc 复制代码
set_property CLOCK_DELAY_GROUP ioclockGroup_tx [get_nets -of [get_pins bg_txdiv2/O]]
set_property CLOCK_DELAY_GROUP ioclockGroup_tx [get_nets -of [get_pins bg_txdiv4/O]]

发送器内的某些路径不需要进行时序分析,应将其标记为伪路径(false path)以实现时序收敛。以下是 XDC 约束示例。必须使用正确的层次化实例名称:

xdc 复制代码
set_false_path -to [get_pins {u_lvds_tx_7to1/tx_enable_sync_reg[*]/CLR}]
set_false_path -to [get_pins {u_lvds_tx_7to1/txc_piso/tx_data_reg[*]/D}]
set_false_path -to [get_pins {u_lvds_tx_7to1/txc_piso/rd_last_reg[*]/D}]
set_false_path -to [get_pins {u_lvds_tx_7to1/txd[*].piso/tx_data_reg[*]/D}]
set_false_path -to [get_pins {u_lvds_tx_7to1/txd[*].piso/rd_last_reg[*]/D}]

系统时序

测试结果

测试视频为下移斜方格显示视频。

基于FPGA实现LVDS_7to1接口显示屏显示

参考资料

  • ug953-vivado-7series-libraries

  • ug571-ultrascale-selectio

博客导航目录