H264 Lite 高清视频编解码(codec)器使用说明——— Fully RTL Code Design目录1.功能介绍 (3)2.IP特色 (3)3.应用场景 (3)4.本“使用说明”作用 (3)5.主要功能 (4)5.1.编码器功能 (4)5.2.解码器功能 (4)6.主要硬件指标 (5)6.1.编解码效率(单核) (5)6.2.面积 (5)6.3.编解码带宽需求 (5)6.3.1.编码模式带宽需求 (5)6.3.2.解码模式带宽需求 (5)6.4.综合速度 (5)7.设计结构框图 (6)8.接口信号时序 (7)8.1.寄存器配置接口时序 (7)8.2.DMA读写访问时序 (7)8.3.中断信号时序 (7)8.4.软件复位 (7)9.配置寄存器 (8)10.原始帧数据在外部存储器(DDR)的格式 (10)10.1.亮度(Y)数据 (10)10.2.亮度数据在内存的字节序 (11)10.3.色度(UV)数据: (11)10.4.色度数据在内存的字节序 (12)10.5.以1920X1088的图像为例: (12)11.软件控制流程(参考) (13)11.1.编码器软件控制流程 (13)11.2.H264标准相关寄存器推荐配置(编码模式有效) (14)11.3.解码器软件控制流程 (15)12.设计交付 (16)13.FPGA综合结果 (16)H264_Lite视频编解码器(encoder&decoder)由硬件描述语言verilog实现,此设计经过FPGA EDA工具编译后可集成于可编程逻辑器件(FPGA)平台;也可以使用Synopsys Design Compiler综合后作为ASIC芯片的IP核使用。
该视频编码器输出码流完全符合H.264视频编码标准;解码器能解码H264_Lite自己编码的码流。
该设计针对硬件面积,编码帧率,综合频率做了设计结构上的优化。
该设计对FPGA实现做了特别的时序优化,在Xilinx Zynq7020上可以综合到150MHZ,单核就能够实现1080P@30fps的FPGA应用场景,双核可以实现1080P@60fps的应用场景,三核可以实现4K@30fps的应用场景。
2.IP 特色●编解码帧率高:1080P30理论编解码最低时钟频率是110MHZ●硬件面积小:在zynq7020上,单核只占50%的逻辑资源●延时低:1080P30时,编码器硬件延时在1ms以内●码率控制:可以按MB为单位调整QP,码率更平滑●超高清图像支持:最大编解码图像尺寸为3840x2160●超长GOP支持:最大可以256帧才编码一个I frame,削减码流带宽高峰,仍保持优秀的容错性●编码器,解码器集成在一起,共享硬件逻辑,面积更小●误码控制:针对无线传输(如wifi,微波等)等不保证数据完整性的场合,做了特殊处理,如无人机应用3.应用场景●无人机航拍,图传●行车记录仪●网络摄像机(IP Camera)●……4.本“使用说明”作用本说明书描述此编码器的用户接口及该设计的使用方法,方便用户的前期评估。
5.1.编码器功能●H264 main profile level5.2●Maximal encoder/decoder frame size: 3840 x 2160●Support any frame size that x/y size is integer times of 16●1920x1088P@30fps clock frequency:110MHz(CAVLC)/130MHZ(CABAC)●Low CPU MIPS requirement: just configure some registers for each frame●I/P frame support●ME search range : X∈[-31, 32], Y∈[-23, 24]●1/4 sub-pixel interpolation support●Me full search algorithm●Intra_16x16 predict mode support●CAVLC/CABAC entropy bit stream●Input source is YUV 4:2:0 8bits resolution●Low latency encoding support, less than 1ms at 1080P305.2.解码器功能可以解码H264_Lite编码的码流。
注意:解码器功能不是H.264全标准兼容,只能解码H264_Lite自己编码的码流。
6.主要硬件指标6.1.编解码效率(单核)●1080P@30fps: 110MHZ(CAVLC)/130MHZ(CABAC)●720P@30fps: 50MHZ(CAVLC)/58MHZ(CABAC)6.2.面积●ASIC: About 1.5M gate, including SRAM area●FPGA: About 7.0K Slices (each slice has 4 LUTs and 8 DFFs) and 41 Block RAMson Xilinx Zynq7020 FPGA6.3.编解码带宽需求6.3.1.编码模式带宽需求●I frame: About 1.1 ~ 1.2倍原始帧带宽●P frame: About 5.5 ~ 5.8倍原始帧带宽注:不含原始帧写入memory的带宽6.3.2.解码模式带宽需求●I frame: About 1.1 ~ 1.2倍原始帧带宽●P frame: About 4.2 ~ 4.5倍原始帧带宽6.4.综合速度●ASIC: TSMC 0.13um: 250MHZ(CAVLC); 220MHZ(CABAC)●Xilinx Zynq7020: 166MHZ(CAVLC); 150MHZ(CABAC)注:在Xilinx 7系列fpga使用时,如果频率超过135MHZ,需要把Implementation的策略设置为:Performance_NetDelay_High。
7.设计结构框图1)clk: core运行的时钟;axi_lite/master_axi_0/master_lite_1/frm_lcnt_cap 都运行在这个时钟域。
2)rstn: core的异步复位信号;axi_lite/master_axi_0/master_lite_1 也用这个信号进行异步复位。
3)axi_lite: 这组信号对内部寄存器进行访问。
4)axi_master_0/axi_master_1: 访问内存的总线;读取原始图像;读取参考帧图像;写入重建图像;写入编码码流。
5)enc_int:core的中断信号,每编码(解码)一帧,一次中断。
可以软件写寄存器“0E”清0;在软件启动新的一帧时也会自动清0。
6)frm_lcnt_cap:这个输入只有在编码器低延时模式下才有用。
表示前端抓图模块已经往DDR里面写入多少行原始图像数据。
如果是1080P格式,在一帧抓图结束后,这个值应该置1088。
8.接口信号时序8.1.寄存器配置接口时序配置寄存器接口:axi_lite,与AXI_Lite协议完全兼容;数据位宽是32bits。
有些配置寄存器是16 bit位宽,但是占用4 Byte的地址空间。
具体访问时序,请参考AMBA AXI协议:AMBA® AXI Protocol Version: 2.0 “AXI4-Lite”章节。
8.2.DMA读写访问时序读写图像数据,读写编码码流接口:master_axi_0/master_axi_1,与AXI4 协议完全兼容;数据位宽是32bits,最大burst长度是32(arlen/awlen最大取值是0x1F)。
具体访问时序,请参考AMBA AXI协议:AMBA® AXI Protocol Version: 2.0。
注意:在跟Zynq HP口对接时,请使用AXI协议转换器IP,把H264_lite出来的AXI4协议转换为AXI3协议。
8.3.中断信号时序enc_int为编解码器中断输出,高电平有效。
编解码完成一帧后变成高电平(1’b1),等软件往寄存器0E写0x00后,变低电平(1’b0)。
8.4.软件复位“rstn”是整个IP的复位信号,低有效。
在编码过程中,IP会正常结束每帧的编码。
基本不需要软件控制这个复位信号。
在解码过程中,如果码流本身就是错误的(比如码流在传输,存储过程中发生错误,该帧码流本来就是一帧错误的码流),则IP可能无法正常结束一帧的解码,一直不给解码结束中断。
这时需要软件做个timer,通常计时到50ms~80ms,如果启动解码后超时,则需要软件复位整个H264_Lite IP。
9.配置寄存器addr bit nameaccessdecription000 enc_start r/w 软件写1开始一帧编码(解码)。
15:1 NA r Reserved。
011:0 enc_type r/w 编码(解码)帧类型。
2: I frame; 0: P frame 3:2 NA r Reserved。
4 enc_mode r/w 1:编码器模式;0:解码器模式.5 enc_str_swap r/w0:码流写入DDR时:str[31:0]; 1:码流写入DDR时:{str[7:0], str[15:8], str[23:16],str[31:24]}.6 cavlc_mode r/w 0:CABAC模式;1:CAVLC模式。
7 NA r Reserved。
8 low_latency_en r/w1:使用编码器低延时模式。
这个时候需要使用h264_lite的输入“frm_lcnt_cap”。
15:9 NA r Reserved。
02 15:0 enc_frm_width r/w R/W 编码(解码)图像的x-dir尺寸。
例:1080P写:1920。
03 15:0 enc_frm_height r/w 编码(解码)图像的y-dir尺寸。
例:1080P 写:1088. 注意:图像的x/y size必须是16的整数倍。
047:0 enc_qp r/w 编码(解码)帧Luma QP值,取值范围[12,50]。
15:8enc_ch_qp_offsetr/w编码(解码)帧Chroma QP相对于Luma QP的偏移。
有符号数,取值:[-7,7]。
05 15:0 enc_frm_num r/w 此寄存器用于编码slice header的"frame_num"语法,取值:[0,255]。
06 15:0 enc_frm_cnt_lsb r/w 此寄存器用于编码slice header的"pic_order_cnt_lsb"语法,取值:[0,255]。