做LED点阵屏驱动?调试VGA输出?或者在FPGA上跑个HDMI小模块?很多刚上手的朋友发现,明明真值表背得滚瓜烂熟,仿真也过了,一上板就花屏、撕裂、闪屏——问题往往不出在顶层逻辑,而卡在最基础的逻辑门设计细节里。
电平竞争:看不见的毛刺杀手
比如用两个与非门搭一个SR锁存器,输入S=1、R=1后立刻切到S=0、R=0,理论上应保持原态。但实际中,两条路径延时不一致,可能短暂出现S=R=1→S=R=0的过渡态,导致Q和Q̅同时为1,下游译码电路瞬间“懵圈”。这种毛刺在示波器上看就是几十纳秒的尖峰,在显示驱动里直接表现为某几行像素乱码。
扇出超限:别让一个门拖垮整条扫描线
驱动16×16点阵屏的行选信号,有人图省事用单个74HC04反相器带16个MOS管栅极。查手册才发现,74HC系列标准负载是10个74HC输入,而每个MOS管栅极等效电容常达50pF以上,16路并联后RC时间常数飙升,上升沿拖成缓坡——结果就是行切换延迟,相邻两行图像重叠(俗称“鬼影”)。
实测对比(Xilinx Artix-7 + 74LVC系列):
// 正确做法:分层缓冲
assign row_drv[0] = row_raw[0]; // 直接驱动第0行
assign row_drv[1:7] = {7{row_raw[1]}}; // 用独立buffer复制
assign row_drv[8:15] = {8{row_raw[2]}}; // 避免单点扇出过大亚稳态蔓延:跨时钟域不是加两级触发器就完事
VGA像素时钟(25.175MHz)和MCU控制时钟(100MHz)异步交互时,常见错误是只对地址线打两拍,却忽略数据有效信号(如LCD_WR)。当WR边沿恰好落在采样时钟建立/保持窗口内,第二级FF仍可能输出亚稳态,导致某次写入丢失半个字节——屏幕右下角突然出现色块,且每次复位位置不同。
更隐蔽的是,某些CPLD内部布线会把多个异步信号凑到同一行LUT里,表面看是同步逻辑,实则存在隐式组合环路。建议用综合工具打开“Show Unmapped Logic”,重点检查带异步复位的寄存器是否被优化掉初始化值。
工艺偏差:同一批芯片,响应速度差30%
同一型号74AUP系列,在-40℃低温环境下,传输延迟可能比25℃标称值高2.3倍。做车载仪表盘显示驱动时,若按常温参数设计行扫描周期,冬天冷启动阶段就会因行脉冲变宽,造成垂直压缩失真。实测某款TFT屏,在-30℃时需将BLANK信号延时额外增加12ns才能消除首行暗带。