Vivado HLS中綜合時指定埠綜合型別

2021-09-25 12:14:13 字數 1885 閱讀 2126

**

如果你對vivado hls中綜合之後埠的ap_none之類的型別指示摸不著頭腦的話,那就來一起學習一下它們是如何使用的吧。在vivado hls中,我們可以指定埠使用的型別,這樣在對c**進行綜合的時候,就可以指定某個埠所使用的轉換協議了。常見的型別有:

1. ap_none

預設型別,該型別不適用任何i/o轉換協議,它用於表示唯讀的輸入訊號,對應於hdl中的wire型別。

2. ap_stable

只用於輸入訊號,其具體實現方式仍為ap_none。它用於向vivado hls的綜合器表明該訊號在兩次復位之間值是不變的。

3. ap_vld

在資料埠port_name的基礎上建立乙個額外的資料有效訊號指示< port_name >_vld。

4. ap_ack

在資料埠port_name的基礎上建立乙個額外的應答訊號指示< port_name >_ack。

5. ap_hs

使用該型別,則會同時建立額外的資料有效訊號和應答訊號,其效果相當於ap_vld與ap_ack之和。

6. ap_ovld

對於輸入訊號,其效果與ap_none是一樣的。

對於輸出訊號,其效果與ap_vld是一樣的。

對於雙向(inout)型別的訊號,輸入使用ap_none,輸出使用ap_vld進行處理。

7. ap_memory

把對陣列的讀寫等效為對外部ram的引用。

8. ap_fifo

把對陣列、指標和引數引用的讀寫用fifo的方式來實現。

9. ap_bus

把對指標和引數引用的讀寫用匯流排介面的方式來實現。

對上述9種資料埠型別的定義,我們在c**中可以使用下面的預處理指令來宣告:

#pragma hls inte***ce register port=

其中,mode就是這裡提到的資料埠型別,string則指需要指定埠型別的埠名稱,例如:

#pragma hls inte***ce ap_none port=in1

在tcl指令碼中,我們也可以對介面型別進行更改。在圖形化的開發介面中,可以直接在directives.tcl中進行規則的編輯,如圖1所示。

圖1 通過tcl配置改變埠型別

此外,我們還可以通過在vivado hls中的directive檢視中選擇inte***ce來進行更改,如圖1所示。

圖2 介面的型別選擇

接下來以乙個簡單的例子來看看改變介面型別對綜合結果的影響。首先,建立乙個工程,它的源**就是簡單的三個輸入相加:

void adders_io(int in1, int in2, int *in_out1)

這裡我們使用了指標。從其本質上來說,指標是乙個「雙向」的型別,即它即可以做為輸入,同時也可以用來輸出。在預設的情況下,埠的綜合結果如圖3所示。

圖3 預設情況下的埠綜合結果

如果按照圖1中的示例對埠型別進行指定,則c綜合之後的結果如圖4所示。

圖4 自定義埠型別之後的埠綜合結果

在圖1的示例中,我們指定了埠的型別,所以對比圖3與圖4,可以看出,埠in1和in2的型別從預設的ap_none變為自定義的ap_vld,並且分別具有了對應的資料有效指示位in1_ap_vld和in2ap_vld。

關於Quartus II工程綜合時間過長問題的解決

因為我的工程比較大,綜合時間有點長,之後在上面做影象處理演算法的實現,然後發現加上這個模組之後綜合的時間特別就,達到了3個小時,查閱了好多資料也不知道怎麼去解決這個問題,今天聽一位高人指點,終於解決了這個問題,於是就想把這個解決方案記錄下來。首先說明一下我的工程環境,我用的是quartus ii 6...

python 聚合 python中的聚合時間序列

我們如何按小時或精細粒度彙總時間序列?如果我有如下的時間序列,那麼我希望按小時聚合值.大熊貓是否支援它,或者在 python中有一種漂亮的方式嗎?timestamp,value 2012 04 30t22 25 31 00 00,1 2012 04 30t22 25 43 00 00,1 2012 ...

python 聚合 python中的聚合時間序列

如何按小時或分鐘粒度聚合時間序列?如果我有乙個像下面這樣的時間序列,那麼我希望這些值按小時聚合。熊貓支援它還是用python有乙個很好的方法?timestamp,value 2012 04 30t22 25 31 00 00,1 2012 04 30t22 25 43 00 00,1 2012 04...