在當(dāng)今復(fù)雜的電子設(shè)計(jì)領(lǐng)域,高扇出(HFN)問(wèn)題成為了眾多開(kāi)發(fā)者面臨的挑戰(zhàn)之一。高扇出信號(hào)線指的是具有大量負(fù)載的信號(hào)線,這類(lèi)信號(hào)線在實(shí)際應(yīng)用中可能會(huì)引發(fā)一系列問(wèn)題,嚴(yán)重影響設(shè)計(jì)的性能和穩(wěn)定性。
高扇出信號(hào)線會(huì)占用大量的布線資源,極有可能導(dǎo)致布線擁塞。由于負(fù)載分散的原因,信號(hào)線的延遲也會(huì)進(jìn)一步增大,從而使得在高扇出信號(hào)線上滿(mǎn)足時(shí)序要求變得十分困難。例如,從圖 1 所示的違例達(dá) 0.978 ns 的時(shí)序路徑中可以看出,高扇出信號(hào)線 Net A 由 LUT 驅(qū)動(dòng),造成了 2.418 ns 的延遲。因此,對(duì)高扇出信號(hào)線進(jìn)行優(yōu)化,是解決此類(lèi)時(shí)序路徑問(wèn)題的關(guān)鍵所在。

在設(shè)計(jì)過(guò)程中,準(zhǔn)確識(shí)別高扇出信號(hào)線是進(jìn)行優(yōu)化的步。開(kāi)發(fā)者可以使用 report_high_fanout_nets 命令來(lái)識(shí)別設(shè)計(jì)中的非時(shí)鐘高扇出信號(hào)線。該命令具備多個(gè)選項(xiàng),可用于打印有關(guān)高扇出信號(hào)線的詳細(xì)信息,包括驅(qū)動(dòng)程序信息、時(shí)序信息(-timing)和負(fù)載位置信息(-slr)。如果設(shè)計(jì)中存在導(dǎo)致 QoR 問(wèn)題的高扇出信號(hào)線,建議在實(shí)現(xiàn)的中間步驟轉(zhuǎn)儲(chǔ)該。


另外,還可以采用以下表達(dá)式來(lái)查詢(xún)高扇出信號(hào)線:
set fanout [expr {[get_property FLAT_PIN_COUNT [get_nets $Net_A] -1 }]
在設(shè)計(jì)的不同實(shí)現(xiàn)階段,有多種因素會(huì)影響高扇出信號(hào)線的優(yōu)化。如圖 4 所示,D'T_TOUCH 屬性、KEEP HIERARCHY 屬性和 MARK_DEBUG 屬性會(huì)阻止執(zhí)行任何 HFN 優(yōu)化。其他屬性如 MAX_FANOUT、CLOCK_BUFFER_TYPE 和 MAX_FANOUT_MODE 等,也都會(huì)對(duì) HFN 優(yōu)化產(chǎn)生影響。

在綜合期間,MAX_FANOUT 屬性可用于強(qiáng)制復(fù)制寄存器。該屬性用于控制寄存器復(fù)制的時(shí)機(jī),當(dāng)某條信號(hào)線的扇出大于 MAX_FANOUT 值時(shí),就會(huì)考慮對(duì)該寄存器進(jìn)行復(fù)制。不過(guò)需要注意的是,無(wú)論時(shí)序如何,該屬性都會(huì)被應(yīng)用,所以必須謹(jǐn)慎使用。過(guò)量使用該屬性可能會(huì)因過(guò)度復(fù)制而導(dǎo)致更多問(wèn)題,尤其是當(dāng) HFN 位于寄存器控制信號(hào)上時(shí)。因此,建議在綜合期間慎用該屬性,可使用命令 set_property MAX_FANOUT [get_nets -hier] 。同時(shí),不建議在驅(qū)動(dòng)程序與負(fù)載之間設(shè)置額外的組合邏輯,因?yàn)檫@可能會(huì)妨礙某些復(fù)制優(yōu)化操作。此外,DONT_TOUCH、KEEP_HIERARCHY 和 MARK_DEBUG 等屬性可能會(huì)阻礙有益的復(fù)制操作。如需了解這些屬性的更多詳情,請(qǐng)參閱 UG901://docs.amd.com/r/en-US/ug901-vivado-synthesis/KEEP_HIERARCHY 。
例如,如果某條信號(hào)線的 MAX_FANOUT 屬性設(shè)為 3,那么該信號(hào)線的驅(qū)動(dòng)程序必須復(fù)制 2 次,如圖 5 所示。同樣,若有一個(gè)源,其中有 10,000 個(gè)負(fù)載分布在整個(gè)設(shè)計(jì)中,將 MAX_FANOUT 設(shè)為 1,000 來(lái)限制扇出,工具會(huì)將該源復(fù)制 10 次,并為每個(gè)復(fù)制的源分配 1,000 個(gè)負(fù)載。

在邏輯優(yōu)化(opt_design)期間,有多種間接方式可用于控制高扇出信號(hào)線。
- BUFG 插入:默認(rèn)情況下,在邏輯優(yōu)化中,會(huì)在滿(mǎn)足某些要求的高扇出控制信號(hào)線上插入 BUFG 或 BUFG_FABRIC (在 Versal 架構(gòu)中)。這是一種非常有效的方法,因?yàn)槿謺r(shí)鐘布線資源可以減少互連結(jié)構(gòu)布線上的擁塞,從而有助于緩解時(shí)序問(wèn)題。不過(guò),非時(shí)鐘信號(hào)線的扇出必須大于 25k 才符合此條件。并且,使用 BUFG 插入時(shí),工具較為保守,對(duì)于 Ultrascale+/Versal,限制是 24 個(gè) BUFG(此限制不包括 BUFG_GT)。
- 用戶(hù)指定的 BUFG 插入:如果信號(hào)線沒(méi)有插入 BUFG,開(kāi)發(fā)者可以通過(guò) CLOCK_BUFFER_TYPE 屬性強(qiáng)制執(zhí)行 BUFG 插入。工具會(huì)為指定的信號(hào)線添加 BUFG/BUFG_FABRIC,并且不會(huì)將其計(jì)入先前提及的限值 24,前提是有走線可用。

- BUFG 負(fù)載拆分:在某些情況下,插入 BUFG 的過(guò)程中會(huì)拆分時(shí)鐘網(wǎng)絡(luò),使其分別驅(qū)動(dòng)組合負(fù)載與時(shí)序負(fù)載。發(fā)生拆分時(shí),時(shí)序負(fù)載由 BUFG 驅(qū)動(dòng),組合負(fù)載則由原始驅(qū)動(dòng)程序來(lái)驅(qū)動(dòng)。無(wú)論是 opt_design 插入的 BUFG 還是用戶(hù)插入的 BUFG,都會(huì)發(fā)生此拆分操作。當(dāng) BUFG 輸出信號(hào)線驅(qū)動(dòng)組合負(fù)載與非時(shí)鐘時(shí)序負(fù)載(例如,高扇出復(fù)位)時(shí),預(yù)計(jì)會(huì)發(fā)生負(fù)載拆分。
- 層級(jí)復(fù)制:用戶(hù)還可以通過(guò)工具使用 -hier_fanout_limit 選項(xiàng),根據(jù)高扇出信號(hào)線的邏輯層級(jí)來(lái)復(fù)制該信號(hào)線的驅(qū)動(dòng)程序。工具會(huì)在層級(jí)內(nèi)查找,如果發(fā)現(xiàn)驅(qū)動(dòng)程序所驅(qū)動(dòng)負(fù)載超出指定限值,就會(huì)復(fù)制驅(qū)動(dòng)程序。這有助于緩解高扇出信號(hào)線所導(dǎo)致的擁塞,但這是一種基于規(guī)則的復(fù)制,無(wú)法感知時(shí)序,因此建議謹(jǐn)慎使用。需要注意的是,為 -hier_fanout_limit 選項(xiàng)指定的限值為 512。例如,當(dāng) -hier_fanout_limit 設(shè)為 1000 時(shí),對(duì)于扇出為 60,000 的信號(hào)線(如圖 6 所示),HFN 驅(qū)動(dòng)程序會(huì)復(fù)制 59 次,每次復(fù)制的驅(qū)動(dòng)程序都會(huì)驅(qū)動(dòng) 1000 個(gè)負(fù)載,可使用命令 opt_design -hier_fanout_limit 1000 來(lái)實(shí)現(xiàn)。

了解對(duì)某個(gè)設(shè)計(jì)要素進(jìn)行了哪些優(yōu)化是很有幫助的。OPT_MODIFIED 屬性會(huì)明示對(duì)設(shè)計(jì)要素執(zhí)行了哪些優(yōu)化(按優(yōu)化的執(zhí)行順序),同樣,OPT_SKIPPED 會(huì)顯示設(shè)計(jì)要素上跳過(guò)了哪些優(yōu)化。在某些情況下,DONT_TOUCH 或類(lèi)似屬性可能阻止優(yōu)化。建議搜索日志,查找有關(guān)跳過(guò)某一項(xiàng)優(yōu)化的具體原因的更多信息。與前述屬性類(lèi)似,PHYS_OPT_MODIFIED 與 PHYS_OPT_SKIPPED 是用于物理優(yōu)化的等效屬性。如果在 opt_design 中因使用 hier_fanout_limit 選項(xiàng)而導(dǎo)致復(fù)制驅(qū)動(dòng)程序,會(huì)發(fā)現(xiàn) OPT_MODIFIED 屬性與 HIER_FANOUT_LIMIT 相等,如圖 7 所示。
