基于FPGA的多软核图像处理系统设计
2009-04-29
作者:丁浩楠,蒋本珊
摘 要: 介绍以图像处理为应用背景、基于FPGA芯片建立的多软核系统设计。系统中包含两个Nios II软核处理器和两个用于进行图像颜色空间转换的CSC MegaCore IP核。两个Nios II软核处理器共享程序存储器、数据存储器及启动存储器。在硬件设计方面,CSC MegaCore IP作为外围组件通过一个自定义的接口控制器连接到以Nios II软核处理器为核心的SoPC系统中。在软件设计方面,运行在每个Nios II软核处理器上的程序通过硬件Mutex核协调对共享数据存储器的访问。
关键词: 现场可编程门阵列;可编程芯片系统;多核系统;图像处理
本设计在Altera Cyclone II EP2C35F672C6芯片上实现多软核系统,旨在利用FPGA芯片的并行处理结构以及两个Nios II软核处理器间的并行处理和协作,提升数字图像处理系统的性能。
1 CSC MegaCore IP核
Altera视频图像处理组合是Altera公司提供的一组用于开发视频和图像处理的MegaCore IP核。这些MegaCore IP在涉及图像处理和显示的应用中有着广泛应用。这些IP核的功能包括:颜色空间转换、色度重采样、伽玛校正、二维FIR滤波器、二维中值滤波器等[1]。
颜色空间是在三维坐标系下精确表示各种颜色的三维线性空间。不同的颜色空间采用不同的基色:RGB颜色空间采用红、绿、蓝三种颜色;CMY颜色空间采用青、品红、黄三种颜色。不同的硬件设备使用不同的颜色空间,例如:计算机显示器使用RGB颜色空间,数字电视使用YCbCr(亮度色度)颜色空间。将图像数据在使用不同颜色空间的硬件设备间传输时,通常都需要进行颜色空间的转换[2]。颜色空间转换(CSC)MegaCore提供了灵活且高效的方式将图像数据从一个颜色空间转换到另一个颜色空间。
在两个不同的颜色空间进行图像数据的转换时,需要提供一个特定的、具有12个系数的转换矩阵。该矩阵中的系数由进行转换的两个颜色空间决定。例如:din_0、din_1、din_2为被输入的像素在原颜色空间下的坐标,[x0,x1,x2,…,x11]为转换矩阵的系数,dout_0、dout_1、dout_2为输入像素经转换后在目标颜色空间下的坐标,则计算方法如下:
dout_0=x0×din_0+x1×din_1+x2×din_2+x3
dout_1=x4×din_0+x5×din_1+x6×din_2+x7
dout_2=x8×din_0+x9×din_1+x10×din_2+x11
2 CSC MegaCore IP核与Nios II系统的接口设计
本设计的CSC MegaCore IP具有两个Avalon端口:一个只写的Avalon从端口,用于接收Nios II软核处理器通过Avalon总线传来的输入数据;另一个Avalon主端口,将经过CSC MegaCore IP处理后的数据通过Avalon总线写到存储器中。
完成上述两个Avalon接口的功能,需要CSC MegaCore IP对外提供如下几个必备的Avalon总线信号:reset、clock信号用于系统复位和时钟信号;write、writedata信号用于只写的Avalon从端口;write、writedata、address信号用于Avalon主端口(用于Avalon主端口和用于只写的Avalon从端口的write、writedata是不同的信号,只是名称相同)。
由于定制的CSC MegaCore IP没有提供Avalon主端口需要的address信号,所以在本设计中需要增加地址生成逻辑功能。增加该功能有两种方式:第一种方式是对由定制自动生成的CSC MegaCore IP的顶层设计进行更改,在CSC顶层设计文件对外提供的接口中增加address信号,并且在CSC顶层设计文件中加入生成address信号的VHDL代码。另一种方式是用VHDL语言实现一个接口,CSC MegaCore IP只向该接口提供与应用相关的信号,address信号由在该接口设计文件中的VHDL代码生成。
本设计对两种设计方案都进行了尝试,最终采用了第二种方法。因为单独设立一个接口一方面可以解决address信号的生成问题,另一方面设立该接口文件可以使设计的层次更加清晰且具有灵活性和通用性。
设立这样一个接口后,可以将该接口封装为SoPC自定义组件加入Nios II系统中。这样,CSC MegaCore IP就成为了Nios II系统的外围组件,在设计中与Nios II系统处于同一个顶层。而且,由于Altera视频图像处理组合中其他的IP核都具有与CSC MegaCore IP相似的对外接口[1],这样一个接口的设立也解决了Altera视频图像处理组合中其他的IP核与Nios II系统的连接问题。
3 多软核系统的设计
目前,随着业界对计算机芯片的组织和体系结构研究的不断深入,简单地通过提高系统时钟频率、增加Cache容量以及处理器指令的超标量化和流水化等方式实现系统性能提升的策略已经到达了回报减小点。传统方式对系统性能的提升遇到了瓶颈,有学者已经指出,在单一处理器的条件下,系统性能的提高大致正比于复杂度提高的平方根[3]。
随着SoPC技术的发展,设计者普遍采用了一种新办法来改善性能:在同一芯片上安排多个软核处理器并带有大的共享Cache。同一芯片上多个处理器的使用,亦称为多核(multiple cores)。在FPGA中采用多个软核处理器,根据时间和功耗要求划分任务,可以更高效地利用器件的资源、提升器件的处理效率,从而提升系统整体性能。
硬件资源共享是多核系统的强大功能之一,在多核系统中最普遍的共享资源是存储器。共享存储器的数据从端口需要与共享存储器的软核处理器的数据主端口连接。如果某一处理器正在对共享存储器的特定区域进行写操作,而同时另一个处理器正在对同一区域进行读或写操作,则很可能出现数据错误。因此,在共享存储器时需要通过使用Mutex核或Mailbox核通知其他处理器何时正在使用共享资源,以便处理器之间不会相互干扰。
图1为本设计中两个Nios II软核处理器与共享存储器的连接框图。其中:SDRAM为共享的程序存储器,用于存放两个处理器的代码;Flash存储器为共享的启动存储器;On_chip_memory是利用片上资源实现的双口RAM,在系统中是共享的数据存储器,用于存放图像数据。
由于两个Nios II CPU使用同一个SDRAM作为程序存储器,因此需要用SoPC Builder提供的存储器分区功能来指定每个Nios II CPU使用的存储器区域。SoPC Builder的分区功能使用处理器的异常地址来定义不同处理器之间代码存放的分界,每个处理器的异常地址用来决定处理器代码存放的基地址,其末地址由下一个异常地址或存储器的末地址决定。每个Nios II CPU有5个主要的代码段需要被链接到存储器中,它们分别是: .text、.rodata、.rwdata、heap和stack段。在对程序存储器分区时,必须为每个处理器的heap和stack段提供足够的地址空间,否则heap和stack段可能溢出,进而破坏处理器的代码运行。
本设计中的两个Nios II CPU还共享了一个Flash存储器,作为启动存储器。与程序存储器类似,在多Nios II软核处理器系统中,每个处理器必须从自己独立的存储区域启动,多个处理器不能从同一非易失存储器的同一地址启动。SoPC Builder对启动存储器提供了与程序存储器类似的分区功能,用处理器的复位地址来定义不同处理器之间启动代码的分界。
在本设计中,多软核系统的所有硬件资源通过SoPC Builder连接矩阵的互联情况如图2所示。Mutex核用于两个Nios II CPU对On_chip_memory的互斥访问。两个Nios II CPU通过SoPC Builder中的连接矩阵与这些资源相连接,实现了资源共享。此外,本设计中每个Nios II CPU都有独立的cpu_timer(计时器)、custom_comp(自定义CSC MegaCore IP接口)外设。
图2 多软核系统中硬件资源通过连接矩阵的互联情况
Nios II IDE具有在片上对多处理器同时进行调试的能力。Nios II IDE multiprocessor collection支持在FPGA片上对多软核系统的软件进行调试。Nios II IDE下载软件代码到每一个处理器,然后运行软件。在multiprocessor collection中不同处理器的启动并不是在同一个时钟周期开始的,只要一个处理器对应的代码下载完毕,该处理器就开始执行代码。
运行在两个Nios II处理器上的软件通过硬件Mutex核协调对共享片上数据存储器的访问。运行在两个Nios II CPU上的程序各负责一半的图像数据处理任务,并将处理后的图像数据写入共享数据存储器中。最后由一个Nios II CPU将结果数据从共享缓存中读出,并输出到结果文件中。
此外,软核处理器上运行的代码通过Altera公司提供的Altera Host Based File System文件系统对存储在计算机上的文件进行读写操作。Altera Host Based File System文件系统与Altera Zip Read-Only File System只读文件系统相比,可以对文件进行写操作,更加符合本设计的需求。加入Altera Host Based File System后即可在代码中使用ANSI C对存储在计算机上的文件进行访问,代码如下:
FILE*fp_bin=NULL;
fp_bin=fopen(″/mnt/host/hostfs_read_binary.bin″,″r″);
fread(buffer,1,BUF_SIZE,fp_bin);
for(i=0;i { printf(″%X″,buffer[i]); } 设计中进行读/写的文件是BMP位图文件。BMP位图文件由四个部分组成:位图文件头、位图信息头、调色板数据和图像数据区。为了对设计进行简化,假设处理的BMP位图文件为非压缩且没有调色板的位图文件。在这类文件中图像数据区开始于0036h,使用ANSI C中的fseek( )函数即可读到图像数据实体。 4 多核系统与单核系统的性能对比 由于本设计为多软核系统,为了与单Nios II软核系统进行比较,在软件设计中加入了监测软件执行时间的代码。对不同像素数的图像进行处理时,单核系统与多核系统的程序执行时间如表1所示。 对表1中的数据进行分析可知,由于在多核系统中,CPU之间进行通信需要一定的时间开销,在待处理数据量不大时,如1 024像素,单Nios II软核系统(单Nios II 软核CPU带一个CSC MegaCore IP)与双Nios II软核系统(双Nios II软核CPU带双CSC MegaCore IP)在处理耗时上的差别并不明显。当处理的图像数据量增大时,双Nios II软核系统对性能的提升逐渐显示,如图3所示。 以一幅64×64的BMP位图的处理时间为例,双核系统的处理时间为3 961 ms,与之配置相同的单核系统的处理时间为4 656 ms,多软核系统的性能提高约为15%。 经过对Quartus II软件综合报告进行分析,单核系统对FPGA片上的逻辑单元(LE)占用为17%,多核系统对FPGA片上的逻辑单元(LE)占用为27%,多占用了10%的逻辑资源。因此,可以说在设计中用器件的逻辑资源换取了程序执行时间,而且系统性能的提升量是逻辑资源消耗量的1.5倍,达到了设计的预期目标。 本设计基于FPGA实现了图像颜色空间转换的多核系统。利用SoPC Builder软件完成硬件系统的搭建,成功地将硬件系统下载到DE2开发版,并且在软件设计中实现了对共享数据存储器的访问控制以及程序执行时间的监测。为CSC MegaCore IP核与Nios II系统间设计的接口使得本设计具有一定的灵活性,CSC MegaCore IP核可以用Altera视频图像处理组合中的任一个IP核替换。 本设计利用多个软核(包括两个Nios II软核处理器和两个CSC MegaCore IP)并行对图像进行颜色空间的转换。与单核系统相比较,多软核系统性能有较大提高且没有过多地占用逻辑资源。 参考文献 [1] Altera Crop.Video and image processing suite user guide[PDF].http://www.altera.com.cn/technology/dsp/applications/video_imaging/dsp-vid_index.html,2006-04-01/2007-03-30. [2] Altera Crop.Color space converter v3.0.0 megacore function release notes[PDF].http://www.altera.com.cn/technology/dsp/applications/video_imaging/dsp-vid_index.html,2006-04-01/2007-03-30. [3] STALLINGS W.计算机组织与体系结构性能设计(第7版)[M].北京:清华大学出版社,2006.