4 工作流程
FPGA内部工作模块如图4所示。下面简要阐述关键信号的数据流向。
场同步极性判断模块的功能是根据输入的VESA1信号判断出场同步极性(VSP),因VESA1和VESA2视频格式相同,只需判断VESA1的场同步极性。VESA1(VESA2)写地址生成模块的功能是利用场同步极性实现写地址和像素位置的合理对应。输出时序、写地址生成模块的功能是利用场同步极性、VESA1写地址生成模块生成的写地址a_write1和VESA1中的场同步信号,实现分辨率的判断,进而结合其他信号完成输出时序的生成和读地址的生成。SRAM控制模块负责根据上述生成的读地址和写地址,写入两路VESA信号的新的像素数据,读出先前存储的两路VESA信号像素数据。被读出的两个像素点将用于输出时序、写地址生成模块的像素叠加操作,产生的像素作为输出像素。
4.1 场同步极性(Ver Sync Polarity)判断
由于DE1=1期间,VSYNC1信号必然处于非同步期,此时的电平与同步期相反。所以,在DE1=1时,若VSYNC1=1,则记为VSP=0(Ver Sync Polarity=NEGATIVE),否则,记为VSP=1(Ver Sync Polarity=POSITIVE)。在实现该模块的编程中,采用VESA1视频信号中的CLK1像素时钟信号上升沿来同步此进程,可以保证产生的信号稳定。
4.2 VESA1和VESA2写地址生成
因为VESA1写地址生成与VESA2写地址生成类似,这里只介绍VESA1的写地址(a_write1)生成。由于系统中SRAM的地址总线为20位(寻址能力1M),所以a_write1为20位。若将输入视频信号的分辨率记为def,则VESA1一帧像素数据所需SRAM空间范围是0~def-1。因此,在场同步期间(VSYNC1=VSP),可令a_write1<=220-1。在非场同步期间,若处于像素数据有效期(DE1=1),则当像素时钟(CLK1)上升沿到来时,对a_write1实行自加一操作(假设已设置T.M.D.S解码器1输出的控制信号及像素数据在CLK1的上升沿前后稳定);若处于像素数据无效期(DE1≠0),则a_write1保持不变。这样,在一帧图像期间,对应从图像左上角开始计数的每个像素数据,便可形成0~def-1的地址范围。
4.3 输出时序、读地址生成
4.3.1 分辨率判断
a_write1(VESA1写地址)的范围是0~def-1,而a_write1完成从def-1到0跳变的触发源正是场同步信号(VSYNC1)从非同步期到同步期的跳变。因此,可定义一信号def_clk,当VSYNC1≠VSP时,def_clk<=0,否则,def_clk<=1。这样,当def_clk上升沿到来时,正是场同步信号从非同步期到同步期的跳变,此时若令20位信号def_1<= a_write1(等于def-1),且令def<=def_1+1,则可得真正的分辨率,。
4.3.2 暂时输出时序控制信号生成
VESA标准的控制信号包括VSYNC、HSYNC、DE。由于已知两路视频信号的分辨率(def),这时将VESA1的像素时钟(CLK1)作为暂时的输出时序像素时钟(CLK33),再结合VESA标准的介绍,便可生成分辨为def的暂时的输出时序控制信号VSYNC33、HSYNC33、DE33。
4.3.3 VESA3读地址生成
由于此地址生成方法与VESA1和VESA2写地址生成方法相同,只是此处生成的地址是SRAM控制器用来读取像素数据而已,故不再赘述。
4.3.4 换场信号生成
当主时序换场时,每一路视频信号的两片SRAM需要交换读写方式,即若换场前读SRAM1、SRAM3,写SRAM2、SRAM4,则换场后读SRAM2、SRAM4,写SRAM1、SRAM3。因此需要一个信号在主时序相邻两场的电平不同,即换场信号,记为v_trans。此信号用来控制图 4中SRAM控制模块的读写方式。
v_trans的生成方式比较简单,只需在VSYNC33的上升沿到来时将v_trans取反即可。
4.3.5 输出时序同步处理和叠加像素生成
由于信号在FPGA生成的电路存在延迟,主时序控制信号和像素时钟信号可能产生不同步现象。因此需要对控制信号进行同步处理,同步期间同时生成像素数据Data3(VESA3像素数据)并输出。VESA3中的像素时钟直接短接CLK33即可。Data11(Data22)是从SRAM中读取的VESA1(VESA2)链路像素数据。
同步过程为CLK33下降沿到来时输出控制信号和像素数据。由于本文将VESA1作为主路、VESA2作为从路,所以要将VESA2信号叠加在VESA1上。叠加算法为:若VESA2第i个像素点(Data22)为黑色(Data22=0),则输出的VESA3第i个像素为VESA1的第i个像素(Data11),即Data3<=Data11;否则,输出的VESA3第i个像素为VESA2的第i个像素,即Data3<=Data22。
4.4 SRAM控制
将SRAM1和SRAM2分为一组,对应VESA1链路;将SRAM3和SRAM4分为一组,对应VESA2链路。SRAM控制模块需要对每一组中的两块SRAM轮流进行读写操作。若v_trans=0,则用VESA3读地址生成模块产生的地址a_read来读取SRAM1、SRAM3,分别得像素数据Data11、Data22,同时用VESA1、VESA2写地址生成模块产生的地址a_write1、a_write2分别将Data1、Data2写入SRAM2、SRAM4;否则,用地址a_read读取SRAM2、SRAM4,分别得像素数据Data11、Data22,同时用地址a_write1和a_write2分别将Data1和Data2写入SRAM1、SRAM3。Data11、Data22被送至输出时序、读地址生成模块进行叠加像素生成。
5 实验结果
对于1 024×768@60Hz的VESA时序,控制信号(vsync,hsync,de)和像素时钟(idck)的仿真结果如图 5所示,其他分辨率的仿真图不再给出。经过测量场同步信号和行同步信号的周期分别为16.7 ms、20.7 ?滋s,与VESA标准[2]一致,其他参数经测量也吻合,不再列举。
由于只对两路视频中的绿色信号进行了叠加,显示色数有些不足。后期研究可向全彩色视频叠加方向努力。但彩色信号叠加与绿色信号叠加在原理上相同,只是意味着要选用引脚数更多的FPGA。
参考文献
[1] Digital Display Working Group.Digital visual interface DVI,Revision1.0.1999,4.
[2] Video EleCTRonICs Standards Association.VESA and industry standards and guidelines for computer display monitor timing(DMT).Version 1.0,Revision 10,2004.
[3] Video Electronics Standards Association.VESA E-EDID implementation guide.Version1.0,2001.
[4] Video Electronics Standards Association.Display data channel (DDC) specification.Version 3,1997.