高密度可编程FIFO存储器在视频图像中的应用
在这篇文章中,我们将首先介绍几个视频应用,了解其数据路径及需要处理的数据性质。下一步,我们将尽力估计在视频处理通道中操作数据的复杂性。然后会介绍可编程高密度FIFO和其能力,以及它如何能更有效率的替代当前传统的使用SDRAM和FPGA实现帧缓存的方案.
视频应用概述:
图1显示了IPTV的系统框图。输入传输流可以是任何编码形式如DVB -ASI,MPEG2或SDI,他们通过用多格式解码器(multi-format CODEC)传输,转换成(即解码或重解码)成H.264传输流。经编码的传输流用通道信息封装并通过以太网发送。在接收路径,到来的传输流在显示之前要进行解码和后处理,例如降噪、颜色增强,缩放,去隔行等。
图2显示了一个用于电影制作和摄影棚的HD(高清)专业相机的系统框图。捕获到的图像经过一个图像处理器,进行色彩处理、亮度提高、数码缩放、帧速率转变等等。图像处理单元通常使用一个基于FPGA的设计,由于大部分的图像处理是专有的,会经常发生变化。应用处理器管理与其它设备的通讯以及压缩并存储捕获到的内容到海量存储(HDD)。应用处理器也有一个图形引擎来进行屏幕显示(OSD),它和进来的视频混合后显示。
从上述例子中,我们可以看到数据处理包括两种类型:
1) 帧同步: 在一些任务中需要帧同步(例如,通过以太网传输和接收时,当码流速度不断变化而解码器需要一个恒速的传输流)。虽然存储器对同步的要求似乎很小,但当涉及到多个码流时它可能很显著。这种同步可以由一个异步FIFO实现。
2) 帧存储: 帧存储在这些地方需要:任何暂时的处理如帧率转换,数码变焦(缩放),或执行去隔行。储存的帧数量随着需要的临时信息数目增加而增加。当视频数据按照本来的顺序时,帧缓存也必须是"先进先出"。
通过上面的讨论,我们可以说,所有的储存和同步都可以使用FIFO实现。那么理想的FIFO应该是多大的呢?一个典型的1080p 帧,10位 4:2:2格式将需要存储器大小为39.55M位(每行像素数*每帧行数*每像素比特数= 1920*1080*20)。预计总容量可以通过需要存储的帧数乘以这个数字。典型的视频处理算法需要存储2到3帧,这意味着总容量要达到120M位。由于不可能有如此大的基于片上SRAM的FIFO存储器,一般的方法是使用一个DRAM来缓存这个数据。
高密度FIFO -传统的实施和及其复杂性。
帧缓存就是高密度FIFO,传统上使用外部DDR SDRAM实现。举例说明一个典型的视频处理应用和这些FIFO如何实现。
图3显示了一个典型情况的数据路径,有4种不同来源的视频流需要显示在同一个显示器上。四个以1080p60(24位RGB)分辨率捕捉视频的高清相机使用一个cameralink接口连接到系统上。色彩空间转换 (从RGB到YCbCr)及色度采样降低(从4:4:4到4:2:2)后,横向和纵向帧按比例减少,并储存在DDR2 SDRAM里。存储的帧可以按要求读回和定位,结果帧和融合帧然后提高采样速度和色彩空间转换为通过LVDS连接来驱动面板。
让我们看看存储器大小和带宽要求:
(i) 大小要求:
尽管这里没有涉及到时间处理,为了避免一个源的两帧被分开储存,这样当一帧正在写时,另一个帧可能要读回来。两帧图像的大小是((1920 * 1080 * 16)/ 4)* 2 ~ = 63.3M位。
(ii)带宽要求:
由于读和写路径为复用的,所需带宽是读、写路径带宽之和。
写路径频率=(每个客户端频率)*( 客户端数量)=(148.5/4 )* 4 = 148.5MHz
读路径频率=输出帧分辨率频率= 148.5MHz。
实际的工作频率为( (读频率+写频率) / 2 +其它开销),因为接口工作在双数据速率,并且还有一些其它开销,如DRAM存储器刷新周期、bank地址切换等等。假设为80%的效率,那么将在185MHz的频率运行。
(iii)内存接口大小和I / O需求:
当画面以16位4:2:2格式存储时,一个16位接口就足够了。根据计算,FPGA 的I/O总数的为46:
时钟引脚(2个用于差分时钟,1个用于时钟使能)= 3引脚
命令引脚(片选,RAS, CAS, WE)= 4引脚
地址引脚(14个地址线、3个 bank地址线)= 17引脚
数据线(X16接口)= 16引脚
数据选通及分离(4个引脚用于2微分DQS,2个用于分离数据)= 6引脚
高密度FIFO -离散的存储器:
现在让我们看看使用离散可编程高密度FIFO的实现方式和特性定义,这样DDR2 SDRAM存储器就可以由简单的数据存储便可以由简单的数据存储代替。
(i)多队列特点:
如果FIFO存储器定义为一个单一块的内存,那么写多个视频流是不可能的。因此,FIFO必须能够配置并分成多个队列。在上文的例子中,有四种不同的画面要写,并且四
- 基于单片机的可编程直流稳压电源设计(08-17)
- 利用可编程电源平衡输入纹波电流的解决方案(09-11)
- 可编程电源设计(01-12)
- NXP (Freescale) i.MX7 96Board(05-17)
- 可编程逻辑控制器(PLC)基本操作及功能简介(03-07)
- 人工智能技术的进程能否加快,可编程芯片才是关键(09-07)