本文解釋了流水線及其對 FPGA 的影響,即延遲、吞吐量、工作頻率的變化和資源利用率。
對FPGA(現場可編程門陣列)進行編程是一個定制其資源以實現特定邏輯功能的過程。這涉及使用 FPGA 的基本構建塊(如可配置邏輯塊(CLB)、專用多路復用器等)對程序指令進行建模,以滿足數字系統的要求。
在設計過程中,要考慮的一個重要標準是系統固有的時序問題,以及用戶規定的任何約束。可以幫助設計人員實現這一目標的一種設計機制是流水線。
什么是流水線?
流水線是一種能夠并行執行程序指令的過程。您可以在下面看到流水線處理器架構的可視化表示。
圖 1.
流水線處理器架構的可視化表示。每個方塊對應一條指令。正方形使用不同顏色傳達了指令相互獨立的事實。圖片由
Colin ML Burnett
[
CC-BY-SA-3.0
] 提供。
在 FPGA 中,這是通過以特定方式排列多個數據處理塊來實現的。為此,我們首先將整個邏輯電路分成幾個小部分,然后使用寄存器(觸發器)將它們分開。
讓我們通過一個例子來分析一下FPGA設計流水線化的模式。
一個例子
讓我們看一下在四個輸入數組上進行三個乘法和一個加法的系統。因此,我們的輸出y i將等于 ( a i × b i × c i ) + d i。
非流水線設計
想到創建這樣一個系統的第一個設計是乘法器,然后是加法器,如圖 2a 所示。
圖 2a。
非流水線 FPGA 設計示例。圖片由 Sneha HL 創建
在這里,我們期望操作序列是a i和b i數據乘以乘數 M 1,然后是其乘積與c i乘以乘數 M 2 ,最后將結果乘積與d i相加加法器 A 1。
然而,當系統設計為同步時,在第一個時鐘滴答時,只有乘法器 M1 可以在其輸出端產生有效數據 ( a 1 × b 1 )。這是因為,此時,與 M 2和 A 1不同,只有 M 1在其輸入引腳處具有有效數據(a 1和b 1 ) 。
在第二個時鐘節拍中,M 1和 M 2的輸入引腳上都會有有效數據。但是,現在我們需要確保只有 M 2運行,而 M 1保持其輸出不變。這是因為,此時,如果 M 1運行,則其輸出線變為 ( a 2 × b 2 ) 而不是其預期值 ( a 1 × b 1 ),從而導致錯誤的 M 2輸出 ( a 2 × b 2 × c 1 ) 而不是 ( a 1 ×b 1 × c 1 )。
當時鐘第三次滴答作響時,所有三個組件都會有有效輸入:M 1、M 2和 A 1。盡管如此,我們只希望加法器能夠運行,因為我們期望輸出為y 1 = ( a 1 × b 1 × c 1 + d 1 )。這意味著系統的第一個輸出將在第三個時鐘滴答之后可用。
接下來,隨著第四個時鐘滴答的到來,M 1可以對下一組數據進行操作:a 2和b 2。 但此時,M 2和 A 1預計空閑。這之后必須在第五個時鐘節拍激活 M 2 -只有M 2 - 在第六個時鐘節拍激活 A 1 -只有A 1。這確保了我們的下一個輸出, y 2 = ( a 2 × b 2 × c 2 + d 2)。
當組件遵循類似的激勵模式時,我們可以預期下一個輸出發生在時鐘節拍 9、12、15 等處(圖 2b)。
圖 2b。
流水線設計
現在,假設我們在輸入(R 1到 R 4)、M 1和 M 2之間(分別為 R 5和 R 8)以及沿直接輸入路徑(R 6、R 7、和 R 9 ),如圖 3a 所示。
圖 3a。
流水線 FPGA 設計示例。Sneha HL 創建的圖像和表格
這里,在第一個時鐘滴答聲中,有效輸入僅出現在寄存器 R 1到 R 4(分別為 a 1、b 1、c 1和d 1)和乘法器 M 1(a 1和b 1)。結果,只有這些才能產生有效的輸出。此外,一旦 M 1產生它的輸出,它就會被傳遞到寄存器 R 5并存儲在其中。
在第二個時鐘滴答聲中,存儲在寄存器 R 5和 R 6(a 1 × b 1和c 1)中的值顯示為 M 2的輸入,這使其能夠將其輸出呈現為a 1 × b 1 × c 1,而R 4 ( d 1 ) 的輸出被轉移到寄存器R 7。同時,即使是第二組數據(a 2、b 2、c 2和d 2) 進入系統并出現在 R 1到 R 4的輸出端。
在這種情況下,允許 M 1對其輸入進行操作,以使其輸出線從a 1 × b 1變為a 2 × b 2,這與非流水線設計的情況不同。這是因為,在本設計中,M 1輸出的任何變化都不會影響 M 2的輸出。這是因為確保 M 2正確功能所需的數據在第一個時鐘節拍期間已經鎖存在寄存器 R 5中(并且即使在第二個時鐘節拍時也保持不受干擾)。
這意味著寄存器 R 5的插入使 M 1和 M 2在功能上獨立,因此它們都可以同時對不同的數據集進行操作。
接下來,當時鐘第三次滴答作響時,寄存器R 8和R 9的輸出(( a 1 × b 1 × c 1 )和d 1 )作為輸入傳遞給加法器A 1。結果,我們得到第一個輸出y 1 = (( a 1 × b 1 × c 1 ) + d 1 )。盡管如此,在同一時鐘滴答聲中,M 1和 M 2將可以自由操作 ( a 3 , b 3) 和 ( a 2 , b 2 , c 2 )。這是可行的,因為存在將塊M 1與M 2隔離的寄存器R 5和將乘法器M 2與加法器A 1隔離的R 8。
因此,在第三個時鐘滴答處,我們甚至可以分別從 M 1和 M 2得到 ( a 3 × b 3 ) 和 ( a 2 × b 2 × c 2 ) ,除了y 1。
現在,當第四個時鐘滴答到達時,加法器 A 1對其輸入進行運算以產生第二個輸出,y 2 = (( a 2 × b 2 × c 2 ) + d 2 )。此外,M 1的輸出從 ( a 3 × b 3 ) 變為 ( a 4 × b 4 ),而 M 2的輸出從 ( a 2 × b 2 × c 2 ) 變為 ( a 3 × b3 × c 3 )。
在遵循相同的操作模式時,我們可以預期從那時起每個時鐘滴答都會出現一個輸出數據(圖 3b),這與非流水線設計的情況不同,在非流水線設計的情況下,我們必須等待三個時鐘周期才能獲得每個輸出數據(圖 2b)。
流水線的后果
潛伏
在所示示例中,流水線設計顯示為從第三個時鐘周期開始為每個時鐘節拍產生一個輸出。這是因為每個輸入必須經過三個寄存器(構成流水線深度),同時在到達輸出之前進行處理。類似地,如果我們有一個深度為n的管道,那么有效輸出僅從第n個時鐘滴答開始在每個時鐘周期出現一個。
這種與第一個有效輸出出現之前丟失的時鐘周期數相關的延遲稱為延遲。流水線階段的數量越多,與之相關的延遲就越大。
增加工作時鐘頻率
圖 2a 所示的非流水線設計每三個時鐘周期產生一個輸出。也就是說,如果我們有一個周期為 1 ns 的時鐘,那么輸入需要 3 ns (3 × 1 ns) 來處理并顯示為輸出。
然后這條最長的數據路徑將成為關鍵路徑,它決定了我們設計的最小工作時鐘頻率。換言之,所設計系統的頻率必須不大于 (1/3 ns) = 333.33 MHz,以確保令人滿意的操作。
在流水線設計中,一旦流水線填滿,每個時鐘滴答都會產生一個輸出。因此我們的工作時鐘頻率與定義的時鐘頻率相同(此處為 1/1ns = 1000 MHz)。
這些數字清楚地表明,與非流水線設計相比,流水線設計大大增加了操作頻率。
吞吐量增加
流水線設計每個時鐘周期產生一個輸出(一旦克服延遲),無論設計中包含的流水線級數如何。因此,通過設計流水線系統,我們可以提高 FPGA 的吞吐量。
更好地利用邏輯資源
在流水線中,我們使用寄存器來存儲設計各個階段的結果。這些組件增加了設計使用的邏輯資源,使其在硬件方面非常龐大。
結論
流水線化設計的行為非常詳盡。您需要在適當的時刻將整個系統劃分為各個階段,以確保最佳性能。盡管如此,投入其中的辛勤工作與其在設計執行時所呈現的優勢相當。
-
FPGA
+關注
關注
1638文章
21856瀏覽量
609510 -
現場可編程門陣列
+關注
關注
1文章
20瀏覽量
4793
發布評論請先 登錄
相關推薦
請教verilog中流水線技術的用途?
FPGA重要設計思想及工程應用之流水線設
FPGA之流水線練習5:設計思路
FPGA之流水線練習(3):設計思路
FPGA之為什么要進行流水線的設計
如何選擇合適的LED生產流水線輸送方式
嵌入式_流水線

評論