LED大屏控制器的核心任务很明确:把一帧RGB图像数据按扫描时序逐行送进驱动芯片,再点亮灯珠。做对了,画面流畅无闪;做错了时序或数据对齐,屏要么撕裂要么花屏。下面把最容易踩坑的两个环节讲透。
一句话:扫描时序决定"哪一行、哪个像素、什么时刻亮"。FPGA里通常用行计数器和列计数器两级结构。行计数器按帧率(一般≥100 Hz)产生行选脉冲,列计数器按像素时钟(几十到几百MHz)逐列递增。
三个关键细节:
行选信号必须加消隐间隔(blanking),让扫描芯片完成换行,否则上下行重叠导致画面错位。
列时钟与行选必须严格对齐到同一时钟域,跨时钟域用两级寄存器同步,否则灰度值在切换瞬间出现毛刺。
灰度数据送出的顺序是"先锁存灰度、再拉行选",顺序反了画面会黑一帧。
把这三点画成时序图,调试时用ILA抓波形对照,基本能定位绝大多数闪烁问题。
帧缓冲到扫描芯片之间,数据要经历"读→位宽转换→时序对齐→输出"四步:
帧缓冲小屏(≤1024×768)用片内BRAM,大屏用外部DDR。读地址按"行号×列数+列号"生成,行选脉冲触发下一行地址装载。
读出的RGB数据(各8 bit)若驱动芯片接口要求4 bit×6(每级灰度拆高低位),需级联两组移位寄存器做串并转换,时序上错开一个像素时钟。
像素时钟与DDR时钟通常不同频,中间用FIFO做异步桥接,深度至少容纳1~2行数据防上溢。
刷新率 = 行选频率 × 列数 × 灰度级数。以100 Hz、1024列、4级灰度算,等效带宽约410 Mbit/s,DDR4轻松覆盖,但FIFO复位策略和读写指针初始化必须单独处理,上电瞬间会丢一行。
总结与思考题
扫描时序管"什么时候亮",数据链路管"亮什么值",两者对齐大屏才能不闪不裂。
思考:若你的大屏要同时支持双色(16级)和全彩(64级)两种模式切换,帧缓冲结构和扫描时序各需要怎么改?
CTA
宸极教育2026年FPGA课程把扫描时序、FIFO跨时钟域、DDR读写拆成阶段二到阶段三的21个实战项目,每个都配完整工程与调试方法。想系统走通从Verilog基础到企业级项目的完整路径,点击官网右下角客服窗口,和我们聊聊你的学习起点和目标方向。
未经许可,禁止转载!
下一篇:没有了