天天看點

【FPGA】流水線學習筆記

所謂流水線設計實際上就是把規模較大、層次較多的組合邏輯電路分為幾個級,在每一級插入寄存器組暫存中間資料。K 級的流水線就是從組合邏輯的輸入到輸出恰好有 K 個寄存器組(分為 K 級,每一級都有一個寄存器組)上一級的輸出是下一級的輸入而又無回報的電路。

【FPGA】流水線學習筆記

圖 5.6 表示了如何将把組合邏輯設計轉換為相同組合邏輯功能的流水線設計。這個組合邏輯包括兩級。第一級的延遲是 T1 和 T3 兩個延遲中的最大值;第二級的延遲等于 T2 的延遲。為了通過這個組合邏輯得到穩定的計算結果輸出,需要等待的傳播延遲為[max(T1,T3)+T2]個時間機關。在從輸入到輸出的每一級插入寄存器後,流水線設計的第一級寄存器所具有的總的延遲為 T1 與 T3 時延中的最大值加上寄存器的 Tco(觸發時間)。同樣,第二級寄存器延遲為 T2 的時延加上 Tco。采用流水線設計為取得穩定的輸出總體計算周期為:

max(max(T1,T3)+Tco,(T2+Tco))

流水線設計需要兩個時鐘周期來擷取第一個計算結果,而隻需要一個時鐘周期來擷取随後的計算結果。開始時用來擷取第一個計算結果的兩個時鐘周期被稱為采用流水線設計的首次延遲(latency)。

對于 CPLD 來說,器件的延遲如 T1、T2 和 T3 相對于觸發器的 Tco 要長得多,并且寄存器的建立時間 Tsu 也要比器件的延遲快得多。隻有在上述關于硬體時延的假設為真的情況下,流水線設計才能獲得比同功能的組合邏輯設計更高的性能。

采用流水線設計的優勢在于它能提高吞吐量(throughput)。假設 T1、T2 和 T3 具有同樣的傳遞延遲 Tpd。對于組合邏輯設計而言,總的延遲為 2*Tpd。對于流水線設計來說,計算周期為(Tpd+Tco)。前面提及的首次延遲(latency)的概念實際上就是将(從輸入到輸出)最長的路徑進行初始化所需要的時間總量;吞吐延遲則是執行一次重複性操作所需要的時間總量。在組合邏輯設計中,首次延遲和吞吐延遲同為 2*Tpd。與之相比,在流水線設計中,首次延遲是 2*(Tpd+Tco),而吞吐延遲是 Tpd+Tco。如果 CPLD 硬體能提供快速的Tco,則流水線設計相對于同樣功能的組合邏輯設計能提供更大的吞吐量。典型的富含寄存器資源的 CPLD 器件(如 Lattice 的 ispLSI 8840)的 Tpd 為 8.5ns,Tco 為 6ns。

流水線設計在性能上的提高是以消耗較多的寄存器資源為代價的。對于非常簡單的用于資料傳輸的組合邏輯設計,例如上述例子,将它們轉換成流水線設計可能隻需增加很少的寄存器單元。随着組合邏輯變得複雜,為了保證中間的計算結果都在同一時鐘周期内得到,必須在各級之間加入更多的寄存器。如果需要在 CPLD 中實作複雜的流水線設計,以擷取更優良的性能,具有豐富寄存器資源的 CPLD 結構并且具有可預測的延遲這兩大特點的 FPGA是一個很有吸引力的選擇。

具體的案例我就不舉例了,因為我看不懂!

下面直接給結論:

改為流水線結構是提高組合邏輯吞吐量進而增強計算性能的一個重要辦法。為擷取高性能所付出的代價是要使用更多的寄存器。要實作這樣大規模的運算部件,隻含少量寄存器資源的普通 PLD 器件是無法辦到的,必須使用擁有大量寄存器資源的 CPLD 或 FPGA 器件或設計專用的 ASIC。

當用 Verilog 語言描述流水線結構的運算部件時,要使用結構描述,才能夠真正綜合成設計者想要的流水線結構。簡單的運算符表達式隻有在綜合庫中存有相應的流水線結構的宏庫部件時,才能綜合成流水線結構進而顯著地提高運算速度。(希望綜合庫中有吧) 從這一意義上來說,深入了解和掌握電路的結構是進行高水準 HDL 設計的基礎。

最後給出一個純英文的文檔,我還沒耐心去讀,應該還不錯:http://www-inst.eecs.berkeley.edu/~cs61c/sp15/lec/13/2015Sp-CS61C-L13-kavs-Pipelining-1up.pdf