目錄
1、問題背景
2、存在問題的電路
3、利用CSA改進的電路
4、總結
1、問題背景
在某次電路設計時我需要實作這樣的功能:
assign out = (sel ==0) ? c +d : a+ b +d;
因為上述的運算元a/b/c/d都是64bit位寬資料,電路設計時存在串行的兩個64bit加法器,最終導致時序無法滿足需求(1GHz時鐘),經過分析后利用CSA解決了這個問題,
CSA(carry save adder)的原理是在多個資料相加時可以將進位保留下來,只做一次進位傳遞(具體的CSA細節不在此贅述),
2、存在問題的電路
存在問題的RTL代碼如下:

上述代碼對應的電路對應下面的圖,關鍵路徑用紅線畫了出來:

可以看到紅線穿過了2個64bit加法器,導致延遲過大(無法在1GHz下滿足建立保持時間要求),
3、利用CSA改進的電路
改進后的RTL代碼如下:

其中csa的代碼如下:

可以看到CSA加法器并沒有傳遞進位,延遲僅僅為3個與門(co_int的計算邏輯),
整體上的電路可以畫出如下圖,關鍵路徑同樣用紅色標出:

可以看到原有的2個串行加法器減為1個,有效減少了計算延遲時間(約減為一半時間),消除了違約路徑,
4、總結
如果電路設計時存在串行的多個加法器,一般情況下都可以使用CSA優化時序,因為串行的多個加法器實際上存在著進位冗余,例如d=a+b+c,先計算a+b時有一次進位,隨后加上c又有一次進位,完全可以合并為一次進位,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/303913.html
標籤:其他
下一篇:小白也能做的選擇(上)
