官术网_书友最值得收藏!

1.4.3 流水原則

流水原則是指要求我們在設計中使用流水線設計方法將數據處理流程分割為若干個子步驟,使數據在這些子步驟中流動起來。

如圖1-38所示,假定某處理流程可分解為讀操作、計算操作和寫操作3個步驟,采用流水線方式就是在這3個步驟之間插入流水寄存器。這樣處理流程就由順序方式變為流水線方式,順序方式和流水線方式如圖1-39所示,這樣帶來的好處也是顯而易見的,不僅提高了處理速度,而且降低了從輸入到輸出的總時鐘周期個數(Latency)。使用流水線技術是有要求的:數據流是單向流動,不存在反饋支路。流水線技術也體現了FPGA處理數據的特征:動態處理。

圖1-38

圖1-39

利用這個思想,從微觀角度而言,我們可以把一段長路徑切割為多段短路徑,在每段短路徑之間插入流水寄存器以暫存中間數據,目的仍是將一個大操作分解為若干個小操作,而每個小操作比大操作的延時要小,因此可以提高時鐘頻率,同時,各個小操作可以并行執行,因此又能提高數據吞吐率。如圖1-40所示,圖中,上部路徑有6個LUT,僅從邏輯延時的角度來看,總邏輯延時為6TiloTilo為LUT從輸入到輸出的延時)。現將這6個LUT分為兩組,在兩組LUT之間插入寄存器,從而形成兩條時序路徑,每條時序路徑的邏輯延時降低至3Tilo。這實際上是將路徑的邏輯級數由6降至3。從這個角度而言,流水線技術也是修復時序違例的一種方法。

圖1-40

FPGA芯片內觸發器的個數遠遠多于LUT的個數,如UltraScale SLICE內有8個LUT,但有16個觸發器。因此,對于邏輯級數較高的路徑,可通過插入流水寄存器的方法改善其時序性能。那么,如何判斷邏輯級數是否過高呢?通常,一個“LUT+一根走線”的延遲為0.5ns(經驗值,適用于Xilinx 7系列FPGA和UltraScale/UltraScale+FPGA),假定寄存器時鐘周期為T,那么該路徑所能承載的最大邏輯級數為T/0.5,也就是2T。如果邏輯級數大于2T,而時序未能收斂,就可以懷疑時序違例跟邏輯級數較高有關。

盡管流水寄存器對改善時序有所幫助,但并不意味著流水寄存器越多越好。事實上,過重的流水會導致觸發器的利用率增加,這也意味著觸發器控制集增加,從而會引發布線擁塞。同時應注意,增加流水寄存器會導致Latency(Latency的具體含義請參考本書1.5節)發生變化。從圖1-40中不難看出,上部路徑Latency為2,下部路徑Latency為3。

流水線方式的另一種形式是乒乓操作,如圖1-41所示。輸入數據流通過1:2解復用器分時流向兩個數據緩存模塊。為便于說明,假定每4個數據構成待處理的一幀數據,形成如圖1-42所示的時序圖。當selx為0時,數據流向數據緩存模塊1,相應的數據緩存模塊1的寫使能信號wen1被抬高,將第一幀數據A0~A3寫入;當selx為1時,數據流向數據緩存模塊2,相應的數據緩存模塊2的寫使能信號wen2被抬高,將第二幀數據B0~B3寫入,同時,緩存模塊1的讀使能信號被抬高,開始從數據緩存模塊1中讀出第一幀數據A0~A3,并傳送給數據預處理模塊1。當selx再次為0時,數據又流向數據緩存模塊1,向數據緩存模塊1寫入第三幀數據C0~C3,同時,開始從數據緩存模塊2中讀出第二幀數據B0~B3并傳送給數據預處理模塊2,如此循環。從而,數據緩存模塊1中存儲的永遠是奇數幀數據,數據緩存模塊2中存儲的是偶數幀數據。數據緩存模塊1在執行寫操作時,數據緩存模塊2在執行讀操作,而數據緩存模塊1在執行讀操作時,數據緩存模塊2在執行寫操作。這樣,對兩個數據預處理模塊而言,只要在8個時鐘周期內處理4個數據即可。這實際上減輕了數據預處理模塊的時序壓力。兩個數據預處理模塊的輸出端連接2:1復用器,在sely的控制下即可將預處理結果不間斷地傳送給下游處理單元(在圖1-42中,數據預處理模塊的Latency為6)。

圖1-41

圖1-42

主站蜘蛛池模板: 云南省| 舞阳县| 仁布县| 黔江区| 滦平县| 防城港市| 秭归县| 铁岭县| 噶尔县| 保德县| 南华县| 仙桃市| 宿迁市| 来宾市| 青阳县| 堆龙德庆县| 安溪县| 凤山县| 思南县| 哈巴河县| 温州市| 淮北市| 永顺县| 读书| 长岭县| 无棣县| 湘乡市| 蓬安县| 礼泉县| 吉木萨尔县| 高雄市| 赤水市| 万州区| 墨玉县| 东乡族自治县| 平顶山市| 台东县| 建平县| 天水市| 临泽县| 靖西县|