H.264 AXI4低延时硬件编解码核IP
用户手册

1.介绍
此文档简要描述了H.264 AXI4-Stream编解码核,编码器和解码器有很多共用的引脚和特征。某些专用的引脚或者特性会高亮标记显示。这个核封装为AXI接口,可以集成到Xilinx、Altera、MicroSemi FPGAs中。包括Spartan-6, Virtex-6, 7-Series 和Zynq等都支持这个核的集成,且这个核是以IP的形式发布,能在IP Integrator中例化。
这个核能通过控制寄存器配置成编码模式或者解码模式,在把核从编码配置到解码时,需要等到之前帧处理完。

2.信号列表
下面的表格描述了此IP核的接口信号,更加详细的信息请参考AMBA AXI核ACE Protocol Specification或者Xilinx的AXI4-Stream Video Protocol Specification。
H.264 AXI4低延时硬件编解码核IP 用户手册
2.1 Ready信号和BACK PRESSURE
在编码处理过程中,h264核需要读写DDR3,为了防止S_AXI_AWREADY信号处于无效态,此核必须要有及时访问和有效的带宽。为了不让核承受背压,系统设计者应该评估出带宽需求和延迟处理,如果发生背压,输出视频帧就会丢掉。为了防止这种情况的发生,需要在AXI-Stream data之前添加FIFO进行帧缓存。
2.2时钟信号
下面的时钟信号都是应用在H.264的core中,下面是一些时钟信号和最小频率:
core_clk:整个核的核心时钟,编解码核平均1.5个时钟处理一个像素点,所以最小时钟频率应该是像素频率的1.5倍。一个1080P30的视频流,时钟频率应该是1.519201080=93MHz。添加一些额外开销,时钟应该在100M左右。
m_axi_core_aclk(input):此时钟是DDR接口时钟,觉得对DDR的读写访问速率,为了避免访问延时此时钟应该尽可能快(1080P30视频流,此时钟应该>150M)
s_axi_aclk(input):配置寄存器时钟
s_axis_video_aclk(input):未压缩的视频流时钟,频率至少是视频像素的时钟
m_axis_video_aclk(output):超过s_axi_aclk

2.3通用信号
信号名 方向 位宽 描述
core_clk in 1 core 时钟
core_reset In 1 core复位,高有效,有效必须8个时钟周期
core_int Out 1 Core中断,当帧压缩完成后,会有效一个s_axi_aclk时钟周期。注意:此信号在边沿有效时能正确工作,但在电平有效时需要增加额外的逻辑来锁存和清除中断

3.数据格式
编解码核的AXI4 stream接口只携带有效数据,空白周期、音频数据、附属数据包等没有通过AXI4 stream协议。编解码核通过AXI Stream接口以YUV422的格式每一个时钟传输一个像素。
H.264 AXI4低延时硬件编解码核IP 用户手册
亮度和色度分别打包在[7:0]和[15:8]上

编解码核通过AXIM接口从存储器中读写数据,数据格式都是宏块顺序,每一个宏块都是1616的正方形像素块。输入的YUV422格式数据转换为YUV420的格式并存储到外部DDR。编解码核使用420的8bit的视频数据来进行压缩,意味着每一个宏块中有1616的亮度,168的色度(88的Cr和88的Cb),按下表所示定义像素。
H.264 AXI4低延时硬件编解码核IP 用户手册
对于一帧m行n个宏块,为了更加有效的利用DDR3,数据需要按下面这种方式排列
H.264 AXI4低延时硬件编解码核IP 用户手册
H.264 AXI4低延时硬件编解码核IP 用户手册MB_Y(x,y) = (x,y) macroblock中的16
16亮度值(256字节)
MB_Cb(x,y) = (x,y) macroblock中的88Cb色度值(64字节)
MB_Cr(x,y) = (x,y) macroblock中的8
8Cr色度值(64字节)

编解码核需要4片缓存区来做下面工作:
1.读取YUV数据来压缩(解压不需要,参考帧的输出需要被使用)
2.当压缩P帧的时候,读取参考帧
3.当压缩I或者P帧时,写入参考帧
4.写入压缩后的数据流(解压时读取)

编解码核每一个像素需要1.5字节缓存。比如一个720480的视频,每一个缓存区最小需要768480*1.5字节。建议缓存区在1K范围以减少存储器的页损失。

编解码核一次存取128字节数据(突发长度32次,每次4字节),例外是在写压缩后的视频流。下面是计算需要的DDR带宽:
N = 每秒的像素点
O = 压缩后的位流

写捕获的原始视频流数据:1.5N(写420数据时,每个像素点1.5字节)
读取视频数据:1.5N(读420数据时,每个像素1.5个字节)
读取参考帧:4.5N(每处理一个MB时,需要读取3个新的MB)
写入参考帧:1.5N(写420数据时,每个像素点1.5字节)
写入压缩后的数据:O/8
总共的带宽:9N+O/8
比如:压缩一个1080P30的数据,输出带宽15Mbit/s则大约需要538MByte/s的DDR带宽。核的存取是128字节.系统的一些管理(存储器仲裁,更新,页丢失等)需要一起来决定储存器配置核时钟速度。

相关文章: