基于NETFPGA的可重构科学计算平台
1目标和背景1.1项目目标
大规模科学问题对数学算法运算速度的追求是无止境的,因此需要探索更快速的方法。目前基于FPGA技术的可重构高性能计算系统已经成为研究热点,把数学算法转换成硬件逻辑在FPGA中运行是一个好办法,但数学算法转换为硬件逻辑的过程复杂,而且受限于硬件电路规模,并不是所有的数学算法都适合转换为硬件逻辑。且其存在的一个普遍的问题就是用户应用编程难度较大,且软件专用、价格昂贵。
本项目的研究目标是探索和建立图形化数学算法向硬件转换的理论方法,研究开发数学算法向硬件逻辑转换的工具,与科学计算软件相结合建立起基于FPGA阵列的科学计算平台原型。研究目标结构流程如下:
系统目标结构和流程
FPGA 为各种高速算法的实现提供了一个很好的平台,但是同样引申出的问题是如何快速有效的建立这些算法。在数学中最常用的算法表示是流程图形式,因此本研究针对如何把数学流程图算法转换成为硬件逻辑以及建立其原型系统进行研究,计划建立起一个在数学算法的建立和运算中对用户屏蔽EDA软件层,使得各种层次用户均可透明的使用FGPA计算系统,而不用关心硬件和硬件部署、接口的各个细节,实现PC-FPGA科学计算的原型系统。
1.2应用背景
大规模科学问题对数学算法运算速度的追求是无止境的,因此需要探索更快速的方法。目前基于FPGA技术的可重构高性能计算系统已经成为研究热点,把数学算法转换成硬件逻辑在FPGA中运行是一个好办法,但数学算法转换为硬件逻辑的过程复杂,而且受限于硬件电路规模,并不是所有的数学算法都适合转换为硬件逻辑。且其存在的一个普遍的问题就是用户应用编程难度较大,且软件专用、价格昂贵。
FPGA 为各种高速算法的实现提供了一个很好的平台,但是同样引申出的问题是如何快速有效的建立这些算法。在数学中最常用的算法表示是流程图形式,因此本研究针对如何把数学流程图算法转换成为硬件逻辑以及建立其原型系统进行研究,计划建立起一个在数学算法的建立和运算中对用户屏蔽EDA软件层,使得各种层次用户均可透明的使用FGPA计算系统,而不用关心硬件和硬件部署、接口的各个细节,实现PC-FPGA科学计算的原型系统。
[*] FPGA硬件加速能力
FPGA (现场可编程门阵列)是一种具有大规模可编程门阵列的器件,不仅具有专用集成电路(ASIC)快速的特点,更具有很好的系统实现的灵活性。FPGA可通过开发工具实现在线编程。与CPLD (复杂可编程逻辑器件)相比, FPGA属寄存器丰富型结构,更加适合于完成时序逻辑控制。FPGA提供大量的并行资源,在硬件中只需要几个时钟周期就可以执行完函数功能,而顺序操作的处理器则需要成百上千的时钟周期。由于只需要很少的时钟周期,FPGA即使采用较慢的时钟,也能够提升性能。减小时钟速率可以降低功耗,因此,FPGA协处理器的功耗效率远远大于处理器。利用当今高性能FPGA(例如,Altera的Stratix III系列FPGA)的结构和资源优势,大量的应用软件都可以采用硬件加速协处理器,大大提升性能,如表所示。相对于只采用处理器的应用,基于FPGA的协处理器在实际应用中运算执行速度提高了10倍,速度提高100倍也是很常见的。
FPGA硬件加速列表
注:上表来自 Altera公司.利用FPGA加速实现高性能计算 电子产品世界
[*] 可重构计算
可重构计算(Reconfigurable Computing,RC),简单地说,就是利用FPGA逻辑实现计算任务。有些文献把它称为自适应计算(Adaptive Computing),也有的文献把它称为FPGA定制计算(Custom Computing)。可重构计算的概念早在20世纪60年代就已提出。在通用微处理器上也运用了这一思想,如组件就是利用多路选择器来实现功能的变化,而这些组件一般与计算结构不发生直接联系。目前,可重构计算已有较大发展,主要目标是希望通过硬件可编程,来自适应计算任务的需求,以期达到最佳性能;而且这种硬件结构的变化,能实时地适应计算任务要求的变化。可重构计算的底层技术是FPGA编程技术,可重构计算的优点是硬件设计的实现基于软件的灵活性,并且保持了传统的基于硬件方法的执行速度。其体系结构可变的特点,很好地适应了实际应用中的多元化需求。
国际现状
国际上主要有XtremeData,Nallatech,美国星桥公司和苏格兰爱丁堡大学FPGA高性能计算联盟研究类似产品。
[*] XtremeData:(www.xtremedatainc.com)
采用了多片Altera? Stratix? III FPGA,并且使用Intel QuickAssist技术,XtremeData XD2000i In-Socket加速器(ISA)展示了这一强大的1066 MHz协处理解决方案。Stratix III FPGA的快速架构和I/O功能在这一模块中非常有效,实现了稳定的1,066 MHz FSB速率。XD2000i模块相对于目前的GPU还具有功耗、体积、存储器误码校正编码(ECC)等优势:功耗低于60W,模块可以紧密安装在刀片外形封装中。XD2000i模块结合了Intel Xeon 5000系列处理器和Stratix III FPGA协处理器,使客户能够使用性能最好的FSB加速器,显著降低了成本和功耗,产品更加紧凑。XD2000i模块采用了Stratix III FPGA,在基于Intel的平台上,实现的某些算法具有优异的性能。Intel QuickAssist技术工作台为Altera和XtremeData等公司提供了创新的协处理器解决方案开发环境。Intel提供基于FPGA的紧耦合In-socket加速器。将基于Stratix III FPGA的XD2000i插入到Intel Xeon处理器插槽中,使协处理器能够与存储器和主处理器实现高速链接,不需要改动电路板,从而为设计人员提供了简单的硬件集成途径。今年第三季度将提供新版XD2000i模块,四插槽电路板通过单独的FSB处理器互联支持500K逻辑单元(LE)以及1,536个乘法器。
[*] Nallatech:(http://www.nallatech.com)
该公司一直致力于高性能FPGA计算技术的研究与开发,其解决方案包含了目前业内FPGA最成熟和先进的开发技术,在技术的领先性和应用的普遍性方面取得了一个很好的平衡。模块化的硬件平台,提供一个由多个FPGA、内存、数模接口和串行接口组合而成的高带宽、内部连接的结构。具体形式有PCI,VME,cPCI 和PCI-104等形式。FUSE系统软件可以运行在包括Windows,Linux和VxWorks等操作系统的主机系统上,通过程序环境中的APIs,提供配置、控制以及和FPGA运算平台通信等功能。提供了在主机系统和Nallatech FPGA运算平台之间进行配置,控制和通信的功能,支持最常用的操作系统和编程语言。支持的操作系统包括Linux,Windows和VxWorks; FUSE APIs,包括支持DIMEtalk的APIs,支持C/C++ 和Java的APIs; 在单个系统中支持多个FPGA平台; FUSE Toolbox for MATLAB提供了Matlab和FPGA硬件平台的直接接口; 支持硬件和主机之间接口的TCL脚本语言。
[*] 美国星桥公司
星桥公司以175000-700000美元的价格销售4种型号的FPGA“超计算机”,被称为HC-62的“超计算机”的售价为350000美元,配置11个Xilinx公司生产的价格为3000美元的FPGA芯片,它每秒能够完成2000亿次浮点运算。售价为700000美元型号的“超计算机”包含有22有个Xilinx公司的芯片,每秒能够完成4000亿次浮点运算。另外,客户还必须购买Viva的许可证,每人每年的价格为45000美元。
[*] 苏格兰爱丁堡大学FPGA高性能计算联盟的Maxwell
Maxwell只占用了爱丁堡大学并行计算中心的两个机柜。这一技术目前存在的问题是,编程非常困难。导致Maxwell还很难投入商业使用。但Maxwell已经试运行了来自石油、金融、医疗成像等行业对处理能力要求较高的应用软件。在运行金融行业的软件时,Maxwell的速度是使用标准处理器的相似系统的2-300倍。Maxwell采用了Xilinx的FPGA技术。
[*] 国内现状
在基于FPGA的可重构高性能计算的研究领域,国内主要有中国科学技术大学等少数几所大学的相关教授在研究FPGA可重构计算的结构和算法,国内的FPGA可重构计算还处于起步阶段,与国际水平还有很大差距,尚无通用成品运算平台,国内主要研究现状比较见下表。
目前一般情况下对于需要使用PC来解决一个科学计算的问题,首先会使用C、Matlab或者其他语言来实现这个算法,变成程序,程序与操作系统进行交互运行,操作系统与机器码在CPU 的物理层上运行 ,而CPU 层则是工作在硬件逻辑层之上 . 可以看到,运算工作于3个层次,如果有办法让我们的算法直接工作在硬件逻辑层,那么算法的运算速度将大大提高。
科学计算软件如Matlab、Scilab是广大科研工作者广泛使用的数学工具,科研中大量的科学计算问题都是由科学计算语言来描述的,本研究的最终目的是采用基于FPGA的可重构计算技术对科学计算软件进行加速,使其能在PC平台上完成高性能科学计算。
这项研究最核心的问题就是如何把科学计算问题转换成为硬件逻辑(可综合)。
数学算法在PC上运行和在FPGA上运行情况对比
随着微电子工艺水平的提高和EDA工具的进步,目前主流商用FPGA芯片的集成规模已经超过I千万等效门,而且还在按照摩尔定律增加,利用这些芯片解决问题的能力越来越强。另一方面,随着应用要求的发展,可重构计算技术所处理问题的规模越来越大,系统也变得越来越复杂,同时对系统设计时间的要求却是越来越短,迫切需要开发和使用与此需求相适应的支持电路实时重构技术的高级设计方法和工具来充分发挥现有FPGA的能力。目前可重构计算面临的主要问题是大量设计工作依靠手工方法完成,并要求用户掌握算法、并行计算、硬件描述语言和电路设计等大量相关知识及丰富的设计经验,设计难度很大,设计周期较长,严重制约着可重构计算技术的推广和普及。
目前国际上虽然已经有一些面向可编程芯片设计的高级工具,但基本上是借鉴ASIC设计方法,不但缺乏对实时可重构的支持,而且最后自动生成的电路往往难以满足用户较为严格的时序要求。本研究设计的支持电路实时重构的科学计算平台为用户提供一个高级语言设计工具,降低用户的使用难度,大大加快可重构计算电路设计的速度,必将成为可重构计算技术发展的方向,因此本设计是一个极具前途的研究课题。本系统利用FPGA的可重配置特性,计算机与FPGA运算相结合的计算装置,如果能与支持电路实时重构的编译技术相结合,将能很轻松地设计出小规模、高性能、低成本、低功耗的硬件平台,本系统探索和建立数学算法向硬件逻辑转换的理论方法,对于当前的可重构计算、高速信号处理、FPGA应用设计乃至IC 设计都有着重要意义 ,其关键的问题在于给用户提供数学算法向硬件逻辑转换的工具,以此来帮助用户更加快速的建立应用。
研究的意义
探索和建立数学算法向硬件逻辑转换的理论方法,对于当前的可重构计算、高速信号处理、FPGA应用设计乃至IC 设计都有着重要意义 ,其关键的问题在于给用户提供数学算法向硬件逻辑转换的工具,以此来帮助用户更加快速的建立应用。基于FPGA的可重构高性能计算将有可能大大降低对于超级计算机的需求,大量的科学计算问题将有可能提供FPGA的硬件逻辑得以实现 . 同时 ,基于FPGA的可重构高性能计算系统的硬件成本相比高性能超级计算机来说较低,更加有利于普及和推广。
1.3研发计划
科学计算工具的研究一直是科学研究的前沿领域,其目前主要方向集中在更高性能的超级计算机构建方面,其主要是利用CPU阵列的规模优势来实现高性能。本研究采用FPGA可重构数字电路硬件加速的方法在Scilab中实现高性能科学计算,研究使用图形化方法把数学算法转换到硬件逻辑的方法和软件,目标实现PC与FPGA相结合的科学计算系统:实现 Scilab - FPGA运算任务的协同工作 ,对于用户来说整个系统透明,用户使用Scilab/Scicos编程,硬件生成和加速工作由系统自动完成,整个系统构成一个具备硬件加速功能的科学计算平台。
[*] 基于前期开发的Scilab/Scicos-HDL软件,进一步完善,构建起配套的FPGA可重构硬件环境,建立Scilab-FPGA软硬件联合仿真运算平台,并且在其上建立大规模科学运算应用)。
[*] 开发与Scilab系统相互通信交FPGA硬件模块,实现Scilab/Scicos-HDL与FPGA硬件模块联合仿真;
[*] 在该系统上设计建立大规模科学计算应用来进行大规模矩阵运算等。可行性:基于4年时间的前期工作,课题组已经开发出 科学计算算法(代码方式和图形化方式)转换为 硬件描述语言(支持 VHDL、Verilog、 SystemC)的软件,本项目申请所要完成的是其FPGA硬件模块和其协同工作方法有较高的可行性 。
本项目建在在充分的前期工作基础之上。项目组成员自主开发了在开源的科学计算软件上进行硬件电路算法设计和仿真的软件Scicos-HDL (2005-2010). 该项目的研究一直在中科院自动化所中法实验室和法国 INRIA的支持下进行。
目前Scicos-HDL 0.7运行在Windows平台。具备5个硬件电路仿真库,包括50多个硬件电路仿真元件和VHDL、verilog、systemc语言编译器模块。当前可以完成组合逻辑电路设计、时序逻辑电路设计和基本的数字信号处理,支持VHDL、verilog、SystemC 3种硬件描述语言,支持自动文档生成,并且生成的HDL代码均为可综合。Scicos-HDL还支持与其它Open Source的EDA软件进行集成,构建完整的设计工具链。用户在Scilab / Scicos环境下对电子电路进行高级描述,并可对自己的设计方案进行系统仿真和修正,然后通过编译生成基于VHDL的RTL级结构模型。该模型可通过各种商业化的IC-CAD接口,最终产生对应于所描述系统的硬件平台。使用这样的开发工具,用户在设计集成电路系统时,即使不了解硬件电路的内部细节,甚至不了解 HDL语言,也可以根据自己的需要进行电子电路的设计。还可以使设计数字电路和数字信号处理电路的工作变得快捷,门槛更低。
Scicos-HDL元件库示例
课题组前期与中科院自动化所中法实验室(LIAMA)和法国INRIA Scilab组织在科学计算算法转换到硬件描述语言方面有着长期合作基础,合作开发Scilab/Scicos-HDL软件系统已经数年,在开源领域有一定的知名度。本项目设计把科学计算软件与FPGA技术可重构系统相结合,构建出低成本和易于使用的高性能科学计算平台。本系统研究实现了基于FPGA可重构计算技术的科学计算平台系统原型,实现了Scilab-FPGA运算任务的协同工作,对于广大用户,整个系统透明,将其中的数学算法转换为数字电路硬件逻辑的理论方法和软件,开发与Scilab系统相互通信交互的FPGA硬件模块,实现Scilab/scicos-HDL与FPGA硬件模块联合仿真,在高性能科学计算领域,有较强的应用价值。
1.4研究意义
探索和建立数学算法向硬件逻辑转换的理论方法,对于当前的可重构计算、高速信号处理、FPGA应用设计乃至IC 设计都有着重要意义 ,其关键的问题在于给用户提供数学算法向硬件逻辑转换的工具,以此来帮助用户更加快速的建立应用。基于FPGA的可重构高性能计算将有可能大大降低对于超级计算机的需求,大量的科学计算问题将有可能提供FPGA的硬件逻辑得以实现 . 同时 ,基于FPGA的可重构高性能计算系统的硬件成本相比高性能超级计算机来说较低,更加有利于普及和推广。
2设计与实现
本章来说明对于项目整个系统的设计结构进行了说明,并且说明了目前实现的部分。
2.1总体设计
2.1.1总体设计图
系统中 Scicos-HDL模块负责 硬件电路的设计、仿真和HDL代码输出。当用户完成了一个 硬件设计后 ,可以先行在Scicos-HDL中进行软件仿真,仿真完成后,用户可以导出VHDL、Verilog、SystemC这三种硬件描述语言的代码(可综合)。导出的HDL代码经过用户手动处理,下载到NETFPGA板子上后,通过千兆以太网接口,与Scicos-HDL进行软硬件联合仿真。
在NETFPGA板子上,通过以太网连接MicroBlaze处理核心,使用HTTP协议进行数据交换Scicos-HDL导出的代码以用户自定义IP的方式加入到系统中。
2.1.2技术发展路线
本节来阐述项目技术的基本原理和发展的技术路线。
(1)数学算法转换成硬件逻辑原理
图形化的算法描述和仿真是一种常见的算法表达方式,其也最接近于实物性质的描述,目前计算机软件中采用图形化仿真方法的很多,如MatlAB,SystemView、labView等.本研究设计了一套基于硬件知识的图形化算法仿真机制,使得用户在软件中根据算法需要画出算法流程图,由系统处理后形成硬件逻辑描述,其基本的结构描述如下:
用途
计算机程序结构
FPGA结构
加法
+ 运算
硬件加法器
乘法
X 运算
硬件乘法器
循环结构
FOR 循环
计数器
判断结构
IF
数值比较器+数据选择器
递增结构
i++
加法计数器
递减结构
i--
减法计数器
矩阵加法
多条程序实现
矩阵加法器
矩阵乘法
多条程序实现
矩阵乘法器v
赋值
赋值语句
寄存器
功能模块
函数
算法硬件模块
数组
数组
RAM
计算机程序结构与FPGA程序结构对比
通过可以看出在程序设计中能够实现的程序基本结构在FPGA均有对应的硬件实现。本系统中数学算法转换成硬件逻辑是通过建立图形化运算机制基础上:添加FPGA流水线运算基本元件、使用图形化方法连接各个元件构成算法逻辑图、把算法逻辑图转换成为可综合HDL描述这三个步骤进行完成。
(2)协同工作中FPGA模块并行计算
FPGA运算与计算机运算的一个很大的区别在于FPGA中的各个运算单元都是实际硬件存在而计算机运算中的各个运算单元主要是在软件系统中建立顺序执行,因此FPGA可以实现所有运算单元的协调并行计算,但是FPGA并不能自动完成并行计算任务,这需要采用流水线技术来完成。
流水线处理源自现代工业生产装配线上的流水作业,是指将待处理的任务分解为相对独立的、可以顺序执行的,而又相互关联的一个个子任务.图1 是采用流水线技术的一个指令集的操作过程,我们将某一操作分为4 个子任务:取指令I1 ,译码I2 ,取操作数I3 和运算I4 ,假如每个操作执行的时间均为T ,则执行4 个操作的执行时间为4 T ,将这4 个子任务在时间上重叠,用4 个子部件来完成,相应的4 个子部件连接成串行方式,每个子部件执行的时间为T ,每隔T 时间就可输出一个操作处理结果,平均速度提高了4 倍,在加入适当的转移控制之后,即成为流水线操作的工作方式.
采用流水线技术的一个指令集的操作
采用流水线技术,可以大大提高系统运行速度,特别适合于需要进行大批量简单运算的场合,如数字信号处理中的卷积操作、FIR 或FFT滤波器等。本研究中作为算法流程机制的FPGA模块均采用流水线结构,其基本结构如下:
基本算法流程模块
一个基本的算法流程模块采用前寄存器和后寄存器,使得系统模块的工作只取决于自身的运算是否完成,在整体中相对独立,系统中有多个此类算法模块是独立并行工作。
(3) FPGA-PC协同科学计算
此项包含2个方面的内容:一个是FPGA算法系统中本身就有支持科学计算的算法模块;一个是FPGA运算系统可以和计算机端的科学计算系统连接起来完成FPGA-PC协同科学计算工作。
对于第一个方面本研究在系统的元件库中设置了矩阵运算元件库在完成基本的矩阵运算:矩阵运算是科学计算中的一个重要方法,要实现高性能的科学计算在系统内部就必须配置多种硬件矩阵运算处理模块,如矩阵硬件加法器、乘法器。
对于第二个问题,本研究使用netfpga硬件系统,与开源的科学计算软件Scilab进行接口,实现FPGA运算系统与科学计算系统协同工作。
本研究中系统软件基于Scilab/Scicos开发,完成三个主要功能:
[*] 使用Scilab/Scicos进行图形化算法设计;
[*] 把图形化数学算法转换成为硬件逻辑的功能;支持 VHDL、Verilog、 SystemC 三种硬件描述语言,生成的硬件逻辑可综合;
[*] 与NETFPGA硬件系统实现 FPGA-PC协同任务运算;
2.2软件设计
软件模块的主体功能是硬件设计、仿真、输出、软硬件联合运算。
软件模块的结构如下
软件结构图
软件系统目前已经实现的有组合逻辑元件库、时序逻辑元件库、虚拟仪器库、VHDL编译器、Verilog编译器、SystemC编译器。
组合逻辑元件库
时序逻辑元件库 超级元件库
虚拟仪器库
IP 元件库
2.2.1组合逻辑元件
所有的组合逻辑元件,均派生自ScilabCode组合模块 ,使用者只要使用scilab 语言在ScilabCode组合模块 中定义模块功能 和 模块的引脚 ,系统会自动生成相应的硬件描述。
例如:
用户打开一个ScilabCode组合模块 放置于 设计区后 ,点击元件的SET菜单,弹出界面进行引脚的功能的设置:
组合逻辑元件引脚设置界面
组合逻辑元件功能设置界面(使用纯Scilab语言描述)
设置完成点击“QUIT”按钮,系统自动生成元件
组合元件 74ls04
2.2.2时序逻辑元件
所有的时序逻辑元件,均派生自ScilabCode时序模块 ,使用者只要使用scilab 语言在ScilabCode时序模块 中定义模块功能 和 模块的引脚 ,系统会自动生成相应的硬件描述。
例如:
用户打开一个ScilabCode时序模块 放置于 设计区后 ,点击元件的SET菜单,弹出界面进行引脚的功能的设置:
时序逻辑元件引脚设置界面
时序逻辑元件功能设置界面(使用Scilab语言描述,状态转换图)
设置完成点击“QUIT”按钮,系统自动生成元件
时序逻辑元件例子
2.2.3IP Core元件
所有的IP Core元件,均派生自IP Core模块 ,使用者只要在IP Core模块 中定义模块功能 和 模块的引脚 ,系统会自动生成元件。
例如:
用户打开一个IP Core模块放置于 设计区后 ,点击元件的SET菜单,弹出界面进行引脚的功能的设置:
IP Core元件引脚设置界面
进行引脚设置以后,系统会自动生成VHDL、Verilog、SystemC这三种硬件描述语言的模板,用户根据所需功能修改模板,即可完成模块设计。
VHDL语言模板
Verilog语言模板
SystemC语言模板- 头文件
SystemC语言模板- 程序文件
编辑完成,点击:“QUIT”按钮,系统后自动完成元件的建立。
IP Core元件例子
2.2.4超级模块元件
超级元件是指由多种不同的元件组合起来的元件,用户可以根据需要使用 组合逻辑元件、时序逻辑元件、IP Core元件 来建立超级元件,另外超级元件也可由数个超级元件组成。
超级元件内部
超级逻辑元件例子
2.2.5编译器模块
VHDL编译器,可以将Scicos-HDL中设计的硬件电路输出成为可综合的VHDL语言代码。
Verilog编译器,可以将Scicos-HDL中设计的硬件电路输出成为可综合的Verilog语言代码。
SystemC编译器,可以将Scicos-HDL中设计的硬件电路输出成为可综合的SystemC语言代码。
2.2.6虚拟仪器模块
虚拟仪器模块主要是针对元件电路调试和仿真中经常使用的几种元件和仪器进行虚拟化。但更多的Scicos-HDL中可以Scicos本身众多的元件作为虚拟仪器元件。
8位的ADC 与 DAC 元件
图像的读取和显示元件
示波器元件
波形发生器元件
2.2.7接口模块
接口模块至关重要,它负责了Scicos-HDL仿真引擎与 Scilab\Scicos系统仿真引擎的接口。
接口元件
2.3硬件设计
系统的硬件部分基于NETFPGA实现。
2.3.1NETFPGA
NetFPGA平台详细的组成框图如下:
NetFPGA是由美国斯坦福大学(Stanford University)开发设计的一个低成本可重用硬件平台。一个完整的NetFPGA系统由NetFPGA开发板、双口千兆以太网卡、运行于CentOS操作系统的PC机(或服务器)以及其他软件程序组成,通过各个层次软硬件的互相配合完成复杂的网络结构测试。其中NetFPGA开发板是整个平台的核心,为用户提供了及其丰富的硬件资源。
核心部分是一个Xilinx公司的Virtex-II Pro 50型FPGA,这个比较大的FPGA由用户自定义的逻辑来编程,其核心时钟频率为125 MHz。另外还有一个小的Xilinx Spartan型FPGA用来实现连接主机处理器的PCI接口的控制逻辑。
在外部存储器方面,两片4.5MB的Cypress公司SRAM与FPGA核心逻辑同步运行于125 MHz时钟频率,字长36比特。总共64 MB的两片Micron公司DDR2型SDRAM与FPGA异步运行,其时钟频率为200MHz,字长32比特,存储带宽400 M字/秒(12,800Mb/s)。
在外部接口方面,除了连接PC主机的PCI总线插口,一个Broadcom公司的物理层收发器(PHY)包含了四个千兆位以太网接口,使该平台可以连接四根标准的category 5、category 5e、或category 6以太网双绞线来收发数据分组,并组成网络拓扑;四端口的PHY内部连接着作为FPGA软核的四个千兆位以太网MAC控制器。此外,两个SATA连接口使得系统内部的多个NetFPGA可以通过SATA数据线连接起来,互相之间直接以很高的速度交换数据,而不必再通过PCI总线。
NetFPGA通过PCI总线与主机CPU连接,提供了硬件加速的数据通道,分担CPU的处理任务。主机CPU按照DMA方式读写NetFPGA上的寄存器和存储器来配置NetFPGA的工作模式,并对NetFPGA的工作状态进行监控。
此外,双口千兆以太网卡用来给主机提供本地网络接口,并与NetFPGA连接,实现特殊的用法。
NetFPGA平台的组成框图
NetFPGA开发板的主要硬件组成:
Xilinx Virtex-II Pro 50 FPGA
内嵌两颗高性能PowerPC处理器
国际通用的JTAG测试端口
4.5 MB高速静态随机存取器
内嵌64MB二代内存
4组速率高达1Gbps的标准以太网接口
支持 Cat5E和Cat6标准电缆
NetFPGA系统框图:
(1)内部结构
MicroBlaze内部有32个32位通用寄存器和2个32位特殊寄存器—PC指针和MSR状态标志寄存器。为了提高性能,MicroBlaze还具有指令和数据缓存。所有的指令字长都是32位,有3个操作数和2种寻址模式。指令按功能划分有逻辑运算、算术运算、分支、存储器读/写和特殊指令等。指令执行的流水线是并行流水线,它分为3级流水:取指、译码和执行,如图2所示。
(2)存储结构
MicroBlaze是一种大端存储系统处理器,使用如图3所式的格式来访问存储器。
(3)中断控制和调试接口
MicroBlaze可以响应软件和硬件中断,进行异常处理,通过外加控制逻辑,可以扩展外部中断。利用微处理器调试模块(MDM)IP核,可通过JTAG接口来调试处理器系统。多个MicroBlaze处理器可以用1个MDM来完成多处理器调试。
(4)快速单一连接路接口
MicroBlaze处理器具有8个输入和8个输出快速单一链路接口(FSL)。FSL通道是专用于单一方向的点到点的数据流传输接口。FLS和MicroBlaze的接口宽度是32位。每一个FSL通道都可以发送和接收控制或数据字。
应用EDK(嵌入式开发套件)可以进行MicroBlaze IP核的开发。工具包中集成了硬件平台生产器、软件平台产生器、仿真模型生成器、软件编译器和软件调试工具等。EDK中提供一个集成开发环境XPS(Xilinx平台工作室),以便使用系统提供的所有工具,完成嵌入式系统开发的整个流程。EDK中还带有一些外设接口的IP核,如LMB、OPB总线接口、外部存储控制器、SDRAM控制器、UART、中断控制器、定时器等。利用这些资源,可以构建一个较为完善的嵌入式微处理器系统。
在FPGA上设计的嵌入式系统层次结构为5级。可在最低层硬件资源上开发IP核,或或已开发的IP核搭建嵌入式系统,这是硬件开发部件;开发IP核的设备驱动、应用接口(API)和应用层(算法),属软件开发内容。
利用MicroBlaze构建基本的嵌入式系统。通过标准总线接口—LMB总线和OPB总线的IP核,MicroBlaze就可以和各种外设IP核相连。
EDK中提供的IP核均有相应的设备驱动和应用接口,使用者只需利用相应的函数库,就可以编写自己的应用软件和算法程序。对于用户自己开发的IP核,需要自己编写相应的驱动和接口函数。
2.3.4MAC
MAC的控制采用了XILINX的IP EthernetLITE,简化以太网子系统。对于远程监视或控制应用中所需要的简单网络接口来说,最小化网络子系统就足够了。
MicroBlaze “Lite” Ethernet Subsystem:MicroBlaze以太网简化子系统
简化以太网子系统
利用不带中断的Ethernet Lite IP在简单的查询模式下实现设计就可以了。同时还可以将全部软件,包括简单的应用层,都存储在Xilinx FPGA中的本地存储器中。利用XPS中的基本系统构建向导(Base System Builder wizard)可以容易地创建这样的MicroBlaze设计。
2.3.5HTTP接口
·lwip网络协议栈
Lwip是Light Weight IP的缩写,它是专门为嵌入式系统应用的TCP/IP协议栈。Lwip既可以移植到操作系统上,又可以在无操作系统的情况下独立运行。Lwip支持多网络接口下的IP转发,ICMP协议,UDP协议,TCP协议。不同于一般的TCP/IP协议栈,在Lwip的处理器模型中,所有TCP/IP协议栈都在一个进程当中完成,而不是在每一层都有一个单独的进程。这样TCP/IP协议栈就和操作系统内核分开了,避免了跨层传输数据时频繁的上下文操作。而应用层程序既可以是单独的进程也可以驻留在TCP/IP进程中。如果应用程序是单独的进程,可以通过操作系统的邮箱、消息队列等和TCP/IP进程进行通讯。如果应用层程序驻留TCP/IP进程中,那应用层程序就利用内部回调函数接口和TCP/IP协议栈通讯。
·SOCKET编程
网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符,它具有类似于打开文件的函数调用Socket()。基于操作系统的Socket编程有三种类型:流式套接字,数据报式套接字,原始式套接字。其中只有流式套接字提供一个面向连接的可靠的数据传输服务。
·服务器端HTTP协议的实现
HTTP协议是一种较为常用的应用层协议,它是Hypertext Transfer Protocol的缩写。HTTP协议采用客户端和服务器的模式,通过客户端向服务器发出请求,获得服务器端的响应。在本系统设计中SOPC系统作为HTTP协议的服务器。HTTP请求和响应的报文格式是相似的,报文有一个请求行/状态行和一个头部组成,有时还可能包括主体。在请求行中包括了请求类型,URL,版本等。在响应行中包括状态码,状态短语等。头部格式为:(头部名字:头值)。下面是一个HTTP请求的例子。
请求
应答
GET /usr/bin/image HTTP/1.1
Accept: image/gif
Accept: image/jpeg
HTTP/1.1 200 OK
Date: Mon,08-Jan-05 13:15:14 GMT
Server: Challenger
MIME-Version: 1.0
Content-length: 2048
(图像文件主体)
表4-1 一个HTTP请求的例子
在EDK中,每一个外设IP模块都有自己的软件函数库。利用Libgen工具,将所需外设函数数库的头文件添加进工程中,通过调用这些函数可以操作和控制这些外设。例如对串口的操作如下:
//初始化串口,设置波特率等参数,清空发送和接收缓冲,禁止中断;
使用标准C语言进行应用程序的开发,编写相应的算法软件,完成系统功能。
将编写的程序代码利用mb-gcc编译工具,根据系统的软件一并,生成.ELF文件。在编译链接之前,若选择调试方式,就会在生成文件中加入调试接口SMDstub,进行程序的硬件调试。
利用系统的硬件模型以及RAM块的组织结构文件、ELF文件和用户结束文件,应用FPGA综合实现工具(如Xilinx XST)进行综合,然后下载生成的配置BIT文件到目标板上。利用EDK中提供的GDB调试工具可以进行程序调试。有两种调试方法:软件仿真和硬件调试。软件仿真可以进行程序的功能调试,在开发工具内部就可以进行,不需要硬件支持。硬件调试就是通过JTAG接口或串口(可在硬件设计时选择),连接到目标板上的应用系统中的XMD调试接口,将软件程序下载到系统中进行调试。本课题使用的目标板上的主芯片为Xilinx Spartan IIE 30万门的FPGA,系统时钟为50MHz。实际运行完全满足设计要求。
H TTP 协议及其实现
嵌入式Web 服务器技术的核心是HTTP (超文本传送协议) 引擎。HTTP 是WWW 上的协议。HTTP 协议使Web 服务器和浏览器可以通过Web 交换数据。他是一种请求/ 响应协议,即服务器等待并响应客户方请求。当用户要浏览服务器上的一个网页时,一个HTTP 请求就会从用户的浏览器发到HTTP 服务器。服务器响应这个请求, 把指定的网页传送回来, 用户才看到了网页。
HTTP协议不维护与客户方的连接,他使用可靠的TCP连接,通常采用TCP 的80 端口。客户/ 服务器传输过程可分为4 个基本步骤:浏览器与服务器建立连接;浏览器向服务器请求文档;服务器响应浏览器请求;断开连接。服务器程序开始运行时,主进程就创建一个套接字,
并与主机地址绑定到一起,随后置为被动监听状态,等待客户端连接请求的到来。一旦接收一个连接,就返回一个新的套接字描述符,主程序则开辟一个新的子程序来处理这个新的连接。这样系统可以同时
接收多个客户端的请求。首先创建套接字,将套接字与本地地址和端口绑定,并设置套接字处于监听状态。Web 服务器在接收一个连接请求后,读取用户的请求,根据用户的请求进行相应的处理。当请求位静态文本时,文档直接提交输出,当请求位动态文本时,请求模块自动调用脚本引擎,将脚本替换位现场数据,再提交输出,当请求为带参数的执行命令时,请求解析器调用命令执行模块分析命令并控制监控前端。
Http 设计模型
CPU 本身是以软核的方式实现,其功能可根据需要进行定制,非常灵活。EDK 不但在硬件设计上提供了支持,在软件上也为设计者提供了较好的支持,提供了现成的网络协议栈。加上EDK提供的集成开发环境使得软件开发更加便利。采用这种方式的控制系统具有控制分散、开放性好、使用简单、稳定性好等优点,而且可以通过浏览器进行远程多点监控和远程支持,是未来控制系统发展的一个趋势。
2.3.6IP核封装
设计使用输入GPIO 32位,输出GPIO 32位。
2.3.7设计过程
Software:Xilinx ISE Design Suite 10.1SP3
ISE主界面
新建一个工程
选择FPGA信号和嵌入式处理器型号
选择时钟频率和调试方式
添加 ETHERNET模块、GPIO模块和内存模块
添加系统时钟
设置调试方式和系统测试
系统设置清单
设置完成并保存
设置完成后的工程
定义内存型号
定义系统中断
选择操作系统 petalinux
2.3.8设计截图
设计完成之后的系统设计图
2.3.9编译代码
对于嵌入式LINUX系统代码的编译,本项目采用虚拟机的方式在Ubuntu 下完成。
虚拟机采用开源的 Sun VirtulBox
启动Ubuntu
安装缺少的库
设置环境变量
设置环境变量
Petalinux文件
Petalinux文件
设置Petalinux
转换autoconfig.in的格式。输入命令:
>vi autoconfig.in
将出现vi的编辑界面,在vi的命令行模式输入以下命令:
>:set ff=unix
然后保存退出。输入命令:
>:wq
这样,就完成了autoconfig.in的导入工作。
编译Petalinux
开始编译
编译完成
3实验与分析
3.1实验设计
3.1.1实验题目
24位彩色图像的2值化处理
3.1.2实现结构
根据RGB图像灰度公式 :
Gray =0.299*R+0.587*G+0.114*B (公式1)
Gray = (R^2.2 * 0.2973+ G^2.2* 0.6274+ B^2.2*0.0753)^(1/2.2) (公式2)
本实验中使用 公式1 进行计算
灰度图像二值化方法:
阈值法二值化
实验中采用一个根据参数可调整的设计,以体现本系统在算法可重构方面的优点。
实验原理图
3.2模块分析
本节对于实验中所使用的各个模块进行分析。
3.2.1输入模块
负责图像的输入:
图像读取模块
3.2.2数值计算模块
负责处理图像数据的灰度变化和二值化计算。
3.2.2.1R分量元件
计算: 0.299*R采用ScilabCode组合元件模式实现
引脚设置
功能设置
3.2.2.2G分量元件
计算 0.587*G采用ScilabCode组合元件模式实现
界面设置
功能设置
3.2.2.3B分量计算元件
计算 0.114*B采用ScilabCode组合元件模式实现
引脚设置
功能设置
3.2.2.4RGB_ADD
计算 R分量+G分量+B分量采用IP Core模式实现
引脚设置
功能设置
功能设置
3.2.3数据比较模块
二值化元件 采用ScilabCode组合元件模式实现
引脚设置
功能设置
3.2.4输出模块
图像显示模块
3.3实验过程
3.3.1运行环境
系统软件
Scilab 5.1
Scicos-HDL 0.7 for Windows
系统硬件
Hardware:NETFPGA board
Software:Xilinx ISE Design Suite 10.1SP3
3.3.2安装 Scilab 5.1 for Windows
在 http://www.scilab.org/ 进行下载
注意 只支持 scilab5.1 的windows版,scilab5.1以后的版本中因为Scicos改作xcos , 此版本正在开发中。
3.3.3安装Scicos-HDL
1.Download Scicos-HDL package, save it, like (D:/scicoshdl_nv/scicos-hdl)
2. open "/scilab-5.1/modules/scicos/etc/scicos.start"
before (//end // if %scicos)
please add the following sentence:
exec("D:/bak/scicoshdl_nv/scicos-hdl/ScicosHDL_start.sce");
3. Run Scilab/Scicos, you can use Scicos-HDL now.
Scicos-HDL is a free software.
Under Scilab licence.
Scicos-HDL Copyright (c) 2004-2010
ZhangDong&KangCai (NXU, LIAMA,SCILAB)
scicoshdl@gmail.com
4. all examples :/scicos-hdl/example
5. Contact: scicoshdl@gmail.com
安装完成之后,启动Scilab5.1 , 可以看到Scilab加载的时候,Scicos-HDL已经启动。
Scicos-HDL安装后Scilab启动界面
3.3.4安装SIVP
Scilab图像读取等工作我们使用了SIVP作为工具,因此需要安装SIVP (http://sivp.sourceforge.net/ 下载 )
启动Scilab后,点击Toolboxes菜单的SIVP菜单,启动SIVP.
3.3.5启动Scicos
在Scilab中输入 scicos 命令, 即可启动Scicos
启动scicos
Scicos启动后界面如下:
Scicos界面
点击Palette菜单的Palette选项
Scicos元件菜单
点击以后可以看到Scicos-HDL的各个库文件已经安装
Scicos元件菜单
3.3.6Scicos-HDL
时序逻辑元件库
超级元件库
虚拟仪器库
IP 元件库
组合逻辑元件库
3.3.7打开实验工程
使用Scicos 打开 设计工程
打开实验工程
图像处理工程
加载图片
加载的图片显示
点击simulate菜单中的RUN选项
处理过程开始
处理完成的结果
代码输出
使用VHDL、Verilog、SystemC编译器对设计好的代码进行输出。
输出的VHDL代码
输出的Verilog代码
输出的SystemC代码 (带一个VC++ 2008的工程文件做调试用,Scicos-HDL系统内置 BCC5.5)
硬件连接图
NETFPGA直接通过JTAG接口与计算机相连
NETFPGA与Scicos-HDL协同运算部分,部分完成,本项目未完全完成,尚需继续努力。(略)
3.4提交的内容
本项目的软件部分和设计部分完成,硬件部分部分完成。
提交的内容:
[*] Scicos-HDL 0.7
[*] 实验设计和测试文件 imgray.cos
[*] 实验输出的SystemC 、VHDL、Verilog代码
[*] FPGA代码模板
页:
[1]