在上一篇文章中,我們對高扇出信號線的基本概念、查詢方法以及綜合和邏輯優(yōu)化階段的應(yīng)對策略有了一定的了解。接下來,我們將繼續(xù)深入探討在布局、布局后優(yōu)化以及物理優(yōu)化階段,如何對高扇出信號線進(jìn)行有效優(yōu)化。
在全局布局中,尤其是在 PSIP 中,會進(jìn)行多種復(fù)制優(yōu)化操作。關(guān)鍵單元優(yōu)化適用于負(fù)載數(shù)小于等于 30 的關(guān)鍵信號線的復(fù)制;扇出優(yōu)化則針對負(fù)載數(shù)大于 30 且小于等于 100 的關(guān)鍵信號線;超高扇出優(yōu)化會對驅(qū)動(dòng)高扇出信號線(扇出大于 1000,裕量小于 2.0 NS)的寄存器進(jìn)行復(fù)制;按 SLR 進(jìn)行復(fù)制優(yōu)化會對驅(qū)動(dòng)其他 SLR 內(nèi)關(guān)鍵負(fù)載的 FF 進(jìn)行復(fù)制;動(dòng)態(tài) / 靜態(tài)區(qū)域接口信號線復(fù)制會對 DFX 設(shè)計(jì)的每個(gè)靜態(tài)區(qū)域 / 動(dòng)態(tài)區(qū)域的驅(qū)動(dòng)程序進(jìn)行復(fù)制,但需要注意的是,在 Versal 默認(rèn)流程和 Explore 流程中,該優(yōu)化已停用。
除了上述優(yōu)化,還可以通過一些屬性來影響高扇出信號線的初始布局。
- MAX_FANOUT 屬性:該屬性會將每個(gè)驅(qū)動(dòng)程序的扇出限制告知工具,布局器會根據(jù)這個(gè)限制來分配高扇出的負(fù)載。此屬性可同時(shí)應(yīng)用于 FF 與 LUT 驅(qū)動(dòng)程序。當(dāng) MAX_FANOUT 值小于約束的信號線的實(shí)際扇出時(shí),工具會對該信號線進(jìn)行寄存器復(fù)制評估,但僅當(dāng)時(shí)序會得到改善時(shí),才會進(jìn)行優(yōu)化。
- MAX_FANOUT_MODE 屬性:該屬性指定了強(qiáng)制執(zhí)行扇出限制的方式。開發(fā)者可以基于物理器件屬性(如 CLOCK REGION、SLR、MACRO)來強(qiáng)制執(zhí)行復(fù)制。如果設(shè)置了該屬性,高扇出信號線的負(fù)載會被集中到同一個(gè) SLR 中,或者采用為該屬性設(shè)置的任意值。支持該屬性的宏(MACRO)包括塊 RAM、UltraRAM 和 DSP。
- FORCE_MAX_FANOUT 屬性:該屬性應(yīng)用于特定信號線,用于限制復(fù)制優(yōu)化后信號線的物理扇出。借助該屬性,可以在 PSIP 期間強(qiáng)制進(jìn)行復(fù)制優(yōu)化,并且工具不考慮時(shí)序因素。

在圖 9 所示的示例中,將 MAX_FANOUT_MODE 屬性設(shè)置為 MACRO 并將 FORCE_MAX_FANOUT 設(shè)置為 1,針對每項(xiàng) MACRO 負(fù)載,驅(qū)動(dòng)程序均已執(zhí)行復(fù)制。需要注意的是,MAX_FANOUT_MODE 優(yōu)先于 FORCE_MAX_FANOUT 屬性。
在布局后流程中,有一個(gè)重要的操作是 BUFG 插入階段。在這個(gè)階段,工具會將高扇出信號線推廣到全局布線。滿足特定條件的信號線會被納入插入考量范圍,例如在 Versal 中扇出大于 10,000 的信號線,以及在 UltraScale/UltraScale+ 中扇出大于 1,000 并且所驅(qū)動(dòng)的控制信號裕量大于 1 ns 的信號線。這是一種時(shí)序驅(qū)動(dòng)的插入,僅當(dāng)插入有助于改善時(shí)序時(shí)才會發(fā)生。如果開發(fā)者想要關(guān)閉此優(yōu)化,可以在 place_design 命令中使用 -no_bufg_opt 選項(xiàng)。
在物理優(yōu)化(phys_opt_design)期間,有多種優(yōu)化方法可用于應(yīng)對高扇出信號線,部分優(yōu)化默認(rèn)已啟用。
- 高扇出優(yōu)化:此優(yōu)化在流程中默認(rèn)啟用。對于高扇出信號線,如果其所含負(fù)時(shí)序裕量在 WNS 的某一百分比范圍內(nèi),會被納入復(fù)制考量范疇。但只有當(dāng)復(fù)制有助于改善時(shí)序時(shí),才會進(jìn)行復(fù)制操作。
- -force_replication_on_nets 選項(xiàng):該選項(xiàng)可用于強(qiáng)制對任意指定信號線進(jìn)行驅(qū)動(dòng)程序復(fù)制,而不考慮該信號線的時(shí)序裕量。如果在布線后發(fā)現(xiàn)高扇出信號線變得非常關(guān)鍵,使用此優(yōu)化可能會有所幫助。開發(fā)者可以在該特定信號線上再次運(yùn)行物理優(yōu)化并強(qiáng)制復(fù)制,以查看是否能改善情況。
- -directive AggressiveFanoutOpt 指令:在某些情況下,物理優(yōu)化可能無法解決所有關(guān)鍵的高扇出信號線問題。此時(shí),建議搭配該指令重新運(yùn)行物理優(yōu)化,以進(jìn)行更為激進(jìn)的優(yōu)化。
- -lut_opt 選項(xiàng):該選項(xiàng)旨在通過移動(dòng)或復(fù)制 LUT 來減少路徑延遲。需要注意的是,如果開發(fā)者熟悉先前被稱為 “High fanout optimization”(高扇出優(yōu)化)和 “Very high Fanout optimization”(超高扇出優(yōu)化)的舊優(yōu)化,在架構(gòu)中,這些舊優(yōu)化已不再支持,而是由 -interconnect_retime(Vivado 2022.1+)選項(xiàng)和 -lut_opt(Vivado 2023.1+)選項(xiàng)來代替。
- -iphys_opt_design 命令:此命令描述了由 phys_opt 執(zhí)行的特定優(yōu)化。如果在 write_iphys_opt_tcl 中包含 -place,該命令也可以寫出由布局完成的優(yōu)化。它可在不同階段用于應(yīng)用優(yōu)化,例如允許在布局前設(shè)計(jì)上執(zhí)行通常在 phys_opt 之后執(zhí)行的各項(xiàng)優(yōu)化,幫助開發(fā)者通過 Tcl 復(fù)用 / 重復(fù)優(yōu)化。

物理優(yōu)化期間執(zhí)行的優(yōu)化取決于運(yùn)行物理優(yōu)化的實(shí)現(xiàn)階段。如果在布局后運(yùn)行物理優(yōu)化,默認(rèn)會執(zhí)行 “Fanout optimization”(扇出優(yōu)化)和 “Very High Fanout Optimization”(超高扇出優(yōu)化);但如果在布線后運(yùn)行物理優(yōu)化,這兩個(gè)選項(xiàng)則不可用。具體信息可參考圖 11。
