Xilinx SDSoC 和 SDAccel 和 SDNet 和 HLS 工具介紹

SDSoC、SDAccel、SDNet和HLS工具傻傻分不清楚

Software Define 的概念

  近年來“Software Define ” 軟件定義這個詞持續火熱,全球知名技術研究和諮詢公司Gartner早在對2014年最有戰略意義的十大技術與趨勢做出預測時,便提出了軟件定義一切(Software Defined Anything)的概念,他們預測這類技術會在未來三年裏擁有巨大潛力,並在同行業中產生重大影響。兩年後的今天回顧這一概念和技術的發展,不難看出,Software Define的確成爲了行業風向標,其應用可謂無處不在。 
  相信一直關注賽靈思技術動向的工程師們對SDx這個詞並不陌生,概括來講,Xilinx的SDx指的是一系列新工具,專爲系統和軟件工程師而設計,可以使那些只有很少或根本沒有FPGA設計經驗的研發人員直接使用高級編程語言在強大的可編程硬件上進行設計,並且與那些嵌入芯片內部的或是在片外連接的業界標準處理器例如ARM或x86一起協同工作。 可以看到SDx系列目前有三個主要成員,包括SDSoC、SDAccel和SDNet。 
這裏寫圖片描述

  SDSoC™ 開發環境允許嵌入式和應用軟件開發人員更廣泛的利用Zynq® SoC和MPSoCs的性能,提供超過100倍的軟件性能加速。 
  SDAccel™ 開發環境針對的是OpenCL™,C和C ++的設計應用,與那些CPU和GPU在數據中心和醫療影像等領域的實現方案相比,利用FPGA進行加速可獲得高達25倍的性能功耗比提升。 
  SDNet是“軟”定義網絡的解決方案。具體來說就是SDNet結合賽靈思的全面可編程器件,打造出了“軟”定義網絡這樣的交叉技術,從而將可編程能力和智能化功能從控制層擴展至數據層,不僅支持SDN,而且還可以突破性地支持任何軟件定義網絡架構。 
  從以上簡要的介紹可以看出SDx系列的三個工具所針對的器件與市場各有側重,但總體上都是面向軟件和系統工程師的全面可編程抽象化設計工具,是賽靈思業界領先技術實力的進一步體現。 
   另外,Vivado HLS可以在很短的時間內生成與手工編碼質量相當的RTL代碼,並且允許用戶將同樣在C測試平臺生成的測試向量用在C仿真和RTL驗證中,從而大幅加速驗證過程。對那些使用C / C ++描述規範的算法設計類客戶來說,這是理想的解決方案,可以將其已有的各類浮點或定點算法無縫實現到FPGA硬件中,比較典型的應用就是各類視頻運算、加解密等DSP算法等等。

SDSoC™ 開發環境介紹

  SDSoC是Xilinx旗下,用於設計開發Zynq SoC和MPSoC異構嵌入式系統的基於Eclipse的集成開發環境,可以完成從C/C++到指定目標平臺上功能完整的硬件/軟件系統的編譯、實現、調試執行等全過程。

  由SDSoC產生的系統是高性能的,同時也是複雜的硬件/軟件協同工作系統。要了解在這樣的系統中應用程序的執行過程是比較困難的,因爲你需要同時關注在處理器上運行的軟件部分和在硬件可編程邏輯上執行的加速部分,以及數據在二者之間的傳遞過程和順序等。 
  具體開發流程: 
這裏寫圖片描述

SDAccel™ 開發環境介紹

這裏寫圖片描述 
  傳統的FPGA開發設計使用Verilog語言實現RTL設計,這種開發設計週期長、一些算法的verilog實現相比軟件編程語言更加的晦澀難懂,而藉助一些軟件庫可以輕鬆實現我們的想法,加快產品的研發週期,SDAccel開發環境讓沒有FPGA開發經驗的軟件工程師也能夠受益於FPGA平臺的優勢。

  SDAccel FPGA軟開發三步走 
圖1 SDAccel開發環境 
               圖1 SDAccel開發環境

編譯:

  軟件開發過程中編譯代碼是第一階段,而且代碼的編譯結果與CPU/GPU資源的使用規則一般都是固定的,程序開發人員只需要關心算法的具體實現就可以了。而FPGA的編譯過程則是一大難題:編譯結果怎麼在FPGA的可編程邏輯資源中實現以及FPGA程序代碼的存儲方式等問題。 
  SDAccel解決了這些問題,它能夠識別選定FPGA型號的邏輯資源和內部存儲結構類型,編譯器能夠在不同狀態之間提取並行語句,使用基於陣列讀寫方式的自動內存結構,完成整個FPGA代碼的編譯過程。

調試:

  在軟件開發過程中,完成編譯過程並不代表應用程序開發正確,我們還需要在目標硬件上進行不斷的調試,發現問題改正錯誤,軟件的調試是一個非常容易理解的問題,但是FPGA得調試卻是另一回事,爲了能夠實現FPGA的調試功能,SDAccel引用了軟件調試中經常使用的printf和GBD。

  Printf的FPGA實現會浪費一些邏輯資源,這些資源本可以用於實現一些算法功能的,但是這裏SDAccel做了一些改進優化,將printf的數據生成與解碼顯現分離開來,從硬件角度來看,生成printf數據只需要消耗非常少的邏輯資源,數據解碼顯示則完全有上位機完成,這樣實現printf功能幾乎對FPGA邏輯資源是零損耗。

  程序開發人員可以使用SDAccel的仿真模式進入在線仿真功能,可以像軟件調試一樣設置斷點、單步調試等操作。

優化:

  FPGA應用的優化準則與CPU上的優化準則是一樣的,只是實現方法不同,CPU上的優化是要關注處理的緩存大小和運算單元數量,而FPGA上的應用優化則關心所選器件型號的邏輯資源和運行時的性能。

SDNet開發環境介紹

  SDNet概念是賽靈思於今年3月在Interop 2014網絡通訊展會期間面向全球發佈的業界首款“軟”定義網絡解決方案。與採用固定數據層硬件並通過狹窄南向API連接到控制層的傳統SDN架構不同,SDNet基於可編程的數據層,支持內容智能和豐富的南向API控制層連接,可與控制層進行智能協作,這一獨特定位使其能夠支持SDN和任何軟件定義網絡架構。賽靈思公司負責通信IP 和服務的全球高級副總裁Nick Possley認爲,這種交叉技術的影響力將遠遠超過當今的SDN架構。

  SDN由於可以通過軟件來定義網絡拓撲、資源分配、處理機制等,是目前計算機領域相當火熱的話題。它的優勢在於不僅可以支持獨立的線速度服務,還可以避免各種底層協議帶來的複雜性,從而能夠根據需求提供靈活的服務,對客戶的服務進行重新配置,將服務以最短的時間提供給最終客戶。在履行服務義務的時候,還能夠在整個服務過程中進行實時的、“無中斷”操作升級,這個功能對運營商和最終客戶來說非常具有吸引力。

  然而Nick Possley同時指出,SDN固有的侷限性也不可忽視,例如硬件平臺固定無法編程,難以形成差異化;現場設備通常會遇到非常複雜的軟硬件升級,甚至是整個配套網絡的重新規劃等。而這些,恰恰就是驅動賽靈思 實現“軟”定義網絡的原因。 
SDN與SDNet的區別

  賽靈思方面稱,SDNet的最大特點之一是指定內容但不規定方式。也就是說,SDNet將不會關心怎樣(How)實現一個網絡規劃,而是更在意如何通過軟件的方式實現系統級人員的需要(What),比如包的解析、編輯、調節、查找等。另一方面,賽靈思的SDNet支持系統架構者通過新型的高級網絡抽象語言(高級包處理規範)自動生成數據平面功能,而無需瞭解底層設備架構或掌握複雜的硬件編程語言,非常適合不具備FPGA專業知識的計算機專業科研人員

  在SDNet的具體使用過程中,系統架構師和技術工程師實現了清晰的任務劃分。前者負責定義SDNet規格,並使用SDNet編譯器生成具體要求;後者則根據要求實現優化,包括具體的器件型號、與IT系統進行集成等。 
這裏寫圖片描述 
                SDN行業競爭產品格局分析

  目前SDN行業競爭產品主要包含三種,分別是ASSP、ASIC和SDNet+FPGA/SoC。“總體來說,SDNet軟定義網絡解決方案在以下幾方面會更具優勢,例如具備更佳且高度靈活的服務質量(QoS)、流程和會話感知功能、全面可編程的硬件數據層和I/O、線速支持網絡功能虛擬化(NFV),包括各種用戶自定義的定製化功能、以及1G到400G之間的可擴展線路速率。”Nick Possley說。 
SDN的行業同類競爭產品 
                SDN的行業同類競爭產品

  同樣在虛擬局域網解析應用中,SDNet+FPGA/SoC方案只需三行半就可實現一個代碼,在效率上遠遠高出ASSP的30多行代碼,且開發人員無需掌握硬件基礎架構知識。在架構方面,該方案可實現100%的代碼重用,並很容易遷移到1Gbps-400Gbps的各種帶寬標準上。

  但如果採用ASSP方式進行代碼描述就非常辛苦,因爲這些代碼必須由非常專業的、熟知ASSP細節的軟硬件工程師一起開發。當過度拘泥於具體實現細節時,就意味着限制了這些語言支持的廣度和彼此間的交融性。此外,代碼重構基本上是不可能實現的,導致產品生命週期、可移植性、帶寬可擴展性方面經常受到質疑。

  從整個更新維護的角度來看,SDNet服務可以通過各種各樣的Open,OpenSwitch、OpenFlow來支持新的更新;從固件升級來看,不需要重新設計硬件和線卡,不需要上門服務就可以快速升級,因此可以降低資本支出和運營支出。因此在SDNet軟的定義環境裏面,從核心到邊遠應用,整個網絡中的各種設備都可以通過SDNet環境實現迅速地覆蓋。 
用SDNet實現的優勢 
               用SDNet實現的優勢

提供精確的服務-從核心到邊緣 
              提供精確的服務-從核心到邊緣

  SDNet軟件規範環境的發佈,提供了高級編程接口,更加符合軟件定義網理念。這爲業界開發SDN在數據平面能否更靈活定義、開發環境能否更高級化和運行中能否進行功能定製等三大方面搬掉了‘三座大山’。目前,畢軍教授和成功實現Zynq All Programmable SoC定製化SDN研發平臺原型設計的西安交通大學胡成臣副教授,已經被賽靈思公司選爲全球首批四個早期使用SDNet的先進學術研究團隊(SDNet advance academic research group)之一,有望很快實現突破。

Vivao HLS SDAccel

  經過了三四年的上市推廣,Vivado HLS早已不再是一個全新的工具,我們已經有超過1000家成功的客戶。HLS的靈活性和生產力優勢是顯而易見的,甚至賽靈思的IP開發部門在交付 Vivado 2015.1版本及以後的部分視頻IP時也都是使用HLS從C/C++語言開始設計。 
  Vivado HLS可以在很短的時間內生成與手工編碼質量相當的RTL代碼,並且允許用戶將同樣在C測試平臺生成的測試向量用在C仿真和RTL驗證中,從而大幅加速驗證過程。對那些使用C / C ++描述規範的算法設計類客戶來說,這是理想的解決方案,可以將其已有的各類浮點或定點算法無縫實現到FPGA硬件中,比較典型的應用就是各類視頻運算、加解密等DSP算法等等。 
  使用Vivado HLS可以實現真正意義上基於C語言的IP,通過HLS,我們可以把用戶的C/C++以及System C算法以VHDL或Verilog的形式輸出,然後通過Vivado IPI或SysGen等賽靈思的工具,整合到你的FPGA設計工程中去。也就是說,使用Vivado HLS可以更便捷高效地完成從高階抽象語言C/C++到賽靈思FPGA可編程邏輯硬件的設計實現過程。 
  Vivado HLS不僅是簡單的翻譯工具或是綜合工具,更爲重要的是,我們可以將其產生的RTL以IP的形式導出到Vivado IPI中,或者直接調用HLS生成的RTL文件到另一個RTL項目,甚至是輸出到DSP設計的SysGen工程中。

Zynq SoC 器件架構 
以下圖片展示了賽靈思Zynq SoC器件的架構圖。SDSoC所針對的器件就是包括Zynq SoC和下一代的MPSoC在內的多核異構可編程邏輯芯片。

zynq.png 
  Zynq-7000 系列是賽靈思推出的業界第一款將ARM A9雙核處理器與28nm低功耗可編程邏輯緊密集成在一起的SoC產品。從圖中可以可以看出左上角處理器所在的區域稱作Processing System即PS,而其餘可編程邏輯所在的區域則稱作Programmable Logic即PL。 
位於PS側的ARM內部用硬件實現了AXI總線協議,提供GP、HP和ACP等性能各不相同的數個物理接口。而PL側則需要使用可編程邏輯來搭建相應的AXI接口。在具體設計時,可以在Vivado IPI中使用賽靈思提供的IP如AXI-Stream等等來實現。此外,軟硬件之間有數據交互的設計就牽扯到在軟硬件之間如何進行數據搬移,這種情況下,我們還需要一個或數個DataMover,這也同樣需要在PL側使用可編程邏輯來搭建。

Zynq SoC 開發流程

  之所以要花幾頁篇幅來介紹Vivado HLS的作用與Zynq的架構,就是爲了更清楚地描述全面可編程Zynq SoC的開發流程。 
  對於以C/C++等高階語言爲起點來進行SoC開發的用戶來說,由C/C++算法開始,首先需要對軟硬件進行分區,選擇哪些部分放入PL側進行加速,哪些部分仍然在PS側用軟件實現。對那些指定到放入可編程邏輯上用於硬件加速的部分,還需要完成C代碼到RTL IP的轉換。接下來,就是完成軟/硬件之間的連接,包括使用怎樣的DataMover、PS與PL之間的接口如何配置等,接下來還要完成配套的軟件驅動程序。所有這些往往牽扯到數個不同團隊和專業人員的通力合作,需要通過數次迭代來探索最佳的實現方案和系統架構。這個流程圖很清晰地描繪了SoC的開發流程,每一步都是耗時耗力的工作。

flow_wo_sdsoc.png

不使用SDSoC的開發流程

  具體到每一步的工作來看,傳統的Zynq設計流程大致分爲五個步驟:

flow_wo_sdsoc1.png
  首先,系統架構師來決定將哪些部分用於軟件實現,哪些部分放入硬件加速,即所謂的軟硬件分區。劃分爲硬件實現的功能將需要使用RTL代碼來開發,或是使用HLS將C/C++代碼綜合成Vivado中可實現的IP。然後,要在Vivado IPI中搭建DataMover和接口。後是應用軟件和驅動程序的開發。 
  這無疑是一個十分耗時的過程,需要多個部門和團隊之間的設計切換。有時候,即便這樣完成後的設計可以正常工作,卻可能無法滿足你在吞吐量、延遲或面積等方面的設計性能要求。此時就可能需要通過修改系統連接來重新搭建硬件架構來對系統性能進一步優化。但這麼做,又將導致軟件應用程序和驅動程序的變化。因此,你往往需要與多個軟件和硬件團隊緊密合作,通過多次迭代設計來試着滿足最終需求。 
  在某些情況下,設計不能滿足你的性能要求的原因在於 軟件性能不夠,或是硬件的佔用率太高。這時候,你就需要返回到最初的設計,重新修改軟/硬件分區方案,然後前面所說的硬件實現,系統連接,軟件驅動等所有步驟都要重新再來一邊,這勢必要求更多的團隊一起配合,改變設計來探索另一種架構,而且可能面臨更多次的設計迭代,進一步拉長設計週期。 
  毫無疑問,用在系統優化上的時間對time-to-market的影響巨大。此外,我們也注意到在Zynq SoC的設計中,用戶最關注的部分往往是算法的最終實現和算法模塊的優化,包括IP或是軟件功能塊。因此,SDSoC的設計理念也致力於解決這些用戶最關注的問題。

應用了SDSoC的開發流程

  如圖所示,在應用了SDSoC的Zynq設計流程中,工具可以自動搭建軟硬件之間的通訊部分,包括DataMover、軟件驅動程序和硬件連接接口。工具還可以將整個開發過程抽象到C/C++的應用層面,以C/C++爲起點來進行算法開發,當然,工具也可以調用以傳統的IP方法開發的算法模塊,包括已經由Vivado HLS轉換完成的。

總結

  對於SDSoC和SDAccel和SDNet和HLS工具而言,SDNet是最容易區分的,SDSoC是將c,c++轉化成軟件/硬件函數,進而決定這些函數是在PS端還是PL端口執行。我們可以通過SDSOC系統來決定數據量是在軟件函數或者硬件函數中處理。爲了達到高性能,每一個硬件函數都在一個獨立的線程中處理。這裏SDAccel和HLS可能在功能上有所相近,所以需要用心區分。 
  Vivado HLS可以在很短的時間內生成與手工編碼質量相當的RTL代碼,並且允許用戶將同樣在C測試平臺生成的測試向量用在C仿真和RTL驗證中,而SDAccel™ 開發環境針對的是OpenCL™,C和C ++的設計應用用於設計開發Zynq SoC和MPSoC異構嵌入式系統的,可以完成從C/C++到指定目標平臺上功能完整的硬件/軟件系統的編譯、實現、調試執行等全過程。從這兩段話中可以很容易分析出具體的區別,首先就是SDAccel環境支持的編程語言更豐富,其次就是兩者所做的工作和功能並不衝突,而且各有優點。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章