Edit online

PNG 寄存器描述

21 May 2024
Read time: 11 minute(s)

0x0C00 INFLATE_INT

默认值:0x00000000 Inflate 中断使能 (Inflate Interrupt Enable)
位域 类型 默认值 描述
31:3 - - -
2 R/W 0x0 BIT_REQ_INT_EN
请求 bitsteam 中断控制
  • 0:不使能
  • 1:使能

DEC_REQ_INT_EN 用于控制解码所需要的原始码流不够需要请求下笔数据时是否向 CPU 发出中断请求。

当 DEC_REQ_INT_EN 为 1 时,产生中断请求,否则不产生中断请求。是否产生中断请求,不影响相应状态标志位的产生。

1 R/W 0x0 DEC_ERR_INT_EN
解码 error 中断控制
  • 0:不使能
  • 1:使能

DEC_ERR_INT_EN 用于控制解码发生错误结束后是否向 CPU 发出中断请求。

当 DEC_ERR_INT_EN 为 1 时,产生中断请求,否则不产生中断请求。是否产生中断请求,不影响相应状态标志位的产生。

0 R/W 0x0 DEC_FINISH_INIT
解码结束中断控制
  • 0:不使能
  • 1:使能

DEC_FINISH_INT_EN 用于控制正常解码结束后是否向 CPU 发出中断请求。当 DEC_FINISH_INT_EN 为 1 时,产生中断请求,否则不产生中断请求。是否产生中断请求,不影响相应状态标志位的产生。

0x0C04 INFLATE_STATUS

默认值:0x00000000 Inflate 解码状态 (Inflate Status)
位域 类型 默认值 描述
31:5 - - -
4 R 0x0 ERROR
3 - - -
2 R/W1C 0x0 BIT_REQ_INT_FLAG

请求 bitstream 标记状态

当执行当前任务过程中发现码流不够,则暂停当前任务并向 CPU 发送中断信号后,该位置 1。软件向该位写 1 则清除相应中断。

1 R/W1C 0x0 ERR_INIT_FLAG

解码 error 标记状态

当执行当前任务过程中发现码流错误,则停止当前任务并向 CPU 发送中断信号后,该位置 1。软件向该位写 1 则清除相应中断

0 R/W1C 0x0 FINISH_INIT_FLAG

解码结束标记状态

当完成当前任务并向 CPU 发送中断信号后,该位置 1。主控向该位写 1 则清除相应中断。

默认值:0x00000000 Inflate 解码状态 (Inflate Status)
位域 类型 默认值 描述
31:24 - - -
23:22 R 0x0 DEFILTER_ERR
  • [23]:
    • 0 表示 defilter 解码数据足够
    • 1 表示 defilter 解码数据不足
  • [22]:
    • 0 表示 filter 类型正确
    • 1 表示 filter 类型错误
21:19 R 0x0 WDMA_ERR

写 DMA 出错

18:15 R 0x0 RDMA_ERR

读 DMA 出错

14:11 R 0x0 LZ77_ERR
LZ77 解码 error
  • [14]:
    • 0:LZ77 解码数据足够
    • 1:LZ77 解码数据不足
  • [13]:
    • 0:LZ77 huffman 码值正确
    • 1:LZ77 huffman 码值错误
  • [12]:
    • 0:LZ77 huffman 码表 1 解码正确
    • 1:LZ77 huffman 码表 1 解码错误;
  • [11]:
    • 0:LZ77 huffman 码表 2 解码正确
    • 1:LZ77 huffman 码表 2 解码错误
10:8 R 0x0 HUFF_ERR
huffman 解码 error
  • [10]:
    • 0:cl 个数正确
    • 1: cl 个数不匹配
  • [9]:
    • 0:cl huffman 解码正确
    • 1:cl huffman 解码错误
  • [8]:
    • 0:ccl 解码数据足够
    • 1:ccl 解码数据不足
7:5 R 0x0 PC_ERR
PNG 文件头解码错误
  • [7]:
    • 0:deflate 文件头解码数据足够
    • 1:deflate 文件头解码数据不足
  • [6]:
    • 0:deflate 文件头参数正确
    • 1:deflate 文件头参数错误
  • [5]:
    • 0:deflate 文件头解码正确
    • 1:deflate 文件头解码错误
4 R 0x0 OUT_BUF_OVERFLOW
  • 0:无
  • 1:当前 error 的原因是输出 buffer 已满
3 - - -
2 R/W1C 0x0 BIT_REQ_INT_FLAG

请求 bitstream 标记状态

当执行当前任务过程中发现码流不够,则暂停当前任务并向 CPU 发送中断信号后,该位置 1。软件向该位写 1 则清除相应中断。

1 R/W1C 0x0 ERR_INIT_FLAG

解码 error 标记状态当执行当前任务过程中发现码流错误,则停止当前任务并向 CPU 发送中断信号后,该位置 1。软件向该位写 1 则清除相应中断

0 R/W1C 0x0 FINISH_INIT_FLAG

解码结束标记状态当完成当前任务并向 CPU 发送中断信号后,该位置 1。主控向该位写 1 则清除相应中断。

0x0C08 INFLATE_START

默认值:0x00000006 Inflate 解码开始 (Inflate START)
位域 类型 默认值 描述
31:3 - - -
2 R/W 0x1 STOP_DMA_EN
  • 0:PNG 解码出错后,直接向 CPU 发送 error 中断,不等待 DMA 数据请求完成
  • 1:PNG 解码出错后,拦截 DMA 数据请求后再向 CPU 发送 error 中断
1 R/W 0x1 WAIT_DMA_EN
  • 0:PNG 解码出错后,直接向 CPU 发送 error 中断
  • 1:PNG 解码出错后,等待 256 个 cycles 再向 CPU 发送 error 中断
0 R/W 0x0 START
  • 0:未开始解码
  • 1:开始解码

写 1 会自动清零

0x0C0C PNG_ERROR_STATE

默认值:0x00000000 PNG 解码错误状态 (PNG Error State)
位域 类型 默认值 描述
31:3 - - -
26 RO 0x0 DEFILTER_ERR
  • 0:defilter 处理正确
  • 1:defilter 处理错误
25 RO 0x0 INFLATE_ERR
  • 0:inflate 解码正确
  • 1:inflate 解码错误
24 RO 0x0 BS_LAST_ERR
  • 0:码流数据可以正确解码
  • 1:码流数据不够导致出错
23:16 RO 0x0 DEFILTER_FSM_STATE

Defilter 模块当前所处状态

15:8 RO 0x0 INFLATE_BLOCK_NUM

当前正在解码的 Inflate 块序号

7:4 RO 0x0 INFLATE_ERROR_STATE

Inflate 解码出错状态

3:0 RO 0x0 INFLATE_FSM_STATE

Inflate 模块当前所处状态

0x0C10 INFLATE_CTRL

默认值:0x00000600 Inflate 解码控制 (Inflate Control)
位域 类型 默认值 描述
31:13 - - -
12:11 R/W 0x0 BIT_DEPTH

位宽

0: 8 bits

当 COLOR_TYPE 为 3 时的索引位宽, 只支持 8 bits。

10:8 R/W 0x6 COLOR_TYPE
格式类型
  • 0:reserved
  • 1:reserved
  • 2: PNG24
  • 3: 索引彩色图像
  • 4: reserved
  • 5: reserved
  • 6: PNG32
7:4 - - -
3:2 R/W 0x0 CHECK_FUNCTION
  • 0:无
  • 1:ADLER32
  • 2: CRC32

当 CHECK_FUNCTION 为 1 时,Inflate 解码同时输出 ADLER32 校验值,当 CHECK_FUNCTION 为 2 时,Inflate 解码同时输出 CRC32 校验值

1:0 R/W 0x0 DEC_TYPE_FLAG
解码类型标记
  • 0:Inflate (gzip)
  • 1:Inflate and png defilter

当解码类型为 Inflate and pngdefilter,需要设置 PNG 相关参数。

0x0C14 PNG_SIZE

默认值:0x00000000 PNG 图像大小 (PNG Picture Size)
位域 类型 默认值 描述
31:29 - - -
28:16 R/W 0x0 HEIGHT

PNG 图片高度

15:13 - - -
12:0 R/W 0x0 WIDTH

PNG 图片宽度

0x0C18 PNG_OUTPUT_STRIDE

默认值:0x00000000 PNG 输出线宽 (PNG Line Stride)
位域 类型 默认值 描述
31:15 - - -
14:0 R /W 0x0 STRIDE

PNG 输出对齐

0x0C1C PNG_OUTPUT_FORMAT

默认值:0x00000000 PNG 解码输出颜色格式 (PNG Output Format)
位域 类型 默认值 描述
31:6 - - -
5 R/W 0x0 LINEBUF_EN
  • 0:不使能内部存放 linebuffer 的 SRAM
  • 1:使能内部存放 linebuffer 的 SRAM
4 R/W 0x0 DEFILTER_TYPE_CHECK_EN
  • 0:检测到 defilter type 超出数值范围后不报错,继续解码
  • 1:检测到 defilter type 超出数值范围后报错
3 R/W 0x0 PNG8_PALETTE_BYPASS
  • 0:PNG8 解码得到索引值后,通过 palette 表索引得到最终的像素值
  • 1:PNG8 解码得到索引值后直接输出,跳过 palette 表映射
2:0 R/W 0x0 OUTPUT_FORMAT
  • 0: ARGB8888
  • 1: ABGR8888
  • 2: RGBA8888
  • 3: BGRA8888
  • 4: RGB888
  • 5: BGR888
PNG8、PNG24 和 PNG32 都可以设置以上任意像素格式:
  • 当 PNG 原图中不包含 alpha 通道时,选择有 alpha 通道的格式,alpha 值固定为 0xFF。
  • 当 PNG 原图中包含 alpha 通道时,输出格式中不含 alpha,则 alpha 信息丢失。
  • 当 PNG8_PALETTE_BYPASS 为 1 时,输出格式 OUTPUT_FORMAT 设置无效。

0x0C20 INPUT_BS_START_ADDR

默认值:0x00000000 输入码流起始地址 (Input Bitstream Start Address)
位域 类型 默认值 描述
31:4 R/W 0x000_0000 INPUT_BS_START_ADDR[31:4]

原始码流缓冲区起始位置,低 4 位固定为 0。

3:0 RO 0x00 固定为 0

0x0C24 INPUT_BS_END_ADDR

默认值:0x0000000F 输入码流结束地址 (Input Bitstream End Address)
位域 类型 默认值 描述
31:4 R/W 0x000_0000 INPUT_BS_END_ADDR[31:4]

原始码流缓冲区结束位置

3:0 RO 0xF 固定为全 1

0x0C28 INPUT_BS_OFFSET

默认值:0x00000000 输入码流偏移 (Input Bitstream Offset)
位域 类型 默认值 描述
31:30 - - -
29:0 R/W 0x0000_0000 BIT_OFFSET

当前有效配置数据开始的位置,该位置是相对于 ADDR 计算的,以 bit 为单位。最大 128 MB,即码流缓冲区最大 128 MB。

0x0C2C INPUT_BS_LENGTH

默认值:0x00000000 输入码流长度 (Input Bitstream Length)
位域 类型 默认值 描述
31:30 - - -
29:0 R/W 0x0000_0000 BIT_LENGTH

当前配置的有效数据长度,以 bit 为单位。

0x0C30 OUTPUT_BUF_ADDR

默认值:0x00000000 解码输出地址 (Output Buffer Address)
位域 类型 默认值 描述
31:0 R/W 0x000_0000 解码输出 buffer 地址

0x0C34 OUTPUT_BUF_END_ADDR

默认值:0x00000000 解码输出缓存结束地址 (Output Buffer End Address)
位域 类型 默认值 描述
31:0 R/W 0x000_0000 解码输出 buffer 结束地址

0x0C38 OUTPUT_COUNT

默认值:0x00000000 解码输出数据长度 (Output Data Count)
位域 类型 默认值 描述
31:0 RO 0x000_0000 解码输出到 OUTPUT_BUF_ADDR 的数据,以 byte 为单位的计数,启动解码后将从零开始计数。

0x0C3C INFLATE_CHECK

默认值:0x00000000 解码输出数据校验码 (Inflate CheckSum)
位域 类型 默认值 描述
31:0 RO 0x000_0000 当打开 Inflate 解码校验功能时候,解码结束后,可以从此寄存器读取 ADLER32 或者 CRC32 校验值。

0x0C40 INFLATE_WINDOW_BUF_ADDR

默认值:0x00000000 LZ77 窗口缓存地址 (Inflate Window Buffer Address)
位域 类型 默认值 描述
31:3 R/W 0x000_0000

LZ77 窗口 buffer 地址的高 29 bits

LZ77 的 DICT Buffer 大小为 32K bytes。

2:0 RO 0x00 LZ77 窗口 buffer 地址低 3 bits 固定为 0。

0x0C44 PNG_PAL_BUF_ADDR

默认值:0x00000000 PNG 索引色缓存地址 (PNG Pallete Buffer Address)
位域 类型 默认值 描述
31:3 R/W 0x000_0000 PNG 索引色缓存 buffer 地址的高 29 bits。
2:0 RO 0x00 缓存 buffer 地址低 3 bits 固定为 0。
注:
索引色缓存地址在以下两种情况下使用:
  • 索引色图片解码时,需要使用该 buffer 缓存上一行索引数据 (index),buffer 大小为图像宽。
  • 图像 crop 输出时,需要使用该 buffer 缓存上一行的像素数据 (RGB/ RGBA),buffer 大小为图像宽 * 4 (RGBA) 或图像宽 * 3 (RGB)。
为了减少 VE 访问 DRAM 的带宽,VE 内部增加一个 4KB 大小的 SRAM,用于替换该缓存。
  • 当图像宽小于或等于 1024 时,可以开启 0x11c 寄存器的 linebuf_en 位,使能内部 SRAM 用于 存放缓存数据,此时不会使用 PNG_PAL_BUF 配置的地址。
  • 当图像大于 1024 时,内部 SRAM 不够用, 此时必须配置 PNG_PAL_BUF 地址,将数据缓存于外部 DRAM。

0x0C48 DATA_VALID

默认值:0x00000000 输入码流数据有效标志 (Data Valid Flag)
位域 类型 默认值 描述
31 R/W 0x0 DATA_VALID
  • 置 1:当前配置的码流数据已经有效写入原始码流缓冲区,VE 可以预取码流数据到内部的缓冲区,等待启动解码。
  • 置 0:码流数据还没有正确写入原始码流缓冲区。
30:2 - - -
1 R/W 0x0 DATA_LAST
  • 置 1:当前配置的数据是一个完整解码的最后一笔数据。
  • 置 0:当前配置的数据不是一个完整解码的最后一笔数据,当前解码任务完成后需要硬件保持状态,待下笔数据配置后继续完成一个完整解码。
0 R/W 0x0 DATA_FIRST
  • 置 1:当前配置的数据是一个完整解码的第一笔数据。
  • 置 0:当前配置的数据不是一个完整解码的第一笔数据,当前解码任务需要承接前一次的解码继续完成一个完整解码。

0x0C4C PNG_PALETTE_ADDR

默认值:0x00000000 PNG 索引表地址 (PNG Palette Buffet Address)
位域 类型 默认值 描述
31:3 R/W 0x000_0000 PNG

调色板地址的高29bits

PNG 调色板空间的大小为 1K

调色板空间的大小为 1K bytes,按照索引顺序排列,包含 A、R、G 和 B 四个通道,总共可以索引 256 色。

2:0 RO 0x00 PNG 调色板地址低 3 bits 固定为 0。

0x0C60 PNG_CROP_BASE

默认值:0x00000000 PNG CROP 的起始坐标 (Png Crop Base Position)
位域 类型 默认值 描述
31:29 - - -
28:16 R/W 0x0 CROP_BASE_X

图片 CROP 输出的起始 X 坐标(以像素为单位)

15:13 - - -
12:0 R/W 0x0 CROP_BASE_Y

图片 CROP 输出的起始 Y 坐标(以像素为单位)

0x0C64 PNG_CROP_SIZE

默认值:0x00000000 PNG CROP 的窗口大小 (Png Crop Size)
位域 类型 默认值 描述
31 R/W 0x0 CROP_ENCROP 功能使能
30:29 - - -
28:16 R/W 0x0 CROP_SIZE_X

图片 CROP 窗口的宽(以像素为单位)

15:13 - - -
12:0 R/W 0x0 CROP_SIZE_Y

图片 CROP 窗口的高(以像素为单位)