Vivado HLS推動(dòng)協(xié)議處理系統蓬勃發(fā)展(上)

發(fā)布時(shí)間:2015-10-30 15:34    發(fā)布者:designapp
關(guān)鍵詞: Vivado , FIFO , 存儲器 , RAM
  1 提高抽象層次
  Vivado HLS能提高系統設計的抽象層次,為設計人員帶來(lái)切實(shí)的幫助。Vivado HLS通過(guò)下面兩種方法提高抽象層次:
  ● 使用C/C++作為編程語(yǔ)言,充分利用該語(yǔ)言中提供的高級結構;
  ● 提供更多數據原語(yǔ),便于設計人員使用基礎硬件構建塊(位向量、隊列等)。
  與使用RTL相比,這兩大特性有助于設計人員使用Vivado HLS更輕松地解決常見(jiàn)的協(xié)議系統設計難題。最終簡(jiǎn)化系統匯編,簡(jiǎn)化FIFO和存儲器訪(fǎng)問(wèn),實(shí)現控制流程的抽象。HLS的另一大優(yōu)勢是便于架構研究和仿真。
  Vivado HLS把C++函數視為模塊,函數定義等效于模塊的RTL描述,函數調用等效于模塊實(shí)例化。這種方法能減少需要用戶(hù)編寫(xiě)的代碼量,進(jìn)而顯著(zhù)簡(jiǎn)化用于系統描述的結構代碼,最終加速系統匯編進(jìn)程。
  在Vivado HLS中,存儲器或FIFO可通過(guò)兩種方法訪(fǎng)問(wèn)。一種是通過(guò)合適的對象(比如對流對象的讀寫(xiě))。另一種是直接訪(fǎng)問(wèn)綜合工具隨后將實(shí)現為Block RAM或分布式RAM的標準C陣列。綜合工具會(huì )根據需要處理額外的信令、同步或尋址問(wèn)題。
  從控制流的角度,Vivado HLS從簡(jiǎn)單的FIFO接口到完整的AXI4-Stream均可提供整套流控制感知接口。使用這些接口,設計人員可直接訪(fǎng)問(wèn)數據,無(wú)需檢查背壓或數據可用性。Vivado HLS會(huì )適當地調度執行,應對一切緊急情況,同時(shí)確保正確完成執行。
  設計人員還會(huì )感激Vivado HLS提供的另一項功能,即簡(jiǎn)便的架構研究功能。用戶(hù)只需在代碼中插入程序指令(如使用GUI或批處理模式時(shí)的Tcl命令),就可以把設計所需特性傳遞給綜合工具。這樣用戶(hù)可以在不修改設計代碼本身的情況下研究大量備選架構方案。研究的范圍可以是模塊流水線(xiàn)化等根本性問(wèn)題,也可以是FIFO隊列深度等較常見(jiàn)的問(wèn)題。
  最后,C和RTL仿真是Vivado HLS另一個(gè)大放異彩的地方。設計一般采用兩步流程驗證:第一步是C語(yǔ)言仿真。這個(gè)步驟中C/C++的編譯和執行與常見(jiàn)的C/C++程序相同;第二步是C/RTL協(xié)仿真。在這步驟中,Vivado HLS會(huì )根據C/C++測試平臺自動(dòng)生成RTL測試平臺,然后設置并執行RTL仿真,檢查實(shí)現方案8的正確性。
  如能充分發(fā)揮這些優(yōu)勢,這將對于用戶(hù)的系統設計大有裨益。這不僅體現在開(kāi)發(fā)時(shí)間和生產(chǎn)力上,還由于Vivado HLS代碼更加緊湊的特點(diǎn),體現在代碼可維護性和可讀性上。此外通過(guò)高層次綜合,用戶(hù)仍能有效控制架構及其特性。正確理解和使用Vivado HLS程序對實(shí)現這一控制起著(zhù)根本作用。
  高層次綜合在賽靈思提供的包處理解決方案的層級結構中起著(zhù)承上啟下、承前啟后的作用。而Vivado SDNet和RTL則對其起到補充作用。Vivado SDnet使用特定領(lǐng)域語(yǔ)言,提供一種大為簡(jiǎn)便但相當受限的協(xié)議處理系統表達方法。RTL則可以用于Vivado HLS無(wú)法表達的大量系統的實(shí)現工作(例如使用DCM或差分信號并需要詳細時(shí)鐘管理的各類(lèi)系統)。雖然有種種局限,Vivado HLS仍然是在保證結果質(zhì)量或設計人員靈活性的前提下設計大部分協(xié)議處理解決方案的有效途徑。
  2 設置簡(jiǎn)單系統
  開(kāi)始新設計時(shí)需要完成的最基本工作首先是確定設計的結構,然后將其實(shí)現在Vivado HLS中。Vivado HLS中的基本系統構建塊是C/C++函數。構建一個(gè)由模塊和子模塊組成的系統意味著(zhù)需要用一個(gè)頂層函數來(lái)調用底層函數。圖1所示的是一個(gè)極為簡(jiǎn)單的三級流水線(xiàn),我們以此為例來(lái)介紹Vivado HLS中系統構建的基本思路。一般采用流水線(xiàn)化設計執行協(xié)議處理,由每一級負責解決處理的特定部分。
  如圖1所示。


  構建一個(gè)由模塊和子模塊組成的系統意味著(zhù)需要用一個(gè)頂層函數來(lái)調用底層函數。
  例1:在Vivado HLS中創(chuàng )建簡(jiǎn)單系統
  1 void topLevelModule(stream&inData,
  stream&outData) {
  2 #pragma HLS dataflow interval=1
  3
                               
                  4 #pragma INTERFACE axis port=inData
  5 #pragma INTERFACE axis port=outData
  6
  7 static stream> modOne2modTwo;
  8 static stream> modTwo2modThree;
  9
  10 moduleOne(inData, modOne2modTwo);
  11 moduleTwo(modOne2modTwo, modTwo2modThree);
  12 moduleThree(modTwo2modThree, outData);
  13 }
  例1中的代碼用于創(chuàng )建頂層模塊函數,供調用所有其它子函數使用。頂層模塊函數使用兩個(gè)參數,均屬于“流”(stream)類(lèi)(Vivado HLS庫中提供的模塊類(lèi)之一)。流是一種HLS建模架構,代表準備以流方式交換的數據通過(guò)的接口。流可以實(shí)現為FIFO隊列或內存,也可以是一種能夠配合任何C++架構使用的模板類(lèi)。在本例中,我們定義了一種稱(chēng)為axiWord的數據結構(Struct),如例2所示。


  例2:定義流接口使用的C++ 結構
  struct axiWord {
  ap_uint data;
  ap_uint strb;
  ap_uint last;
  };
  該struct用于定義AXI4-Stream接口的部分字段。Vivado HLS能自動(dòng)支持此類(lèi)接口,使用編譯指令(pragma)語(yǔ)句即可完成設定。編譯指令是對高層次綜合工具的指令,用于指導工具實(shí)現要求的結果。例1中第4行和第5行的編譯指令用于告知Vivado HLS這兩個(gè)指令(具體是頂層模塊的輸入和輸出端口)將使用AXI4-Stream接口。AXI4-Stream I/F包含兩個(gè)必備信號,分別是有效信號和就緒信號,但它們沒(méi)有包含在聲明的數據結構中。這是由于Vivado HLS AX4 I/F會(huì )在內部處理這些信號,也就是說(shuō)它們對用戶(hù)邏輯而言是透明的。如前文所述,在使用AXI4-Stream I/F時(shí),從用戶(hù)處抽象流控制完全由Vivado HLS完成。
  當然未必一定使用AXI4-Stream接口。Vivado HLS提供有豐富的總線(xiàn)接口。這里選擇AXI4-Stream作為常見(jiàn)標準接口的示例,供用戶(hù)進(jìn)行包處理。
  實(shí)現我們的設計的下一項工作是確保我們的三個(gè)模塊彼此互聯(lián)。這項工作也通過(guò)流完成,不過(guò)這次它們是位于頂層模塊的內部。第7行和第8行用于聲明實(shí)現這一目標的兩個(gè)流。這兩個(gè)流使用了另一種Vivado HLS結構ap_uint。這是一種無(wú)符號一維位陣列,隨后將按此對其操作。同時(shí)這也是又一種模板類(lèi),因此必須設定這個(gè)陣列的寬度。在本例中使用64位,與頂層模塊輸入輸出I/F的數據成員寬帶匹配。還有一點(diǎn)需要詳細說(shuō)明的是這些流全部聲明為靜態(tài)變量。靜態(tài)變量是指其值不隨函數調用變化的一種變量。由于在作為順序C/C++程序執行時(shí)頂層模塊(以及全部的子模塊)每個(gè)時(shí)鐘周期會(huì )被調用一次,所以任何需要保持其值不隨時(shí)鐘周期變化的變量都需要聲明為靜態(tài)變量。
  3 創(chuàng )建流水線(xiàn)設計
  將要討論的最后也是最重要的一個(gè)是編譯指令。第2行中的數據流編譯指令指示Vivado HLS盡量以并行方式安排執行該函數的所有子函數!癷nternal”參數用于設置該模塊的初始化間隔(II)。初始化間隔(II)告知Vivado HLS該模塊必須具備的處理新輸入數據字的頻次,故決定了設計的吞吐量。不過(guò)這并不妨礙模塊內部的流水線(xiàn)化和擁有>1的時(shí)延。當II=2時(shí),該模塊將用兩個(gè)周期完成數據字的處理,然后再讀入新的數據字。以這種方式Vivado HLS可以簡(jiǎn)化模塊最終的RTL。也就是說(shuō),在一個(gè)典型的協(xié)議處理應用中,設計必須具備每個(gè)時(shí)鐘周期處理一個(gè)數據字的能力,故從現在起我們令I(lǐng)I=1。
  初始化間隔(II)告知Vivado HLS該模塊必須具備的處理新輸入數據字的頻次,故決定了設計的吞吐量。
  最后要解決的問(wèn)題是函數調用本身。在Vivado HLS中,這個(gè)過(guò)程對應的是模塊的實(shí)例化。傳遞給每個(gè)模塊的參數實(shí)質(zhì)上定義了模塊的通信端口。在本例中,通過(guò)將輸入連接到第一個(gè)模塊,然后用 modOne2modTwo流把第一個(gè)模塊連接到第二個(gè)模塊,依次類(lèi)推,將三個(gè)模塊鏈接起來(lái)。(未完待續)
                               
               
本文地址:http://selenalain.com/thread-155200-1-1.html     【打印本頁(yè)】

本站部分文章為轉載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀(guān)點(diǎn)和對其真實(shí)性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問(wèn)題,我們將根據著(zhù)作權人的要求,第一時(shí)間更正或刪除。
junjie 發(fā)表于 2017-4-18 14:53:33
謝謝共享
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页