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