電子產(chǎn)業(yè)一站式賦能平臺

PCB聯(lián)盟網(wǎng)

搜索
查看: 100|回復: 0
收起左側(cè)

【芯片設(shè)計】DC綜合retiming策略的學習與實踐

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
匿名  發(fā)表于 2024-11-18 12:03:00 回帖獎勵 |倒序瀏覽 |閱讀模式
之前規(guī)劃的系列除了異步專題外已經(jīng)均推送完成,所以這一篇開始,把前一段時間在項目交付過程中的一些學習與總結(jié)作為一個專題推送。
對于DC綜合中的retiming策略早有耳聞,但是一直沒有比較系統(tǒng)的學習和實驗過,正好借著這次交付過程的歸納總結(jié)機會,把一些零零散散的收獲學習記錄下。記得剛出新手村時和某位大佬聊到過,他說你邏輯里寫了在某級計算一個結(jié)果,但是這個值不一定是在這一級產(chǎn)生的,可能是上一級產(chǎn)生也可能是下一級產(chǎn)生。當時懵懂無知我就光“啊對對對”,實際上心里想的是“是不是跟我扯呢,怎么我寫在這一級出的結(jié)果還能流竄到其他級去呢,那整個邏輯鏈不就亂了么?”當時啥也不懂,所以也沒有多問,后來想想應該說的就是綜合過程的retiming策略。
綜合的retiming策略通過重新分配組合邏輯路徑中的時序,達到優(yōu)化電路性能的目的。具體來說,它可以在組合邏輯和時序邏輯路徑中插入或刪除緩沖器、反相器甚至觸發(fā)器等元素,從而調(diào)整信號的傳播時間,使關(guān)鍵路徑的延遲滿足設(shè)計要求。我們平時總談起的這個DC里的retiming優(yōu)化更多好像是指涉及到時序調(diào)整的操作,用一個簡化的例子來說明下。假設(shè)我們現(xiàn)在有一個操作是D = A+B+C,在第一級時三個數(shù)相加,然后空打了一拍最后輸出:

那么如果此時我們打開了retiming的開關(guān),并且DC工具綜合判斷進行retime的效果會更好,那么最后綜合的結(jié)果可能就變成這樣了(只是單純的舉例):

工具會把一部分邏輯放到下一級去處理,這樣就減輕了這一級的時序壓力能夠確保能夠match violation。而具體什么時候會retime以何種策略retime,網(wǎng)上的資料有很多我也沒有查太深。而后就想直觀地看一看retime處理的效果和電路圖(有時我確實有點執(zhí)著于眼見為實了),所以在本地虛擬機里進行了一下實驗。測試的代碼和上圖很像,只不過為了加深邏輯級數(shù)我多加了很多邏輯,輸入為3個48bit data1/2/3數(shù)據(jù)輸出為96bit res:

在DC中先關(guān)閉retime,以compile_ultra -incremental進行綜合,之后在dc_shell中打開互連start_gui:

這版圖看著是真舒服,邏輯層級清晰,誰看到不得說一句好代碼?(^?^*)。放大具體看一下互連結(jié)構(gòu),可以清晰的看到datax_p1級的寄存器區(qū)域、p1到p2的邏輯區(qū)域、res_p2的寄存器區(qū)域和res_p3的寄存器區(qū)域:

而后具體看一下res_p2和res_p3的直接打拍區(qū),可以發(fā)現(xiàn)res_p2的Q端直連到res_p3的D端,完全沒有組合邏輯,這也符合不開retime的預期:

最后是report,時鐘頻率設(shè)的比較高最差路徑-280p邏輯深度22級,自然時序是沒有match的:

之后引入retime方法,以compile_ultra -incremental -retime進行綜合,綜合之后的網(wǎng)表就能看出來亂了很多:

放大之后還是可以大概看出來三級寄存器的分布,同時還生成一個中間模塊(下圖最長的那個箭頭)。從這個圖就能很明顯的看出來,p3寄存器和p2寄存器不是直連,中間加入了邏輯,加入的邏輯集中在中間模塊里:

對于這個生成的中間模塊簡單看下,內(nèi)部很亂很難進行具體的分析:

但是從接口和互連可以大概看出,p1到p2的一部分邏輯被放到了p1前的輸入側(cè)(即p0級),一部分被放到了p2到p3之間:

中間模塊作用在p3的D端:

中間模塊的輸入一部分直接來自于輸入datax,也就是說本來集中在一級的邏輯,被分散到了輸入和res_p2~res_p3之間,res_p3之后從圖上看并沒有插入組合邏輯:

最后看一下report:

沒有retiming時是22級邏輯,分散到p0~p1~p2~p3三級之后最長路徑變成了8級,太合理了三八二十二嘛。而后看一下時序單元數(shù)量由336增加到了883,說明確實有多出來的中間變量需要進行緩存。而組合邏輯數(shù)量是下降了的,總的面積(我這里沒截)也下降了,這也比較正常面積增加減小或者大體不變都是有道理的。甚至時序單元也不一定就增加,比如部分邏輯前移了可能會省去一些寄存單元。由這里延伸,最近學習到的另外一點經(jīng)驗就是,我們不是經(jīng)常會在設(shè)計中調(diào)用DW ip嗎,當DW的ip時序不滿足時既可以配置DW內(nèi)的打拍級數(shù),也可以在其后面插入寄存器(比如我們手動加2拍寄存器),然后通過set_optimize_registers命令來優(yōu)化這個DW使其邏輯分散于這幾拍中完成。

系列文章入口——
【芯片設(shè)計】SoC 101(一):緒論
【芯片設(shè)計】FIFO漫談(零)從無處不在的FIFO開始說起
【芯片設(shè)計】計算機體系結(jié)構(gòu)(一)虛擬內(nèi)存
【芯片設(shè)計】深入理解AMBA總線(零)緒論
【芯片設(shè)計】握手協(xié)議的介紹與時序說明
【芯片設(shè)計】復位那些小事 —— 復位消抖
【芯片設(shè)計】快速入門數(shù)字芯片設(shè)計(一)Introduction
【芯片驗證】UVM源碼計劃(零)下定決心讀源碼前的自測環(huán)節(jié)
【芯片設(shè)計】異步電路碎碎念(一) 到底什么是異步電路
【芯片設(shè)計】從RTL到GDS(一):Introduction
其他文章鏈接——
【芯片驗證】sva_assertion: 15道助力飛升的斷言練習
【芯片驗證】可能是RTL定向驗證的巔峰之作
【芯片驗證】RTL仿真中X態(tài)行為的傳播 —— 從xprop說起
【芯片驗證】年輕人的第一個systemVerilog驗證環(huán)境全工程與解析
【芯片設(shè)計】verilog中有符號數(shù)和無符號數(shù)的本質(zhì)探究
【芯片設(shè)計】論RTL中always語法的消失術(shù)
【芯片設(shè)計】代碼即注釋,注釋即代碼
【芯片設(shè)計】700行代碼的risc處理器你確實不能要求太多了
入職芯片開發(fā)部門后,每天摸魚之外的時間我們要做些什么呢
如何計算系統(tǒng)的outstanding 和 burst length?
芯片搬磚日!け扑缽娖劝Y的關(guān)鍵詞不對齊事件
熟人社會里,一群沒有社會價值的局外人

本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒有賬號?立即注冊

x
回復

使用道具

發(fā)表回復

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則


聯(lián)系客服 關(guān)注微信 下載APP 返回頂部 返回列表