数字芯片设计中的面积优化方法
前言:數字芯片設計工程師在設計的時候要考慮三個方面,PPA,即Performance、Power和Area。本文講解在實際項目中,如何對前端面積進行有效優化。
理論方法
本文首先參考書籍《FPGA設計實戰演練(高級技巧篇)》第七章,如何在書寫代碼時進行面積優化,其中主要方法有以下幾個方面。
- 操作符平衡
其中舉例,比如:
result <= a * b * c * d;假設abcd是4bit寄存器,書中講述那么在綜合之后的結果是使用了3個乘法器,分別是4bit、8bit和12bit乘法器。
如果更改成:
result_new <= (a * b) * (c * d);綜合之后的結果盡管也用3個乘法器,但是是2個4bit和1個8bit乘法器。
但是我并沒有自己驗證過,對于書中所述情況存疑,我認為編譯器可能會自動優化這種簡單的情況。
- 打破設計流水
增加流水的好處之一是縮減組合路徑長度,提高設計頻率,雖然不能降低單次計算時間,但是可以降低整體計算時間,相當于PPA中的performance,但是缺點是會帶來area的面積增加。所以在性能允許的前提下,可以適當去除流水,減少寄存器使用,降低面積。此外,書中舉了一個例子,就是在乘法器輸出端可以增加一級流水,而不帶來面積增加,原因在于乘法器本身輸出端會有寄存器,如果增加一級流水,那么乘法器原有輸出端的寄存器就會整合到增加的一級流水的寄存器,優化時序的同時不帶來面積增加。
- 資源共享
上述思想顧名思義,考慮的都是資源復用的問題。資源復用的前提是條件互斥,也就是不能在同一時刻都有對某一資源的使用請求,那么可以進行復用。復用的資源可以是加減乘除比較器等運算資源,也可以是寄存器、RAM等存儲資源,或者是邏輯功能模塊。
- 其他面積優化方法
如果一些寄存器不需要在復位時進行清零,那么可以考慮取消異步復位來節省資源,比如自己搭建RAM,其中的寄存器陣列如果不需要復位可以取消掉。
實際方法
在數字芯片設計的實際過程中,如果需要對上一版芯片進行面積優化,真正考慮的都是大塊的memory優化,很少會細扣上述的某些方法,因為帶來的收益比不高。在我所參與的一個視頻數字防抖芯片的設計中,我需要對上一版芯片的面積優化掉百分之四十以上。具體方法是,首先看DC綜合報告,統計面積占用情況,并查看面積占比高的模塊,面積大的原因是什么。
- 出窗設計
以視頻芯片或者AI芯片為例,由于需要對輸入串行數據進行卷積運算,比如卷積核大小為9X9,那么就至少需要緩存8行數據,第九行數據輸入時整合已經緩存的8行數據,輸出9X9窗口。這里需要注意盡量不要緩存9行數據,盡管會帶來邏輯的簡單,但是會導致面積的增加。
- 共享內存
在芯片設計中一般為了性能,會采用流水設計,但是由于顆粒度劃分精度問題,每一塊內存資源未必是每一個cycle都被占用。舉例說明:我所參與的項目中,前人在一個頂層模塊中劃分為5個子模塊,5個子模塊都要和DDR交互,分別需要緩存幾行數據用于后續計算。但是經過時序分析可以發現,每個子模塊是順序執行,不會同時發起請求,并且顆粒度較大,所以可以考慮選取5個子模塊中需要memory最大模塊的內存,作為5個模塊的公用內存,當哪個模塊需要訪問內存時即發起請求,這樣可以理論上最大節省80%內存(當5個子模塊內存大小相同時)。而在沒有大量并行矩陣運算時,內存的面積大小基本決定了整體的面積大小,所以作為芯片設計工程師,在面積優化時,應把內存優化作為首要目標。
--------------------------------------------------END---------------------------------------------------
?
?
總結
以上是生活随笔為你收集整理的数字芯片设计中的面积优化方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何统一设置Word 的图片属性
- 下一篇: html audio 播放amr,vue