2、系统设计与实现
实现图 2 的基于视觉的汽车主动安全系统,数据的存储和传输是一个主要的问题,尤其是对于汽车主动安全这样的实时性要求非常高的应用背景。如何在最短的时间内,由原始采集到的图像数据,经过一系列的存储器数据搬移及信号处理过程,获得最终的对道路的理解判断,并对车辆是否跑偏做出正确的决策,是本系统主要的实现目标。本文将依据数据在系统中的“流动”顺序对本系统进行详细的介绍。
2.1、数据采集模块
在本系统中,图像数据是主要的传感器信号,获得高质量的图像数据对后期的处理和功能的实现具有较大的意义。但是对于实际的应用环境,由于天气、光照等因素的影响,甚至是一系列特殊情况的出现,一般的图像传感器在各种条件下难以具有较好的鲁棒性。为了较好的适应各种道路和天气状况,保证驾驶的安全性,我们采用了适合道路使用的CMOS 数字摄像头芯片自主开发了视觉采集模块,该摄像头芯片通过159 位SPI 控制字可完全编程控制,较好的实现对曝光时间、增益和噪声等的调节。同时,该摄像头芯片采用了一种多斜率的曝光模式输出,在不同的曝光模式下,控制曝光的时间也是不一样的,保证在光照过强或者光照条件非常弱的情况下,都可获得较好的图像。
对于摄像头芯片的SPI 控制,本文为了自适应的调整在不同背景下的工作模式,由DSP根据最后对图像的理解和判断的结果,给予FPGA 一定的通信信号完成对摄像头芯片的顶层的系统级的控制,而底层的真正的SPI 控制字的修改和调整则由FPGA 来完成,这样可避免SPI 的工作频率和DSP 外部总线频率的不一致而导致的DSP 工作效率的浪费,而FPGA来完成这样的工作则比较容易。
2.2、数据传输、存储模块
在本系统中,从前端的图像采集模块,到最后的报警信号的输出,数据是不停的在FPGA、SDRAM 及DSP 之间进行传输和搬移,接下来主要讨论如何在这三者之间进行高速有效的搬移和处理,这也正是本文的主要模块。系统中的数据流程主要有以下几个方面:
Ⅰ、在 FPGA 中经过预处理的图像数据,首先必须存储到主存储芯片SDRAM 中,这是后端高层处理的基础。
Ⅱ、DSP从SDRAM中读取最新的图像数据进行处理,并将处理的中间结果存于SDRAM中,这样的读写过程很可能是循环进行的,SDRAM 的分块存储特性正适合这样的性能要求。
Ⅲ、为了系统调试的方便,很可能要求显示中间处理的结果,因此我们在 FPGA 上挂接了一块显示调试模块,调试时FPGA 可从SDRAM 中读取中间的处理结果进行显示。
Ⅳ、还有一种情况,某些情况下我们可能要求 DSP 和FPGA 之间直接进行图像数据的传输,这也是我们必须考虑的范畴。
综合上面的种种可能情况,考虑我们采用的 DSP 芯片同时支持FIFO 和SDRAM 芯片的无缝连接,我们设计了图3 的数据传输方案:
首先,前端的采集模块输出的图像数据是 8 位的,而对于我们采用的SDRAM 存储芯片和DSP 处理芯片,数据总线都是64 位的。为了不造成资源的浪费,在FPGA 对图像进行预处理的过程中,我们同时将8 位的图像数据拼接成64 的数据输出,这样可充分利用系统的资源。
其次,在 FPGA 中经过一系列并行预处理的图像数据,存储于FPGA 内部开辟的FIFO中。FPGA 给出握手信号,通知DSP 可以开始由FIFO 向SDRAM 传输数据,数据的传输过程则完全由DSP 通过EDMA 传输方式来控制完成。当核心处理器DSP 完成当前操作的情况下,再从SDRAM 中读入最新的数据进行处理,这可充分利用DSP 芯片丰富的外设资源。
同时,由图 3 的数据流图我们发现数据在由FPGA 向SDRAM 传输的过程中,相对于DSP 来说,FPGA 中开辟的用来存储数据的FIFO 模块和外部主存储器SDRAM 模块是挂接于DSP 上的相同的地址总线和数据总线上的,在这种源设备和目的设备挂接于相同外部总线上的传输形式下,我们采用的DSP 芯片支持一种优化的EDMA 传输模式-PDT 传输,它优化了数据的传输过程,使得DSP 的EDMA 传输模式可在数据不经过DSP 内的缓存区的情况下,直接由源设备FIFO 传输到目的设备SDRAM 中,从而可在一个周期内完成数据的传输。相比于传统的传输模式,先由FPGA 传输到DSP 内部的缓存区,再由DSP 写入到SDRAM 中,PDT 传输模式基本上可缩短一半的数据传输时间,对于像图像这样的大容量数据传输来说,是具有非常大的意义的。