源自:微信公眾號 「數字晶元實驗室」

即便是功能模擬相同的RTL代碼,不同的代碼風格也會得出不同的綜合結果。我們不能僅僅依賴於綜合工具來fix代碼風格糟糕的設計!

了解綜合工具如何綜合RTL對於前端工程師至關重要。

下面針對Design Compiler邏輯綜合工具談談代碼風格:

在上面的演算法中,在for循環中執行「ADDR = ADDR+ OFFSET[I]」,因此是加法器邏輯重複8次! 此外,由於for循環以IRQ的LSB開始,需要標誌附加邏輯。由於IRQ輸入事先不知道,所以必須使用8個加法器構建的硬體才能處理任何情況的輸入。

Design Compiler只能使加法器儘可能快,但關鍵路徑仍然包含8個加法器。

下面是部分verilog代碼和模擬綜合結果。可見,從input到output路徑,延時0.24ns,面積消耗55.74um2

我們對演算法進行優化

在for循環之外執行「ADDR = BASE_ADDR + TEMP_OFFSET 」可以節省7個加法器的面積和延遲! 從MSB而不是LSB開始循環,利用了IF語句的優先順序特性,進一步消除DONE標誌相關的附加邏輯。

下面是部分verilog代碼,模擬綜合結果。可見,從input到output路徑延時0.12ns,面積消耗48.68um2。

也就是說,假設這個模塊的輸入和輸出都被寄存器鎖存。性能會提高100%,硬體開銷降低12.68%

伴隨著數字晶元設計工具逐漸智能化和自動化的趨勢,作為一個IC Designer,又該如何適應技術發展,而不被工具代替?

1、 硬體演算法優化。類比於軟體演算法時間和空間複雜度,在硬體演算法建模時考慮硬體PPA(performance、power、area)2、 verilog代碼風格。在編碼的時候,清楚自己的代碼會大致清楚綜合後的電路。否則「Garbage in, garbage out」3、 EDA工具。工具只是工具,不是 「./run」就能設計一款高性能低功耗低開銷的SOC晶元。要選擇合適的工具流程參數設置。4、 解決問題。要想讓自己的工作有價值,一切跑腳本,抄代碼的行為對於提高技術水平都沒有意義,我們需要的是分析工具report出來的問題,然後解決它。

最後,祝願大家都不會被 不刷知乎抖音,不玩農藥吃雞,高效率低成本的智能化EDA工具替代!

?數字晶元實驗室

願陪你走過數字IC學習中

所有的磕磕絆絆
推薦閱讀:
相关文章