基于C的設計方式簡化FPGA/協(xié)處理器混合平臺軟硬件協(xié)同設計
——
基于C的設計方式簡化FPGA/協(xié)處理器混合平臺軟硬件協(xié)同設計
在最近幾年中日益流行在高性能嵌入式應用中使用現(xiàn)場可編程門陣列(FPGA)。FPGA已經被證明有能力處理各種不同的任務,從相對簡單的控制功能到更加復雜的算法操作。雖然FPGA在某些功能上比設計專用ASIC硬件具有時間和成本上的優(yōu)勢,但在面向軟件應用中FPGA比傳統(tǒng)處理器和DSP的優(yōu)勢并沒有體現(xiàn)出來。這很大程度上是由于過去割裂了硬件和軟件開發(fā)工具和方法之間的關系。
然而最近FPGA在面向軟件設計工具方面的發(fā)展,及器件容量的持續(xù)增加為軟件開發(fā)者創(chuàng)造了新的環(huán)境。在這種環(huán)境下,F(xiàn)PGA可視為軟件編譯器的一個可能的目標(連同傳統(tǒng)和非傳統(tǒng)處理器架構)。現(xiàn)在,工具能夠幫助軟件工程師利用FPGA平臺,同時在結合了傳統(tǒng)處理器(或處理器核)和FPGA的單一目標平臺上,幫助這些開發(fā)者利用其所具有的高度算法并行性。
基于FPGA的計算平臺,尤其是那些具有嵌入式“軟”處理器的平臺,有能力實現(xiàn)非常高性能的應用,而沒有建立專用定點功能硬件的前期風險。通過使用最新一代的硬件/軟件協(xié)同設計工具,有可能使用多種面向軟件(圖形和基于語言)設計方式作為FPGA設計過程的一部分。
使用基于FPGA的參考平臺
FPGA中使用嵌入式處理器的優(yōu)勢之一是能夠在單個可編程器件上建立硬件/軟件開發(fā)對象——等效硬件參考平臺,這常常被忽視。即使終端產品不包括嵌入式處理器(將替換外部處理器或其他硬件子系統(tǒng)的接口),快速下載和測試新的軟件/硬件配置(試驗可改變軟件/硬件劃分方案)的能力也能大大地提高設計生產率。通過使用嵌入式處理器作為測試生成器,單獨的硬件部件(或硬件編譯的軟件過程)也可以快速地驗證功能。
這種快速原型平臺的典型例子是Altera公司提供的Nios開發(fā)包。Cyclone或Stratix FPGA中都包括這個工具包,除了高性能的Nios 32位軟核處理器核之外還包括多種硬件和軟件外設接口。在設計過程中可以選擇這種核,使用Altera SOPC Builder工具配置并下載到相應的FPGA中。板上本身的連接容許直接和各種不同的外部部件連接,從串口(RS232和USB)到Flash存儲器和網絡接口。
在開發(fā)過程中使用這種板并結合Altera工具,容許嵌入式系統(tǒng)設計者用應用原型所需的部件(包括嵌入式處理器)組成目標平臺。然后,軟件開發(fā)者能夠關注應用本身,分析和試驗不同的硬件/軟件劃分方案。
權衡硬件和軟件資源
在一些高性能嵌入式應用中,從產品構建費用和開發(fā)成本考慮最佳的資源使用方案是混合處理器方案。在這種方案中應用非關鍵性能的部件位于主處理器(它們可能是或不是嵌入式處理器核),而大計算量的部件是一個或多個DSP芯片、其它標準硬件或專用ASIC或FPGA硬件。這種的解決方案通常需要硬件設計方式和工具的知識,但是在性能和成本方面上具有最佳的收益。
對于系統(tǒng)中的每個處理單元(即標準處理器、DSP、FPGA或ASIC),需要不同水平的專用技能。例如,雖然DSP是軟件可編程的,在工具上的初期投入小,但他們需要在DSP專門的設計技術方面有一些專門經驗,通常需要匯編級的編程技能。在另一方面,F(xiàn)PGA在設計和工具經驗上需要相對高的投入,在硬件設計語言作為主要的設計輸入方式時尤其如此。
然而FPGA和專用ASIC設計所需的經驗和工具投入相比,顯然FPGA在開發(fā)專用硬件上具有更低的風險。的確,相對于專用ASIC方案的簡單性和低風險的設計過程是為任何產品選擇FPGA的關鍵因素是。最近基于軟件的FPGA設計工具使這種設計過程具有甚至獲得更大的生產效率。這反過來讓系統(tǒng)設計者和軟件應用開發(fā)者在實際的硬件上能夠更快地嘗試新的算法方式和測試設想,使用迭代方式進行設計。
這種迭代方式重要好處是能夠一次改變一個單元(例如將關鍵的算法移至FPGA)的設計。應用最初是完全用軟件進行原型設計,并驗證其正確性,然后由FPGA完成特定的功能,這是在每個步驟都要對系統(tǒng)重新進行驗證的硬件過程。這種方式被證實能大大地縮短調試時間,降低引入難以調試的系統(tǒng)錯誤的風險。
你如何在考慮“將應用的哪部分以硬件實現(xiàn)”上做出最明智的選擇?一個普遍采用的方式是從用C,Matlab,SystemC或其它一些軟件編程語言的軟件模型開始。隨著應用模型和部件算法的發(fā)展,設計者確定并發(fā)揮設計中粗略的并行性(或重新設計算法)利用可編程硬件在建立并行結構方面的獨有能力。增加并行度通常轉化為增加硬件資源,它必須在降低大I/O量的算法性能增益上取舍。使用軟件模型驗證假設,建立可重復的測試組,這些測試組可以作為模型,進一步提煉為某些可以進行軟件和硬件編譯的內容。
混合軟硬件設計方法
現(xiàn)今如何開發(fā)混合軟件和硬件應用呢?如果應用是軟件驅動的(現(xiàn)今越來越多的設計是這樣),軟件或系統(tǒng)工程師從編寫代碼(如上所述)來建立系統(tǒng)原型。另一種是,工程師用更高級的工具如Simulink(來自Mathworks),基于UML的工具或其它系統(tǒng)設計環(huán)境開始設計。在這個過程中,系統(tǒng)設計者或軟件工程師將采用更高級的設計抽象以獲得最大的生產率,但是可能獲得很低的性能結果。因為以這種方式自動選用的處理器類型是受限的,為性能目標轉換低級代碼的機會相對更少。有經驗的嵌入式開發(fā)者可能會進一步用匯編語言優(yōu)化應用的各個部分,或使用專用處理器(即DSP芯片)來提高性能。硬件工程師可以參與優(yōu)化面向FPGA和ASIC實現(xiàn)的設計中的那部分接口。
初始系統(tǒng)設計和劃分完成之后,應用中需要最高性能的各個部分可以手工描述出來,交給硬件工程師。這個工程師為FPGA或ASIC部分編寫低層的HDL代碼,他們的設計生產率通常非常低(軟件工程師1/10或更少)。結果是應用速度增加了,但是代碼和最初的軟件代碼無法對應,設計周期不再一致,系統(tǒng)規(guī)格的改變可能很痛苦。
在這種情況下,系統(tǒng)設計者必須作為硬件/軟件仲裁者,指定硬件/軟件接口,鎖定設計反映設計的前期時間。一旦硬件開發(fā)認真地展開,可能幾乎沒有機會再次從整體上把握應用和它的組成算法。
基于C的設計和原型工具加速開發(fā)
然而最近FPGA在面向軟件設計工具方面的發(fā)展,及器件容量的持續(xù)增加為軟件開發(fā)者創(chuàng)造了新的環(huán)境。在這種環(huán)境下,F(xiàn)PGA可視為軟件編譯器的一個可能的目標(連同傳統(tǒng)和非傳統(tǒng)處理器架構)。現(xiàn)在,工具能夠幫助軟件工程師利用FPGA平臺,同時在結合了傳統(tǒng)處理器(或處理器核)和FPGA的單一目標平臺上,幫助這些開發(fā)者利用其所具有的高度算法并行性。
基于FPGA的計算平臺,尤其是那些具有嵌入式“軟”處理器的平臺,有能力實現(xiàn)非常高性能的應用,而沒有建立專用定點功能硬件的前期風險。通過使用最新一代的硬件/軟件協(xié)同設計工具,有可能使用多種面向軟件(圖形和基于語言)設計方式作為FPGA設計過程的一部分。
使用基于FPGA的參考平臺
FPGA中使用嵌入式處理器的優(yōu)勢之一是能夠在單個可編程器件上建立硬件/軟件開發(fā)對象——等效硬件參考平臺,這常常被忽視。即使終端產品不包括嵌入式處理器(將替換外部處理器或其他硬件子系統(tǒng)的接口),快速下載和測試新的軟件/硬件配置(試驗可改變軟件/硬件劃分方案)的能力也能大大地提高設計生產率。通過使用嵌入式處理器作為測試生成器,單獨的硬件部件(或硬件編譯的軟件過程)也可以快速地驗證功能。
這種快速原型平臺的典型例子是Altera公司提供的Nios開發(fā)包。Cyclone或Stratix FPGA中都包括這個工具包,除了高性能的Nios 32位軟核處理器核之外還包括多種硬件和軟件外設接口。在設計過程中可以選擇這種核,使用Altera SOPC Builder工具配置并下載到相應的FPGA中。板上本身的連接容許直接和各種不同的外部部件連接,從串口(RS232和USB)到Flash存儲器和網絡接口。
在開發(fā)過程中使用這種板并結合Altera工具,容許嵌入式系統(tǒng)設計者用應用原型所需的部件(包括嵌入式處理器)組成目標平臺。然后,軟件開發(fā)者能夠關注應用本身,分析和試驗不同的硬件/軟件劃分方案。
權衡硬件和軟件資源
在一些高性能嵌入式應用中,從產品構建費用和開發(fā)成本考慮最佳的資源使用方案是混合處理器方案。在這種方案中應用非關鍵性能的部件位于主處理器(它們可能是或不是嵌入式處理器核),而大計算量的部件是一個或多個DSP芯片、其它標準硬件或專用ASIC或FPGA硬件。這種的解決方案通常需要硬件設計方式和工具的知識,但是在性能和成本方面上具有最佳的收益。
對于系統(tǒng)中的每個處理單元(即標準處理器、DSP、FPGA或ASIC),需要不同水平的專用技能。例如,雖然DSP是軟件可編程的,在工具上的初期投入小,但他們需要在DSP專門的設計技術方面有一些專門經驗,通常需要匯編級的編程技能。在另一方面,F(xiàn)PGA在設計和工具經驗上需要相對高的投入,在硬件設計語言作為主要的設計輸入方式時尤其如此。
然而FPGA和專用ASIC設計所需的經驗和工具投入相比,顯然FPGA在開發(fā)專用硬件上具有更低的風險。的確,相對于專用ASIC方案的簡單性和低風險的設計過程是為任何產品選擇FPGA的關鍵因素是。最近基于軟件的FPGA設計工具使這種設計過程具有甚至獲得更大的生產效率。這反過來讓系統(tǒng)設計者和軟件應用開發(fā)者在實際的硬件上能夠更快地嘗試新的算法方式和測試設想,使用迭代方式進行設計。
這種迭代方式重要好處是能夠一次改變一個單元(例如將關鍵的算法移至FPGA)的設計。應用最初是完全用軟件進行原型設計,并驗證其正確性,然后由FPGA完成特定的功能,這是在每個步驟都要對系統(tǒng)重新進行驗證的硬件過程。這種方式被證實能大大地縮短調試時間,降低引入難以調試的系統(tǒng)錯誤的風險。
你如何在考慮“將應用的哪部分以硬件實現(xiàn)”上做出最明智的選擇?一個普遍采用的方式是從用C,Matlab,SystemC或其它一些軟件編程語言的軟件模型開始。隨著應用模型和部件算法的發(fā)展,設計者確定并發(fā)揮設計中粗略的并行性(或重新設計算法)利用可編程硬件在建立并行結構方面的獨有能力。增加并行度通常轉化為增加硬件資源,它必須在降低大I/O量的算法性能增益上取舍。使用軟件模型驗證假設,建立可重復的測試組,這些測試組可以作為模型,進一步提煉為某些可以進行軟件和硬件編譯的內容。
混合軟硬件設計方法
現(xiàn)今如何開發(fā)混合軟件和硬件應用呢?如果應用是軟件驅動的(現(xiàn)今越來越多的設計是這樣),軟件或系統(tǒng)工程師從編寫代碼(如上所述)來建立系統(tǒng)原型。另一種是,工程師用更高級的工具如Simulink(來自Mathworks),基于UML的工具或其它系統(tǒng)設計環(huán)境開始設計。在這個過程中,系統(tǒng)設計者或軟件工程師將采用更高級的設計抽象以獲得最大的生產率,但是可能獲得很低的性能結果。因為以這種方式自動選用的處理器類型是受限的,為性能目標轉換低級代碼的機會相對更少。有經驗的嵌入式開發(fā)者可能會進一步用匯編語言優(yōu)化應用的各個部分,或使用專用處理器(即DSP芯片)來提高性能。硬件工程師可以參與優(yōu)化面向FPGA和ASIC實現(xiàn)的設計中的那部分接口。
初始系統(tǒng)設計和劃分完成之后,應用中需要最高性能的各個部分可以手工描述出來,交給硬件工程師。這個工程師為FPGA或ASIC部分編寫低層的HDL代碼,他們的設計生產率通常非常低(軟件工程師1/10或更少)。結果是應用速度增加了,但是代碼和最初的軟件代碼無法對應,設計周期不再一致,系統(tǒng)規(guī)格的改變可能很痛苦。
在這種情況下,系統(tǒng)設計者必須作為硬件/軟件仲裁者,指定硬件/軟件接口,鎖定設計反映設計的前期時間。一旦硬件開發(fā)認真地展開,可能幾乎沒有機會再次從整體上把握應用和它的組成算法。
基于C的設計和原型工具加速開發(fā)
在上述的方式中,最終的軟件/硬件應用是軟件和硬件源文件的組合,一些需要軟件編譯/調試工具流程,其它需要硬件為主的工具流程和專業(yè)知識。然而,隨著基于C的FPGA設計工具的出現(xiàn),使得在大部分的設計中采用熟悉的軟件設計工具和標準C語言成為可能,尤其在那些本身就是算法的硬件部分。后面的性能轉換可能會引入手工的硬件描述語言(HDL)取代自動生成的硬件(正如面向DSP處理器的源代碼通常用匯編重新編寫),但是因為設計直接從C代碼編譯成最初的FPGA實現(xiàn),硬件工程師要參與性能轉換的時間會進一步提早至設計階段,系統(tǒng)作為整體可以用更高生產率的軟件設計模式來設計。
評論