版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、學(xué)習(xí)Vivado第4章lab1接口綜合概述接口綜合是將RTL接口添加到C設(shè)計(jì)的過(guò)程。另外還把物理接口添加到RTL設(shè)計(jì)中,接口綜合包括了相關(guān)聯(lián)的I/O協(xié)議,容許數(shù)據(jù)通過(guò)接口傳輸并自動(dòng)與內(nèi)部?jī)?yōu)化的邏輯同步。本教程由4實(shí)驗(yàn)練習(xí)組成涵蓋的主要功能和接口綜合。Lab1: 查看函數(shù)的返回和塊級(jí)協(xié)議Lab2: 理解默認(rèn)端口的I/O協(xié)議,并學(xué)會(huì)怎么選擇I/O協(xié)議Lab3: 查看一下數(shù)組端口實(shí)現(xiàn),可以進(jìn)行分區(qū)。Lab4: 為設(shè)計(jì)創(chuàng)建一個(gè)優(yōu)化的實(shí)現(xiàn)并添加AXI4接口教程設(shè)計(jì)描述從xilinx網(wǎng)站下載教程的設(shè)計(jì)文件,參考信息中獲取教程設(shè)計(jì)。本教程使用教程目錄中的設(shè)計(jì)文件Vivado_HLS_Tutorial Int
2、erface_Synthesis。關(guān)于實(shí)驗(yàn)使用前兩個(gè)實(shí)驗(yàn)室在本教程中的示例的設(shè)計(jì)很簡(jiǎn)單,這有助于將焦點(diǎn)保持在接口。最后兩個(gè)實(shí)驗(yàn)練習(xí)使用多通道累加器。本教程介紹如何實(shí)現(xiàn)采用高層次綜合實(shí)現(xiàn)I/O端口和協(xié)議。在實(shí)驗(yàn)4中,創(chuàng)建一個(gè)在Lab3中使用最優(yōu)實(shí)現(xiàn)的設(shè)計(jì)接口綜合 lab1:塊級(jí)I/O協(xié)議概述這個(gè)實(shí)驗(yàn)解釋了什么是塊級(jí)I/O協(xié)議,并控制它們重點(diǎn):在本教程中的圖片和命令假定了教程數(shù)據(jù)目錄Vivado_HLS_Tutorial被解壓并放置在c:vivado_HLS_Tutorial如果教程數(shù)據(jù)路徑解壓到不同的位置,或者在linux系統(tǒng)上,調(diào)整路徑名稱指向你選擇放置Vivado_HLS_Tutorial目
3、錄位置。步驟1:創(chuàng)建并打開(kāi)工程1.打開(kāi)Vivado HLS 命令提示符a.在windows系統(tǒng)中,采用Start>All Programs>Xilinx Design Tools>Vivado2014.2>Vivado HLS>Vivado HLS 2014.2 Command Prompt,如下圖b.在linux系統(tǒng)下,打開(kāi)新的shell,2. 用命令提示符窗口,如圖55,把接口綜合教程的路徑變?yōu)閘ab13. 執(zhí)行TCL并建立vivado HLS Project,采用的是vivado_hlsf run_hls.tcl如圖55所示4. 當(dāng)vivado HLS 完成
4、,在用戶界面里打開(kāi)工程。用vivado_hlsp vivado_hlsp adders_prj命令打開(kāi),如圖56步驟2:創(chuàng)建和查看默認(rèn)的塊級(jí)I/O協(xié)議1 在源文件夾中雙擊adders.c,打開(kāi)源代碼,并查看如圖57這個(gè)例子用了一個(gè)簡(jiǎn)單的設(shè)計(jì),把焦點(diǎn)集中在I/O實(shí)現(xiàn)上(在設(shè)計(jì)中沒(méi)有邏輯)這段代碼的重要點(diǎn)如下:編譯格式的指令被添加到源代碼中,為了防止任何I/O協(xié)議被綜合成為一些數(shù)據(jù)結(jié)構(gòu)(inA,inB,和inC),I / O端口的協(xié)議將在接下來(lái)的實(shí)驗(yàn)練習(xí)中復(fù)習(xí)。這個(gè)函數(shù)返回一個(gè)值并且從這個(gè)函數(shù)中只有唯一的輸出。正如在后面的練習(xí),不是所有的函數(shù)都返回一個(gè)值。在本實(shí)驗(yàn)練習(xí)中討論該函數(shù)返回創(chuàng)建的端口。2
5、 用工具欄中的按鈕執(zhí)行Run C Synthesis命令,或Solution菜單當(dāng)綜合完成,綜合報(bào)告會(huì)自動(dòng)打開(kāi)3 查看RTL接口,滾動(dòng)到綜合報(bào)告摘要的結(jié)尾處。接口摘要和Outline選項(xiàng)卡如圖58有三種類型的端口可以查看設(shè)計(jì)完成花費(fèi)超過(guò)一個(gè)時(shí)鐘周期,因此時(shí)鐘和復(fù)位已經(jīng)添加到設(shè)計(jì)中:ap_clk和ap_rst.這兩個(gè)信號(hào)都是一位輸入。塊級(jí)I/O協(xié)議為了控制RTL設(shè)計(jì)已經(jīng)添加端口:ap_start,ap_done,ap_idle和ap_ready。這些端口隨后會(huì)被詳細(xì)說(shuō)明設(shè)計(jì)還有4個(gè)數(shù)據(jù)端口輸入端口In1,In2和In3,都是32位輸入,和指定I/O協(xié)議的ap_done(如在圖58中指定的指令)該
6、設(shè)計(jì)還具有對(duì)函數(shù)返回一個(gè)32位的輸出端口,ap_return。塊級(jí)I / O協(xié)議允許通過(guò)附加的端口、獨(dú)立數(shù)據(jù)I / O端口對(duì)RTL設(shè)計(jì)進(jìn)行控制。但此I / O協(xié)議是與函數(shù)本身相關(guān)聯(lián),不與任何數(shù)據(jù)端口相關(guān)聯(lián)。默認(rèn)的塊級(jí)I/O協(xié)議被稱為ap_ctrl_hs。圖58顯示了這個(gè)協(xié)議是與函數(shù)的返回值相關(guān)聯(lián)(即 使函數(shù)中的代碼沒(méi)有指定返回值這也可以)表1概括了用于塊級(jí)I / O協(xié)議ap_ctrl_hs的信號(hào)的行為。注:解釋一下使用術(shù)語(yǔ)“交易”。在高層次綜合的情況下,一個(gè)事務(wù)是相當(dāng)于一個(gè)執(zhí)行C函數(shù)(或在綜合RTL設(shè)計(jì)中的等效操作)應(yīng)用 描述 ap_start該信號(hào)控制模塊執(zhí)行,邏輯為1時(shí)設(shè)計(jì)開(kāi)始運(yùn)行。 它應(yīng)
7、保持邏輯1直到相應(yīng)的輸出握手ap_ready被置位。當(dāng)ap_ready變高時(shí),決定了是否繼續(xù)保持ap_start置位并執(zhí)行其他事物或設(shè)置ap_start為邏輯0,當(dāng)前事務(wù)的結(jié)束時(shí)允許設(shè)計(jì)暫停,。 如果在ap_ready為邏輯1 之前ap_start被置為低,設(shè)計(jì)有可能沒(méi)有把所有輸入端口讀完,并可能拖延下一個(gè)輸入讀取操作。 ap_ready這個(gè)輸出信號(hào)表明設(shè)計(jì)已經(jīng)準(zhǔn)備好接受新數(shù)據(jù) 當(dāng)準(zhǔn)備好接受新的輸入時(shí),ap_ready信號(hào)設(shè)置為邏輯1。表明所有為這次事物的輸入讀已經(jīng)完成。 如果設(shè)計(jì)不是流水線操作,直到下一次事物才開(kāi)始執(zhí)行新的讀。 這個(gè)信號(hào)是用來(lái)決定何時(shí)在端口上用新的值,決定是否用一個(gè)ap_st
8、art輸入信號(hào)來(lái)啟動(dòng)一個(gè)新的事務(wù)。 如果ap_start信號(hào)沒(méi)有被設(shè)置為高,當(dāng)設(shè)計(jì)在當(dāng)前事務(wù)完成中所有的操作,這個(gè)信號(hào)變?yōu)榈碗娖健?ap_done這個(gè)信號(hào)表明設(shè)計(jì)在當(dāng)前的事務(wù)中完成所有的操作。輸出邏輯1表明設(shè)計(jì)已經(jīng)完成了這個(gè)事務(wù)的所有操作。因?yàn)樵谑聞?wù)結(jié)束時(shí),該信號(hào)為邏輯1還表示ap_return端口上的數(shù)據(jù)是有效的。 不是所有的函數(shù)都有函數(shù)返回值,因此并非所有的RTL設(shè)計(jì)都有一個(gè)ap_return端口 ap_idle這個(gè)信號(hào)表示設(shè)計(jì)正在操作或閑置狀態(tài)(無(wú)操作)。 輸出端口上用邏輯1表明是空閑狀態(tài)。一旦設(shè)計(jì)開(kāi)始運(yùn)行,該信號(hào)為低電平。 該信號(hào)為高電平時(shí),設(shè)計(jì)完成操作,未進(jìn)行任何進(jìn)一步的操作。 您可
9、以通過(guò)查看由RTL協(xié)同仿真生成的跟蹤文件,觀察這些信號(hào)的行為。這是在教程的RTL驗(yàn)證所討論的,但圖59示出了用于當(dāng)前合成的結(jié)果的波形。圖59的波形圖,表現(xiàn)了塊級(jí)I/O信號(hào)的行為設(shè)計(jì)直到ap_start設(shè)置為邏輯1才開(kāi)始啟動(dòng)。通過(guò)設(shè)置端口ap_idle為低,表明設(shè)計(jì)不再空閑展示了五個(gè)事務(wù),首先3個(gè)輸入值(10,20,和30)被各自用在端口in1,in2和in3.輸出信號(hào)ap_ready變?yōu)楦弑砻髟O(shè)計(jì)準(zhǔn)備好在下個(gè)時(shí)鐘下接受新輸入。輸出信號(hào)ap_done表明設(shè)計(jì)結(jié)束,輸出端口ap_return的值是有效(首先輸出值 60,是三個(gè)輸入的和)因?yàn)閍p_start保持高電平,下一次事務(wù)開(kāi)始于下一個(gè)時(shí)鐘周期
10、。注意:在RTL的協(xié)同仿真,所有的設(shè)計(jì)和端口輸入控制信號(hào)始終處于啟用狀態(tài)。例如,在圖59的信號(hào)ap_start始終是高的。在第二個(gè)事務(wù),觀察ap_return端口,在這個(gè)端口上第一個(gè)輸出的值是70,直到ap_done信號(hào)為高電平這個(gè)結(jié)果才有效。步驟3:改變塊級(jí)I/O協(xié)議默認(rèn)的塊級(jí)I/O協(xié)議是ap_ctrl_hs協(xié)議(控制握手協(xié)議),在這一步中,您可以創(chuàng)建新的解決方案和改變這個(gè)協(xié)議。1. 從工具欄或者工程菜單選擇新解決方案(New Solution)來(lái)創(chuàng)建一個(gè)新的解決方案。2. 保持所有新解決方案對(duì)話框所有設(shè)定,這些設(shè)定都是默認(rèn)的,點(diǎn)擊完成3. 在信息窗口中選擇C源代碼標(biāo)簽(或如果C源代碼關(guān)閉重
11、新打開(kāi))4. 激活指令選項(xiàng)卡(Directives tab),選擇頂層函數(shù),如圖60所示因?yàn)閴K級(jí)I/O協(xié)議與函數(shù)相關(guān)聯(lián),您必須通過(guò)選定頂層函數(shù)來(lái)指定他們。5. 在指令選項(xiàng)卡中,鼠標(biāo)移到頂層函數(shù)adders上,右鍵單擊,然后選擇插入指令I(lǐng)nsert Directives。打開(kāi)指令編輯器對(duì)話框。圖61展示的對(duì)話框,對(duì)話框中的下拉菜單為了激活接口模式。下來(lái)菜單為塊級(jí)接口協(xié)議展示了三種選擇· ap_ctrl_none: 沒(méi)有塊級(jí)I/O控制協(xié)議· ap_ctrl_hs: 塊級(jí)I/O控制握手協(xié)議,我們已經(jīng)采用的· ap_ctrl_chain: 塊級(jí)I/O協(xié)議的控制鏈。這個(gè)I/
12、O協(xié)議主要是用于把流水線塊鏈接在一起。塊級(jí)I/O協(xié)議ap_ctrl_chain不包含在這個(gè)教程中。這個(gè)協(xié)議與ap_ctrl_hs協(xié)議類似,但增加了額外的輸入信 號(hào),ap_continue,它必須為高,當(dāng)ap_done為了繼續(xù)下次事務(wù)被置位時(shí)。這允許下游模塊在系統(tǒng)上施加回壓,并進(jìn)一步停止處理,這是不能接受 新的數(shù)據(jù)。6. 在Directives Editor對(duì)話框中的DestinationEditor部分中,選擇Source File默認(rèn)情況下,指令被放置在directives.tcl文件。在這個(gè)例子中,該指令被放置在現(xiàn)有的I / O指令的源文件中。7. 從下拉菜單中選擇ap_ctrl_none
13、8. 點(diǎn)擊OK源文件現(xiàn)在有新的指令,在源文件代碼和指令選項(xiàng)卡中都是高亮的。如圖62新指令表示與函數(shù)參數(shù)/接口相關(guān)聯(lián)被稱為返回。所有接口指令與函數(shù)參數(shù)相連接。對(duì)于塊級(jí)I/O協(xié)議,返回參數(shù)被用于具體的塊級(jí)接口。如果函數(shù)在源代碼里沒(méi)有返回參數(shù)也是可能的。Figure 62: Block-Level Interface Directive ap_ctrl_none在工具欄里點(diǎn)擊Run C Synthesis按鈕,或者用菜單Solution>Run C Synthesis來(lái)綜合設(shè)計(jì)。在源文件中添加的指令改變的源文件。圖62所示源文件名為*adders.c。這個(gè)標(biāo)記表明文件已經(jīng)更改,但沒(méi)有保存。10
14、. 點(diǎn)擊YES 來(lái)接受對(duì)源文件的更改。當(dāng)報(bào)告打開(kāi)時(shí),接口概述出現(xiàn),如圖63Figure 63: Interface summary for ap_ctrl_none當(dāng)接口協(xié)議ap_ctrl_none被采用時(shí),沒(méi)有塊級(jí)接口協(xié)議被添加到設(shè)計(jì)中。僅有諸如clock、reset和data端口。注意,也沒(méi)有ap_done信號(hào),consumer模塊接收來(lái)自ap_return的數(shù)據(jù),當(dāng)數(shù)據(jù)有效時(shí),ap_return端口現(xiàn)在不能表明另外,RTL協(xié)同仿真的功能需要一個(gè)塊級(jí)I/O協(xié)議,為了自動(dòng)協(xié)同仿真安排測(cè)試平臺(tái)和RTL設(shè)計(jì)。任何試圖用RTL協(xié)同仿真的結(jié)果在下面的錯(cuò)誤信息中,停止RTL協(xié)同仿真(理解上有誤差)E
15、SIM-345 Cosim only supports the following 'ap_ctrl_none' designs: (1) combinational designs; (2) pipelined design with task interval of 1; (3) designs with array streaming or hls_stream ports.E SIM-4 * C/RTL co-simulation finished: FAIL *退出vivado HLS GUI返回命令提示框?qū)W習(xí)Vivado第4章lab2接口I/O協(xié)議概述這個(gè)實(shí)驗(yàn)解釋了
16、怎么指定具體的端口I/O協(xié)議。1. 在lab1中用Vivado HLS命令提示符,更改為lab2目錄,如圖642. 鍵入vivado_hls -f run_hls.tcl來(lái)創(chuàng)建新的Vivado HLS工程Figure 64: Setup for Interface Synthesis Lab 23. 鍵入vivado_hls -p adders_io_prj 來(lái)打開(kāi)vivado HLS 用戶界面工程4. 打開(kāi)源代碼如圖65Figure 65: C Code for Interface Synthesis Lab 2 本練習(xí)的源代碼是與lab1類似。出于同樣的原因使用簡(jiǎn)單的代碼,它有助于聚焦在接
17、口的行為,而不是核心邏輯。這一次,代碼沒(méi)有一個(gè)函數(shù)的返回,取代函數(shù)輸出的是通過(guò)指針參數(shù)* in_out1輸出。這也提供了機(jī)會(huì),探索雙向(輸入輸出)端口的接口選項(xiàng)。 I / O協(xié)議的類型,你可以通過(guò)接口綜合添加到C函數(shù)的參數(shù)取決于參數(shù)類型。這些選項(xiàng)在Vivado高層次綜合用戶指南(UG902)有完整描述。在本實(shí)施例中的指針參數(shù)既是輸入和輸出的功能。在RTL設(shè)計(jì)中,該參數(shù)被實(shí)現(xiàn)為單獨(dú)的輸入和輸出端口。對(duì)于圖65所示的代碼,每個(gè)函數(shù)參數(shù)可能的選項(xiàng)在下表中被描述函數(shù)參數(shù) I/O協(xié)議選擇 In1 和 In2按值傳遞的參數(shù)都可以用下面的I / O協(xié)議來(lái)實(shí)現(xiàn) Ap_none:沒(méi)有I/O協(xié)議,這個(gè)是默認(rèn)的輸入
18、 Ap_stable:無(wú)I/O協(xié)議 Ap_ack:實(shí)現(xiàn)與相關(guān)的輸出端口確認(rèn) Ap_val:實(shí)現(xiàn)與相關(guān)的輸入有效端口 Ap_hs:實(shí)現(xiàn)了兩個(gè)輸入有效和輸出端口確認(rèn)。 In_out1按引用傳遞的輸出可以用下面的I/O協(xié)議實(shí)現(xiàn) Ap_none:沒(méi)有I/O協(xié)議,這個(gè)是默認(rèn)的輸入 Ap_stable:無(wú)I/O協(xié)議 Ap_ack:實(shí)現(xiàn)與相關(guān)的輸出端口確認(rèn) Ap_val:實(shí)現(xiàn)與相關(guān)輸出的有效端口,這個(gè)是默認(rèn)的輸出 ap_ovld:實(shí)現(xiàn)與相關(guān)輸出有效端口,(任何INOUT端口的輸入部分沒(méi)有有效的端口) ap_hs:實(shí)現(xiàn)所有輸入有效端口和輸出響應(yīng)端口 ap_fifo:FIFO接口與相關(guān)輸出寫(xiě)入,輸入FIFO滿端
19、口 ap_bus:Vivado HLS總線接口協(xié)議 在實(shí)驗(yàn)1中應(yīng)用的端口指令實(shí)際上不是必需的,因?yàn)锳P_NONE是使用這些C參數(shù)的默認(rèn)I/ O協(xié)議。在這個(gè)練習(xí)中給出了指令,以避免處理任何默認(rèn)或不是默認(rèn)的I / O端口協(xié)議的行為。 在本練習(xí)中,您將實(shí)現(xiàn)一系列的I / O協(xié)議。步驟2:端口具體的I/O協(xié)議1. 保證能在信息窗口中看見(jiàn)C源代碼2. 激活指令選項(xiàng)卡(Directives tab)并選擇輸入?yún)?shù)in1(input argument in1),如圖66Figure 66: Adding Port I/O Protocols3. 右擊并選擇插入指令(Insert Directives)4.
20、當(dāng)指令編輯窗口打開(kāi),使指令下來(lái)框?yàn)镮NTERFACEa. 保持目標(biāo)是默認(rèn)值,這次,指令被存儲(chǔ)在directives.tcl文件中。b. 從模式下來(lái)菜單選擇ap_valc. 點(diǎn)擊OK5. 選擇參數(shù) in2 ,添加一個(gè)接口指令指定I/O協(xié)議為ap_ack6. 選擇參數(shù)in_out1并添加一個(gè)接口指令I(lǐng)/0協(xié)議為ap_hs7. 在資源管理器窗口中,擴(kuò)展約束文件夾,并雙擊打開(kāi)directives.tcl文件,如圖67Figure 67: Directives for Lab 28. 綜合設(shè)計(jì)9. 當(dāng)文件打開(kāi)時(shí),查看接口概述,如圖68Figure 68: Interface summary for La
21、b 2· 設(shè)計(jì)有時(shí)鐘和復(fù)位· 默認(rèn)塊級(jí)I/O協(xié)議信號(hào)是存在的· 端口 in1被以數(shù)據(jù)端口而實(shí)現(xiàn),并伴隨輸入有效信號(hào)· 數(shù)據(jù)在in1端口上,僅讀。當(dāng)端口in1_ap_vld為有效高· 端口 in2被綜合為數(shù)據(jù)端口,并與輸出響應(yīng)信號(hào)相關(guān)聯(lián)· 當(dāng)端口in2被讀時(shí),端口 in2_ap_ack將被置高· inout_i定義為inout1參數(shù)的輸入部分,與輸入有效端口inout1_i_ap_val相關(guān)聯(lián),并且輸出響應(yīng)端口inout1_i_ap_ack· inout1參數(shù)輸出部分定義為inout_o,與輸出有效端口inout1_
22、o_ap_val相關(guān)聯(lián),并輸入響應(yīng)端口inout1_o_ap_ack.10. 退出vivado HLS GUI 并且返回命令提示口學(xué)習(xí)Vivado第4章lab3實(shí)現(xiàn)數(shù)組的RTL接口概述 這個(gè)練習(xí)說(shuō)明了在函數(shù)中的數(shù)組參數(shù),你可以實(shí)現(xiàn)不同種類的RTL端口步驟1:創(chuàng)建和打開(kāi)工程 1.在先前的lab中用Vivado HLS命令提示符,更改為lab3目錄2.鍵入vivado_hls -f run_hls.tcl來(lái)創(chuàng)建新的Vivado HLS工程3.鍵入vivado_hls p array_io_prj 來(lái)打開(kāi)vivado HLS 用戶界面工程4.打開(kāi)源代碼如圖69此設(shè)計(jì)具有一個(gè)輸入數(shù)組和一個(gè)輸出數(shù)組。在
23、C源代碼中的注釋說(shuō)明了輸入數(shù)組中的數(shù)據(jù)是如何有序作為一個(gè)通道和通道是怎么被計(jì)算的。理解設(shè)計(jì),您還可以查看試驗(yàn)平臺(tái)和文件result.golden.dat的輸入和輸出數(shù)據(jù)。Figure 69: C Code for Interface Synthesis Lab 3步驟2:綜合函數(shù)參數(shù)數(shù)組為RAM端口 在這一步中,查看數(shù)組端口是怎么綜合成RAM端口的。1綜合設(shè)計(jì),當(dāng)報(bào)告打開(kāi)時(shí)查看接口簡(jiǎn)介。接口簡(jiǎn)介表明了在C 源代碼中的數(shù)組參數(shù)是怎么綜合成默認(rèn)的RAM端口的。設(shè)計(jì)有時(shí)鐘,復(fù)位和默認(rèn)的塊級(jí)I/O協(xié)議ap_ctrl_hs(注意在報(bào)告中的時(shí)鐘) d_o參數(shù)已經(jīng)綜合成RAM端口(I/O協(xié)議ap_memor
24、y)數(shù)據(jù)端口(d_o_d0)地址端口(d_o_address0)芯片使能控制端口(d_o_ce0)和寫(xiě)使能端口(do_we0) d_i參數(shù)已經(jīng)被綜合成類似RAM接口,但有輸入數(shù)據(jù)端口(d_i_q0)沒(méi)有寫(xiě)使能端口,因?yàn)榻涌趦H讀數(shù)據(jù)。在這兩種情況下,數(shù)據(jù)端寬度是在C源代碼中的數(shù)據(jù)值的寬度(在這種情況下的16位整數(shù)),并且地址端口的寬度已被自動(dòng)調(diào)整大小匹配到的地址必須被存取的次數(shù)(5位的為32個(gè)地址)。把數(shù)組綜合成RAM端口是默認(rèn)的,您可以控制這些端口怎么用一些其他的選擇去實(shí)現(xiàn)。在實(shí)驗(yàn)3中的其余步驟演示這些選項(xiàng): 采用單端口RAM和雙端口RAM接口 采用FIFO接口 分割成離散的端口步驟3:采用雙
25、端口RAM和FIFO接口 高層次綜合讓你可以指定RAM接口為單端口還是雙端口。如果你不做出這樣的選擇,Vivado HLS 會(huì)自動(dòng)分析設(shè)計(jì)和選擇端口的數(shù)量,以便產(chǎn)生最大的數(shù)據(jù)速率。第二步用的單端口RAM接口,因?yàn)樵谠创a中的for循環(huán)是默認(rèn)的保持不展開(kāi),該循環(huán)每次迭代依次執(zhí)行: 讀輸入端口 從內(nèi)部RAM中讀累計(jì)的結(jié)果 和累計(jì)并且新數(shù)據(jù)寫(xiě)入到內(nèi)部RAM中 把結(jié)果寫(xiě)到輸出端口 重復(fù)循環(huán)的下一次迭代這確保單一輸入讀和輸出寫(xiě)入以往需要。即使采用多個(gè)輸入和輸出時(shí),內(nèi)部邏輯可以不采用額外端口。注意:如果你指定了雙端口RAM并且Vivado HLS 能確定必須只能用單端口,會(huì)使用單端口覆蓋雙端口規(guī)范。在這個(gè)
26、設(shè)計(jì),如果你想用多RTL端口實(shí)現(xiàn)數(shù)組參數(shù),首先得事情你必須展開(kāi)for循環(huán),并容許內(nèi)部操作是并行的,否則多端口沒(méi)有好處:沒(méi)有展開(kāi)的for循環(huán)可以確保在每次讀時(shí)有一個(gè)數(shù)據(jù)被讀。1 從工具欄中選擇New Solution或者從工程菜單來(lái)創(chuàng)建新的解決方案2 設(shè)置默認(rèn),點(diǎn)擊Finish3 保證C源代碼在信息窗口中可見(jiàn)4 在指令選項(xiàng)卡中,選擇for循環(huán),在for循環(huán)上并右擊打開(kāi)Directives Editor對(duì)話框。a. 在指令編輯對(duì)話框中激活指令下來(lái)菜單在上部并選擇展開(kāi)b. 指令編輯如圖71,點(diǎn)擊OK下次,為輸入讀指定雙端口RAM,資源指令指示RAM連接到接口的類型。5 在指令選項(xiàng)卡中,選擇port
27、d_i并右擊打開(kāi)指令編輯對(duì)話框a. 在指令編輯中在上部激活指令下拉菜單并選擇RESOURCE(in Dirctive)b. 點(diǎn)擊 core options 框并選擇RAM_2P_BRAMc. 確認(rèn)在指令編輯對(duì)話框中的設(shè)定,如圖72,點(diǎn)擊OK使用FIFO接口實(shí)現(xiàn)輸出端口6 在指令選項(xiàng)卡(Directive)中,選擇d_o,并右擊打開(kāi)Directives Editor對(duì)話框a. 在指令編輯對(duì)話框中,保持指令為Interface(接口)b. 從模式下拉菜單中,選擇ap_fifo.c. 點(diǎn)擊OK在Directive 標(biāo)簽展示了指令已經(jīng)應(yīng)用到設(shè)計(jì)中如圖737 綜合設(shè)計(jì)當(dāng)報(bào)告在信息窗口中打開(kāi)時(shí),接口摘要如
28、圖74 設(shè)計(jì)有標(biāo)準(zhǔn)的時(shí)鐘、復(fù)位、和塊級(jí)I/O端口 數(shù)組參數(shù)d_o已經(jīng)綜合成16位寬數(shù)據(jù)接口的FIFO接口(d_o_din),并且有相關(guān)聯(lián)的輸出寫(xiě)(d_o_write)和輸入FIFO滿(d_o_full)端口 參數(shù)d_i 已經(jīng)實(shí)現(xiàn)為雙端口RAM接口根據(jù)使用的雙端口RAM接口,設(shè)計(jì)能接受兩倍于原始設(shè)計(jì)輸入數(shù)據(jù)的速率。但采用單端口FIFO接口的輸出數(shù)據(jù)速率和先前的一樣。步驟:分區(qū)RAM和FIFO陣列接口 在這步中,您可以學(xué)習(xí)到分區(qū)數(shù)組接口如何劃分為任意接口數(shù)量1. 從工具欄中選擇New Solution或者從工程菜單來(lái)創(chuàng)建新的解決方案2. 設(shè)置默認(rèn),點(diǎn)擊Finish3. 保證C源代碼在信息窗口中可見(jiàn)
29、4. 在指令標(biāo)簽中,選擇d_o并右擊打開(kāi)Directives Editor對(duì)話框a. 在指令標(biāo)簽對(duì)話框上部激活指令下拉菜單,并選擇ARRAY_PARTITIONb. 點(diǎn)擊類型下拉菜單,并選擇塊,為了將分布式數(shù)組綜合成塊c. 在Factor對(duì)話框中,輸入值d. 指令編輯如圖所示,點(diǎn)擊現(xiàn)在,輸入數(shù)組分為兩大塊(不是個(gè))在指令標(biāo)簽中,選擇d_i并重復(fù)前面的步驟,但這次分區(qū)端口factor用指令標(biāo)簽展示了現(xiàn)在應(yīng)用在設(shè)計(jì)中的指令綜合設(shè)計(jì)當(dāng)報(bào)告在信息窗口中打開(kāi),接口摘要如圖顯示 設(shè)計(jì)有標(biāo)準(zhǔn)的時(shí)鐘、復(fù)位、和塊級(jí)I/O端口 數(shù)組參數(shù)d_o已經(jīng)綜合成四個(gè)分離的FIFO接口 參數(shù)d_i 已經(jīng)實(shí)現(xiàn)為兩個(gè)分離RAM接
30、口,每一個(gè)都是用雙端口,(如果你看到個(gè)分離RAM接口,確認(rèn)分區(qū)因素d_i是2,而不是4)。如果輸入端口d_i被劃分為四個(gè),僅需要為每個(gè)端口分配單端口RAM接口。因?yàn)檩敵龆丝谥荒芤淮屋敵鏊膫€(gè)值,一次讀個(gè)輸入,沒(méi)有什么好處。在本教程中對(duì)數(shù)組的最后一步是完全分割的陣列。步驟:全分區(qū)數(shù)組接口 這一步向您展示了如何分割數(shù)組接口為單獨(dú)的端口. 從工具欄中選擇New Solution或者從工程菜單來(lái)創(chuàng)建新的解決方案. 設(shè)置默認(rèn),點(diǎn)擊Finish。包括從solution3拷貝現(xiàn)存的指令. 保證C源代碼在信息窗口中可見(jiàn). 在指令標(biāo)簽中,為d_o選擇已存在的分區(qū)指令. 右擊,并選擇Modify Directive
31、在指令編輯對(duì)話框中a激活Type下拉菜單,改變分區(qū)格式為Completeb. 在因素(Factor)對(duì)話框中,你可以刪除,或保留。這個(gè)因素對(duì)這種分區(qū)類型沒(méi)有作用。c. 指令編輯如圖,點(diǎn)擊在指令標(biāo)簽中,選擇d_i并重復(fù)前面的步驟,完成對(duì)d_i的全分區(qū)或者,您可以刪除d_i指定資源的指令。如果陣列被劃分為單獨(dú)的元素,指定了一個(gè)內(nèi)存資源的資源指令將被忽略。指令標(biāo)簽展示了應(yīng)用在設(shè)計(jì)中的指令綜合設(shè)計(jì)當(dāng)報(bào)告在信息窗口中打開(kāi),查看接口摘要,注意以下: 設(shè)計(jì)有標(biāo)準(zhǔn)的時(shí)鐘、復(fù)位、和塊級(jí)I/O端口 數(shù)組參數(shù)d_o已經(jīng)綜合成個(gè)分離的FIFO接口 用個(gè)分離的表口對(duì)參數(shù)d_i 的已經(jīng),因?yàn)闉檩斎肽J(rèn)接沒(méi)有I/O協(xié)議。他
32、們有I/O協(xié)議ap_none盡管該教程的焦點(diǎn)在專門(mén)的I/O接口上,在這一點(diǎn)上是值得研究四種解決方案在性能上的差異。10. 從工具欄里選擇比較報(bào)告,或從工程菜單中打開(kāi)方案的比較11在Solution Selection Dialog框中,為四種解決方案中每種添加選擇方案框如圖8112點(diǎn)擊OK打開(kāi)解決方案的比較報(bào)告(圖82),它表明solution4,為每個(gè)陣列元素試用了唯一的端口,比以前的解決方案快得多。內(nèi)部邏輯可以盡可能快的獲得數(shù)據(jù),只要它需要訪問(wèn)數(shù)據(jù)。(這里是因?yàn)槎丝诘脑L問(wèn)沒(méi)有性能瓶頸。)鼠標(biāo)滑輪往下滑查看比較報(bào)告(圖83),并注意與更多的I / O端口解決方案(解決方案2,3和4),允許更
33、多的并行處理但也用相當(dāng)多的資源在接下來(lái)的練習(xí)中,用端口和資源之間的最佳平衡,您將實(shí)現(xiàn)同樣的設(shè)計(jì)。除了實(shí)現(xiàn)這個(gè)優(yōu)化,接下來(lái)的練習(xí)中展示了如何把AXI4接口添加到設(shè)計(jì)中。13退出Vivado HLS界面并返回到命令提示符。學(xué)習(xí)Vivado第4章lab4實(shí)現(xiàn)AXI4接口概述這個(gè)練習(xí)說(shuō)明了在I/O端口中指定AXI4總線接口,這個(gè)練習(xí)除了增加AXI4接口外還展示了如何創(chuàng)建一個(gè)用接口和邏輯指令一起優(yōu)化的設(shè)計(jì)。步驟1:創(chuàng)建和打開(kāi)工程1.在先前的lab中用Vivado HLS命令提示符,更改為lab4目錄2.鍵入vivado_hls -f run_hls.tcl來(lái)創(chuàng)建新的Vivado HLS工程3.鍵入viv
34、ado_hls -p axi_interfaces_prj 來(lái)打開(kāi)vivado HLS 用戶界面工程4.打開(kāi)源代碼如圖84此設(shè)計(jì)用的是和Lab3一樣的源代碼,并在設(shè)計(jì)重命名axi_interfaces步驟2:創(chuàng)建采用AXI4 流接口的一個(gè)優(yōu)化設(shè)計(jì)在這種設(shè)計(jì)最佳性能實(shí)現(xiàn)中,每個(gè)通道的數(shù)據(jù)將進(jìn)行并行處理,每個(gè)通道以專用硬件實(shí)現(xiàn)。理解的關(guān)鍵是如何最好地執(zhí)行這種優(yōu)化,是要認(rèn)識(shí)到在輸入和輸出數(shù)組中的通道讓他們自己成為循環(huán)分區(qū)。循環(huán)分區(qū)是Vivado HLS用戶指南中有全面的解釋(UG902,但基本上意味著每個(gè)數(shù)組元素,又存儲(chǔ)在不同分區(qū)中。)在本練習(xí)中,您指定的數(shù)組參數(shù),以實(shí)現(xiàn)為AXI4流接口。如果該數(shù)組
35、被劃分成多個(gè)通道,你可以通過(guò)在并行設(shè)計(jì)中為每個(gè)端口元素實(shí)現(xiàn)相同的流接口。最后,如果在I / O端口被配置為提供和利用通道數(shù)據(jù)時(shí),for循環(huán)的局部展開(kāi)可以為每個(gè)通道確保專用硬件處理。首先,分區(qū)陣列:1:保證C源代碼在信息窗口中打開(kāi)2:在指令標(biāo)簽中,選擇d_o并右擊打開(kāi)指令編輯對(duì)話框。a. 選擇上部Directives中的下拉菜單,并選擇ARRAY_PARTITIONb. 點(diǎn)擊Type的下拉菜單,并指定為cyclic分區(qū)c. 在Factor對(duì)話框中,輸入8,創(chuàng)建8個(gè)分區(qū)(這個(gè)結(jié)果在8個(gè)端口中)d. 在指令編輯對(duì)話框中填充如圖85,點(diǎn)擊OK3:在指令標(biāo)簽中,選擇d_o并右擊打開(kāi)Directives
36、Editor對(duì)話框a. 激活上部Directives下拉菜單,選擇INTERFACEb. 點(diǎn)擊Mode下拉菜單,指定axis接口c. 點(diǎn)擊OK4:在指令標(biāo)簽中,選擇d_i并重復(fù)上述步驟2和步驟3。a. 應(yīng)用cyclic分區(qū)并且Factor為8b. 應(yīng)用axis接口5:下一步,對(duì)for循環(huán)進(jìn)行局部展開(kāi)和流水線操作。a. 在指令標(biāo)簽中,選擇For_Loop并且右擊打開(kāi)Directives Editor對(duì)話框b. 激活上部的Directives下拉菜單,選擇UNROLLI 選擇因素8(factor 8)部分展開(kāi)for循環(huán),這等同于重寫(xiě)C代碼以每一次循環(huán)迭代中執(zhí)行8個(gè)循環(huán)體的復(fù)制(其中,新的循環(huán)僅在總執(zhí)行用于四次迭代,而不是32)。II 點(diǎn)擊OKc. 在指令標(biāo)簽中,選擇For_loop并右擊打開(kāi)Directives Editor對(duì)話框。I 激活上部的Directives下拉菜單,并選擇PIPELINEII 保持間隔空白,讓他默認(rèn)為1III 選擇enable loop rewinding(使能重復(fù)循環(huán))IV 點(diǎn)擊OK當(dāng)設(shè)計(jì)頂層是循環(huán),你可以用選擇流水線重復(fù),這個(gè)通知vivado HLS 在RTL實(shí)現(xiàn)中,這個(gè)循環(huán)連續(xù)運(yùn)行(與功能和功能
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版明星代言合同合作方責(zé)任與義務(wù)協(xié)議4篇
- 建設(shè)工程設(shè)計(jì)合同(2篇)
- 2025年度個(gè)人貸款還款計(jì)劃合同模板8篇
- 中央處理器GPU:性能躍遷與行業(yè)應(yīng)用的深度剖析 頭豹詞條報(bào)告系列
- 二零二五年度民間擔(dān)保機(jī)構(gòu)與企業(yè)合作協(xié)議4篇
- 2025年西瓜種植與環(huán)保節(jié)能技術(shù)合作合同3篇
- 語(yǔ)言區(qū)繪本故事課程設(shè)計(jì)
- 水源熱泵施工方案
- 2025年度個(gè)人果園果樹(shù)種植與農(nóng)產(chǎn)品品牌建設(shè)合作協(xié)議4篇
- 錘鍛件課程設(shè)計(jì)
- 常用靜脈藥物溶媒的選擇
- 2023-2024學(xué)年度人教版一年級(jí)語(yǔ)文上冊(cè)寒假作業(yè)
- 當(dāng)代西方文學(xué)理論知到智慧樹(shù)章節(jié)測(cè)試課后答案2024年秋武漢科技大學(xué)
- 2024年預(yù)制混凝土制品購(gòu)銷協(xié)議3篇
- 2024-2030年中國(guó)高端私人會(huì)所市場(chǎng)競(jìng)爭(zhēng)格局及投資經(jīng)營(yíng)管理分析報(bào)告
- GA/T 1003-2024銀行自助服務(wù)亭技術(shù)規(guī)范
- GB/T 18488-2024電動(dòng)汽車用驅(qū)動(dòng)電機(jī)系統(tǒng)
- 門(mén)診特定病種待遇認(rèn)定申請(qǐng)表
- 混合離子交換器使用說(shuō)明書(shū)正本
- 工傷保險(xiǎn)待遇及案例分析PPT課件
- 自控工程識(shí)圖
評(píng)論
0/150
提交評(píng)論