基于 FPGA 的nfc无线通信 硬件解码器设计

  • IT技术
  • 2019-11-30
  • 人已阅读
简介但是在嵌入式处理器上进行 NFC无线通信 图像解码时,我们发现压缩与解压缩的时 间出现了明显的延迟。本 NFC无线通信 解码系统原型第一次在 ML401 开发板上运行时, 解压缩一幅 800x600,4:1:1 的 24 位真彩色图像时,用了将近 30 分钟。当时, 作者与指导老师先启动了开发板上的程序,然后各自开始工作,等待的时间足够 完成一篇 800 字的作文。通过优化软件算法,完成一幅 800x600 图像的解码仍需 要 2 秒左右。

 

FPGA NFC无线通信 硬件解码器设计

目录

设计.......................................................................................................................................1

2功能描.......................................................................................................................................2

2.1 支持动 Huffman 码表 ................................................................................................2

2.2 支持 4 压缩格.............................................................................................................4

2.3 高分辨率 VIDEO ..................................................................................................4

设计.......................................................................................................................................5

3.1 各模块的 IO 地址映射.......................................................................................................8

4各模块详细描......................................................................................................................... 11

4.1 Opb2local_bridge .............................................................................................................. 11

4.2 SCAN IF ...........................................................................................................................13

4.3 Huffman_decoder..............................................................................................................14

4.4 iQuant................................................................................................................................15

4.5 Zigzag_converter ..............................................................................................................15

4.6 iDCT .................................................................................................................................16

4.7 MCU_reconstrcuter...........................................................................................................17

4.8 YCC2RGB ........................................................................................................................18

4.9 Output_buffer ....................................................................................................................19

5软件代码描.............................................................................................................................21

6其他 ............................................................................................................................................22

6.1 Dummy 模块.....................................................................................................................22

6.2  电子相演示系..........................................................................................................23

7 总结 .............................................................................................................................................24

附录  NFC无线通信 解码 IP 综合结果 .................................................................................................26


 

 

 

设计介绍

 

 

设计目的:设计 NFC无线通信 硬件解码设计

NFC无线通信 静态图像压缩标准是 1992 年才发展起来的一套图像压缩解压缩协议。 但是在短短的十年里取得了巨大的成功现在几乎成为静态图像的标准压缩解压 协议。得到了极为广泛的应用。

NFC无线通信 标准中最简单的 BaseLine 模式大致有 101 的压缩率,可以大大减少 图像的存储空间。以 101 压缩率解压的图像,能够很好保证图像的视觉效果。 所以,在工业设计中,人们的日常生活中越来越多的使用到 NFC无线通信 图像。

能够拥有较高的压缩率是因为 NFC无线通信 采用了 DCT 与霍夫曼熵编码等先进的 编码技术

这就决定了 NFC无线通信 协议的实现是有一定的复杂度。当在动辄主频是 1~2 G PC 机上运行时NFC无线通信 压缩与解压缩可以是瞬间完成对于这样的速度使用者 不会觉得处理时间过长。

但是在嵌入式处理器上进行 NFC无线通信 图像解码时,我们发现压缩与解压缩的时 间出现了明显的延迟 NFC无线通信 解码系统原型第一次在 ML401 开发板上运行时, 解压缩一幅 800x600411 24 位真彩色图像时用了将近 30 分钟当时, 作者与指导老师先启动了开发板上的程序然后各自开始工作等待的时间足够 完成一篇 800 字的作文通过优化软件算法完成一幅 800x600 图像的解码仍需 要 2 秒左右。

为了能在嵌入式系统中对加速 NFC无线通信 图像解码我们想到设计一个基于 FPGA NFC无线通信 硬件解码器 IP同时配以相应的函数库以便适应不同的微控制器提 高 IP 核的复用性。

我们选择了 Xilinx 公司 ML401 开发板作为原型板实现了基于 OPB 总线 NFC无线通信 硬件解码器选用 Xilinx 公司的 MicroBlaze 软核作为演示环境的微控制 器,最后实现了电子像册的原型,作为对 NFC无线通信 硬件解码器的应用。


2功能描述

 

 

设计 MicroBlaze 微控器从 CF 卡中读取 NFC无线通信 图像文件,使用我们提供 的函数库 NFC无线通信 图像文件进行缓冲与文件分析 Huffman 码表量化表等 解码参数从图像文件中恢复出来然后使用这些解码参数对硬件解码器进行初始 化然后将待解的码流写入 NFC无线通信 硬件解码器的输入缓充器中解码始于 SCAN IF 缓冲模块,终止于 OUTBUFFER 缓存模块;

解码链上 HUFFMAN 解码器负责熵解码,把编码后的数据还原为 FDCT 系 数实现的解压缩流程反量化(iQuant)与反 ZIGZAG(Zigzag_converter)模块把解 码后的 DCT 系数整理成利于 IDCT 模块操作的 8x8 数据块DCT 重构iDCT) 负责转换 DCT 系数为 YUV 色彩信息MCU_reconstructer 模块负责组织 DCT 数块,然后输 YCC2RGB  模块转 RGB  色彩信息;最后,RGB  值暂OUTPUT_buffer,通过中断机制,通知等待 MicroBlaze 微控器取出。

MicroBlaze 微控器负责将解码完的图像点的 RGB 颜色值写高速 DDR 显存中。 由显示控制器负责将图像显示输出到显示设备上。

其中,本设计有几个重要功能,下面将进行进一步阐述。

 

 

 

 

2.1 支持动态的 Huffman 码表

 

设计的解码器遵守 NFC无线通信 标准 BaseLine 编码方式在熵解码器里实现了动 态 Huffman 解码表对于每幅图像的解码都向解码器重新写入该图像的 Huffman 码表。Huffman 码表由函数库中的相应函数负责从 NFC无线通信 图像文件中分析得到。

实现动态 Huffman 码表需要硬件与软件的共同协作软件根据不同的图像, 产生有较大的冗余的 Huffman 码表该码表在每次解码的初始阶段写入硬件解 码器的 BLOCK RAM 中,解码器根据需要,读取码表。


 

first-9bits fast decoding table

SIZES      VALUE         ADDRESS


.         .

.

.


 

 

 

2-1 Huffman 快速码表

 

 

如图,SIZES 栏为 7 的码,表示该码长度为 7,为了实现快速 Huffman 查找 法要将该码补成长度为 9 的码即在其后加上 2 位长度后缀码 00 加到 11

 

 

Huffman 码表存放在两块 BLOCK RAM 中,存放的格式如下:


shot

 

 

 


LCSLCT


HUFFSIZE         HUFFVAL


 

 

 

 

HUFFCODE


 

 

10'h0

 

 

 

10'h200

 

 

 

10'h300

 

 

 

10'h3A2

 

 

 

 

10'h3BA


 

table y

15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0

 

.

. 512 fisrt 9 bits ac

.

 

 

.

.256 fisrt 8 bits dc

.

 

 

.

<162 grouping ac code

.

 

 

 


.
.

. <24 grouping dc code


 

.

. >70 reserved space

.

 

 


clear to 0

shot


last code of this table

last code of this size


 

 

2-2 BLOCK RAM 码表

 

 

2.2 4 种压缩格式

 

NFC无线通信 解码器支持 4 种压缩方式压缩率从高到低为 411211 horizontal

2 1 1  vertical 1 1 1, 这四种压缩方式的支持在逆 MCU  构建模块

(MCU_reconstrcuter)中实现。

 

 

 

2.3 高分辨 VIDEO 控制器

 

为实现电子相册的演示系统我们还另外设计了高分辨率的 VIDEO 控制器, 屏幕刷新率 800x600@72HZ,  24 位真彩色,带参数化地址的显存。 该设备挂载在高速 PLB 总线上控制器通过 BURST 操作每次从 DDR 内存读


16  个双字,直到一行图像数据被缓存VIDEO  控制 CACHE  缓存(该

CACHE 容量 6KB

 

 

 

dcr_if

(active when rst)

 

 

 

 

 

vga_sync

 

 

 


s_Tft_baseaddr[9:0] Hsync
Vsync
oDAC_Tft_clk Enable Sync4Green
s_Bram_data[63:0]
oColor_R[7:0]
s_Bram_we oColor_G[7:0] 	s_Vdo_rd
Enable s_Tft_on
oColor_B[7:0] 	s_M_request_pos
tft_clk region 	plb_clk region
tft_display
800*600*72HZ
tft_logic


plb_if master&slave


 

 

video_buffer

3*RAMB16_S9_S

18

 

 

 

 

 

 

2-3 VIDEO 控制器

 

 

为保证 VIDEO 控制器的带宽,控制器采用了第二条总线来完成设备配置与 复位操作。该总线隶属 IBM CORECONNECT 总线体系,是 DCR 配置总线。

在视频输出的之前通过 DCR 总线 VIDEO 控制器传递显存基地址VIDEO

控制器总会读取显存基地址,来显示显存里的图像区域。

 

 

 

 

设计架构

 

 

系统构架如图 3-1 所示为了将各模块组织成一个完整的 IP同时适应不同 的总线情况系统中增加了本地总线桥模块其他模块的总线接口都遵循本地总 线的协议,实现 IO 地址的读写操作。另外还增加了 SCAN IF Output Control 模块,作为解码器的数据输入缓冲和数据输出缓冲模块。 在外部系统通过本地总线桥把要使用到的各种哈夫曼编码表量化表等解码信 息写入 NFC无线通信  解码器的各个模块之后接着把待解码数据输入到 SCAN IF 模块, 启动哈夫曼解码模块开始工作解码数据依次流过解码器各个模块完成相应的


运算,最后暂存到 Output Control 模块。当解出的数据达到输出阈值的时候,由

Output Control 模块发出中断通知外部系统把解出的数据取走 SCAN IF 模 块中数据为空的时候,也通过中断的机制通知外部系统,继续输入待解码数据。 NFC无线通信 解码器内部各个模块之间通过“Back  Pressure”方式进行数据传输。假设 由于外部系统一直没有响应 Output Control 模块的中断,来取走数据。当 Output Control 模块中的数据达到 BP 阈值的时候,它将升起 BP 信号,通知上游模块, 停止向下游模块传输数据。这样各个模块依次进入“BP”状态,而暂停工作, 也不会出现丢失数据等情况当外部系统取走数据之后各个模块也将依次解除 BP”状态,而恢复工作。一般情况下,解码器的各个模块是不会进行“BP” 状态的这种机制主要是为了匹配各个模块之间的处理速度增加解码器的健壮 性而设计的。

 

 

 

 


IP Outside


ZBT RAM (32bitx256K) CY7C1354B


SCAN IF


 

 

 


NFC无线通信 Decoder Module Set

 

Output


 

 

RGB


 

 

MCU


 

IDCT


 

 

Zigzag

BP


 

 

iQUANT    BP


 

 

EMPTYDT[31:0]  32bit x4 depthReadBUS I/FHuffman


Control   BP

MCU x 16 depth


Convertor BP

16x16


reconstruct  BP

 

Bu
8x8


 

Bu
8x8


BP         Convertor

 

Table     64B


 

 

Table    192B


 

 

START


Decoder

Table     4KB


START ENABLE

DATA RGB[31:0]
ACK_RGB INT RGB MS_RGB
ADDRESS[11:0] DATA[31:0]
DT[23:0]


1

 

16x16

Level ShiftBuffer

2


START

DATA MCU[31:0]
ACK_MCU INT MCU MS_MCU
ADDRESS[11:0] DATA[31:0] RNW
ENABLE DT[7:0]


1      8x8

2


START

DATA IDCT[31:0]
ACK IDCT INT_IDCT MS_IDCT
ADDRESS[11:0] DATA[31:0] RNW
ENABLE DT[7:0]


1      8x8

2


START

DATA_ZIGZAG[31:0]
ACK_ZIGZAG INT ZIGZAG MS_ZIGZAG
ADDRESS[11:0] DATA[31:0]
RNW
ENABLE DT[11:0]


 

 

Bu
DATA IAUQNT[31:0
ACK IQUANT INT_IQUANT MS IQUANT
ADDRESS[11:0] DATA[31:0]
RNW
1      8x8 ffer

2


ENABLE DT[11:0]


ENABLE DT[11:0]


 

 

 

12bitX128


 Bus I/F


 Bus I/F


 Bus I/F


 Bus I/F


  Bus I/F


 Bus I/F


  Bus I/F


RNW
DATA[31:0] ADDRESS[11:0]
DATA_HUFFMAN[31:0] ACK HUFFMAN INT HUFFMAN
MS HUFFMAN
DATA BUFER[31:0]
ACK BUFER INT BUFER MS_BUFER
ADDRESS[11:0] DATA[31:0]
RNW

 

 

 

 

 

 

 

 

 

OPB2LOCAL Bridge

 

 

 3-1 系统


 3-1

 

#

实例名

模块名

功能

分类

1

opb2local_bridge_0

opb2local_bridge

OPBùlocal bridge

user IP

2

scan_if_0

scan_if

Scan Data interface

user IP

3

NFC无线通信_huffman_decoder_0

NFC无线通信_huffman_decoder

Huffman decoder

user IP

4

NFC无线通信_iquant_0

NFC无线通信_iquant

iquant module

user IP

5

NFC无线通信_zigzag_0

NFC无线通信_zigzag

zigzag module

user IP

6

NFC无线通信_idct_0

NFC无线通信_idct

iDCT module

user IP

7

jpge_mcu_assemble_0

NFC无线通信_mcu_assemble

MCU reassemble module

user IP

8

NFC无线通信_ycc2rgb_0

NFC无线通信_ycc2rgb

YCC2RGB converter

user IP

9

NFC无线通信_buffer_0

NFC无线通信_buffer

Buffer      for       software

interface

user IP

 

 

由于解码器中各模块之间传输数据的位宽和数据形式是不同的因此在本节

 

中对各模块之间数据传输格式进行了规定。从 SCAN IF 模块到哈夫曼解码模块 的数据是 32 位的采用的格式是原始的码流从哈夫曼解码模块到逆量化模块, 从逆量化模块到 Zigzag 模块以及从 Zigzag 模块到逆离散余弦变换模块的数据是

12 位的,是二进制补码的形式。从逆离散余弦变换模块到 MCU 重构模块,从 MCU 重构模块到 RGB 色彩空间转换模块数据是 8 位的是二进制补码的形式。 从 RGB 色彩空间转换模块到输出控制模块数据是 24 位的红色绿色蓝色 分量分别是 8 位,数据格式是无符号整数,变化范围为 0 255


 

 

SCAN IF => Huffman Decoder

 

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9  8  7  6  5  4 3  2  1  0

 

 

取自比特流

 

 

Huffman Decoder => iQUANT iQUANT                 => Zigzag Zigzag                 => IDCT

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9  8  7  6  5  4 3  2  1  0

 

 


使


12的形


 

 

IDCT => MCU MCU  => RGB

 

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9  8  7  6  5  4 3  2  1  0

 

 


使


 

8,二进


 

RGB => OUTPUT

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9  8  7  6  5  4 3  2  1  0

 

 

使                                   绿                    蓝色

24,0255

 

 

 3-2  块之间数据传输格式

 

 

 

3.1 各模块 IO 地址映射

 

 

本小节列出了外部系统可以访问的各个模块的 IO 地址,名称,大小,属性 以及简单的描述外部系统就是通过对这些地址进行读写操作来实现各种参数 设置待解码数据输入哈夫曼解码触发解码数据输出中断处理以及初始化 等操作。

1)    OPB2LOCAL 总线桥模块: 0x8080_0000-0x808F_FFFC

 

序号

地址

名称

大小

属性

描述

1

0x8088_0000

ISR

32bit

R/W

中断状态寄存器


 

2

0x8088_0004

EAR

32bit

R/W

ERROR

 

 

2)    SCAN IF : 0x8090_0000-0x809F_FFFC

 

序号

地址

名称

大小

属性

描述

1

0x8098_0000

SCANIF_INIT

1bit

W

初始化标识

2

0x8098_0004

SCANIF_DUNUM

20bit

R/W

待解码数据的字节数

3

0x8098_0008

SCANIF_THRESHOLD

20bit

R

缓冲空,满中断阈值(各 10 位)

4

0x8098_000C

SCANIF_ INTSTAT

4bit

R/W

中断使能位

5

0x8098_0010

SCANIF_INTMASK

4bit

R/W

中断设置位

6

0x8098_0014

SCANIF_MCU

6bit

R/W

MCU 内分的个数

 

 

3)      哈夫曼解器模块(Huffman Decoder):0x8000_0000-0x800F_FFFC

 

 

地址

 

名称

 

大小

 

属性

 

描述

1

0x8000_0000-0x8000_083C

HUFFMAN_TABLE_Y_AC

32bitx528W

R/W

Y 分量 AC

2

0x8000_0BBC-0x8000_0FFC

HUFFMAN_TABLE_Y_DC

32bitx273W

R/W

Y 分量 DC

 

3

 

0x8000_1000-0x8000_183C

 

HUFFMAN_TABLE_C_AC

 

32bitx528W

 

R/W

Cb Cr  分量

AC

 

4

 

0x8000_1BBC-0x8000_1FFC

 

HUFFMAN_TABLE_C_DC

 

32bitx273W

 

R/W

Cb Cr  分量

DC

 

5

 

0x8008_0700

 

HUFFMAN_DUNUM_MCU

 

6bit

 

R/W

MCU  中数据

单元的个数

 

6

 

0x8008_0704

 

HUFFMAN_DRI_DUNUM

 

32bit

 

R/W

重置 MCU

个数

7

0x8008_0708

HUFFMAN_ERROR

2bit

R/W

ERROR 标识

8

0x8008_070C

HUFFMAN_TRIGGER

1bit

W

解码触发标识

9

0x8008_0710

HUFFMAN_INIT

1bit

W

初始化标识

 

 

4)      逆量化模块(iQuant): 0x8010_0000-0x801F_FFFC

 

序号

地址

名称

大小

属性

描述

1

0x8010_0000-0x8010_00FC

IQUANT_TABLE

24bitx64W

R/W

量化表地址

2

0x8018_0710

IQUANT_INIT

1bit

W

初始化标识

 

 

5)    Zigzag_converter 模块: 0x8020_0000-0x802F_FFFC

 

序号

地址

名称

大小

属性

描述

1

0x8028_0710

ZIGZAG_INIT

1bit

W

初始化标识

 

 

 

6)    逆离散余弦变换模块 (iDCT): 0x8030_0000-0x803F_FFFC

 

序号

地址

名称

大小

属性

描述

1

0x8038_0710

IDCT_INIT

1bit

W

初始化标识


 

 

 

7)    MCU 重构(MCU Reconstruct): 0x8040_0000-0x804F_FFFC

 

序号

地址

名称

大小

属性

描述

1

0x8040_0000

MCU_SAMPLE

24bit

R/W

采样率

2

0x8048_0710

MCU_INIT

1bit

W

初始化标识

 

 

8)    RGB 色彩空间转换模块(YCC2RGB): 0x8050_0000-0x805F_FFFC

 

序号

地址

名称

大小

属性

描述

1

0x8058_0710

RGB_INIT

1bit

W

初始化标识

 

 

9)    Output_buffer 模块: 0x8060_0000-0x806F_FFFC

 

序号

地址

名称

大小

属性

描述

1

0x8068_0700

OUTPUT_BP_THRESHOLD

16bit

R/W

Back Pressure 阈值

2

0x8068_0704

OUTPUT_INT_THREShOLD

16bit

R/W

中断产生阈值

3

0x8068_0708

OUTPUT_RAM

32bit

R

数据输出地址

4

0x8068_0710

OUTPUT_INIT

1bit

W

初始化标识

5

0x8068_0714

OUTPUT_INTSTAT

1bit

R/W

中断使能位

6

0x8068_0718

OUTPUT_INTMASK

1bit

R/W

中断设置位


 

文章评论

共有条评论来说两句吧...

用户名:

验证码:

Top