基于NETFPGA的可重構(gòu)科學(xué)計(jì)算平臺(tái)
1目標(biāo)和背景
1.1項(xiàng)目目標(biāo)
大規(guī)模科學(xué)問題對(duì)數(shù)學(xué)算法運(yùn)算速度的追求是無止境的,因此需要探索更快速的方法。目前基于FPGA技術(shù)的可重構(gòu)高性能計(jì)算系統(tǒng)已經(jīng)成為研究熱點(diǎn),把數(shù)學(xué)算法轉(zhuǎn)換成硬件邏輯在FPGA中運(yùn)行是一個(gè)好辦法,但數(shù)學(xué)算法轉(zhuǎn)換為硬件邏輯的過程復(fù)雜,而且受限于硬件電路規(guī)模,并不是所有的數(shù)學(xué)算法都適合轉(zhuǎn)換為硬件邏輯。且其存在的一個(gè)普遍的問題就是用戶應(yīng)用編程難度較大,且軟件專用、價(jià)格昂貴。
本項(xiàng)目的研究目標(biāo)是探索和建立圖形化數(shù)學(xué)算法向硬件轉(zhuǎn)換的理論方法,研究開發(fā)數(shù)學(xué)算法向硬件邏輯轉(zhuǎn)換的工具,與科學(xué)計(jì)算軟件相結(jié)合建立起基于FPGA陣列的科學(xué)計(jì)算平臺(tái)原型。研究目標(biāo)結(jié)構(gòu)流程如下:
系統(tǒng)目標(biāo)結(jié)構(gòu)和流程
FPGA 為各種高速算法的實(shí)現(xiàn)提供了一個(gè)很好的平臺(tái),但是同樣引申出的問題是如何快速有效的建立這些算法。在數(shù)學(xué)中最常用的算法表示是流程圖形式,因此本研究針對(duì)如何把數(shù)學(xué)流程圖算法轉(zhuǎn)換成為硬件邏輯以及建立其原型系統(tǒng)進(jìn)行研究,計(jì)劃建立起一個(gè)在數(shù)學(xué)算法的建立和運(yùn)算中對(duì)用戶屏蔽EDA軟件層,使得各種層次用戶均可透明的使用FGPA計(jì)算系統(tǒng),而不用關(guān)心硬件和硬件部署、接口的各個(gè)細(xì)節(jié),實(shí)現(xiàn)PC-FPGA科學(xué)計(jì)算的原型系統(tǒng)。
1.2應(yīng)用背景
大規(guī)??茖W(xué)問題對(duì)數(shù)學(xué)算法運(yùn)算速度的追求是無止境的,因此需要探索更快速的方法。目前基于FPGA技術(shù)的可重構(gòu)高性能計(jì)算系統(tǒng)已經(jīng)成為研究熱點(diǎn),把數(shù)學(xué)算法轉(zhuǎn)換成硬件邏輯在FPGA中運(yùn)行是一個(gè)好辦法,但數(shù)學(xué)算法轉(zhuǎn)換為硬件邏輯的過程復(fù)雜,而且受限于硬件電路規(guī)模,并不是所有的數(shù)學(xué)算法都適合轉(zhuǎn)換為硬件邏輯。且其存在的一個(gè)普遍的問題就是用戶應(yīng)用編程難度較大,且軟件專用、價(jià)格昂貴。
FPGA 為各種高速算法的實(shí)現(xiàn)提供了一個(gè)很好的平臺(tái),但是同樣引申出的問題是如何快速有效的建立這些算法。在數(shù)學(xué)中最常用的算法表示是流程圖形式,因此本研究針對(duì)如何把數(shù)學(xué)流程圖算法轉(zhuǎn)換成為硬件邏輯以及建立其原型系統(tǒng)進(jìn)行研究,計(jì)劃建立起一個(gè)在數(shù)學(xué)算法的建立和運(yùn)算中對(duì)用戶屏蔽EDA軟件層,使得各種層次用戶均可透明的使用FGPA計(jì)算系統(tǒng),而不用關(guān)心硬件和硬件部署、接口的各個(gè)細(xì)節(jié),實(shí)現(xiàn)PC-FPGA科學(xué)計(jì)算的原型系統(tǒng)。
FPGA硬件加速能力
FPGA (現(xiàn)場(chǎng)可編程門陣列)是一種具有大規(guī)模可編程門陣列的器件,不僅具有專用集成電路(ASIC)快速的特點(diǎn),更具有很好的系統(tǒng)實(shí)現(xiàn)的靈活性。FPGA可通過開發(fā)工具實(shí)現(xiàn)在線編程。與CPLD (復(fù)雜可編程邏輯器件)相比, FPGA屬寄存器豐富型結(jié)構(gòu),更加適合于完成時(shí)序邏輯控制。FPGA提供大量的并行資源,在硬件中只需要幾個(gè)時(shí)鐘周期就可以執(zhí)行完函數(shù)功能,而順序操作的處理器則需要成百上千的時(shí)鐘周期。由于只需要很少的時(shí)鐘周期,F(xiàn)PGA即使采用較慢的時(shí)鐘,也能夠提升性能。減小時(shí)鐘速率可以降低功耗,因此,F(xiàn)PGA協(xié)處理器的功耗效率遠(yuǎn)遠(yuǎn)大于處理器。利用當(dāng)今高性能FPGA(例如,Altera的Stratix III系列FPGA)的結(jié)構(gòu)和資源優(yōu)勢(shì),大量的應(yīng)用軟件都可以采用硬件加速協(xié)處理器,大大提升性能,如表所示。相對(duì)于只采用處理器的應(yīng)用,基于FPGA的協(xié)處理器在實(shí)際應(yīng)用中運(yùn)算執(zhí)行速度提高了10倍,速度提高100倍也是很常見的。
FPGA硬件加速列表
注:上表來自 Altera公司.利用FPGA加速實(shí)現(xiàn)高性能計(jì)算 [j]電子產(chǎn)品世界
可重構(gòu)計(jì)算
可重構(gòu)計(jì)算(Reconfigurable Computing,RC),簡(jiǎn)單地說,就是利用FPGA邏輯實(shí)現(xiàn)計(jì)算任務(wù)。有些文獻(xiàn)把它稱為自適應(yīng)計(jì)算(Adaptive Computing),也有的文獻(xiàn)把它稱為FPGA定制計(jì)算(Custom Computing)??芍貥?gòu)計(jì)算的概念早在20世紀(jì)60年代就已提出。在通用微處理器上也運(yùn)用了這一思想,如組件就是利用多路選擇器來實(shí)現(xiàn)功能的變化,而這些組件一般與計(jì)算結(jié)構(gòu)不發(fā)生直接聯(lián)系。目前,可重構(gòu)計(jì)算已有較大發(fā)展,主要目標(biāo)是希望通過硬件可編程,來自適應(yīng)計(jì)算任務(wù)的需求,以期達(dá)到最佳性能;而且這種硬件結(jié)構(gòu)的變化,能實(shí)時(shí)地適應(yīng)計(jì)算任務(wù)要求的變化??芍貥?gòu)計(jì)算的底層技術(shù)是FPGA編程技術(shù),可重構(gòu)計(jì)算的優(yōu)點(diǎn)是硬件設(shè)計(jì)的實(shí)現(xiàn)基于軟件的靈活性,并且保持了傳統(tǒng)的基于硬件方法的執(zhí)行速度。其體系結(jié)構(gòu)可變的特點(diǎn),很好地適應(yīng)了實(shí)際應(yīng)用中的多元化需求。
國(guó)際現(xiàn)狀
國(guó)際上主要有XtremeData,Nallatech,美國(guó)星橋公司和蘇格蘭愛丁堡大學(xué)FPGA高性能計(jì)算聯(lián)盟研究類似產(chǎn)品。
XtremeData:(www.xtremedatainc.com)
采用了多片Altera® Stratix® III FPGA,并且使用Intel QuickAssist技術(shù),XtremeData XD2000i In-Socket加速器(ISA)展示了這一強(qiáng)大的1066 MHz協(xié)處理解決方案。Stratix III FPGA的快速架構(gòu)和I/O功能在這一模塊中非常有效,實(shí)現(xiàn)了穩(wěn)定的1,066 MHz FSB速率。XD2000i模塊相對(duì)于目前的GPU還具有功耗、體積、存儲(chǔ)器誤碼校正編碼(ECC)等優(yōu)勢(shì):功耗低于60W,模塊可以緊密安裝在刀片外形封裝中。XD2000i模塊結(jié)合了Intel Xeon 5000系列處理器和Stratix III FPGA協(xié)處理器,使客戶能夠使用性能最好的FSB加速器,顯著降低了成本和功耗,產(chǎn)品更加緊湊。XD2000i模塊采用了Stratix III FPGA,在基于Intel的平臺(tái)上,實(shí)現(xiàn)的某些算法具有優(yōu)異的性能。Intel QuickAssist技術(shù)工作臺(tái)為Altera和XtremeData等公司提供了創(chuàng)新的協(xié)處理器解決方案開發(fā)環(huán)境。Intel提供基于FPGA的緊耦合In-socket加速器。將基于Stratix III FPGA的XD2000i插入到Intel Xeon處理器插槽中,使協(xié)處理器能夠與存儲(chǔ)器和主處理器實(shí)現(xiàn)高速鏈接,不需要改動(dòng)電路板,從而為設(shè)計(jì)人員提供了簡(jiǎn)單的硬件集成途徑。今年第三季度將提供新版XD2000i模塊,四插槽電路板通過單獨(dú)的FSB處理器互聯(lián)支持500K邏輯單元(LE)以及1,536個(gè)乘法器。
Nallatech:(http://www.nallatech.com)
該公司一直致力于高性能FPGA計(jì)算技術(shù)的研究與開發(fā),其解決方案包含了目前業(yè)內(nèi)FPGA最成熟和先進(jìn)的開發(fā)技術(shù),在技術(shù)的領(lǐng)先性和應(yīng)用的普遍性方面取得了一個(gè)很好的平衡。模塊化的硬件平臺(tái),提供一個(gè)由多個(gè)FPGA、內(nèi)存、數(shù)模接口和串行接口組合而成的高帶寬、內(nèi)部連接的結(jié)構(gòu)。具體形式有PCI,VME,cPCI 和PCI-104等形式。FUSE系統(tǒng)軟件可以運(yùn)行在包括Windows,Linux和VxWorks等操作系統(tǒng)的主機(jī)系統(tǒng)上,通過程序環(huán)境中的APIs,提供配置、控制以及和FPGA運(yùn)算平臺(tái)通信等功能。提供了在主機(jī)系統(tǒng)和Nallatech FPGA運(yùn)算平臺(tái)之間進(jìn)行配置,控制和通信的功能,支持最常用的操作系統(tǒng)和編程語言。支持的操作系統(tǒng)包括Linux,Windows和VxWorks; FUSE APIs,包括支持DIMEtalk的APIs,支持C/C++ 和Java的APIs; 在單個(gè)系統(tǒng)中支持多個(gè)FPGA平臺(tái); FUSE Toolbox for MATLAB提供了Matlab和FPGA硬件平臺(tái)的直接接口; 支持硬件和主機(jī)之間接口的TCL腳本語言。
美國(guó)星橋公司
星橋公司以175000-700000美元的價(jià)格銷售4種型號(hào)的FPGA“超計(jì)算機(jī)”,被稱為HC-62的“超計(jì)算機(jī)”的售價(jià)為350000美元,配置11個(gè)Xilinx公司生產(chǎn)的價(jià)格為3000美元的FPGA芯片,它每秒能夠完成2000億次浮點(diǎn)運(yùn)算。售價(jià)為700000美元型號(hào)的“超計(jì)算機(jī)”包含有22有個(gè)Xilinx公司的芯片,每秒能夠完成4000億次浮點(diǎn)運(yùn)算。另外,客戶還必須購買Viva的許可證,每人每年的價(jià)格為45000美元。
蘇格蘭愛丁堡大學(xué)FPGA高性能計(jì)算聯(lián)盟的Maxwell
Maxwell只占用了愛丁堡大學(xué)并行計(jì)算中心的兩個(gè)機(jī)柜。這一技術(shù)目前存在的問題是,編程非常困難。導(dǎo)致Maxwell還很難投入商業(yè)使用。但Maxwell已經(jīng)試運(yùn)行了來自石油、金融、醫(yī)療成像等行業(yè)對(duì)處理能力要求較高的應(yīng)用軟件。在運(yùn)行金融行業(yè)的軟件時(shí),Maxwell的速度是使用標(biāo)準(zhǔn)處理器的相似系統(tǒng)的2-300倍。Maxwell采用了Xilinx的FPGA技術(shù)。
國(guó)內(nèi)現(xiàn)狀
在基于FPGA的可重構(gòu)高性能計(jì)算的研究領(lǐng)域,國(guó)內(nèi)主要有中國(guó)科學(xué)技術(shù)大學(xué)等少數(shù)幾所大學(xué)的相關(guān)教授在研究FPGA可重構(gòu)計(jì)算的結(jié)構(gòu)和算法,國(guó)內(nèi)的FPGA可重構(gòu)計(jì)算還處于起步階段,與國(guó)際水平還有很大差距,尚無通用成品運(yùn)算平臺(tái),國(guó)內(nèi)主要研究現(xiàn)狀比較見下表。
目前一般情況下對(duì)于需要使用PC來解決一個(gè)科學(xué)計(jì)算的問題,首先會(huì)使用C、Matlab或者其他語言來實(shí)現(xiàn)這個(gè)算法,變成程序,程序與操作系統(tǒng)進(jìn)行交互運(yùn)行,操作系統(tǒng)與機(jī)器碼在CPU 的物理層上運(yùn)行 ,而CPU 層則是工作在硬件邏輯層之上 . 可以看到,運(yùn)算工作于3個(gè)層次,如果有辦法讓我們的算法直接工作在硬件邏輯層,那么算法的運(yùn)算速度將大大提高。
科學(xué)計(jì)算軟件如Matlab、Scilab是廣大科研工作者廣泛使用的數(shù)學(xué)工具,科研中大量的科學(xué)計(jì)算問題都是由科學(xué)計(jì)算語言來描述的,本研究的最終目的是采用基于FPGA的可重構(gòu)計(jì)算技術(shù)對(duì)科學(xué)計(jì)算軟件進(jìn)行加速,使其能在PC平臺(tái)上完成高性能科學(xué)計(jì)算。
這項(xiàng)研究最核心的問題就是如何把科學(xué)計(jì)算問題轉(zhuǎn)換成為硬件邏輯(可綜合)。
數(shù)學(xué)算法在PC上運(yùn)行和在FPGA上運(yùn)行情況對(duì)比
隨著微電子工藝水平的提高和EDA工具的進(jìn)步,目前主流商用FPGA芯片的集成規(guī)模已經(jīng)超過I千萬等效門,而且還在按照摩爾定律增加,利用這些芯片解決問題的能力越來越強(qiáng)。另一方面,隨著應(yīng)用要求的發(fā)展,可重構(gòu)計(jì)算技術(shù)所處理問題的規(guī)模越來越大,系統(tǒng)也變得越來越復(fù)雜,同時(shí)對(duì)系統(tǒng)設(shè)計(jì)時(shí)間的要求卻是越來越短,迫切需要開發(fā)和使用與此需求相適應(yīng)的支持電路實(shí)時(shí)重構(gòu)技術(shù)的高級(jí)設(shè)計(jì)方法和工具來充分發(fā)揮現(xiàn)有FPGA的能力。目前可重構(gòu)計(jì)算面臨的主要問題是大量設(shè)計(jì)工作依靠手工方法完成,并要求用戶掌握算法、并行計(jì)算、硬件描述語言和電路設(shè)計(jì)等大量相關(guān)知識(shí)及豐富的設(shè)計(jì)經(jīng)驗(yàn),設(shè)計(jì)難度很大,設(shè)計(jì)周期較長(zhǎng),嚴(yán)重制約著可重構(gòu)計(jì)算技術(shù)的推廣和普及。
目前國(guó)際上雖然已經(jīng)有一些面向可編程芯片設(shè)計(jì)的高級(jí)工具,但基本上是借鑒ASIC設(shè)計(jì)方法,不但缺乏對(duì)實(shí)時(shí)可重構(gòu)的支持,而且最后自動(dòng)生成的電路往往難以滿足用戶較為嚴(yán)格的時(shí)序要求。本研究設(shè)計(jì)的支持電路實(shí)時(shí)重構(gòu)的科學(xué)計(jì)算平臺(tái)為用戶提供一個(gè)高級(jí)語言設(shè)計(jì)工具,降低用戶的使用難度,大大加快可重構(gòu)計(jì)算電路設(shè)計(jì)的速度,必將成為可重構(gòu)計(jì)算技術(shù)發(fā)展的方向,因此本設(shè)計(jì)是一個(gè)極具前途的研究課題。本系統(tǒng)利用FPGA的可重配置特性,計(jì)算機(jī)與FPGA運(yùn)算相結(jié)合的計(jì)算裝置,如果能與支持電路實(shí)時(shí)重構(gòu)的編譯技術(shù)相結(jié)合,將能很輕松地設(shè)計(jì)出小規(guī)模、高性能、低成本、低功耗的硬件平臺(tái),本系統(tǒng)探索和建立數(shù)學(xué)算法向硬件邏輯轉(zhuǎn)換的理論方法,對(duì)于當(dāng)前的可重構(gòu)計(jì)算、高速信號(hào)處理、FPGA應(yīng)用設(shè)計(jì)乃至IC 設(shè)計(jì)都有著重要意義 ,其關(guān)鍵的問題在于給用戶提供數(shù)學(xué)算法向硬件邏輯轉(zhuǎn)換的工具,以此來幫助用戶更加快速的建立應(yīng)用。
研究的意義
探索和建立數(shù)學(xué)算法向硬件邏輯轉(zhuǎn)換的理論方法,對(duì)于當(dāng)前的可重構(gòu)計(jì)算、高速信號(hào)處理、FPGA應(yīng)用設(shè)計(jì)乃至IC 設(shè)計(jì)都有著重要意義 ,其關(guān)鍵的問題在于給用戶提供數(shù)學(xué)算法向硬件邏輯轉(zhuǎn)換的工具,以此來幫助用戶更加快速的建立應(yīng)用。基于FPGA的可重構(gòu)高性能計(jì)算將有可能大大降低對(duì)于超級(jí)計(jì)算機(jī)的需求,大量的科學(xué)計(jì)算問題將有可能提供FPGA的硬件邏輯得以實(shí)現(xiàn) . 同時(shí) ,基于FPGA的可重構(gòu)高性能計(jì)算系統(tǒng)的硬件成本相比高性能超級(jí)計(jì)算機(jī)來說較低,更加有利于普及和推廣。
1.3研發(fā)計(jì)劃
科學(xué)計(jì)算工具的研究一直是科學(xué)研究的前沿領(lǐng)域,其目前主要方向集中在更高性能的超級(jí)計(jì)算機(jī)構(gòu)建方面,其主要是利用CPU陣列的規(guī)模優(yōu)勢(shì)來實(shí)現(xiàn)高性能。本研究采用FPGA可重構(gòu)數(shù)字電路硬件加速的方法在Scilab中實(shí)現(xiàn)高性能科學(xué)計(jì)算,研究使用圖形化方法把數(shù)學(xué)算法轉(zhuǎn)換到硬件邏輯的方法和軟件,目標(biāo)實(shí)現(xiàn)PC與FPGA相結(jié)合的科學(xué)計(jì)算系統(tǒng):實(shí)現(xiàn) Scilab - FPGA運(yùn)算任務(wù)的協(xié)同工作 ,對(duì)于用戶來說整個(gè)系統(tǒng)透明,用戶使用Scilab/Scicos編程,硬件生成和加速工作由系統(tǒng)自動(dòng)完成,整個(gè)系統(tǒng)構(gòu)成一個(gè)具備硬件加速功能的科學(xué)計(jì)算平臺(tái)。
基于前期開發(fā)的Scilab/Scicos-HDL軟件,進(jìn)一步完善,構(gòu)建起配套的FPGA可重構(gòu)硬件環(huán)境,建立Scilab-FPGA軟硬件聯(lián)合仿真運(yùn)算平臺(tái),并且在其上建立大規(guī)??茖W(xué)運(yùn)算應(yīng)用)。
開發(fā)與Scilab系統(tǒng)相互通信交FPGA硬件模塊,實(shí)現(xiàn)Scilab/Scicos-HDL與FPGA硬件模塊聯(lián)合仿真;
在該系統(tǒng)上設(shè)計(jì)建立大規(guī)??茖W(xué)計(jì)算應(yīng)用來進(jìn)行大規(guī)模矩陣運(yùn)算等??尚行裕夯?年時(shí)間的前期工作,課題組已經(jīng)開發(fā)出 科學(xué)計(jì)算算法(代碼方式和圖形化方式)轉(zhuǎn)換為 硬件描述語言(支持 VHDL、Verilog、 SystemC)的軟件,本項(xiàng)目申請(qǐng)所要完成的是其FPGA硬件模塊和其協(xié)同工作方法有較高的可行性 。
本項(xiàng)目建在在充分的前期工作基礎(chǔ)之上。項(xiàng)目組成員自主開發(fā)了在開源的科學(xué)計(jì)算軟件上進(jìn)行硬件電路算法設(shè)計(jì)和仿真的軟件Scicos-HDL (2005-2010). 該項(xiàng)目的研究一直在中科院自動(dòng)化所中法實(shí)驗(yàn)室和法國(guó) INRIA的支持下進(jìn)行。
目前Scicos-HDL 0.7運(yùn)行在Windows平臺(tái)。具備5個(gè)硬件電路仿真庫,包括50多個(gè)硬件電路仿真元件和VHDL、verilog、systemc語言編譯器模塊。當(dāng)前可以完成組合邏輯電路設(shè)計(jì)、時(shí)序邏輯電路設(shè)計(jì)和基本的數(shù)字信號(hào)處理,支持VHDL、verilog、SystemC 3種硬件描述語言,支持自動(dòng)文檔生成,并且生成的HDL代碼均為可綜合。Scicos-HDL還支持與其它Open Source的EDA軟件進(jìn)行集成,構(gòu)建完整的設(shè)計(jì)工具鏈。用戶在Scilab / Scicos環(huán)境下對(duì)電子電路進(jìn)行高級(jí)描述,并可對(duì)自己的設(shè)計(jì)方案進(jìn)行系統(tǒng)仿真和修正,然后通過編譯生成基于VHDL的RTL級(jí)結(jié)構(gòu)模型。該模型可通過各種商業(yè)化的IC-CAD接口,最終產(chǎn)生對(duì)應(yīng)于所描述系統(tǒng)的硬件平臺(tái)。使用這樣的開發(fā)工具,用戶在設(shè)計(jì)集成電路系統(tǒng)時(shí),即使不了解硬件電路的內(nèi)部細(xì)節(jié),甚至不了解 HDL語言,也可以根據(jù)自己的需要進(jìn)行電子電路的設(shè)計(jì)。還可以使設(shè)計(jì)數(shù)字電路和數(shù)字信號(hào)處理電路的工作變得快捷,門檻更低。
Scicos-HDL元件庫示例
課題組前期與中科院自動(dòng)化所中法實(shí)驗(yàn)室(LIAMA)和法國(guó)INRIA Scilab組織在科學(xué)計(jì)算算法轉(zhuǎn)換到硬件描述語言方面有著長(zhǎng)期合作基礎(chǔ),合作開發(fā)Scilab/Scicos-HDL軟件系統(tǒng)已經(jīng)數(shù)年,在開源領(lǐng)域有一定的知名度。本項(xiàng)目設(shè)計(jì)把科學(xué)計(jì)算軟件與FPGA技術(shù)可重構(gòu)系統(tǒng)相結(jié)合,構(gòu)建出低成本和易于使用的高性能科學(xué)計(jì)算平臺(tái)。本系統(tǒng)研究實(shí)現(xiàn)了基于FPGA可重構(gòu)計(jì)算技術(shù)的科學(xué)計(jì)算平臺(tái)系統(tǒng)原型,實(shí)現(xiàn)了Scilab-FPGA運(yùn)算任務(wù)的協(xié)同工作,對(duì)于廣大用戶,整個(gè)系統(tǒng)透明,將其中的數(shù)學(xué)算法轉(zhuǎn)換為數(shù)字電路硬件邏輯的理論方法和軟件,開發(fā)與Scilab系統(tǒng)相互通信交互的FPGA硬件模塊,實(shí)現(xiàn)Scilab/scicos-HDL與FPGA硬件模塊聯(lián)合仿真,在高性能科學(xué)計(jì)算領(lǐng)域,有較強(qiáng)的應(yīng)用價(jià)值。
1.4研究意義
探索和建立數(shù)學(xué)算法向硬件邏輯轉(zhuǎn)換的理論方法,對(duì)于當(dāng)前的可重構(gòu)計(jì)算、高速信號(hào)處理、FPGA應(yīng)用設(shè)計(jì)乃至IC 設(shè)計(jì)都有著重要意義 ,其關(guān)鍵的問題在于給用戶提供數(shù)學(xué)算法向硬件邏輯轉(zhuǎn)換的工具,以此來幫助用戶更加快速的建立應(yīng)用。基于FPGA的可重構(gòu)高性能計(jì)算將有可能大大降低對(duì)于超級(jí)計(jì)算機(jī)的需求,大量的科學(xué)計(jì)算問題將有可能提供FPGA的硬件邏輯得以實(shí)現(xiàn) . 同時(shí) ,基于FPGA的可重構(gòu)高性能計(jì)算系統(tǒng)的硬件成本相比高性能超級(jí)計(jì)算機(jī)來說較低,更加有利于普及和推廣。
2設(shè)計(jì)與實(shí)現(xiàn)
本章來說明對(duì)于項(xiàng)目整個(gè)系統(tǒng)的設(shè)計(jì)結(jié)構(gòu)進(jìn)行了說明,并且說明了目前實(shí)現(xiàn)的部分。
2.1總體設(shè)計(jì)
2.1.1總體設(shè)計(jì)圖
系統(tǒng)中 Scicos-HDL模塊負(fù)責(zé) 硬件電路的設(shè)計(jì)、仿真和HDL代碼輸出。當(dāng)用戶完成了一個(gè) 硬件設(shè)計(jì)后 ,可以先行在Scicos-HDL中進(jìn)行軟件仿真,仿真完成后,用戶可以導(dǎo)出VHDL、Verilog、SystemC這三種硬件描述語言的代碼(可綜合)。導(dǎo)出的HDL代碼經(jīng)過用戶手動(dòng)處理,下載到NETFPGA板子上后,通過千兆以太網(wǎng)接口,與Scicos-HDL進(jìn)行軟硬件聯(lián)合仿真。
在NETFPGA板子上,通過以太網(wǎng)連接MicroBlaze處理核心,使用HTTP協(xié)議進(jìn)行數(shù)據(jù)交換Scicos-HDL導(dǎo)出的代碼以用戶自定義IP的方式加入到系統(tǒng)中。
2.1.2技術(shù)發(fā)展路線
本節(jié)來闡述項(xiàng)目技術(shù)的基本原理和發(fā)展的技術(shù)路線。
(1)數(shù)學(xué)算法轉(zhuǎn)換成硬件邏輯原理
圖形化的算法描述和仿真是一種常見的算法表達(dá)方式,其也最接近于實(shí)物性質(zhì)的描述,目前計(jì)算機(jī)軟件中采用圖形化仿真方法的很多,如MatlAB,SystemView、labView等.本研究設(shè)計(jì)了一套基于硬件知識(shí)的圖形化算法仿真機(jī)制,使得用戶在軟件中根據(jù)算法需要畫出算法流程圖,由系統(tǒng)處理后形成硬件邏輯描述,其基本的結(jié)構(gòu)描述如下:
用途 | 計(jì)算機(jī)程序結(jié)構(gòu) | FPGA結(jié)構(gòu) |
加法 | + 運(yùn)算 | 硬件加法器 |
乘法 | X 運(yùn)算 | 硬件乘法器 |
循環(huán)結(jié)構(gòu) | FOR 循環(huán) | 計(jì)數(shù)器 |
判斷結(jié)構(gòu) | IF | 數(shù)值比較器+數(shù)據(jù)選擇器 |
遞增結(jié)構(gòu) | i++ | 加法計(jì)數(shù)器 |
遞減結(jié)構(gòu) | i-- | 減法計(jì)數(shù)器 |
矩陣加法 | 多條程序?qū)崿F(xiàn) | 矩陣加法器 |
矩陣乘法 | 多條程序?qū)崿F(xiàn) | 矩陣乘法器v |
賦值 | 賦值語句 | 寄存器 |
功能模塊 | 函數(shù) | 算法硬件模塊 |
數(shù)組 | 數(shù)組 | RAM |
計(jì)算機(jī)程序結(jié)構(gòu)與FPGA程序結(jié)構(gòu)對(duì)比
通過可以看出在程序設(shè)計(jì)中能夠?qū)崿F(xiàn)的程序基本結(jié)構(gòu)在FPGA均有對(duì)應(yīng)的硬件實(shí)現(xiàn)。本系統(tǒng)中數(shù)學(xué)算法轉(zhuǎn)換成硬件邏輯是通過建立圖形化運(yùn)算機(jī)制基礎(chǔ)上:添加FPGA流水線運(yùn)算基本元件、使用圖形化方法連接各個(gè)元件構(gòu)成算法邏輯圖、把算法邏輯圖轉(zhuǎn)換成為可綜合HDL描述這三個(gè)步驟進(jìn)行完成。
(2)協(xié)同工作中FPGA模塊并行計(jì)算
FPGA運(yùn)算與計(jì)算機(jī)運(yùn)算的一個(gè)很大的區(qū)別在于FPGA中的各個(gè)運(yùn)算單元都是實(shí)際硬件存在而計(jì)算機(jī)運(yùn)算中的各個(gè)運(yùn)算單元主要是在軟件系統(tǒng)中建立順序執(zhí)行,因此FPGA可以實(shí)現(xiàn)所有運(yùn)算單元的協(xié)調(diào)并行計(jì)算,但是FPGA并不能自動(dòng)完成并行計(jì)算任務(wù),這需要采用流水線技術(shù)來完成。
流水線處理源自現(xiàn)代工業(yè)生產(chǎn)裝配線上的流水作業(yè),是指將待處理的任務(wù)分解為相對(duì)獨(dú)立的、可以順序執(zhí)行的,而又相互關(guān)聯(lián)的一個(gè)個(gè)子任務(wù).圖1 是采用流水線技術(shù)的一個(gè)指令集的操作過程,我們將某一操作分為4 個(gè)子任務(wù):取指令I(lǐng)1 ,譯碼I2 ,取操作數(shù)I3 和運(yùn)算I4 ,假如每個(gè)操作執(zhí)行的時(shí)間均為T ,則執(zhí)行4 個(gè)操作的執(zhí)行時(shí)間為4 T ,將這4 個(gè)子任務(wù)在時(shí)間上重疊,用4 個(gè)子部件來完成,相應(yīng)的4 個(gè)子部件連接成串行方式,每個(gè)子部件執(zhí)行的時(shí)間為T ,每隔T 時(shí)間就可輸出一個(gè)操作處理結(jié)果,平均速度提高了4 倍,在加入適當(dāng)?shù)霓D(zhuǎn)移控制之后,即成為流水線操作的工作方式.
采用流水線技術(shù)的一個(gè)指令集的操作
采用流水線技術(shù),可以大大提高系統(tǒng)運(yùn)行速度,特別適合于需要進(jìn)行大批量簡(jiǎn)單運(yùn)算的場(chǎng)合,如數(shù)字信號(hào)處理中的卷積操作、FIR 或FFT濾波器等。本研究中作為算法流程機(jī)制的FPGA模塊均采用流水線結(jié)構(gòu),其基本結(jié)構(gòu)如下:
基本算法流程模塊
一個(gè)基本的算法流程模塊采用前寄存器和后寄存器,使得系統(tǒng)模塊的工作只取決于自身的運(yùn)算是否完成,在整體中相對(duì)獨(dú)立,系統(tǒng)中有多個(gè)此類算法模塊是獨(dú)立并行工作。
(3) FPGA-PC協(xié)同科學(xué)計(jì)算
此項(xiàng)包含2個(gè)方面的內(nèi)容:一個(gè)是FPGA算法系統(tǒng)中本身就有支持科學(xué)計(jì)算的算法模塊;一個(gè)是FPGA運(yùn)算系統(tǒng)可以和計(jì)算機(jī)端的科學(xué)計(jì)算系統(tǒng)連接起來完成FPGA-PC協(xié)同科學(xué)計(jì)算工作。
對(duì)于第一個(gè)方面本研究在系統(tǒng)的元件庫中設(shè)置了矩陣運(yùn)算元件庫在完成基本的矩陣運(yùn)算:矩陣運(yùn)算是科學(xué)計(jì)算中的一個(gè)重要方法,要實(shí)現(xiàn)高性能的科學(xué)計(jì)算在系統(tǒng)內(nèi)部就必須配置多種硬件矩陣運(yùn)算處理模塊,如矩陣硬件加法器、乘法器。
對(duì)于第二個(gè)問題,本研究使用netfpga硬件系統(tǒng),與開源的科學(xué)計(jì)算軟件Scilab進(jìn)行接口,實(shí)現(xiàn)FPGA運(yùn)算系統(tǒng)與科學(xué)計(jì)算系統(tǒng)協(xié)同工作。
本研究中系統(tǒng)軟件基于Scilab/Scicos開發(fā),完成三個(gè)主要功能:
使用Scilab/Scicos進(jìn)行圖形化算法設(shè)計(jì);
把圖形化數(shù)學(xué)算法轉(zhuǎn)換成為硬件邏輯的功能;支持 VHDL、Verilog、 SystemC 三種硬件描述語言,生成的硬件邏輯可綜合;
與NETFPGA硬件系統(tǒng)實(shí)現(xiàn) FPGA-PC協(xié)同任務(wù)運(yùn)算;
2.2軟件設(shè)計(jì)
軟件模塊的主體功能是硬件設(shè)計(jì)、仿真、輸出、軟硬件聯(lián)合運(yùn)算。
軟件模塊的結(jié)構(gòu)如下
軟件結(jié)構(gòu)圖
軟件系統(tǒng)目前已經(jīng)實(shí)現(xiàn)的有組合邏輯元件庫、時(shí)序邏輯元件庫、虛擬儀器庫、VHDL編譯器、Verilog編譯器、SystemC編譯器。
組合邏輯元件庫
時(shí)序邏輯元件庫 超級(jí)元件庫
虛擬儀器庫
IP 元件庫
2.2.1組合邏輯元件
所有的組合邏輯元件,均派生自ScilabCode組合模塊 ,使用者只要使用scilab 語言在ScilabCode組合模塊 中定義模塊功能 和 模塊的引腳 ,系統(tǒng)會(huì)自動(dòng)生成相應(yīng)的硬件描述。
例如:
用戶打開一個(gè)ScilabCode組合模塊 放置于 設(shè)計(jì)區(qū)后 ,點(diǎn)擊元件的SET菜單,彈出界面進(jìn)行引腳的功能的設(shè)置:
組合邏輯元件引腳設(shè)置界面
組合邏輯元件功能設(shè)置界面(使用純Scilab語言描述)
設(shè)置完成點(diǎn)擊“QUIT”按鈕,系統(tǒng)自動(dòng)生成元件
組合元件 74ls04
2.2.2時(shí)序邏輯元件
所有的時(shí)序邏輯元件,均派生自ScilabCode時(shí)序模塊 ,使用者只要使用scilab 語言在ScilabCode時(shí)序模塊 中定義模塊功能 和 模塊的引腳 ,系統(tǒng)會(huì)自動(dòng)生成相應(yīng)的硬件描述。
例如:
用戶打開一個(gè)ScilabCode時(shí)序模塊 放置于 設(shè)計(jì)區(qū)后 ,點(diǎn)擊元件的SET菜單,彈出界面進(jìn)行引腳的功能的設(shè)置:
時(shí)序邏輯元件引腳設(shè)置界面
時(shí)序邏輯元件功能設(shè)置界面(使用Scilab語言描述,狀態(tài)轉(zhuǎn)換圖)
設(shè)置完成點(diǎn)擊“QUIT”按鈕,系統(tǒng)自動(dòng)生成元件
時(shí)序邏輯元件例子
2.2.3IP Core元件
所有的IP Core元件,均派生自IP Core模塊 ,使用者只要在IP Core模塊 中定義模塊功能 和 模塊的引腳 ,系統(tǒng)會(huì)自動(dòng)生成元件。
例如:
用戶打開一個(gè)IP Core模塊放置于 設(shè)計(jì)區(qū)后 ,點(diǎn)擊元件的SET菜單,彈出界面進(jìn)行引腳的功能的設(shè)置:
IP Core元件引腳設(shè)置界面
進(jìn)行引腳設(shè)置以后,系統(tǒng)會(huì)自動(dòng)生成VHDL、Verilog、SystemC這三種硬件描述語言的模板,用戶根據(jù)所需功能修改模板,即可完成模塊設(shè)計(jì)。
VHDL語言模板
Verilog語言模板
SystemC語言模板- 頭文件
SystemC語言模板- 程序文件
編輯完成,點(diǎn)擊:“QUIT”按鈕,系統(tǒng)后自動(dòng)完成元件的建立。
IP Core元件例子
2.2.4超級(jí)模塊元件
超級(jí)元件是指由多種不同的元件組合起來的元件,用戶可以根據(jù)需要使用 組合邏輯元件、時(shí)序邏輯元件、IP Core元件 來建立超級(jí)元件,另外超級(jí)元件也可由數(shù)個(gè)超級(jí)元件組成。
超級(jí)元件內(nèi)部
超級(jí)邏輯元件例子
2.2.5編譯器模塊
VHDL編譯器,可以將Scicos-HDL中設(shè)計(jì)的硬件電路輸出成為可綜合的VHDL語言代碼。
Verilog編譯器,可以將Scicos-HDL中設(shè)計(jì)的硬件電路輸出成為可綜合的Verilog語言代碼。
SystemC編譯器,可以將Scicos-HDL中設(shè)計(jì)的硬件電路輸出成為可綜合的SystemC語言代碼。
2.2.6虛擬儀器模塊
虛擬儀器模塊主要是針對(duì)元件電路調(diào)試和仿真中經(jīng)常使用的幾種元件和儀器進(jìn)行虛擬化。但更多的Scicos-HDL中可以Scicos本身眾多的元件作為虛擬儀器元件。
8位的ADC 與 DAC 元件
圖像的讀取和顯示元件
示波器元件
波形發(fā)生器元件
2.2.7接口模塊
接口模塊至關(guān)重要,它負(fù)責(zé)了Scicos-HDL仿真引擎與 ScilabScicos系統(tǒng)仿真引擎的接口。
接口元件
2.3硬件設(shè)計(jì)
系統(tǒng)的硬件部分基于NETFPGA實(shí)現(xiàn)。
2.3.1NETFPGA
NetFPGA平臺(tái)詳細(xì)的組成框圖如下:
NetFPGA是由美國(guó)斯坦福大學(xué)(Stanford University)開發(fā)設(shè)計(jì)的一個(gè)低成本可重用硬件平臺(tái)。一個(gè)完整的NetFPGA系統(tǒng)由NetFPGA開發(fā)板、雙口千兆以太網(wǎng)卡、運(yùn)行于CentOS操作系統(tǒng)的PC機(jī)(或服務(wù)器)以及其他軟件程序組成,通過各個(gè)層次軟硬件的互相配合完成復(fù)雜的網(wǎng)絡(luò)結(jié)構(gòu)測(cè)試。其中NetFPGA開發(fā)板是整個(gè)平臺(tái)的核心,為用戶提供了及其豐富的硬件資源。
核心部分是一個(gè)Xilinx公司的Virtex-II Pro 50型FPGA,這個(gè)比較大的FPGA由用戶自定義的邏輯來編程,其核心時(shí)鐘頻率為125 MHz。另外還有一個(gè)小的Xilinx Spartan型FPGA用來實(shí)現(xiàn)連接主機(jī)處理器的PCI接口的控制邏輯。
在外部存儲(chǔ)器方面,兩片4.5MB的Cypress公司SRAM與FPGA核心邏輯同步運(yùn)行于125 MHz時(shí)鐘頻率,字長(zhǎng)36比特。總共64 MB的兩片Micron公司DDR2型SDRAM與FPGA異步運(yùn)行,其時(shí)鐘頻率為200MHz,字長(zhǎng)32比特,存儲(chǔ)帶寬400 M字/秒(12,800Mb/s)。
在外部接口方面,除了連接PC主機(jī)的PCI總線插口,一個(gè)Broadcom公司的物理層收發(fā)器(PHY)包含了四個(gè)千兆位以太網(wǎng)接口,使該平臺(tái)可以連接四根標(biāo)準(zhǔn)的category 5、category 5e、或category 6以太網(wǎng)雙絞線來收發(fā)數(shù)據(jù)分組,并組成網(wǎng)絡(luò)拓?fù)?;四端口的PHY內(nèi)部連接著作為FPGA軟核的四個(gè)千兆位以太網(wǎng)MAC控制器。此外,兩個(gè)SATA連接口使得系統(tǒng)內(nèi)部的多個(gè)NetFPGA可以通過SATA數(shù)據(jù)線連接起來,互相之間直接以很高的速度交換數(shù)據(jù),而不必再通過PCI總線。
NetFPGA通過PCI總線與主機(jī)CPU連接,提供了硬件加速的數(shù)據(jù)通道,分擔(dān)CPU的處理任務(wù)。主機(jī)CPU按照DMA方式讀寫NetFPGA上的寄存器和存儲(chǔ)器來配置NetFPGA的工作模式,并對(duì)NetFPGA的工作狀態(tài)進(jìn)行監(jiān)控。
此外,雙口千兆以太網(wǎng)卡用來給主機(jī)提供本地網(wǎng)絡(luò)接口,并與NetFPGA連接,實(shí)現(xiàn)特殊的用法。
NetFPGA平臺(tái)的組成框圖
NetFPGA開發(fā)板的主要硬件組成:
Xilinx Virtex-II Pro 50 FPGA
內(nèi)嵌兩顆高性能PowerPC處理器
國(guó)際通用的JTAG測(cè)試端口
4.5 MB高速靜態(tài)隨機(jī)存取器
內(nèi)嵌64MB二代內(nèi)存
4組速率高達(dá)1Gbps的標(biāo)準(zhǔn)以太網(wǎng)接口
支持 Cat5E和Cat6標(biāo)準(zhǔn)電纜
NetFPGA系統(tǒng)框圖:
2.3.2硬件結(jié)構(gòu)
硬件部分基于NETFPGA的硬件,主體結(jié)構(gòu)如下圖:
基于NETFPGA的硬件結(jié)構(gòu)圖
以MicroBlaze為核心,千兆以太網(wǎng)作為與PC交互接口,Scicos-HDL輸出的代碼,用戶手動(dòng)添加到 用戶自定義模塊中 ,完成硬件部署。
由于NETFPGA系統(tǒng)基于LINUX,所以本設(shè)計(jì)采用了一個(gè)外部的 XILINX Platform Cable USB設(shè)備,進(jìn)行下載與調(diào)試的工作,使得NETFPGA硬件能夠獨(dú)立工作。
NETFPGA硬件連接圖
2.3.3微處理器
MicroBlaze 是基于Xilinx公司FPGA的微處理器IP核,和其它外設(shè)IP核一起,可以完成可編程系統(tǒng)芯片(SOPC)的設(shè)計(jì)。MicroBlaze 處理器采用RISC架構(gòu)和哈佛結(jié)構(gòu)的32位指令和數(shù)據(jù)總線,可以全速執(zhí)行存儲(chǔ)在片上存儲(chǔ)器和外部存儲(chǔ)器中的程序,并和其它外設(shè)IP核一起,可以完成可編程系統(tǒng)芯片(SOPC)的設(shè)計(jì)。MicroBlaze處理器采用RISC架構(gòu)和哈佛結(jié)構(gòu)的32位指令和數(shù)據(jù)總線,可以全速執(zhí)行存儲(chǔ)在片上存儲(chǔ)器和外部存儲(chǔ)器中的程序,并訪問其的數(shù)據(jù)。
Micro Blaze處理器采用RISC架構(gòu)和哈佛結(jié)構(gòu),32位地址總線,獨(dú)立的指令和數(shù)據(jù)緩存,并且有獨(dú)立的數(shù)據(jù)和指令總線連接到IBM的OPB總線,使得它能很容易和其它外設(shè)IP核一起完成整體功能。圖3.2.2顯示了MicroBlaze的接口連接和架構(gòu)布局,圖3.2.3顯示了MicroBlaze的內(nèi)部功能塊圖。
MicroBlaze的接口連接和架構(gòu)布局
MicroBlaze內(nèi)部的功能塊圖
(1)內(nèi)部結(jié)構(gòu)
MicroBlaze內(nèi)部有32個(gè)32位通用寄存器和2個(gè)32位特殊寄存器—PC指針和MSR狀態(tài)標(biāo)志寄存器。為了提高性能,MicroBlaze還具有指令和數(shù)據(jù)緩存。所有的指令字長(zhǎng)都是32位,有3個(gè)操作數(shù)和2種尋址模式。指令按功能劃分有邏輯運(yùn)算、算術(shù)運(yùn)算、分支、存儲(chǔ)器讀/寫和特殊指令等。指令執(zhí)行的流水線是并行流水線,它分為3級(jí)流水:取指、譯碼和執(zhí)行,如圖2所示。
(2)存儲(chǔ)結(jié)構(gòu)
MicroBlaze是一種大端存儲(chǔ)系統(tǒng)處理器,使用如圖3所式的格式來訪問存儲(chǔ)器。
(3)中斷控制和調(diào)試接口
MicroBlaze可以響應(yīng)軟件和硬件中斷,進(jìn)行異常處理,通過外加控制邏輯,可以擴(kuò)展外部中斷。利用微處理器調(diào)試模塊(MDM)IP核,可通過JTAG接口來調(diào)試處理器系統(tǒng)。多個(gè)MicroBlaze處理器可以用1個(gè)MDM來完成多處理器調(diào)試。
(4)快速單一連接路接口
MicroBlaze處理器具有8個(gè)輸入和8個(gè)輸出快速單一鏈路接口(FSL)。FSL通道是專用于單一方向的點(diǎn)到點(diǎn)的數(shù)據(jù)流傳輸接口。FLS和MicroBlaze的接口寬度是32位。每一個(gè)FSL通道都可以發(fā)送和接收控制或數(shù)據(jù)字。
應(yīng)用EDK(嵌入式開發(fā)套件)可以進(jìn)行MicroBlaze IP核的開發(fā)。工具包中集成了硬件平臺(tái)生產(chǎn)器、軟件平臺(tái)產(chǎn)生器、仿真模型生成器、軟件編譯器和軟件調(diào)試工具等。EDK中提供一個(gè)集成開發(fā)環(huán)境XPS(Xilinx平臺(tái)工作室),以便使用系統(tǒng)提供的所有工具,完成嵌入式系統(tǒng)開發(fā)的整個(gè)流程。EDK中還帶有一些外設(shè)接口的IP核,如LMB、OPB總線接口、外部存儲(chǔ)控制器、SDRAM控制器、UART、中斷控制器、定時(shí)器等。利用這些資源,可以構(gòu)建一個(gè)較為完善的嵌入式微處理器系統(tǒng)。
在FPGA上設(shè)計(jì)的嵌入式系統(tǒng)層次結(jié)構(gòu)為5級(jí)??稍谧畹蛯佑布Y源上開發(fā)IP核,或或已開發(fā)的IP核搭建嵌入式系統(tǒng),這是硬件開發(fā)部件;開發(fā)IP核的設(shè)備驅(qū)動(dòng)、應(yīng)用接口(API)和應(yīng)用層(算法),屬軟件開發(fā)內(nèi)容。
利用MicroBlaze構(gòu)建基本的嵌入式系統(tǒng)。通過標(biāo)準(zhǔn)總線接口—LMB總線和OPB總線的IP核,MicroBlaze就可以和各種外設(shè)IP核相連。
EDK中提供的IP核均有相應(yīng)的設(shè)備驅(qū)動(dòng)和應(yīng)用接口,使用者只需利用相應(yīng)的函數(shù)庫,就可以編寫自己的應(yīng)用軟件和算法程序。對(duì)于用戶自己開發(fā)的IP核,需要自己編寫相應(yīng)的驅(qū)動(dòng)和接口函數(shù)。
2.3.4MAC
MAC的控制采用了XILINX的IP EthernetLITE,簡(jiǎn)化以太網(wǎng)子系統(tǒng)。對(duì)于遠(yuǎn)程監(jiān)視或控制應(yīng)用中所需要的簡(jiǎn)單網(wǎng)絡(luò)接口來說,最小化網(wǎng)絡(luò)子系統(tǒng)就足夠了。
MicroBlaze “Lite” Ethernet Subsystem:MicroBlaze以太網(wǎng)簡(jiǎn)化子系統(tǒng)
簡(jiǎn)化以太網(wǎng)子系統(tǒng)
利用不帶中斷的Ethernet Lite IP在簡(jiǎn)單的查詢模式下實(shí)現(xiàn)設(shè)計(jì)就可以了。同時(shí)還可以將全部軟件,包括簡(jiǎn)單的應(yīng)用層,都存儲(chǔ)在Xilinx FPGA中的本地存儲(chǔ)器中。利用XPS中的基本系統(tǒng)構(gòu)建向?qū)В˙ase System Builder wizard)可以容易地創(chuàng)建這樣的MicroBlaze設(shè)計(jì)。
2.3.5HTTP接口
·lwip網(wǎng)絡(luò)協(xié)議棧
Lwip是Light Weight IP的縮寫,它是專門為嵌入式系統(tǒng)應(yīng)用的TCP/IP協(xié)議棧。Lwip既可以移植到操作系統(tǒng)上,又可以在無操作系統(tǒng)的情況下獨(dú)立運(yùn)行。Lwip支持多網(wǎng)絡(luò)接口下的IP轉(zhuǎn)發(fā),ICMP協(xié)議,UDP協(xié)議,TCP協(xié)議。不同于一般的TCP/IP協(xié)議棧,在Lwip的處理器模型中,所有TCP/IP協(xié)議棧都在一個(gè)進(jìn)程當(dāng)中完成,而不是在每一層都有一個(gè)單獨(dú)的進(jìn)程。這樣TCP/IP協(xié)議棧就和操作系統(tǒng)內(nèi)核分開了,避免了跨層傳輸數(shù)據(jù)時(shí)頻繁的上下文操作。而應(yīng)用層程序既可以是單獨(dú)的進(jìn)程也可以駐留在TCP/IP進(jìn)程中。如果應(yīng)用程序是單獨(dú)的進(jìn)程,可以通過操作系統(tǒng)的郵箱、消息隊(duì)列等和TCP/IP進(jìn)程進(jìn)行通訊。如果應(yīng)用層程序駐留TCP/IP進(jìn)程中,那應(yīng)用層程序就利用內(nèi)部回調(diào)函數(shù)接口和TCP/IP協(xié)議棧通訊。
·SOCKET編程
網(wǎng)絡(luò)的Socket數(shù)據(jù)傳輸是一種特殊的I/O,Socket也是一種文件描述符,它具有類似于打開文件的函數(shù)調(diào)用Socket()?;诓僮飨到y(tǒng)的Socket編程有三種類型:流式套接字,數(shù)據(jù)報(bào)式套接字,原始式套接字。其中只有流式套接字提供一個(gè)面向連接的可靠的數(shù)據(jù)傳輸服務(wù)。
·服務(wù)器端HTTP協(xié)議的實(shí)現(xiàn)
HTTP協(xié)議是一種較為常用的應(yīng)用層協(xié)議,它是Hypertext Transfer Protocol的縮寫。HTTP協(xié)議采用客戶端和服務(wù)器的模式,通過客戶端向服務(wù)器發(fā)出請(qǐng)求,獲得服務(wù)器端的響應(yīng)。在本系統(tǒng)設(shè)計(jì)中SOPC系統(tǒng)作為HTTP協(xié)議的服務(wù)器。HTTP請(qǐng)求和響應(yīng)的報(bào)文格式是相似的,報(bào)文有一個(gè)請(qǐng)求行/狀態(tài)行和一個(gè)頭部組成,有時(shí)還可能包括主體。在請(qǐng)求行中包括了請(qǐng)求類型,URL,版本等。在響應(yīng)行中包括狀態(tài)碼,狀態(tài)短語等。頭部格式為:(頭部名字:頭值)。下面是一個(gè)HTTP請(qǐng)求的例子。
請(qǐng)求 | 應(yīng)答 |
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 一個(gè)HTTP請(qǐng)求的例子
在EDK中,每一個(gè)外設(shè)IP模塊都有自己的軟件函數(shù)庫。利用Libgen工具,將所需外設(shè)函數(shù)數(shù)庫的頭文件添加進(jìn)工程中,通過調(diào)用這些函數(shù)可以操作和控制這些外設(shè)。例如對(duì)串口的操作如下:
//初始化串口,設(shè)置波特率等參數(shù),清空發(fā)送和接收緩沖,禁止中斷;
使用標(biāo)準(zhǔn)C語言進(jìn)行應(yīng)用程序的開發(fā),編寫相應(yīng)的算法軟件,完成系統(tǒng)功能。
將編寫的程序代碼利用mb-gcc編譯工具,根據(jù)系統(tǒng)的軟件一并,生成.ELF文件。在編譯鏈接之前,若選擇調(diào)試方式,就會(huì)在生成文件中加入調(diào)試接口SMDstub,進(jìn)行程序的硬件調(diào)試。
利用系統(tǒng)的硬件模型以及RAM塊的組織結(jié)構(gòu)文件、ELF文件和用戶結(jié)束文件,應(yīng)用FPGA綜合實(shí)現(xiàn)工具(如Xilinx XST)進(jìn)行綜合,然后下載生成的配置BIT文件到目標(biāo)板上。利用EDK中提供的GDB調(diào)試工具可以進(jìn)行程序調(diào)試。有兩種調(diào)試方法:軟件仿真和硬件調(diào)試。軟件仿真可以進(jìn)行程序的功能調(diào)試,在開發(fā)工具內(nèi)部就可以進(jìn)行,不需要硬件支持。硬件調(diào)試就是通過JTAG接口或串口(可在硬件設(shè)計(jì)時(shí)選擇),連接到目標(biāo)板上的應(yīng)用系統(tǒng)中的XMD調(diào)試接口,將軟件程序下載到系統(tǒng)中進(jìn)行調(diào)試。本課題使用的目標(biāo)板上的主芯片為Xilinx Spartan IIE 30萬門的FPGA,系統(tǒng)時(shí)鐘為50MHz。實(shí)際運(yùn)行完全滿足設(shè)計(jì)要求。
H TTP 協(xié)議及其實(shí)現(xiàn)
嵌入式Web 服務(wù)器技術(shù)的核心是HTTP (超文本傳送協(xié)議) 引擎。HTTP 是WWW 上的協(xié)議。HTTP 協(xié)議使Web 服務(wù)器和瀏覽器可以通過Web 交換數(shù)據(jù)。他是一種請(qǐng)求/ 響應(yīng)協(xié)議,即服務(wù)器等待并響應(yīng)客戶方請(qǐng)求。當(dāng)用戶要瀏覽服務(wù)器上的一個(gè)網(wǎng)頁時(shí),一個(gè)HTTP 請(qǐng)求就會(huì)從用戶的瀏覽器發(fā)到HTTP 服務(wù)器。服務(wù)器響應(yīng)這個(gè)請(qǐng)求, 把指定的網(wǎng)頁傳送回來, 用戶才看到了網(wǎng)頁。
HTTP協(xié)議不維護(hù)與客戶方的連接,他使用可靠的TCP連接,通常采用TCP 的80 端口??蛻? 服務(wù)器傳輸過程可分為4 個(gè)基本步驟:瀏覽器與服務(wù)器建立連接;瀏覽器向服務(wù)器請(qǐng)求文檔;服務(wù)器響應(yīng)瀏覽器請(qǐng)求;斷開連接。服務(wù)器程序開始運(yùn)行時(shí),主進(jìn)程就創(chuàng)建一個(gè)套接字,
并與主機(jī)地址綁定到一起,隨后置為被動(dòng)監(jiān)聽狀態(tài),等待客戶端連接請(qǐng)求的到來。一旦接收一個(gè)連接,就返回一個(gè)新的套接字描述符,主程序則開辟一個(gè)新的子程序來處理這個(gè)新的連接。這樣系統(tǒng)可以同時(shí)
接收多個(gè)客戶端的請(qǐng)求。首先創(chuàng)建套接字,將套接字與本地地址和端口綁定,并設(shè)置套接字處于監(jiān)聽狀態(tài)。Web 服務(wù)器在接收一個(gè)連接請(qǐng)求后,讀取用戶的請(qǐng)求,根據(jù)用戶的請(qǐng)求進(jìn)行相應(yīng)的處理。當(dāng)請(qǐng)求位靜態(tài)文本時(shí),文檔直接提交輸出,當(dāng)請(qǐng)求位動(dòng)態(tài)文本時(shí),請(qǐng)求模塊自動(dòng)調(diào)用腳本引擎,將腳本替換位現(xiàn)場(chǎng)數(shù)據(jù),再提交輸出,當(dāng)請(qǐng)求為帶參數(shù)的執(zhí)行命令時(shí),請(qǐng)求解析器調(diào)用命令執(zhí)行模塊分析命令并控制監(jiān)控前端。
Http 設(shè)計(jì)模型
CPU 本身是以軟核的方式實(shí)現(xiàn),其功能可根據(jù)需要進(jìn)行定制,非常靈活。EDK 不但在硬件設(shè)計(jì)上提供了支持,在軟件上也為設(shè)計(jì)者提供了較好的支持,提供了現(xiàn)成的網(wǎng)絡(luò)協(xié)議棧。加上EDK提供的集成開發(fā)環(huán)境使得軟件開發(fā)更加便利。采用這種方式的控制系統(tǒng)具有控制分散、開放性好、使用簡(jiǎn)單、穩(wěn)定性好等優(yōu)點(diǎn),而且可以通過瀏覽器進(jìn)行遠(yuǎn)程多點(diǎn)監(jiān)控和遠(yuǎn)程支持,是未來控制系統(tǒng)發(fā)展的一個(gè)趨勢(shì)。
2.3.6IP核封裝
設(shè)計(jì)使用輸入GPIO 32位,輸出GPIO 32位。
2.3.7設(shè)計(jì)過程
Software:Xilinx ISE Design Suite 10.1 SP3
ISE主界面
新建一個(gè)工程
選擇FPGA信號(hào)和嵌入式處理器型號(hào)
選擇時(shí)鐘頻率和調(diào)試方式
添加 ETHERNET模塊、GPIO模塊和內(nèi)存模塊
添加系統(tǒng)時(shí)鐘
設(shè)置調(diào)試方式和系統(tǒng)測(cè)試
系統(tǒng)設(shè)置清單
設(shè)置完成并保存
設(shè)置完成后的工程
定義內(nèi)存型號(hào)
定義系統(tǒng)中斷
選擇操作系統(tǒng) petalinux
2.3.8設(shè)計(jì)截圖
設(shè)計(jì)完成之后的系統(tǒng)設(shè)計(jì)圖
2.3.9編譯代碼
對(duì)于嵌入式LINUX系統(tǒng)代碼的編譯,本項(xiàng)目采用虛擬機(jī)的方式在Ubuntu下完成。
虛擬機(jī)采用開源的 Sun VirtulBox
啟動(dòng)Ubuntu
安裝缺少的庫
設(shè)置環(huán)境變量
設(shè)置環(huán)境變量
Petalinux文件
Petalinux文件
設(shè)置Petalinux
轉(zhuǎn)換autoconfig.in的格式。輸入命令:
>vi autoconfig.in
將出現(xiàn)vi的編輯界面,在vi的命令行模式輸入以下命令:
>:set ff=unix
然后保存退出。輸入命令:
>:wq
這樣,就完成了autoconfig.in的導(dǎo)入工作。
編譯Petalinux
開始編譯
編譯完成
3實(shí)驗(yàn)與分析
3.1實(shí)驗(yàn)設(shè)計(jì)
3.1.1實(shí)驗(yàn)題目
24位彩色圖像的2值化處理
3.1.2實(shí)現(xiàn)結(jié)構(gòu)
根據(jù)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)
本實(shí)驗(yàn)中使用 公式1 進(jìn)行計(jì)算
灰度圖像二值化方法:
閾值法二值化
實(shí)驗(yàn)中采用一個(gè)根據(jù)參數(shù)可調(diào)整的設(shè)計(jì),以體現(xiàn)本系統(tǒng)在算法可重構(gòu)方面的優(yōu)點(diǎn)。
實(shí)驗(yàn)原理圖
3.2模塊分析
本節(jié)對(duì)于實(shí)驗(yàn)中所使用的各個(gè)模塊進(jìn)行分析。
3.2.1輸入模塊
負(fù)責(zé)圖像的輸入:
圖像讀取模塊
3.2.2數(shù)值計(jì)算模塊
負(fù)責(zé)處理圖像數(shù)據(jù)的灰度變化和二值化計(jì)算。
3.2.2.1R分量元件
計(jì)算: 0.299*R 采用ScilabCode組合元件模式實(shí)現(xiàn)
引腳設(shè)置
功能設(shè)置
3.2.2.2G分量元件
計(jì)算 0.587*G采用ScilabCode組合元件模式實(shí)現(xiàn)
界面設(shè)置
功能設(shè)置
3.2.2.3B分量計(jì)算元件
計(jì)算 0.114*B采用ScilabCode組合元件模式實(shí)現(xiàn)
引腳設(shè)置
功能設(shè)置
3.2.2.4RGB_ADD
計(jì)算 R分量+G分量+B分量 采用IP Core模式實(shí)現(xiàn)
引腳設(shè)置
功能設(shè)置
功能設(shè)置
3.2.3數(shù)據(jù)比較模塊
二值化元件 采用ScilabCode組合元件模式實(shí)現(xiàn)
引腳設(shè)置
功能設(shè)置
3.2.4輸出模塊
圖像顯示模塊
3.3實(shí)驗(yàn)過程
3.3.1運(yùn)行環(huán)境
系統(tǒng)軟件
Scilab 5.1
Scicos-HDL 0.7 for Windows
系統(tǒng)硬件
Hardware:NETFPGA board
Software:Xilinx ISE Design Suite 10.1 SP3
3.3.2安裝 Scilab 5.1 for Windows
在 http://www.scilab.org/ 進(jìn)行下載
注意 只支持 scilab5.1 的windows版, scilab5.1以后的版本中因?yàn)镾cicos改作xcos , 此版本正在開發(fā)中。
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
ZhangDongKangCai (NXU, LIAMA,SCILAB)
scicoshdl@gmail.com
4. all examples :/scicos-hdl/example
5. Contact: scicoshdl@gmail.com
安裝完成之后,啟動(dòng)Scilab5.1 , 可以看到Scilab加載的時(shí)候,Scicos-HDL已經(jīng)啟動(dòng)。
Scicos-HDL安裝后Scilab啟動(dòng)界面
3.3.4安裝SIVP
Scilab圖像讀取等工作我們使用了SIVP作為工具,因此需要安裝 SIVP (http://sivp.sourceforge.net/ 下載 )
啟動(dòng)Scilab后,點(diǎn)擊Toolboxes菜單的SIVP菜單,啟動(dòng)SIVP.
3.3.5啟動(dòng)Scicos
在Scilab中輸入 scicos 命令, 即可啟動(dòng)Scicos
啟動(dòng)scicos
Scicos啟動(dòng)后界面如下:
Scicos界面
點(diǎn)擊Palette菜單的Palette選項(xiàng)
Scicos元件菜單
點(diǎn)擊以后可以看到Scicos-HDL的各個(gè)庫文件已經(jīng)安裝
Scicos元件菜單
3.3.6Scicos-HDL
時(shí)序邏輯元件庫
超級(jí)元件庫
虛擬儀器庫
IP 元件庫
組合邏輯元件庫
3.3.7打開實(shí)驗(yàn)工程
使用Scicos 打開 設(shè)計(jì)工程
打開實(shí)驗(yàn)工程
圖像處理工程
加載圖片
加載的圖片顯示
點(diǎn)擊simulate菜單中的RUN選項(xiàng)
處理過程開始
處理完成的結(jié)果
代碼輸出
使用VHDL、Verilog、SystemC編譯器對(duì)設(shè)計(jì)好的代碼進(jìn)行輸出。
輸出的VHDL代碼
輸出的Verilog代碼
輸出的SystemC代碼 (帶一個(gè)VC++ 2008的工程文件做調(diào)試用,Scicos-HDL系統(tǒng)內(nèi)置 BCC5.5)
硬件連接圖
NETFPGA直接通過JTAG接口與計(jì)算機(jī)相連
NETFPGA與Scicos-HDL協(xié)同運(yùn)算部分,部分完成,本項(xiàng)目未完全完成,尚需繼續(xù)努力。(略)
3.4提交的內(nèi)容
本項(xiàng)目的軟件部分和設(shè)計(jì)部分完成,硬件部分部分完成。
提交的內(nèi)容:
Scicos-HDL 0.7
實(shí)驗(yàn)設(shè)計(jì)和測(cè)試文件 imgray.cos
實(shí)驗(yàn)輸出的SystemC 、VHDL、Verilog代碼
FPGA代碼模板
評(píng)論