高 聪,陈福深,王德胜,刘海洋,刘 怡,刘桂芬
(1.电子科技大学,四川 成都 610054;2.西南技术物理研究所,四川 成都 610041)
自动目标识别、跟踪技术应用越来越广泛,对此技术的研究也越来越成熟,并取得了一定的成果。如何判断识别、跟踪的效果并便于进行操作,离不开显示技术。提高存储容量、降低成本和便于控制成为显示技术追求的目标。在显示系统中,由于动态随机存取存储器(SDRAM)具有容量大、价格便宜以及访问速度快的优点,现已逐渐取代速率较慢的静态随机存取存储器(SRAM)而成为显示控制系统中的主流高速存储器。
基于FPGA的图像采集与预处理系统,有很强的动态配置灵活性,具有处理速度快、处理系统通用性与可移植性强的明显优势,正得到人们日益广泛的重视与研究。本文以FPGA为核心,配合DSP,ADV7179,SDRAM等芯片设计而成,其中SDRAM的芯片类型为MT48LC16MA2TG。它的容量为4×8192×512×16 bit,具有功耗低、容量大、集成度高、速度快等优点。
整个系统的结构框图如图1所示。
图1 系统结构图
在如图1所示的系统中,从图像数据模块发送的数据开始,收到的图像数据一路是经过Linkport模块转化为DSP所要接收的时序模式,而另外一路则是通过串并转换进行接收,以SRAM_A作为缓存存入SDRAM中,通过乒乓存储的方式进行地址的转换,再经过SRAM_B作为缓存,放入ADV7179时序上。这期间需要SDRAM控制器进行完成。由于ADV7179所输入的是8 bit的图像数据,显然需要将接收到的16 bit数据压缩成8 bit数据,此时DSP把当前图像像素的最值(最大值最小值)与计算的目标位置分别送入数据压缩模块进行数据压缩和字符叠加模块进行字符叠加,最后将处理后的数据送入ADV7179芯片,然后送入显示器进行图像显示。
该模块所发送的为黑白图像,共包含3种模式:模式1为280(列)×480(行)×16 bit;模式2为390×480×16 bit;模式3为400×480×16 bit。所发送的信号包括场信号、行信号与数据信号。其中对于模式1和模式3,每场都是包含480行数据,而不同的是每行信号对于模式1包含280×16 bit数据,模式3为400×16 bit数据,每行数据分别对应原始图像的一列数据。而对于模式2,则是每场数据大概1 s,也就是场信号正负跳变的时间间隔为1 s,如果要进行显示,根据ADV7179的时序特点,每场数据大约要截取390行去显示,这样1 s内大概包含有50场数据。这样如果直接将接收的数据进行输出显示,会发现所显示的视频对于原视频图像有90°的旋转。而对于每个像素点(16 bit),用 L1D0,L1D1,L1D2 和 L1D3 同时传输,传输时钟为108 MHz,那么对于一个像素点,其传输的速率时钟为27 MHz。时序如图2所示。
图2 原始输入数据的时序关系
此模块的作用是将所接收的数据时序,转化为DSP所接收的数据时序。DSP所接收的信号主要有时钟信号、数据信号与中断信号。中断信号每场发一次,它主要作用是告诉DSP要接收新的一场数据和提示DSP向FPGA在新的一场中重新发送控制指令,比如说显示模式、目标位置等。DSP所接收的时钟为54 MHz,且双沿出数,这样传输的像素速率仍为27 Mbit/s。数据传输特点如图3所示。
图3 DSP所接收数据的时序关系
此模块作用主要有3个:1)给出当前要显示的图像模式;2)统计当前接收图像像素的最值(包括最大值与最小值),并且给出压缩需要的最大值、最小值;3)通过识别、跟踪算法,计算当前图像的目标位置。
此模块将具有图2时序特点的 L1D0,L1D1,L1D2,L1D3信号,经过串并转换,得到并行的16 bit像素值,并且产生每个上升沿对应一个像素的像素时钟,显然像素时钟为27 MHz(108 MHz/4)。
此模块包含SDRAM兵乓存储前SRAM_A缓存模块和存储后SRAM_B缓存模块。对于SRAM_A缓存模块,主要是解决接收像素的时钟频率与SDRAM写入数据的时钟频率不协调的问题。根据串并转换模块,很显然接收的数据速率是27 Mbit/s,而SDRAM写入数据时钟为12.5 MHz(100 MHz/8)。SRAM_A实现步骤是:当所接收的行信号为高电平时,将输入的数据写入SRAM中,当行信号为低电平时,控制SDRAM进行写入操作,将SRAM_A的数据写入SDRAM中(见图4)。显然对于一行数据的写入SDRAM时间为上一个行信号的下降沿到下一个行信号的下降沿,两者的时间间隔为行信号的周期,足够SDRAM完全把所接收的上一行数据写入 SDRAM中,所以SDRAM_A所需的空间为所接收到的一行数据量。对于SRAM_B缓存模块,主要是解决SDRAM读出的数据速率与送入ADV7179显示时序的不匹配问题。SDRAM读出的数据时钟为11.11 MHz,而送入显示的时钟频率为13.5 MHz(ADV7179对于彩色图像显示为27 MHz,对于黑白图像显示等效时钟为13.5 MHz)。SRAM_B模块采用的是在要显示的前一行写入SRAM_B,而在下一行所需要显示的时序位置进行读出(见图5)。显然,SRAM_B需要的内存为两行显示的数据量。
在对图4与图5的读写时钟(clock_a为写时钟,clock_b为读时钟)观察时,明显可以看到读写时钟频率不同。从图4中可以看到写操作已结束,读操作开始,其中写操作在写时钟的上升沿开始写入。而对于图5,可以看到读写操作可以同时进行,但是写入的是上一行要显示的数据,而读出的是下一行要显示的数据。由于具有同时性,所以缓存需要两行数据量,实现SRAM_B内存地址交替进行。
在图像处理系统中,输入到FPGA数据的速度和FPGA处理的速度经常不一致或者对图像做一些旋转、变换等操作时,就必须对处理数据做一定的缓存,保证数据处理的高速进行。SDRAM控制器与外部接口之间的示意图如图6所示。
图6 SDRAM控制器接口示意图
SDRAM控制模块主要包括SDRAM控制器与相应配置模块。其中SDRAM控制器主要由初始化状态机与读写状态机组成,状态转换关系如图7所示。
图7 控制器状态转换图
初始化包括上电、预充电、两次自刷新以及设置模式寄存器进入空闲状态。到达空闲状态时,初始化结束标志信号sys_INIT_DONE由低拉高。当信号sys_INIT_DONE为高时,说明初始化已经完成。但初始化完成并不能代表初始化成功,必须要根据芯片资料,正确设置各参数。这里由于时钟频率为100 MHz(tCLK=10 μs),而对于MT48LC 16M16(-75)的芯片,tMRD(模式寄存器下载时间)=2 × tCLK,tRP(预充电周期)=20 μs,tRFC(自刷新周期)=66 μs,tRCD(从激活到读写时间)=20 μs,tWR(写回时间)=17 μs,tDAL(操作结果延时时间)=tWR+tRP=37 μs。
读状态转换:首先根据sys_CYC_END信号判断上个操作是否结束,若结束sys_CYC_END为高时,拉低sys_ADSn,状态机从IDLE状态进入ACT状态,再将sys_R_Wn置高,读地址(包括列地址、行地址和bank地址)放入总线,状态机进入Read A Burst状态,经过CL和自动预充电时间后,状态机对进入IDLE状态,这是sys_CYC_END会重新拉高代表当前读状态循环结束,以便进行下步操作。
写状态转换:同样首先根据sys_CYC_END信号判断上个操作是否结束,若结束sys_CYC_END为高时,拉低sys_ADSn,状态机从IDLE状态进入ACT状态,再将sys_R_Wn置低,写地址(包括列地址,行地址,bank地址)放入总线,状态机进入Write A Burst状态,经过tWR(数据才会写到SDRAM存储空间),后再过预充电tPRE时间,回到IDLE状态,同样sys_CYC_END会重新拉高代表当前读状态循环结束,以便进行下步操作。
刷新:一般SDRAM对每个存储器的充放电周期为64 ms,这就代表对于一个存储器,若中间没有进行操作时,想保留存储器所存储的值,必须进行刷新。预充电其实也是对存储器的刷新,只不过它是对固定行的刷新,并且时间是随机的。如果进行刷新,就必须在64 ms内,对所有存储单元进行刷新。这需要一个自刷新计数器。可以假设要对N行进行刷新,这时刷新的周期是T=64 ms/N,每到T时间,可以发一个刷新请求,对某一行进行刷新,此时地址并不需要给出,它里面有个刷新地址计数器,每次刷新后地址会加1。由于在刷新过程中不能做任何操作,也就是说在发送刷新请求后必须要等到刷新时间结束,才能做其他的操作。从图8寄存器变量iState的变化中,可以看到初始化状态机通过控制CS,RAS,CAS,WE,CKE这5个信号,完成了预充电、两次自刷新、模式寄存器设置等操作。iState为9时,初始化完成接着进入写状态。
图8 初始化状态机状态转换图(截图)
从图9中可以看到,由sys_R_Wn_sdramA为低电平,SDRAM_A处于写操作,每个写操作结束后sys_CYS_END_A出现一个上升沿,sys_CYS_END_A会作为SRAM_A的读时钟,使SRAM_A读出的数据q_b放入SDRAM_A的数据线SDRAMA_DQ上,进入下一个写操作。而sys_R_Wn_sdramB为高电平,则SDRAM_B处于读操作,同样每个读操作结束后sys_CYS_END_B出现一个上升沿,sys_CYS_END_B会作为SRAM_B的写时钟信号,将从SDRAM_B中读出的数据SDRAMB_DQ放入SRAM_B的输入数据信号data_a上,使SRAM_B进入写操作。另外还可以观察到对于写操作时行地址随着行信号的变化而改变,而列地址是随着像素时钟的改变而变化,相反对于读操作时列地址随着行信号的变化而改变,而行地址是随着像素时钟的改变而变化,实现了图像的90°旋转。
图9 SDRAM_A和SDRAM_B数据输入输出图(截图)
电视行场扫描,是通过控制电子束在水平方向从左到右和垂直方向从上到下有规律运动形成的光栅。水平方向的扫描叫行扫描,垂直方向的扫描叫场扫描,合称“行场扫描”。对于扫描包括消隐、正程、同步信号。消隐信号,时间约12 μs,电平为75%,对应于显像管荧光屏上电子束从右向左的行扫描逆程,它的作用是消除行逆程期间的回扫线。正程信号,时间约52 μs,其电平处于白色电平与黑色电平之间,对应于显像管荧光屏上电子束从左向右的扫描时间。视频信号电平越高图像越暗,电平越低图像越亮。同步信号时间约4.7 μs,其电平为100%,脉冲为160 μs。它的作用是使接收机中的场扫描电流与发送端的场扫描电流的频率和相位一致。
隔行扫描主要应用于电视信号的发送与接收中。它的特点是把25 f/s(帧/秒)的画面用50 f/s的方法来消除闪烁感,即一面传送两次,第一次扫描奇数行,第二次扫描偶数行,因而称为隔行扫描。采用这一制式的缺点是画面清晰度稍差,且有轻微的闪烁感。文章所用的ADV7179_HS对应于行扫描信号,高电平代表正程扫描,低电平代表消隐期间。ADV7179_VS对应于场扫描信号,高电平代表场正程期间,低电平代表场消隐期间,下面不再重述。ADV7179_P表示像素点电平高低,值越大代表屏幕上的点越亮,这些信号最终都会通过ADV7179转化为显示器所需要的复合模拟信号输出。其功能实现如下:通过输入的场信号和13.5 MHz时钟,产生ADV7179时序。先将20 ms的场信号,转变为40 ms的场信号,40 ms场信号到时用13.5 MHz时钟进行计数,当计数结果为864时,行计数加1,在40 ms内不断重复此过程,分别得到pcount(列计数)和hcount(行计数),再按照图10时序图进行设置,即对于行信号ADV7179_HS,90(数值可以稍微小点,数值太大图像会发生抖动)≤pcount≤809(数值可以稍微大点)时取高,其余取低。FS_VDS7179中,1≤hcount≤312时取低,其余取高。时间关系中,864×T1(13.5 MHz)=64 μs(1行时间),625× T2=40 ms(两场时间)。屏幕显示720(列)×576(行)分别对应信号HS_VDS7179和FS_VDS7179。扫描方式为先扫奇场后扫偶场,从奇场到偶场扫描时,低电平时间一定要控制得尽量准确,若两段之间的低电平较长时,会造成图像抖动,甚者会使图像上下分离(奇偶场明显叠加错位)。
图10 配置ADV7179信号采样图(截图)
此模块的作用主要是根据接收DSP所发送当前图像像素的最大值、最小值,把16 bit图像数据压缩成8 bit图像数据。压缩公式如
字符叠加,则是接收DSP所发送目标在当前图像的位置,在目标位置附近将矩形窗叠加到目标位置周围,以便人眼观察。图10为配置ADV7179信号的采样图,从图上可以看到ADV7179_P是从pcount为97时才开始有数据,与上文设置90≤pcount≤809不符,原因是经过了数据压缩模块中的乘法器与除法器的延时。对此,可以将行信号做相应延时,就能够得到正确的显示图像。
图11是跟踪模式1图像大小280(列)×480(行)的视频输入输出图,可以看到显示器实时显示的图像基本上能够清晰地反映出原始输入的场景信息,DSP通过Linkport模块准确接收了FPGA所发的实时图像信息,并通过识别匹配算法,实时正确地给出了要识别物的位置信息,FPGA在两块SDRAM的配合下进行了准确的显示。
通过设计一种简易的SDRAM控制器,利用SDRAM的乒乓存储结构,在DSP配合和配置ADV7179的时序下,实现了一种针对扫描、跟踪模式下对280×480,390×480,400×480,560×480的实时视频显示。这种低成本、多模式下的显示系统,不但给人机交互操作带来很大的便利,而且在军事上具有一定的应用潜力。文章介绍了各个模块的时序特点与接口信号之间的连结关系,具有操作简单、通用性好、便于移植等特点。
图11 视频输入输出图
高速、海量存储器是存储器的发展方向。SDRAM、专用的 SGRAM(同步图像 RAM)、DDR SDRAM、QDR SDRAM等存储器给人们提供了更多的选择,然而速度越快,操作相对越复杂,成本越高。由于本文设计主要是针对低分辨力的显示方式,这种简易的SDRAM控制器能够非常好地适应视频实时显示,不失为一种好的选择。
[1]WAKERLY J F.数字设计原理与实践[M].北京:机械工业出版社,2003.
[2]雷明,马游春.基于FPGA的多通道图像采集存储系统设计[J].通信技术,2010,43(4):204-207.
[3]苏海冰,吴钦章.用SDRAM在高速数据采集和存储系统中实现海量缓存[J].光学精密工程,2002,10(5):462-465.
[4]卞九辉.基于DSP+FPGA的视频图像处理[D].哈尔滨:哈尔滨工程大学,2009.
[5]王卫东.电视原理[M].重庆:重庆大学出版社,2012.