admin 管理员组

文章数量: 1184232


2023年12月23日发(作者:可以用来制作网页的软件有哪些)

H264_Lite 使用说明

H264 Lite

高清视频编解码(codec)器使用说明

———

Fully RTL Code Design

1 / 16

H264_Lite 使用说明

目 录

1.

2.

3.

4.

5.

5.1.

5.2.

6.

6.1.

6.2.

6.3.

6.3.1.

6.3.2.

6.4.

7.

8.

8.1.

8.2.

8.3.

8.4.

9.

10.

功能介绍 ..................................................................................................................................... 3

IP

特色 ......................................................................................................................................... 3

应用场景 ..................................................................................................................................... 3

本“使用说明”作用 .................................................................................................................. 3

主要功能 ..................................................................................................................................... 4

编码器功能 ............................................................................................................................. 4

解码器功能 ............................................................................................................................. 4

主要硬件指标 ............................................................................................................................. 5

编解码效率

(单核) ............................................................................................................ 5

面积 ......................................................................................................................................... 5

编解码带宽需求 ..................................................................................................................... 5

编码模式带宽需求 ............................................................................................................. 5

解码模式带宽需求 ............................................................................................................. 5

综合速度 ................................................................................................................................. 5

设计结构框图 ............................................................................................................................. 6

接口信号时序 ............................................................................................................................. 7

寄存器配置接口时序 ............................................................................................................. 7

DMA读写访问时序 ................................................................................................................ 7

中断信号时序 ......................................................................................................................... 7

软件复位 ................................................................................................................................. 7

配置寄存器 ................................................................................................................................. 8

原始帧数据在外部存储器(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.

13.

设计交付 ............................................................................................................................... 16

FPGA综合结果 ...................................................................................................................... 16

2 / 16

H264_Lite 使用说明

1. 功能介绍

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. 本“使用说明”作用

本说明书描述此编码器的用户接口及该设计的使用方法,方便用户的前期评估。

3 / 16

H264_Lite 使用说明

5. 主要功能

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 1080P30

5.2. 解码器功能

可以解码H264_Lite编码的码流。

注意:解码器功能不是H.264全标准兼容,只能解码H264_Lite自己编码的码流。

4 / 16

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 RAMs

on Xilinx Zynq7020 FPGA

6.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。

5 / 16

H264_Lite 使用说明

7. 设计结构框图

axi_lite(cfg regs)master_axi_0master_axi_1frm_lcnt_capH264_Liteclkrstncore_int

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。

6 / 16

H264_Lite 使用说明

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。

7 / 16

H264_Lite 使用说明

9. 配置寄存器

accaddr bit name

ess

00

0 enc_start r/w 软件写1开始一帧编码(解码)。

r

r

Reserved。

Reserved。

decription

15:1 NA

1:0 enc_type

3:2 NA

4

5

01

6

7

8

cavlc_mode

NA

low_latency_en

enc_mode

enc_str_swap

r/w 编码(解码)帧类型。2: I frame; 0: P frame

r/w 1:编码器模式;0:解码器模式.

0:码流写入DDR时:str[31:0]; 1:码流写入r/w DDR时:{str[7:0], str[15:8], str[23:16],

str[31:24]}.

r/w 0:CABAC模式;1:CAVLC模式。

r

r/w

r

r/w

Reserved。

1:使用编码器低延时模式。这个时候需要使用h264_lite的输入“frm_lcnt_cap”。

Reserved。 15:9 NA

02 15:0 enc_frm_width

03 15:0 enc_frm_height

7:0 enc_qp

R/W 编码(解码)图像的x-dir尺寸。例:1080P写:1920。

编码(解码)图像的y-dir尺寸。例:1080Pr/w 写:1088. 注意:图像的x/y size必须是16的整数倍。

r/w 编码(解码)帧Luma QP值,取值范围[12,50]。

r/w

r/w

r/w

r/w

编码(解码)帧Chroma QP相对于Luma QP的偏移。有符号数,取值:[-7,7]。

此寄存器用于编码slice header的"frame_num"语法,取值:[0,255]。

此寄存器用于编码slice header的"pic_order_cnt_lsb"语法,取值:[0,255]。

此寄存器用于编码slice header的"idr_pic_id"语法,取值:[0,7]。

编码原始图像在memory的起始位置,需要1K

原始帧的实际起始地址是:byte对齐的地址,dma_src_base*1024 Byte。空间大小为:enc_frm_width*enc_frm_height*1.5。

04

15:8

enc_ch_qp_offset

05

06

07

15:0 enc_frm_num

15:0 enc_frm_cnt_lsb

15:0 enc_frm_idrid

08 15:0 dma_src_base r/w

8 / 16

H264_Lite 使用说明

09 15:0 dma_lpf_base r/w

0A 15:0 dma_ref_base r/w

0B 15:0 dma_str_base r/w

0C

0D

0E

0F

10

15:0 enc_str_len_l

15:0 enc_str_len_h

0 enc_int

r/w

编码(解码)重建图像(用作下一帧的参考帧图像)在memory的起始位置,需要1K byte对齐的地址,重建图像的实际起始地址是:dma_lpf_base*1024 Byte。空间大小为:enc_frm_width*enc_frm_height*2。

编码(解码)P帧时,参考帧图像在memory的起始位置,需要1K byte对齐的地址,参dma_ref_base*1024

考帧的实际起始地址是:Byte。空间大小为:enc_frm_width*enc_frm_height*2。

编码(解码)码流在memory的起始位置,需要1K byte对齐的地址,码流的实际起始地址是:dma_str_base*1024 Byte。建议空间大小为:enc_frm_width*enc_frm_height*2。

编码(解码)码流的长度(byte)低16 bits。解码模式时,"enc_str_len"需要是2的整数倍(对齐到偶数byte长度)。

r/w 编码(解码)码流的长度(byte)高16 bits。

r/w 读取中断标志;写1'b0清除中断标志。

r

r

r/w

Reserved。

版本号,0x0028。测试版为:0x1234。

软件解码Header(SPS,PPS,slice_header)用掉的码流的bit数目。取值范围[0, 1023]。

15:1 NA

15:0 enc_version

15:0 dec_head_bnum

9 / 16

H264_Lite 使用说明

10.原始帧数据在外部存储器(DDR)的格式

编码器只支持YUV 4:2:0,8bits解析度的图像。如果是RGB输入,需要在前面加图像格式转换器,转换为YUV 4:2:0的格式。

原始帧图像按照光栅扫描的顺序,从左到右,从上到下的存储在连续的空间。图像的每行数据之间没有地址空隙,亮度(Y)数据跟色度数据(UV)之间没有地址空隙。首先从寄存器“dma_src_base”指向的地址开始按行存储亮度数据。UV数据按像素点混合在一起,紧接着色度数据,按行存储。

10.1. 亮度(Y)数据

如图所示:

h-4h-3h-2h-1y 亮度数据基地址:dma_src_lu_base = dma_src_base*1024。

Y(0,0)存放在:dma_src_lu_base地址

Y(0,1)存放在:dma_src_lu_base+1地址

Y(0, w-1)存放在:dma_src_lu_base+(enc_frm_width-1)地址

Y(1, 0)存放在:dma_src_lu_base+enc_frm_width地址

10 / 16

H264_Lite 使用说明

10.2. 亮度数据在内存的字节序

如果按32bits往内存写入亮度数据,其字节序如下:

241680addr_0Y024Y116Y28Y30addr_4Y4Y5Y6Y7

如果按64bits往内存写入亮度数据,其字节序如下:

56484032241680addr_0Y456Y548Y640Y732Y024Y116Y28Y30addr_8Y12Y13Y14Y15Y8Y9Y10Y11

10.3. 色度(UV)数据:

w/2-2w/2-1xVUVUVUVUVUVUVUV 色度数据基地址:dma_src_ch_base = dma_src_base*1024+ (enc_frm_width*

enc_frm_height)。

U(0,0)存放在:dma_src_ch_base地址

V(0,0)存放在:dma_src_ch_base+1地址

U(0,1)存放在:dma_src_ch_base+2地址

11 / 16

0123..h/2-2h/2-1y

如图所示:

H264_Lite 使用说明

V(0,1)存放在:dma_src_ch_base+3地址

U(0, w/2-1)存放在:dma_src_ch_base+(enc_frm_width-2)地址

V(0, w/2-1)存放在:dma_src_ch_base+(enc_frm_width-1)地址

U(1, 0)存放在:dma_src_ch_base+enc_frm_width地址

V(1, 0)存放在:dma_src_ch_base+enc_frm_width+1地址

10.4. 色度数据在内存的字节序

如果按32bits往内存写入色度数据,其字节序如下:

241680addr_0U024V016U18V10addr_4U2V2U3V3

如果按32bits往内存写入色度数据,其字节序如下:

56484032241680addr_0U256V248U340V332U024V016U18V10addr_8U6V6U7V7U4V4U5V5

10.5. 以1920x1088的图像为例:

1) 图像的Y(0,0)点存放在dma_src_base*1024地址;Y(0,1919)存放在dma_src_base*1024+0x77F地址;Y(1,0)存放在dma_src_base*1024+0x780地址;Y(1,1919)存放在dma_src_base*1024+0xEFF地址;Y(1087,0)存放在dma_src_base*1024+0x1FD880地址;Y(1087,1919)存放在dma_src_base*1024+0x1FDFFF地址。

2) 图像的U(0,0)存放在dma_src_base*1024+0x1FE000, V(0,0)存放在dma_src_base*1024+0x1FE001;U(0,1)存放在dma_src_base*1024+0x1FE002,

V(0,1)存放在dma_src_base*1024+0x1FE003;U(0,959)存放在dma_src_base*1024+0x1FE77E, V(0,959)存放在dma_src_base*1024+0x1FE77F;U(1,0)存放在dma_src_base*1024+0x1FE800, V(1,0)存放在dma_src_base*1024+0x1FE801;U(543,959)存放在dma_src_base*1024+0x2FCFFE,

V(543,959)存放在dma_src_base*1024+0x2FCFFF。

12 / 16

H264_Lite 使用说明

11.软件控制流程(参考)

11.1. 编码器软件控制流程

开始原始图像准备好NoYes配置寄存器:01~0B配置寄存器00写:0x01配置寄存器00写:0x00收到编码中断NoYes读寄存器0C/0D寄存器0E写0x00清除中断,从Memory读走编码码流

13 / 16

H264_Lite 使用说明

11.2. H264标准相关寄存器推荐配置(编码模式有效)

enc_frm_idrid: 第一个I frame时,取值为0, 以后每编码一个I frame,值增加1,在0~7之间循环。

enc_frm_num:编码I frame时,取值为0,以后每编码一帧,值增加1,最大取值255。所以每256帧必须编码一个I frame。

enc_frm_cnt_lsb:编码I frame时,取值为0,以后每编码一帧,值增加1,最大取值255。

例(N <=256):

1) 第0帧编码I frame:enc_type =2; enc_frm_num =0; enc_frm_cnt_lsb = 0;

enc_frm_idrid = 0;

2) 第1帧编码P frame: enc_type =0; enc_frm_num =1; enc_frm_cnt_lsb = 1;

enc_frm_idrid = 0;

3) 第2帧编码P frame: enc_type =0; enc_frm_num =2; enc_frm_cnt_lsb = 2;

enc_frm_idrid = 0;

...

4) 第N-1帧编码P frame: enc_type =0; enc_frm_num =N-1; enc_frm_cnt_lsb =

N-1; enc_frm_idrid = 0;

5) 第N帧编码I frame: enc_type =2; enc_frm_num =0; enc_frm_cnt_lsb = 0;

enc_frm_idrid = 1;

6) 第N+1帧编码P frame: enc_type =0; enc_frm_num =1; enc_frm_cnt_lsb = 1;

enc_frm_idrid = 1;

...

7) 第2N-1帧编码P frame: enc_type =0; enc_frm_num =N-1; enc_frm_cnt_lsb

= N-1; enc_frm_idrid = 1;

8) 第3N帧编码I frame: enc_type =2; enc_frm_num =0; enc_frm_cnt_lsb = 0;

enc_frm_idrid = 2;

...

14 / 16

H264_Lite 使用说明

11.3. 解码器软件控制流程

开始解码码流准备好NoYes软件解码PPS/SPS/Slice

Header配置寄存器:01~04,

09~0D,10配置寄存器00写:0x01配置寄存器00写:0x00收到解码中断NoYes寄存器0E写0x00清除中断,从Memory读走解码图像

15 / 16

H264_Lite 使用说明

12. 设计交付

1)

2)

3)

4)

5)

编码器C语言模型的可执行文件(Win32 EXE),编码效果评估

DCP(Xilinx) or EDIF (Altera)

RTL代码

RTL仿真的参考环境,基于Modelsim

技术支持,协助系统仿真,整合与调试

注:可以免费提供C语言模型的可执行文件。

13. FPGA综合结果

H264_Lite Area (Xilinx Zynq 7020)

stage

Synthesis

Synthesis

Synthesis

Synthesis

Config

CAVLC(enc)

CAVLC(enc+dec)

CABAC(enc)

CABAC(enc+dec)

DFFs

28474

29983

30143

32650

Luts

21510

23637

24037

28144

BRAMs

34

35

38

41

DSP48s

12

12

13

13

16 / 16


本文标签: 编码 图像 解码