1. 程式人生 > >FPGA時序優化的幾種方法

FPGA時序優化的幾種方法

衡量FPGA設計的兩個重要指標是吞吐率和延遲。

吞吐率:指系統每一個時鐘週期內能夠處理的資料數量,為了獲得更高的吞吐率就需要減少組合邏輯延遲,在組合邏輯中間插入暫存器,也就是流水線設計。

延遲:指資料從輸入系統到輸出系統總共需要的時間,為了獲得更短的延遲,可以減少組合邏輯延遲,或者刪減路徑上的暫存器,第二種方法顯然不利於系統獲得更好的效能。

時序優化的幾種方法
這裡說的優化是讓FPGA設計獲得更高的工作頻率,也就是通常說的效能和吞吐率。

1.插入暫存器(pipeline)
這種方式會增加設計的時滯(clock latency)。插入了幾個暫存器,結果輸出就會延長几個週期,在不違反設計規格(對clock latency有要求)以及功能沒有影響的時滯情況之下可以這麼做。舉例說明,如果下面一個FIR濾波器的設計沒能滿足時序要求。
在這裡插入圖片描述


 從程式碼可以看出,X2這條路徑過長,是整個設計的Critical Path,如果採用流水線設計可以用暫存器暫存自已在執行Y的運算,改進如下:
 在這裡插入圖片描述
 2.並行化設計
  並行化設計的思想是將一個邏輯函式分解為幾個小一些的邏輯函式平行計算,從而減少關鍵路徑上的延遲 。
  例如計算兩個8bits數的乘法,將8bits數分為兩個4bits數,則乘法運算可以被分解為下面幾個部分:
X∗X={A,B}∗{A,B}={(A∗A),(2∗A∗B),(B∗B)};X∗X={A,B}∗{A,B}={(A∗A),(2∗A∗B),(B∗B)};
  通過這種方法可以將設計簡化為一系列4bits乘法器的實現。
  在這裡插入圖片描述

  通過優化掉設計中的優先順序譯碼電路,邏輯結構被展平,路徑延遲得以縮短,優先順序譯碼電路常出現在IF/ELSE結構語句中出現。
  在這裡插入圖片描述
  
  上面程式碼綜合後就會產生優先順序譯碼器,通過各項平級的if語句或者case語句可以避免這樣的優先順序譯碼設計
  在這裡插入圖片描述

4.均衡設計
均衡設計的思想是把 Critical Path 上的組合邏輯拿出一部分放在 short path 上進行,從而縮短 Critical Path 的延遲。
下面舉例一個8位加法器。
在這裡插入圖片描述
5.優化路徑
最後一種方法也是我認為最難的,通過優化資料流的路徑來縮短 Critical Path ,提升系統性能。重新佈局和 Critical Path 在一起的路徑,從而 Critical Path上的邏輯閘可以更靠近目標暫存器。舉一個栗子:
在這裡插入圖片描述