基于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加速實現高性能計算 [j]電子產品世界
可重構計算
可重構計算(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仿真引擎與 ScilabScicos系統仿真引擎的接口。
接口元件
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系統框圖:
2.3.2硬件結構
硬件部分基于NETFPGA的硬件,主體結構如下圖:
基于NETFPGA的硬件結構圖
以MicroBlaze為核心,千兆以太網作為與PC交互接口,Scicos-HDL輸出的代碼,用戶手動添加到 用戶自定義模塊中 ,完成硬件部署。
由于NETFPGA系統基于LINUX,所以本設計采用了一個外部的 XILINX Platform Cable USB設備,進行下載與調試的工作,使得NETFPGA硬件能夠獨立工作。
NETFPGA硬件連接圖
2.3.3微處理器
MicroBlaze 是基于Xilinx公司FPGA的微處理器IP核,和其它外設IP核一起,可以完成可編程系統芯片(SOPC)的設計。MicroBlaze 處理器采用RISC架構和哈佛結構的32位指令和數據總線,可以全速執行存儲在片上存儲器和外部存儲器中的程序,并和其它外設IP核一起,可以完成可編程系統芯片(SOPC)的設計。MicroBlaze處理器采用RISC架構和哈佛結構的32位指令和數據總線,可以全速執行存儲在片上存儲器和外部存儲器中的程序,并訪問其的數據。
Micro Blaze處理器采用RISC架構和哈佛結構,32位地址總線,獨立的指令和數據緩存,并且有獨立的數據和指令總線連接到IBM的OPB總線,使得它能很容易和其它外設IP核一起完成整體功能。圖3.2.2顯示了MicroBlaze的接口連接和架構布局,圖3.2.3顯示了MicroBlaze的內部功能塊圖。
MicroBlaze的接口連接和架構布局
MicroBlaze內部的功能塊圖
(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.1 SP3
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.1 SP3
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
ZhangDongKangCai (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代碼模板
評論