組合電路在 HLS 中的重要性
該項目通過一個示例演示了 HLS 中組合電路對設計的影響。
在 HLS 中描述組合任務非常重要,因為它直接影響整個系統的性能。這里我舉一個簡單的例子來解釋一下這個問題。
介紹
高級綜合工具將算法轉換為等效的 RTL 描述。該描述代表邏輯電路,可以通過ASIC或FPGA技術來綜合。
邏輯電路可以是以下兩種類型之一:組合電路或時序電路。組合電路的輸出僅是其輸入上的當前邏輯值的函數。如圖1所示,只需使用基本邏輯門即可實現組合電路,不需要存儲單元。
圖1
另一方面,時序電路的輸出不僅取決于其輸入的當前值,還取決于過去時間的輸入值的歷史記錄。
電路狀態通常模擬輸入值歷史的影響。一組存儲單元可以代表這些狀態。
圖2
圖2顯示了由組合電路和一組保存電路狀態的存儲單元組成的時序電路的結構。存儲器單元可以是觸發器、BRAM或DDR存儲器的形式。
組合部分接收兩組數據:主輸入和狀態。然后它生成兩組輸出:主要輸出和下一個狀態。系統中的其他模塊使用主輸出,而下一個狀態數據修改存儲單元并定義新的電路狀態。
動機
所有組合電路都需要一個時間間隔,以便在其輸入發生任何變化后產生穩定的輸出。這個時間被稱為傳播延遲。組合電路中從輸入到輸出的不同路徑可能具有各種延遲。最長路徑也稱為關鍵路徑,被定義為設計傳播延遲。
在時序電路中,時鐘周期對設計性能有直接影響。圖 2 中組合部分的傳播延遲決定了最小時鐘周期。因此,它的好壞直接影響到整個系統的性能。
時序電路通常需要幾個時鐘周期來完成其相關任務。所需時鐘周期的最大數量稱為設計延遲。組合部分也對相關時序電路的延遲有直接影響。
因此,了解如何在 HLS 中設計高效的組合電路是在硬件上開發高性能算法的第一步。
組合電路的影響
在這里,將通過一個例子來解釋正確的 C/C++ 描述組合設計如何能夠加快實現速度。
假設我們要在如圖 3 所示的 Basys3 FPGA 評估板上可用的四個七段上顯示數字的四位十進制數字。
圖3
第一步是提取四位十進制數字,然后找到每個數字對應的七段代碼,并將代碼發送到板上的段選擇上。這里我只解釋第一個任務,即提取四位小數。
讓我們考慮以下 Vivado-HLS 代碼,該代碼提取 4 位無符號整數的十進制數字。設計頂部函數是extract_decimal_digits ,它接受輸入參數(即a )并生成四個輸出(即 digital_1、digit_2、digit_3、digit_4)。它調用函數get_digit四次來提取每個數字。get_digit函數提取接收到的號碼的第一位數字,然后對其進行修改。
如果我們執行高級綜合過程來生成等效的 RTL 設計,則圖 5 顯示了 Basys3 板的報告。Vivado-HLS 綜合過程利用參數化的 Xilinx LogiCORE 除法器內核來實現模運算。該代碼具有流水線結構。
可以看出,設計時鐘周期約束為10 ns(用1注釋)。流水線設計需要 35 個周期來完成其任務,即 0.35 us(用 2 表示)。此外,它還使用了 12 個 DSP、1474 個 FF 和 1057 個 LUT。
圖5
現在讓我們考慮以下實現,將模運算替換為其等效的算術表達式,即 a%10 = a – 10*(a/10)。如果我們直接使用這個表達式,編譯器會優化代碼,再次使用模運算,并生成相同的 RTL 描述。為了阻止編譯器優化代碼,我使用了一個單獨的子函數來執行除 10 運算符。另外,還關閉了編譯器函數內聯功能。
現在,如果我們綜合此代碼,圖 7 將顯示相應的報告。
該電路完全由組合電路搭建。電路傳播延遲為23.607 ns,使用28個DSP和262個LUT。
圖7
比較這兩種實現方式:圖 8 顯示了比較結果。在該圖中,“Solution 1”對應于使用模運算符的第一種方案,“Solution 2”代表第二種方案。
可以看出,第一種方案需要 35 個時鐘周期,由于時鐘周期為 10 ns,因此需要 350 ns才能生成輸出。然而,第二種方案只需要 23.607 ns 即可生成輸出。所以第二個實現速度快了 14.83 倍。
此外,第二種方案在 FPGA 上使用的資源要少得多。
結論
設計高效的組合電路是在 HLS 中開發算法或系統控制器的第一步。多種優化技術和編碼風格可用于描述復雜算法的組合部分。
審核編輯:劉清
-
邏輯電路
+關注
關注
13文章
502瀏覽量
43234 -
asic
+關注
關注
34文章
1244瀏覽量
122128 -
RTL
+關注
關注
1文章
388瀏覽量
60801 -
組合電路
+關注
關注
0文章
11瀏覽量
6770 -
HLS
+關注
關注
1文章
132瀏覽量
24713
原文標題:組合電路在 HLS 中的重要性
文章出處:【微信號:Open_FPGA,微信公眾號:OpenFPGA】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
如何使用AMD Vitis HLS創建HLS IP

探索Vivado HLS設計流,Vivado HLS高層次綜合設計
如何在HLS 14.3中編寫pow功能?
如何使用Vivado HLS生成了一個IP
合成中的Vivado HLS中的Pragma錯誤怎么解決
【正點原子FPGA連載】第一章HLS簡介-領航者ZYNQ之HLS 開發指南
Vivado HLS設計流的相關資料分享
FPGA高層次綜合HLS之Vitis HLS知識庫簡析
使用Vitis HLS創建屬于自己的IP相關資料分享
HLS中RTL無法導出IP核是為什么?
hls協議是什么?hls協議詳細介紹
FPGA設計中的HLS 工具應用

評論