《電子技術應用》
您所在的位置:首頁 > 可編程邏輯 > 解決方案 > 標準測試:Vivado的 ESL功能可加速Zynq SoC上的IP設計

標準測試:Vivado的 ESL功能可加速Zynq SoC上的IP設計

2013-09-22
關鍵詞: 開發工具 Zynq SOC Vivado

Sébastien Fuhrmann,理學碩士
研發工程師
巴黎CNRS-ENSEA-UCP ETIS實驗室(現就職于Elsys Design) se.fuhrmann@gmail.com

Bertrand Granado,博士
教授
巴黎CNRS-ENSEA-UCP ETIS實驗室和UPMC LIP6 實驗室 bertrand.granado@lip6.fr

采用自動方法為兩種圖像處理IP核實現類似于手工RTL編碼的效果

FPGA被廣泛用作信號處理應用中的原型設計或SoC實現工具。它們具備大規模并行處理功能、豐富的片上存儲器異構模塊以及DSP構建塊,是一款高 效的實現方案,往往能夠比肩標準的微處理器、DSP和GPU。而集成ARM® 硬處理器和可編程邏輯的賽靈思28nm Zynq®-7000 All Programmable SoC的問世,則使賽靈思器件對嵌入式系統來說更富吸引力。

盡管FPGA具有優異的特性,極富吸引力,但一些設計人員出于對編程復雜性(編程工作晦澀難懂而且涉及VHDL和Verilog等硬件描述語言)的 顧慮仍然避免使用該器件。而實用的電子系統級(ESL)設計的問世則有望確保簡化設計任務并使更多設計工程師掌握FPGA編程技術。

ESL工具在業內由來已久,其可將設計抽象提高到主流寄存器傳輸級(RTL)之上的水平。[1]在經過無數次失敗之后,這些高層次的設計工具最終在 實際應用中得到了廣泛采用。賽靈思已經在其最新設計工具Vivado® 設計套件中采用ESL方法來解決FPGA的可編程性問題。Vivado HLS是一種內置ESL的高層次綜合工具,能夠自動將C、C++或SystemC轉換為HDL語言設計。

Vivado HLS與Zynq SoC的推出激發了我們團隊在工業學術合作項目IP圖像處理解決方案研發過程中對ESL方法和手工編碼進行對比分析的想法。我們希望我們的工作能夠為其他 有興趣的設計團隊提供公正獨立的案例研究結果,因為這些工具仍然比較新,而且有關一般用戶使用體驗的參考文獻也不是很多。BDTI實驗 [2, 3]從總體上很好地反映了在更高層面將ESL工具用于FPGA的性能和潛力。但為了能通過ESL工具來實現,BDTI團隊以最佳方式對源應用 (source application)程序進行了重寫。

相比之下,我們則采用針對PC編寫的最初算法的源代碼。

在將IP的手工編碼模塊(之前曾在賽靈思競爭對手的40nm中端產品上驗證過)與Zynq SoC上的ESL編程方法進行對比時我們發現,ESL結果在多個方面都可以媲美手動實現方案,唯有時延明顯例外。此外,ESL方案還能顯著縮短開發時間。

我們的關鍵目標是:

• 在不修改或者盡可能少改動的情況下,評估現有(C/C++)代碼向硬件移植的工作量/質量;

• 進行具體的設計空間探索(ESL與手工編碼IP);

• 研究生產力權衡因素(效率與設計時間);

• 檢查可移植性問題(移植到其它FPGA或ASIC上);

• 衡量ESL工具對硬件、軟件和系統設計人員的易用性。

基于VIVADO的方法

我們采用賽靈思Vivado HLS 2012.4 (ISE® 14.4)設計工具和基于Zynq SoC的ZedBoard(XC7z20clg484-1)對所提出的實驗進行原型設計。我們從針對掃描應用的現行圖像處理FPGA-SoC合作項目中的 10個IP核中選出兩個。所選IP均為項目中最復雜的IP核。這些IP采用Verilog優化設計并在賽靈思競爭對手的40nm產品上進行過驗證,可針對 業界合作伙伴Sagemcom公司的掃描產品執行特定的圖像處理功能。

圖1概括說明了使用賽靈思工具的實驗流程。為達到實驗目的,我們從算法最初的C源代碼開始。值得注意的是,該代碼通過傳統方式針對PC進行編寫,而且就嵌入式系統高效移植而言并非最佳代碼。


圖1 – 針對Zynq Z20 SoC的硬件測試系統
 

我們的目標是,理想情況下對代碼進行最少修改甚至不修改。盡管Vivado HLS可支持ANSI C/C++,我們仍需針對動態存儲器分配和復雜結構體指針等問題做一些基本調整。根據賽靈思技術文檔的建議,我們在沒有觸及核心編碼的情況下完成了這一任 務。我們在函數自變量上創建AXI4主/從(AXI-Lite)接口,并利用各種約束條件在Vivado HLS中處理代碼。我們使用指令來指定這些約束條件,以便創建不同的解決方案,并利用ZedBoard在Zynq Z20 SoC上對其進行驗證。

為便于比較,我們必須設定涉及時延的唯一約束條件。我們必須假定:在相同的頻率下,Zynq SoC的AXI4接口與手工編碼設計中競爭對手FPGA總線的時延具有可比較性。將RTL代碼(IP核)移植到賽靈思環境非常簡單直觀,但對接口進行重新 設計則超出了我們的工作范圍。

在開發板上進行原型設計之前,我們利用Vivado HLS工具的內置SystemC協同仿真功能來驗證生成的硬件。事實上Vivado HLS也為IP生成軟件驅動器(訪問函數),這會進一步加快IP驗證與調試的速度。

我們使用Zynq器件中ARM Cortex™-A9 MPCore的666.7 MHz Core 0以及一個533.3 MHz 的DDR3接口,并通過AXI4定時器進行時延測量。圖2給出了FPGA原型設計所采用的驗證流程。首先在ARM上利用初始的C源代碼對圖像進行處理,以 獲得“黃金”參考結果。然后利用IP處理相同的圖像,將它們進行比較并驗證結果。

作為獨立項目,我們還評估了100-MHz MicroBlaze™處理器的兩個IP模塊的時延測量值。該處理器帶有8+8KB I+D高速緩存,以及通過AXI4總線與DDR3直接相連的硬件乘法器和除法器單元。我們將MicroBlaze上兩個IP核的時延測量值作為參考值,用 以比較由Vivado HLS生成IP和ARM處理器所實現的加速效果。這種加速性能為FPGA設計人員帶來了可觀的軟件計算能力。

實驗結果

現在我們來具體看一下兩個IP核的設計空間探索問題,并利用HLS工具將它們標記為IP1和IP2。我們已經詳細概述了IP1 的實驗,但為了簡便起見,對于IP2,我們只給出其結果。最后,我們還將針對賽靈思專家就賽靈思ESL工具中AXI4 “Burst”實現效率問題所給出的反饋意見進行討論。

表1和表2按步驟(表示為S1、S2等)列出了IP1設計空間探索的細節。在實驗中,我們采用了256 x 256像素的灰度測試圖。需要注意的是時鐘周期、時延和功耗數據僅為在對多次實現結果交叉分析進行快速綜合后,通過工具給出的參考值。正如您在FPGA原 型設計結果(表2)的討論中所看到的,最終實現后,實際值會發生顯著變化。

表1 – 針對IP1的HLS探索結果
*工具的功耗值用于迭代比較,因此沒有單位
 

表2 – 針對IP1探索的FPGA原型設計結果
*參考值,請參閱方法章節
**從XPower分析器得到的動態功耗

S1:源代碼轉換

在第一步中,我們首先編譯沒有最優約束條件的代碼(除了前面所述的必須修改項)。從表1中可以看到,硬件占用了大量資源。當我們根據Vivado HLS快速綜合報告和GUI設計查看器工具分析資源分配詳情時,可以很清楚地看出算法中的幾個除法運算占用了絕大部分資源。與乘法器不同,在FPGA中沒 有用于除法的硬模塊,因此除法運算會占用大量邏輯。因此,我們首先要解決的就是優化這個問題。

S2:S1結合共享除法器

直觀地說,對于如何減少除法硬件資源消耗問題,我們首先想到的是采用資源共享的方式來解決,但這同時也會降低性能。不幸的是,在我們所使用的工具版 本中很難甚至是不太可能直接將定制約束條件應用于運算符。不過解決方法也很簡單,我們可以用函數來替代除法運算(/),這樣就可將約束條件應用于函數。在 默認情況下,此工具可將函數作為內聯函數來使用,可為每個除法運算生成完整的除法硬件。我們在除法函數上應用“Allocation”指令,運用不同的值 來進行實驗,并監控其對時延的影響。最后我們選擇了一個共享除法硬件。正如您在表1中所看到的,這種方式顯著減少了查找表(LUT)、觸發器(FF)和其 它邏輯資源的使用量,而且對時延的影響也可以忽略不計,完全達到了雙贏效果。

S3:S2結合除數到乘法的轉換

接下來我們選擇將除法運算轉換為乘法。這種轉換是可行的,因為該應用使用的是常數值除法。我們這樣做的目的有兩方面:首先,盡管已決定采用一個共享 除法器來完成所有的除法運算,但除法硬件依然比較昂貴(約2000個LUT和觸發器);其次,這種共享除法器完成除法運算的速度相當緩慢,需要34個周 期,而且我們所使用的賽靈思工具僅支持HLS庫中的一種除法器類型。但在接下來的步驟中,我們可以看到實現乘法則有多種選擇。

因此,在本步驟中,我們將除法運算轉換為乘法運算(我們通過使用C語言的#ifdef指令來保持代碼的可移植性)。通過AXI-Lite從寄存器將 近似值作為函數參數提供。這就是在此步驟中表1能夠顯示性能和資源使用量得到顯著改善的原因,但乘法運算量的加大必須采用更多DSP。

S4:S3結合緩沖存儲器分區

源算法采用統一布置在存儲器分配(malloc)模塊中的多個內存緩沖器(8位、16位和32位)。在準備好算法Vivado HLS這一轉換初始階段(圖1)中 ,存儲器模塊會轉變為內部片上存儲器(Block RAM)。

盡管對于共享外部存儲器來說采用統一的存儲器分配模塊是一種比較普遍的選擇,但是當使用內部片上存儲器時,更好的做法則是利用存儲器分區來實現更快 的吞吐量。因此在這個步驟中,我們將比較大的存儲器模塊分成若干獨立的小存儲器(8位、16位和32位)。表1顯示的結果突出了明顯的性能改善效果,而且 分區也只是少量增加了BRAM數量(表2)。此外,這種技術還大幅減少了邏輯資源占用,原因可能是用于存儲器訪問的控制邏輯得到了簡化。

S5:S4結合共享32/64位帶符號或無符號乘法器

在這個步驟中,我們受S2中共享除法器實驗的啟發,使用共享資源對DSP模塊進行了優化。首先,我們使用設計查看器實用工具詳細分析生成的硬件,并 將其與C源代碼進行相互參考。分析結果顯示在原始模式下硬件正在使用的26個不同種類的乘法器單元,可被分為無符號16/32/64位乘法和32位帶符號 乘法。與S2實驗一樣,我們構建了一個由32位帶符號、32位無符號和64位無符號乘法器(用函數替代“*”運算)組成的系統。然后,我們應用了一個分配 約束條件,即只用一個單元來完成這三種截然不同的運算。表1顯示盡管性能有些損失,但是DSP的使用量顯著減少。這一結果激發我們進一步研究智能共享方 案。

S6:S5結合智能乘法共享

為減少由乘法器共享帶來的性能損失,需要以更加巧妙的方式對其加以利用。我們創建了兩個附加乘法器類型,即16位無符號乘法器和具有64位返回值的 32位無符號乘法器。我們以相互獨立的方式使用這些乘法器并改變它們的數量,經過多次實驗后得出的最終解決方案包含兩個無符號64位乘法器、兩個無符號 32位乘法器、一個帶符號32位乘法器、一個無符號16位乘法器以及一個獨立的帶64位返回值的無符號32位乘法器。這種技術可使性能得到小幅改善(如表 1所示),但是也會小幅增加DSP的使用量。

S7:S6結合乘法器時延實驗(組合乘法器)

在乘法器優化的最后階段,我們完成了兩次用以改變乘法器時延值的實驗。默認情況下,Vivado HLS所使用的乘法器的延遲時間介于2至5個時鐘周期之間。硬IP核中的乘法器要么是單時鐘周期要么是組合乘法器。在這個步驟中,我們使用“資源”指令并 從庫中選擇相應的組合乘法器,將乘法器的時延設定為0。結果如表1中所示,延遲時間得到了改善。然而,從時序的角度來看設計明顯變差了許多,因此FPGA 設計的時鐘速度減慢可能會將性能提高變為降低性能。

S8:S6結合乘法器時延實驗(1時鐘周期乘法器)

在這個步驟中,我們不使用組合乘法器,而是從庫中選擇一個單時鐘周期乘法器。結果如表1所示。我們可以看到時延略有增加,但出人意料的是時鐘周期顯著增大,從而導致硬件變慢。

S9、S10、S11:Burst訪問實驗

到目前為止,所有探索步驟對C代碼功能方面的知識要求很少或者根本不要求。在最后的實驗中,我們探索了Burst訪問。對基于共享存儲器系統的IP 來說Burst訪問幾乎是必不可少的,因為用于小塊數據或隨機數據訪問的總線具有較高的時延。為此,我們分析了C代碼的算法結構,以便探究實現Burst 訪問的可能性,因為從一般的軟件角度來說根本就沒有Burst訪問這一概念。但是值得格外關注的是,即便是在Burst訪問實驗中,我們也從未改變過軟件 的代碼結構。

Burst訪問實驗分兩個步驟執行。首先我們使用轉儲方法(盡管并不實用,但不失為獲得技術信息的良好途徑),此時整個圖像被快速送到內部存儲器緩 沖器中,并在實施最后快速輸出完整結果。通過使用較小的圖像并確保FPGA中有充足的片上存儲器,就可以很輕松做到這點。我們將此迭代步驟稱為 “superburst”(S9)。

在第二階段,我們在確保不改變源代碼結構的限制條件下實現了智能的交互式Burst(S10,S11)。結果如表1中所示。我們根據賽靈思提供的實 例教程,利用標準的“memcpy”函數在C語言中實現了Burst功能。遺憾的是,當在代碼中插入memcpy 函數時無法看到時延值。但FPGA的實現結果 (表 2)可以說明實驗所獲得的性能。

所選步驟的FPGA原型設計

使用ESL工具的最大優勢之一是能夠實現快速的設計空間探索。我們可在幾分鐘之內評估以上列出的所有探索步驟和表1所示結果,從而避免針對少數最終 所選迭代執行冗長的FPGA實現階段。表2給出了表1中部分所選步驟在Zynq Z20 SoC上的最終實現結果;同時也給出了在MicroBlaze處理器上(作為參考)和ARM Cortex-A9上實現初始源代碼所獲得的等效結果(時延), 以體現出Zynq SoC帶給FPGA設計人員的強大計算能力。該表還給出了由賽靈思XPower分析器計算得出的動態功耗估計值。

我們利用賽靈思工具將最優手工編碼IP轉化為RTL,從而獲得手工編碼IP在Zynq SoC上的實現結果。我們不得不使用之前實驗得到的時延測量結果并將競爭對手的FPGA作為參考,因為向AXI4總線進行移植超出了我們的實驗范圍。這進 一步凸顯了HLS工具的潛力,即可幫助設計人員更加輕松地向多種協議移植。

如果我們將表2與表1中的結果進行比較,會發現幾個有意思的現象。首先,ESL的快速綜合會得出比實際情況(尤其是對于LUT和觸發器)更好的估計結果;對存儲器和DSP而言,綜合器有時可顯著改變資源數量以進行優化。

其次,時序收斂會成為最后實現階段的大問題。我們可以看到FPGA實現后獲得的頻率與HLS估計結果相比發生了顯著變化。最后,令人驚訝的是,即便 對于Burst訪問實驗, HLS預計值與手工編碼IP得到的時延值也存在明顯差別。這也使我們對HLS工具生成的DMA的質量更加感興趣。

新的IP,相似的結果

我們以類似方式來研究第二個IP(即IP2)。根據之前對IP1的深入討論,表3和表4中所列結果也就不言自明。值得注意的一點是表3中的步驟8。 與IP1的情況一樣(詳見S2和S3討論內容),無論從資源使用還是時延的角度來說,除法器都是高消耗器件。與IP1不同的是,IP2使用實數除法運算, 因此除法器不能移除。但遺憾的是,當前版本的ESL工具只有一種除法器,其延遲時間為34個時鐘周期。S8表明,如果使用時延為一個時鐘周期的除法器(就 像手工編碼IP中提供的除法器),理論上其可實現30%的性能提升。表4顯示了所選步驟的FPGA原型設計結果。

 

VIVADO HLS的DMA/BURST效率問題

通過比較手工編碼IP和ESL技術得到的結果可得出一些結論。盡管研究嵌入式系統所用的初始源代碼(幾乎不做修改)并非以最佳方式編寫,但ESL工 具所提供的結果仍可以在資源利用率方面與經過優化的手工編碼IP相媲美。ESL與手工編碼IP在實驗結果上的顯著區別在于時延,后者得到的時延性能要遠遠 優于前者。

針對這一問題,我們觀察到手工編碼IP與ESL IP在構建方式上存在較大差異,(這也是IP2的資源消耗量存在較大差異的原因)。由于源代碼類型不同,在ESL IP中只有一條用于輸入和輸出的數據總線,相比之下,在手工編碼IP中則有兩條。此外,手工編碼IP中的FIFO更適合處理Burst訪問。而ESL IP則由于其源代碼的固有特性,很難建立一個理想高效的Burst處理機制,因而只能通過緩沖器來實現Burst。由于ESL硬件需要根據代碼結構將這些 存儲器作為任務緩沖器和Burst緩沖器,因此ESL方案會影響BRAM的使用。此外,Burst是根據賽靈思AXI4主接口教程,通過C語言的 memcpy函數來完成的。

我們還與賽靈思專家交換了意見,他們建議使用外部DMA來實現最佳性能。因為就我們所使用的Vivado HLS版本而言,其生成的AXI4主接口尚處于測試階段,但會在未來得到升級。這些因素可能會導致時延值的顯著差異,同時也是未來實驗研究的良好出發點。

生產力與效率

這次的具體實驗工作揭示出ESL設計的幾個重要方面,同時也清除了一些誤區。ESL工具自推出以來已取得了長足進步,現可支持ANSI C/C++,并能給出具有競爭力結果,還可依照硬件/系統設計實踐方法,采用約束指令的形式開發出多種設計方案(不僅限于過去的循環開發)。

事實上,我們發現用ESL獲得的所有結果(延遲時間除外)都可達到最佳值。此外,若通過工具的高級特性實現精確位類型(而非實驗中使用的一般C語言類型),還能進一步優化資源使用,即類似于代碼部分重寫所取得的效果。

研究工作還使我們了解到生產力與效率間的權衡問題。圖3給出了IP模塊開發時間(包括設計、軟件、FPGA實現及驗證等)的對比情況。ESL設計能 快速轉化為解決方案,尤其是對于驗證工作,其所獲得的結果不亞于最佳實現方案。值得注意的是設計與驗證時間高度依賴于設計人員的技術水平。因此,手工編碼 設計與ESL設計都由同一組人員完成。

圖3對流程的實現效果進行了公正的比較。考慮到設計人員對IP設計與集成的傳統RTL方法更加熟悉,而對ESL工具比較陌生,因此從長期來看一旦這種新工具被人們所熟悉,其開發設計所需時間很可能會顯著縮短。

ESL的未來發展?

從技術和商業角度來看,應該會制定一些針對ESL工具約束結構的EDA標準,以便輕松地向其它FPGA或ASIC移植設計(這種靈活性是RTL工具 所固有的,從原則上講,采用ESL工具應該更容易做到這一點)。ESL工具供應商應該像對待RTL工具一樣,提高ESL工具的質量和效果。

這是一個復雜、需要長時間探討的論題,我們不再在這篇短文中對以下問題做出詳細解答:軟件設計人員是否能利用ESL工具對FPGA進行編程?ESL 是否將取代RTL設計/工作?誰是ESL工具的最大受益者?但從本次實驗所獲得的經驗來看,我們認為ESL工具可以讓所有相關人員受益,尤其是系統設計人 員。

對硬件設計人員而言,這種工具在創建或評估設計片段時非常有效,其有助于快速構建可支持總線接口的測試用基礎設施。嘗試設計硬件的軟件設計人員也是 ESL工具的主要受眾之一。盡管ESL工具為此已取得了很大進步,但仍有很長的路要走。例如在我們的項目中, ELS工具為軟件設計人員將硬件復雜性降到了非常低的程度。然而,當涉及到約束和優化工作時,要實現好的設計仍需要從硬件方面進行考慮。這個問題將隨著 ESL工具的進一步發展而得到逐步好轉。

隨著軟硬件協同設計在SoC領域中不斷推廣采用,系統設計人員也變得越來越普遍,對于他們來說,ESL工具可能形成一種雙贏局面。系統設計人員可在多個層面上探索這些工具。

在硬件方面,之所以選擇賽靈思28nm 7系列FPGA中的Zynq-7000 All Programmable SoC,關鍵原因之一就是要探究將ARM硬核與FPGA邏輯集成在同一芯片上到底有多大潛力。正如我們在實驗結果中所看到的, ARM雙核為FPGA設計人員帶來了前所未有的計算性能。而事實上,Zynq SoC為嵌入式設計人員帶來了一款微型超級計算機,而且可利用緊密集成的FPGA架構對其進行定制。

鳴謝

我們感謝產業合作伙伴Sagemcom為我們提供的資金支持與技術協助。同時,我們還要感謝賽靈思歐洲公司的專家Kester Aernoudt和Olivier Tremois為本次項目提供及時的技術指導。

參考資料

1. G. Martin,G. Smith,“高層次綜合:過去、現在及未來”,IEEE 計算機設計與測試,2009年7/8月

2. BDTI 報告,“賽靈思FPGA的高層次綜合工具”,2010年

3. BDTI報告,“AutoESL AutoPilot高層次綜合工具”,2010年

本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
主站蜘蛛池模板: 涩涩漫画网 | 日韩在线不卡视频 | 亚洲欧美日韩中字综合 | 午夜动态| 午夜一级影院 | 日本激情一区二区三区 | 一级aa 毛片高清免费看 | www.五月天激情| 最近的中文字幕免费视频1 最近的中文字幕大全免费版 | 国产最新精品2020好看的 | 狠狠操亚洲 | 中文字幕精品一区二区日本大胸 | 天天操夜夜操视频 | 91精品国产高清久久久久久91 | 国产一区视频在线免费观看 | 天天看天天色 | 国产97视频| 免费人成在线看 | 日韩经典在线观看 | 成年视频免费 | 国产精品一区二区手机看片 | 国产精品成久久久久三级 | 日本欧美人xxxxx在线观看 | 久久不卡免费视频 | 51视频在线| 日韩视频一区二区 | 福利片网址 | 永久免费视频 | 精品国产一区二区麻豆 | 国产午夜不卡在线观看视频666 | 亚洲国产欧美精品 | 在线免费观看黄色网址 | 波多野结衣四虎精品影库 | 午夜视频精品 | 国产色视频网站 | 欧美日本在线 | 亚洲国产福利精品一区二区 | 2019年中文字字幕视频 | 国产精品欧美日韩一区二区 | 欧美一区二区三区免费不卡 | 免费理伦|