这28 b数据中包括3个数据端口:A口(8 b)、B口(8 b)、C口(8 b),和4个视频控制信号FVAL(帧有效)、DVAL(数据有效)、LVAL(行有效)、SPARE(空,暂时未用)。至于经过Camera Link芯片转换后的时钟信号,则是整个相机的同步驱动信号,所有的数据和视频控制信号都是和该时钟信号同步的,相机的时序图见图3。
相机可以配置成8 b或10 b的输出位宽,40 MHz像素时钟或80 MHz像素时钟,2×40 MHz或2×80 MHz的数据输出速率。关于Camera Link的采集数据的逻辑代码,关键之处在于产生存储器的地址信号、存储器写信号以及在对应的地址处将数据稳定地写进存储器。我们用像素时钟产生列地址计数器,行同步信号产生行地址计数器,二者拼接产生存储器的地址信号。这样产生的有效地址虽然不连续,但意义明确,而且有利于显示部分的隔行隔列显示。对于 8 b的数据,可将4个有效数据拼接成32 b后再存储,这样可以降低FPGA读写存储器的速度。
2.2 基于FPGA的图像预处理单元
针对图像预处理阶段运算结构比较简单的特点,用FPGA进行硬件实现无疑是理想的选择,这样同时兼顾了速度和灵活性,大大减轻了DSP的负担。这里采用的预处理算法主要是中值滤波,中值滤波器是一种非线性滤波器,与均值滤波器和类似其他形式的滤波器相比,中值滤波器具有能够彻底滤除尖波干扰噪声同时又能够较好地保护目标图像边缘等优点。中值滤波的具体实现过程一般为:
(1)选择一个n×n的滑动窗口(通常为3×3或者5×5),使其沿图像数据的行或者列方向逐像素滑动(通常为从左至右,从上到下逐行移动)。
(2)每次滑动后,对窗口内的像素灰度值进行排序,用排序所得的中间值代替窗口中心位置像素的灰度值。
用硬件实现二维中值滤波,很重要的一点是能可靠地存储实时图像数据,并且使延时最短。在存储n-1行图像数据后便开始处理,其中n为窗口大小,在本设计中,选用3*3窗口的中值滤波器,即n=3。这样设计的好处是,FPGA可以以串行流水方式实现该模块,节省了许多时间,为实时处理创造了有利条件。
为了尽量节约资源,充分利用硬件设计中的“模块复用”原则,需设计1个移位寄存器、1个dq寄存器、1个二值比较器,然后在像素时钟的驱动下,首先调用移位寄存和dq寄存器产生窗口数据,然后对3×3模板里的数据多次调用dq寄存器和2值比较器进行冒泡排序输出中间值。中值滤波模块示意图见图4。
2.3 基于DSP的图像处理单元
TI公司的TMS320C6414芯片是一款高性能定点DSP处理器,其主频可以高达720 MHz,片内具有丰富的RAM资源,同时通过EMIFA和EMIFB口可以扩展很多存储芯片。这里主要扩展的是程序FLASH芯片,用于存放固化的程序代码。
前面已经说明了FPGA如何控制SRAM读写逻辑的,DSP的主要工作是响应FPGA发出的中断信号,读取图像数据进行处理,虽然每一帧读取的实际的 SRAM不同,但是通过FPGA的映射后,对于DSP来说,SRAM始终在DSP片外的一端固定地址范围内。DSP响应中断的流程图见图5。