摘 要: 为了解决单核处理器系统的总线互连所带来的互连延迟、存储带宽和功耗极限等性能提升的瓶颈问题,设计了基于NoC系统的实时图像采集和处理系统。该系统采用FPGA实现图像采集模块、存储、JPEG编解码、资源节点、路由节点及VGA显示等功能。实验结果表明,在NoC系统上使用多核技术代替传统的单处理器,在提高系统并行性方面显示出了NoC的巨大优势。
关键词: 片上网络;资源节点;通信
NoC(Network on Chip)的核心思想[1]是将计算机网络技术移植到集成电路设计中,从体系结构上彻底解决片上通信的瓶颈问题及时钟问题。它充分借鉴了分布式计算机系统的通信方式,用路由和分组交换技术替代传统的总线通信方式。结构化的网络连线[1]可以更好地控制连线的电气参数,提供更高的带宽,支持多重的并行通信等。此外,NoC还具备数据处理量大、多任务并行计算、架构易扩展及灵活性强等特点。
本设计是在NoC系统上实现实时图像采集、压缩、解压缩、存储和VGA显示等功能,利用FPGA的内部资源设计灵活的逻辑控制,完成高速大容量数据采集的存储和传输。本文提出的设计方案可以在选用成本低、操作简单的静态RAM的情况下, 实现实时大容量数据存储需求。在EDA(Electronic Design Automation)软件中进行了仿真验证,并在DE2开发板上实现高速实时图像采集和处理。
1 系统总体方案设计
NoC系统借鉴并移植计算机网络通信中的概念和方法[1],用于多个核或IP(Intellectual Property core)的集成。图1是NoC的示意图。
NoC系统由交换节点(Switch)、资源节点(Resource)和资源网络接口(Resource-Network Interface)3个基本部分组成[1]。交换节点负责资源节点之间的信息交换,资源节点可以是处理器、存储器、可编程逻辑器件、输入输出设备等。交换节点通过互连线按照拓扑结构组成网络的物理架构,资源节点则通过RNI与交换节点相连。狭义的NoC指的就是仅由交换节点构成的网络。
本设计在NoC网络上实现实时图像采集系统,在FPGA上利用2个NIOS Ⅱ核实现NoC系统上的2个资源节点,实现图像采集的基本功能。其中,1个NIOS Ⅱ实现采集压缩功能,1个NIOS Ⅱ核实现解压显示功能。系统由摄像头、NIOS Ⅱ 1、资源节点1、路由节点1、路由节点2、资源节点2、NIOS Ⅱ 2、SDRAM乒乓存储器和VGA显示等模块组成。系统的工作流程如图2所示。
图像采集系统工作流程是:先对OV9650的寄存器进行配置,然后从摄像头模块中接收YUV422格式的数据,由NIOS Ⅱ 1对接收的数据进行JPEG压缩,压缩的数据发送到资源节点1,再发送到路由节点1上,由路由器把数据发送到目的路由节点2上,再经资源节2发送到NIOS Ⅱ 2中,由NIOS Ⅱ 2进行JPEG解压缩,进行VGA显示,VGA显示的缓存采用SDRAM乒乓缓存。
2 图像采集系统的模块设计
2.1 摄像头控制模块
摄像头控制模块的功能是采集图像数据。OV9650摄像头包括CMOS摄像头和图像处理芯片OV9650。用Verilog HDL硬件描述语言编写SCCB总线控制器,OV9650是通过SCCB总线(SCCB总线的示意图如图3所示,SCL是时钟信号线,SDA是数据线)对其寄存器进行配置的。时钟频率设置为24 MHz,按照其时序完成对OV9650摄像头的初始化配置工作。配置OV9650摄像头的工作模式为VGA 640×480视频格式,以YUV4:2:2数据流输出,视频速率为15 f/s。采集到的YUV4:2:2格式的数据送到JPEG编码器中进行编码,把编码的数据进行打包,发送到缓冲器中,等待路由节点的信号,通过路由器发送到目的资源节点。
2.2 NIOS Ⅱ 1模块
NIOS Ⅱ 1模块由SoPC构建硬件框架[2],再在NIOS Ⅱ IDE中进行软件程序编写。NIOS Ⅱ 1的功能是接收摄像头的数据,对图像数据进行JPEG压缩。
JPEG编码算法可以用失真的压缩方式来处理图像,但失真的程度却是肉眼所无法辩认的,这也就是为什么JPEG会有如此满意的压缩比例的原因。它的压缩一般过程是:首先使用正向离散余弦变换FDCT(Forward Discrete Cosine Transform)把空间域表示的图像变换成频率域表示的图像,然后使用加权函数(此加权函数对于人的视觉系统是最佳的)对DCT系数进行量化,最后对量化系数进行编码。JPEG编码器流程图如图4所示。
2.3 通信节点发送模块
通信节点发送模块有两个作用,一是把4个8 bit数组成32 bit数输出,二是对要发送的数据进行组包。组包协议是:第一包仅包含要发送的包数、发送包的类型、数据发送的资源节点的地址和要接收数据的资源节点的地址、校验位;后面的包包含此包的包号、包的长度、要发送的数据、校验位。资源节点1的模块图如图5所示。
clk_100M是输入时钟,clk_50M是输出时钟,reset是复位信号线,b[11..0]是应用系统发送的数据信号,port_av1是路由节点的请求信号线,ou是应用的请求信号线,data_to_sin1[31..0]是输出信号线,flit_head是头flit信号线,wren写信号线,readen是读信号线。该模块的功能是衔接应用系统与路由节点,使得它们之间可以进行通信。
2.4 路由节点
路由单元包括交换开关以及东、南、西、北、本地5个方向的端口链路控制模块。交换开关负责路由单元内部各端口链路之间的数据交换。本地方向模块与本地的资源节点相连,负责转发本地资源节点发出以及接收的数据,另外4个方向模块与其他路由节点连接。由于2D-Mesh拓扑结构具有对称特性,因此路由单元东、南、西和北这4个方向的端口具有相同的电路结构。每个方向端口由输入虚通道选择模块、输入虚通道缓存模块、路由控制模块、请求仲裁模块和输出模块几部分组成。
2.5 通信节点接收模块
通信节点接收模块是通信节点发送模块的逆过程,其有两个作用,一是把一个32 bit数分解成8 bit数输出,二是对要接收的数据进行解包,解包协议是组包协议的逆过程。资源节点2实现如下:
Module receive(
clkin, //数据输入时钟
clkout,//数据输出时钟
reset, //复位信号
data_in,//数据输入
data_out,//数据输出
wren,//写使能信号
readen, //读使能信号
in_int, //路由节点给的信号线
reci_flit_head,//头flit信号
dataout_flag //数据输出标志位
)
2.6 NIOS Ⅱ 2模块
NIOS Ⅱ 2模块由SoPC构建硬件框架,再在NIOS II IDE中进行软件程序编写。用Verilog HDL语言编写VGA控制器和SDRAM控制器,再编写一个接入到Avalon总线的接口文件,把VGA控制器和SDRAM外挂在NIOS Ⅱ 2上。该模块的功能是接收资源节点的数据,再送入JPEG解码器解码,解码后的数据送入SDRAM乒乓存储器,最后在VGA上显示。
2.6.1 JPEG解码器的设计
JPEG解压缩是JPEG压缩的逆过程,解码流程的主要功能模块包括:头文件解析、熵解码(包括直流系数解码、交流系数解码和差分解码)、反量化与反Z变换(扫描)、IDCT变换和颜色空间转换。在JPEG解码模块启动后,头码流解析单元首先读入JPEG文件的包头,根据JPEG文件数据的存储方式依次检测数据流中包含的各种段的标识符,把要解码的文件信息从数据流中解析出来并存储到相应的存储单元,为后面压缩数据的解码作准备。数据流后经熵解码单元(包括Huffman解码、变长解码和行程解码)进行解码,解码后的数据进入反量化与反Z变换模块,对量化过的像素进行反Z变换,得到8×8的数据块。图像数据是编码时通过正向离散余弦变换得到的结果,解码时必须将其反向余弦变换,将数值向时域转换。JPEG解码器流程图如图6所示。
2.6.2 VGA控制模块的设计
VGA显示由FPGA根据VGA显示时序,输出相应像素的RGB格式的数据、行同步信号和帧同步信号,然后经过D/A芯片转换后显示。实际系统采用的显示分辨率为800×600,帧频率为75 Hz。VGA控制模块设计如下:
module VGA_SINK(
clk, //时钟信号
reset_n,//复位信号
ready_out,
valid_in,
data_in,
sop_in,
eop_in,
empty_in,
vga_clk,
vga_hs,
vga_vs,
vga_de,
vga_r,
vga_g,
vga_b)
其中,ready_out、valid_in、data_in、sop_in、eop_in和empty_in是与Avalon总线连接的信号,vga_clk、vga_hs、vga_vs、vga_de、vga_r、vga_g和vga_b信号是与VGA模块连接的信号。VGA模块的工作过程是:数据从SDRAM中读入,送到VGA显示,判断是否已经读取了一行的数据,即640个RGB信号,如果读取了一行数据,则复位行信号H;判断是否已经读取一帧图像,如果读取了一帧,则复位场信号V,至此VGA已经完整显示了一帧图像。
2.6.3 SDRAM乒乓存储器
SDRAM乒乓存储器的作用是为VGA显示作缓存,一片SDRAM的数据输出给VGA时,另一片SDRAM就接收数据,2片SDRAM交叉进行,保证了VGA实时显示。
3 实验结果
3.1 系统资源测试
NoC应用系统的功能子模块设计完成之后,将各个功能子模块组合、联调,由Quartus II 11.0自带的综合工具生成网表及.pof,通过as接口方式烧写到epcs4中,系统综合后的资源消耗图如图7所示。
结果表明,该系统能正确可靠地工作。在这个系统中,专用逻辑寄存器占1%,总的逻辑单元占2%,总的内存位占5%,因此还有大量的资源可以用于硬件算法或者其他方面的应用。
3.2 系统指标测试
在整个NoC应用系统的实现中,由于采用FPGA作为主控制器,基本上是由硬件完成了整个系统,将图像传感器的帧频设置为15 f/s(最高为30 f/s),JPEG压缩比例为3.4%,SDRAM乒乓缓存为VGA实时显示提供了条件。通过仿真调试,可以实现通过人机交互界面控制图像采集、传输和VGA显示等功能,并且各部分能同时工作,这也是NoC的优势所在。图8是采集的一帧图像。
本文设计的系统的各个模块都在Modelsim中进行了仿真,并在DE2-115开发板上调试成功,实现了图像采集、JPEG编码解码、传输和VGA显示等功能。在NoC系统上实现数据采集系统,采用双核进行处理,通过路由进行数据传输,克服了总线互连、存储带宽及功耗极限等性能提升的瓶颈问题。
参考文献
[1] 阿克塞尔·詹奇,汉努·腾胡宁.网络化芯片[M].王忠,孙继银,周国昌,等,译.西安:西安交通大学出版社,2007.
[2] 孙春凤,袁峰,丁振良.基于FPGA的多通道高速CMOS图像采集系统[J].计算机工程与应用,2008(21):46-48.
[3] Altera. Altera Cycone IV Device Hand-book [Z].http://www.altera.com,2010.
[4] 杜慧敏,李宥谋,赵全良.基于Verilog的FPGA设计基础[M].西安:西安电子科技大学出版社,2006.
[5] 杜林奇,许开宇,张欣璐.基于FPGA和视频解码芯片的实畦图像采集系统设计[J].电子元器件应用,2008(05):56-60.