同时要注意:如果在处理完一帧图像后再采集下一帧时,图像数据已经进入了偶场或奇场,此时若开放图像采集,由于不是从图像头开始采集,所采图像将不完全,因此需要确定图像采集开始的基准。这里设计只在RTS0的上升沿才检测图像采集开始信号是否产生,这样每帧图像只在RTS0的上升沿才开始采集,即每次都从偶场开始,这样就避免了图像数据的混乱,保证图像的开始基准。另外,由于存放图像数据的SRAM(奇、偶场SRAM)地址是由CPLD控制产生的,那么如果将SAA7111A转换输出的VPO[15:0]直接存放在SRAM中,势必就会影响数据、地址的同步,导致不同的数据写入同一个地址,同一个数据写入不同的地址,从而造成读写错误。因此,考虑将SAA7111A输出的VPO[15:0]也作为CPLD的输入信号,在CPLD里通过延时作同步处理后再连接到SRAM的数据线上,这样就可以满足时序要求使数据写入正确的地址。
3.2 总线逻辑切换设计
在前面提到了CPLD和DSP之间的总线切换管理是设计中的难点,在数据采集过程CPLD必须掌握总线控制权,切换到数据处理过程DSP必须掌握总线控制权。为了解决这个无缝切换问题,这里充分利用DSP的保持请求信号nHOLD和保持响应信号nHOLDA来协调总线切换[3]。
通过置DSP的XF引脚为低电平,告诉CPLD开始控制SAA7111A进行图像采集。在DSP_XF连接到CPLD为高电平(DSP_XF初始状态应该为低电平)时,CPLD产生DSP_ HOLD总线请求切换信号,该信号连接到DSP的nHOLD引脚请求DSP进入保持状态,在3个机器周期后DSP做出响应:产生nHOLDA低电平信号到CPLD,而且外部数据总线、外部地址总线和控制总线都变成高阻态。此时DSP进入保持状态,CPLD控制各总线操作;当一帧图像采集、存储完成后CPLD产生nINT中断信号通知DSP开始处理处理数据,同时并置高DSP_ HOLD引脚使得DSP的nHOLD脚也置高,并通过对CPLD编程将CPLD与SRAM连接的各个外部数据总线、外部地址总线和控制总线都置成高阻态,而在nHOLD置高3个机器周期后DSP外部数据总线、外部地址总线和控制总线都脱离高阻态,DSP进入正常工作状态,DSP置XF脚为高电平,收回总线控制权进行数据处理;
当DSP将处理后的一帧数据传输到上位机完成后,再次置低XF脚告诉CPLD可以开始采集下一帧了,CPLD产生DSP_ HOLD使DSP进入保持状态,外部数据总线、外部地址总线和控制总线又都变成高阻态,CPLD掌握总线控制权。如此往复下去即可以解决DSP与图像采集模块的总线冲突问题,正确的切换总线逻辑保证了可以循环采集图像进行处理。
3.3 CPLD逻辑功能仿真验证
通过利用CPLD控制视频A/D芯片SAA7111A的图像采集过程,并利用SAA7111A的输出状态信号来控制CPLD实现图像数据储存、时序控制、地址译码等功能。这样很好地协调了行、场参考及同步信号、像素时钟、SRAM读写信号和DSP控制信号之间的时序关系,保证了对SRAM读写操作时各信号的时序配合,很好的解决了行、场延时问题,使图像分辨率从720×625过渡到640×480,并且正确生成SRAM写地址,DSP中断信号以及总线切换信号的产生。
由于篇幅有限,故没有列出VHDL具体代码,现只给出仿真结果。仿真结果如下所示:
图4:循环采集处理仿真图
上面的循环采集处理仿真图就是实际系统工作时采集模块中各个信号的时序逻辑关系。从仿真图可以看出通过对CPLD的编程实现了多点的行、场延时,奇偶场分离存放,从而得到多分辨率的图像数据,以及DSP中断产生、逻辑总线切换信号、下一帧的开始触发信号、奇偶场对齐信号等都能满足系统时序要求。采集一帧640×480的图像约需22.75ms,可以满足实时性的要求。
4 结论
本文设计了一种基于CPLD的多分辨率图像采集系统,本文作者创新点:提出一种由CPLD控制图像的行、场信号延时,奇偶数据分离存储来得到不同分辨率图像数据的方法,实现了不占用DSP资源的多分辨率图像的实时采集。经过大量仿真和电路板调试,证明该方案灵活有效,能够在工业监测、医疗诊断等图像实时采集领域得到广泛应用。