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