當前位置:
首頁 > 科技 > 如何優化一個設計?

如何優化一個設計?

ASIC設計中詳細設計方案的確定非常重要,同樣的設計,別人可以用比你小30%的面積和少30%的處理時間來實現,這才是設計工程師的價值體現之處。

任何設計在最開始的時候都是一頭霧水,場景複雜,各種耦合。我們要做的是將所有的場景都整理出來,然後想辦法進行歸一。任何一開始覺得不可能做到的任務最後都能找到解決方法。

這本來看似是沒有規律的世界,但人類就是去不斷尋找和發現這個物質世界的運行規律。

當然,即使第一版設計我們儘可能的考慮到了更多的場景和實現方案,但是最後實現階段還是會有一些考慮不周全和不合理的實現,由於時間成本原因,決定放到下一版再修改。這個過程就叫做優化!那麼,如何優化一個設計?

找大寄存器組

首先是找設計中的大寄存器組,寄存器是面積較大的基本單元了,寄存器的數量決定了設計整體的面積數量級。小容量的存儲用regfile,一般寄存器組用到了上千bit,就要考慮是否用RAM。上萬bit的就是不合理的設計。

看到大寄存器組是要重點關注優化的對象,要注意的是,寄存器組是可以隨意在任意bit取值的,RAM是需要一拍一拍的讀取的,所以需要在高並行度和面積之前做折中(trade off)。

數據通路寄存器打拍過多,肯定不合理,一個數據打一拍最起碼是幾十個bit,打多拍,就上百bit。而換一個設計思路,在控制上多少邏輯,控制信號 計數器,多做幾組也就攏共幾十個bit的樣子。比如前一級模塊傳過來的數據和valid信號,數據是要晚幾拍才使用,應該做成前一級模塊先給valid信號,數據晚幾拍再來,避免數據打拍。

在數據通路上出現一些組合邏輯路徑並不長,打了一拍,這樣雖然時序會更好,但是最後增加的面積來說並不值得,所以多餘的寄存器打拍完全可以「干」掉。

重定時

Retiming就是重新調整時序,例如電路中遇到複雜的組合邏輯,延遲過大,電路時序不滿足,這個時候採用流水線技術,在組合邏輯中插入寄存器加流水線,進行操作,面積換速度思想。

任何的數字電路都可以等效成組合邏輯加D觸發器打拍,兩個D觸發器之間的組合邏輯路徑決定了,系統的工作頻率,決定晶元的性能。所以為了提高晶元的工作頻率,使用流水線技術在組合邏輯中插入寄存器。

插入寄存器的位置需要慎重選擇,不同的位置數據的打拍所消耗的寄存器的數量也不同,比方說你在位置a消耗25bit寄存器,位置b消耗20bit寄存器,能省則省。

前面插入寄存器的位置使得comb1的延遲為30ns,comb2的延遲為10ns,系統的最高工作頻率是由最長路徑決定的。也就是說你這個系統最高工作頻率的周期,不小於30ns,前面是插入pipeline,這個時候我們不改變時序,採用重定時技術,使得各個組合邏輯之間的延遲相當。

瘋狂復用

找計算邏輯相同的單元,復用

最常見的就是計數器,能用一個計數器實現的,就別用倆,底層模塊之間相同的邏輯盡量使用一塊電路,減少重複的設計。

基本邏輯單元的共享舉例,面積:加法器 > 比較器 > 選擇器。加比選。

乘法器本質上也是全加器。

所以就有先選後比,先選後加,先選後乘。

畫個圖意思一下。

這裡的加法器可以換成任何邏輯或模塊。

乘法器分時復用度提高

在計算模塊中乘法器也是非常大的一部分邏輯,一個設計要考慮PPA最優,就要考慮乘法器的數量多少以及復用能不能最大化,追求最好的設計是整個數據通路中乘法器空閑不下來。

乘法器調用方法,一般是在乘法器的輸入保證寄存器輸入,結果輸出到各個復用模塊時打一拍再使用。可以做成在進行完乘法運算後,就打拍,這樣消耗的寄存器會少很多。畫個圖意思一下(單bit)。

修改前

修改後

修改完後的寄存器省了很多,但是乘法器的輸出寄存器負載會變大,不過後端綜合時約束了max_fan_out工具會自動插buffer和複製寄存器,經過實測還是會節省很多面積,把一些優化工作可以交給工具去做,了解它,信任它,使用它。

RAM的復用

從設計的整體來看,RAM也可以復用,前面處理用過的ram,現在空下來,後面能否用。

最後

總結一下ASIC單個模塊的設計/優化思路,列出所有條件,然後歸一,復用,面積與速度呼喚的思想貫穿始終。這篇先整理到這裡,下一篇見。

來源:硅農

作者:硅農

聲明:本文由作者原創,文章內容系作者個人觀點,電子發燒友網轉載僅作為傳達一種不同的觀點,不代表電子發燒友網對該觀點的贊同或支持,如有異議,歡迎聯繫電子發燒友網。

更多熱點文章閱讀

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!


請您繼續閱讀更多來自 電子發燒友網 的精彩文章:

谷歌「Launch Night In」之夜的4款硬體和幾個驚喜
數學之美:牛頓-拉夫遜迭代法原理及其實現