一、技术要求
- 1~4路1080P视频输入;
- 经过拼接、缩放、校准,旋转等图像算法在显示器上进行显示,各算法的参数可以在线调整设置,参数设置保存之后不变;
- 同时图像延时要小于50mS;
- 功耗低。
二、设计思路和架构
延时要小于50mS的要求就决定要采用fpga实现,同时各算法参数不要求实时更改,因而在fpga上用查表法来实现图像拼接、缩放、校准和旋转等多种算法。查表法用到的像素地址表格由小型的低功耗32位单片机生成,这样就能同时附合低功耗的要求。设计方案架构如图1:
图1、方案架构图
因fpga内部缓存资源有限,所以采用外挂DDR3/DDR4大容量缓存。采用外部单片机考虑到可以采用低成本的fpga,利于降低整机方案的硬件成本。
多路摄像头的视频经fpga缓存到DDR3外部缓存,32位单片机运行拼接、缩放、校准和旋转等算法,生成查表算法用到的像素地址表格,并把这像素地址表格保存在DDR3中,供fpga读取。fpga读取像素地址表格中的地址,并从地址中取出像素合成图像传给显示器。
以上所说有查表算法是很好理解的,大家都熟悉的算法。但要在fpga中实现起来并不怎么容易。DDR3/DDR4特点是批量连续读取带宽利用率高,可达99%。但是查表法中的地址是不连续的,这样不连续的从ddr3读取数据,带宽利用率可能低到30%。这样会严重影响合成图像的刷新率,重而大大提高图像显示的延时。
方案难点:如何提高查表算法的DDR3带宽利用率。觖决这个难点是本方案成功的关健所在
三、查表算法方案详细设计
3.1、提高DDR3带宽利用率的方法
要提高DDR3带宽利用率,增加fpga内部的缓存是一种方法,但是fpga内部ram资源有限,不可能无限制的增加,因而适当的增加是可以的。除此之外我们采用了如下方法:
- 用地址对齐的方式压缩查表法中的地址:减少了读写次数,相当于增加了ddr3带宽利用率。
- 增加单次读写的像素个数。就是一次读取就能包含多个有效像素。
- 假设同前一行像素相同,那就不重新从ddr3缓存中读取了,直接从前一行像素备份缓存中拷一下就可以了。
3.2、FPGA查表算法RTL逻辑
FPGA查表算法RTL逻辑模块结构图如下:
图2、查表算法fpga逻辑结构图
地址表格处理模块逻辑的功能是进行进址压缩,生成压缩标志信号和64位地址对齐(也可以128位)的压缩地址数据流。 把压缩标志传给图像合成模块,把压缩地址专给像素读取DMA,像素读取DMA位宽64位,64位yuv(422)可以对应4个像素。像素读取DMA把这64位数据传给图像合成模块进行分解解压。图像合成模块根据接受的压缩标志和64位数据生成最终的图像数据经图像输出接口模块传给显示器。图像输出接口模块决定了图像的输出刷新率。
四、地址表格处理模块逻辑原理
由单片机生成的地址表在地址表格处理模块里只是简单的进行了64位地址对齐处理。逻辑如图3所示:
图3、地址表格处理模块逻辑图
注:1、SYNC 是行同步信号;
2、CLK 像素时钟;
3、AH就是地址表格数据;
4、AF 表示同前一行像素重复标志,对应的AH数据Xn为前一行的行序号;
5、YF 表示 为地址压缩标志,也可理解为压缩地址的使能信号。当YF为1时,对应的YAH数据为输给读像素DMA模块的压缩地址数据。
其中SYNC、AH、地址表格处理模块的输入信号,AF、YF、YAH为输出信号。
五、图像合成模块逻辑原理
图4、图像合成模块逻辑图
注: 1、SYNC 是行同步信号;
2、CLK 像素时钟;
3、AF 表示同前一行像素重复标志,对应的AH数据Xn为前一行的行序号;
4、YF 表示 为地址压缩标志;
5、X 表示行重复像素的行序号;
6、ImagDat1 表示读取的行重复像素数据;
7、ImagDat2 表示读像素DMA模块读取的行像素数据;
8、ImagDat 表示合成的行图像数据;
9、DatEn 表示合成行图像数据的使能信号。
其中 ImagDat 、DatEn 为此模块输出信号,其它都为输入信号。
六、单片机的作用
有以下作用:
1、上电初始化FPGA逻辑;
2、设置算法参数,并保存;
3、初始化视频接口芯片和显示器接口芯片;
4、 经过拼接、缩放、校准,旋转等图像算法生成相应的地址表格数据;
5、地址表格数据进行初步处理,提取行像素重复标志,并把相应地址数据改为前一行的行序号。
6、把处理好的地址表格数据写入ddr3。
七、最终效果图
图像刷新率达到了25帖/s;因要缓存一辐图像,最终最大延时刚好50ms
下面是实物图:
图5
图6
图7、图像延时测试
图8、图像延时测试