项目场景:
VGA显示实验,模块框图如下,其中vga_ctrl为控制模块,需要输出行场同步信号和有效像素数据,其有效像素数据是通过把像素坐标数据发送到pix_gen模块,由后者计算得到。

问题
vga_ctrl模块中输出的数据pix_data和有效使能信号rgb_valid不同步,如下图标记处,有效像素数据pix_data的16‘d65535滞后使能信号rgb_valid一拍。

为什么需要同步:
因为输出数据信号需要和行场同步信号中的数据有效部分时序对齐,来达到VGA的协议要求,而rgb_valid和行场同步信号均由行场计数器cnt_h和cnt_v得到, rgb_valid与有效像素是同步的,所以只要数据和rgb_valid同步即可。
为何现在不同步:
输出数据其实是和输入数据为组合逻辑连接,所以是同步的,而输入数据是由数据生成模块中接受了坐标数据以后才能产生,而且由于是时序逻辑,所以数据会慢坐标一拍。本质上就是该点坐标是经由一个时序逻辑才产生像素数据的,所以两者不同步
解决方法
固定的关系在于坐标提前数据一拍,当前坐标和使能是同步的,导致数据滞后使能一拍,要抵消由于坐标到数据的滞后的一拍,只要让坐标提前一拍即可解决,像素坐标要解决其有效性和计算正确性两个问题:
首先,有效性由rgb_valid约束,由于其是由行场计数器约束形成,修改后就不满足VGA有效像素区间了(这也是为什么没有采用将使能信号打一拍来使其同步的方法),所以这里创建一个提前rgb_valid一拍的新的信号rgb_req,将rgb_valid约束条件中行计数器的条件开始和结束均-1,从而使得rgb_req提前rgb_valid一拍。
然后是计算正确性的问题,由于仅仅行提前1拍,场没有变化,所以提前以后计数器计数-1,所以行坐标原先的0会变成-1,所以这里行坐标需要+1。
修改前代码:

修改后代码:

验证后,输出数据pix_data已经和有效使能信号rgb_valid同步,问题得到解决!


在VGA显示实验中,vga_ctrl模块的pix_data与rgb_valid信号不同步,导致数据滞后一拍。问题源于像素坐标到数据的时序延迟。解决方案是创建提前一拍的rgb_req信号,并调整行坐标以保持正确性。经过修改,数据已与使能信号同步。
7934

被折叠的 条评论
为什么被折叠?



