Vivado之實(shí)現(xiàn)(布局布線)流程淺析
一、前言
????????本文將介紹Vivado進(jìn)行綜合,以及布局布線的內(nèi)部流程,熟悉該流程后結(jié)合Settings中對應(yīng)的配置選項(xiàng),對于時(shí)序收斂調(diào)試將更具有針對性。
二、Implementation(實(shí)現(xiàn))
????????實(shí)現(xiàn)流程由一系列的子流程組成,包括:Design Initialization設(shè)計(jì)初始化、Opt Design設(shè)計(jì)優(yōu)化、Power Opt Design功率優(yōu)化【可選項(xiàng)】、Place Design布局、Post-Place Power Opt Design布局后期設(shè)計(jì)功率優(yōu)化【可選項(xiàng)】、Post-Place Phys Opt Design布局后期設(shè)計(jì)物理優(yōu)化【可選】、Route Design布線、Post-Route Phys Opt Design布線后期設(shè)計(jì)物理優(yōu)化【可選項(xiàng)】、Write Bitstream寫入比特流、Write Device Image寫入器件備份文件。
????????下面將重點(diǎn)介紹和布局布線相關(guān)的流程,其他簡略帶過。
Opt Design:對邏輯設(shè)計(jì)進(jìn)行優(yōu)化,使其與器件匹配
Power Opt Design: 對設(shè)計(jì)的單元進(jìn)行優(yōu)化從而降低功耗
Place Design:將設(shè)計(jì)布局到器件上
Post-Place Power Opt Design:在布局后進(jìn)行進(jìn)一步的優(yōu)化來降低功耗
Post-Place Phys Opt Design:對時(shí)序違例的路徑進(jìn)行優(yōu)化
Route Design:對于布局后的設(shè)計(jì)進(jìn)行布線
Post-Route Phys Opt Design:通過實(shí)際的布線延時(shí)值進(jìn)行邏輯,布局,布線優(yōu)化
Write Bitstream :生成器件配置的比特流
Write Device Image:生成器件備份文件
三、布局布線
3.1 Placement(布局)
????????布局通俗理解就是布局器會(huì)將來自網(wǎng)表的單元布局到芯片的確定位置,可細(xì)分為7個(gè)子流程。
????????3.1.1 設(shè)計(jì)布局優(yōu)化
?????????布局優(yōu)化對象主要是時(shí)序違例路徑較大的單元,線長較大的部分以及通過監(jiān)控引腳密度來提前進(jìn)行布局分散從而避免后期布線擁塞
????????3.1.2 設(shè)計(jì)規(guī)則檢查
????????開始布局前,會(huì)先進(jìn)行設(shè)計(jì)規(guī)則檢測DRC,DRC有兩類,一類是用戶在report_drc中設(shè)置的規(guī)則,另一類是軟件自定義的規(guī)則,如存儲(chǔ)器IP單元沒有進(jìn)行位置約束或者是IO banks和IO標(biāo)準(zhǔn)沖突
????????3.1.3 布局時(shí)鐘單元和I/O
????????完成DRC后,布局器會(huì)優(yōu)先布局時(shí)鐘單元和I/O單元。時(shí)鐘和I/O一般是同時(shí)進(jìn)行布局的,因?yàn)樵谥付ㄆ骷校季忠?guī)則中二者關(guān)聯(lián)性很強(qiáng)。對于Ultrascale/Ultrascale+系列的器件,布局器也布局時(shí)鐘軌道,對時(shí)鐘預(yù)布線。如果觸發(fā)器會(huì)合并進(jìn)入到I/O邏輯單元,也在這階段進(jìn)行布局,否則布局失敗時(shí),會(huì)有嚴(yán)重告警打印。
????????在這一階段,布局器要完成的布局對象有I/O端口和與之關(guān)聯(lián)的邏輯,全局時(shí)鐘緩沖器,時(shí)鐘管理單元(MMCMS和PLL),GT單元。同時(shí),布局器也要考慮設(shè)置的位置約束屬性和區(qū)域約束屬性。
????????當(dāng)時(shí)鐘或I/O布局失敗時(shí),布局報(bào)告會(huì)打印相關(guān)錯(cuò)誤,對錯(cuò)誤進(jìn)行簡單描述。通常,布局失敗的原因有以下幾點(diǎn)
a. 因?yàn)榧s束沖突導(dǎo)致的時(shí)鐘樹問題
b.過于復(fù)雜的時(shí)鐘樹問題
c.RAM和DSP 布局與其他約束沖突
d.資源不足
f.違反了I/O bank的一些規(guī)則
????????3.1.4?全局布局,詳細(xì)布局和后期布局優(yōu)化
????????完成時(shí)鐘和I/O布局后,依次是全局布局,詳細(xì)布局,后期布局優(yōu)化。
????????3.1.4.1 全局布局
????????全局布局分為布局資源規(guī)劃(floorplanning)和物理綜合。布局資源在I/O和時(shí)鐘布局后被分成很多小的相關(guān)聯(lián)的邏輯,Pblock約束是需要考慮的,是硬性要求。
????? ? 在布局資源規(guī)劃后是物理綜合,在基于布局資源規(guī)劃基礎(chǔ)上,布局器將對網(wǎng)表運(yùn)行不同的物理優(yōu)化策略進(jìn)行設(shè)計(jì)的初始化布局。例如,基于復(fù)制的扇出,復(fù)制的驅(qū)動(dòng)源將和load放一起,因?yàn)槌跏嘉恢檬谴_定的。優(yōu)化也會(huì)考慮內(nèi)部的參數(shù)設(shè)置以及時(shí)序相關(guān)的。只有時(shí)序有所改善,優(yōu)化才會(huì)真正進(jìn)行。
????????在物理綜合階段,下圖是優(yōu)化概要示例。

???????? ????LUT的分解與重組:?如果LUTs有SOFT_HLUTNM屬性并且LUT分解和重組能改善時(shí)序,布局器將進(jìn)行該操作
????????????基于屬性的重定時(shí):用戶可以通過設(shè)置一個(gè)屬性在寄存器或LUT上實(shí)行重定時(shí),對于時(shí)序起點(diǎn)和終點(diǎn)有足夠距離的關(guān)鍵路徑來說作用較明顯。在PSIP有兩個(gè)控制重定時(shí)的屬性:PSIP_RETIMING_BACKWARD,PSIP_RETIMING_FORWARD,值都設(shè)置為true時(shí)表示執(zhí)行后向重定時(shí)和前向重定時(shí)。
????????????同時(shí),在以下場景下設(shè)置重定時(shí)屬性將不會(huì)起作用
a.移動(dòng)的邏輯經(jīng)過了一些大塊單元,如BRAM,URAM,DSP
b. pack到了I/O上的寄存器
c.路徑的起點(diǎn)與終點(diǎn)時(shí)鐘不同
d.路徑上含有時(shí)序例化的設(shè)置
e.含有阻止優(yōu)化的屬性,如DONT_TOUCH等
????????高扇出優(yōu)化:高扇出通過復(fù)制寄存器來驅(qū)動(dòng)高扇出nets(扇出大于1000,slack值小于2ns)
????????關(guān)鍵單元優(yōu)化:在失敗路徑上通過復(fù)制單元來進(jìn)行優(yōu)化,如果已布局的單元的load距離太遠(yuǎn),該單元將會(huì)被賦值然后放置到距離load更近的位置。通常在一些塊狀RAM,URAM,大量的DSP布局較為分散時(shí),該優(yōu)化使用較多
????????扇出優(yōu)化:對于設(shè)置了MAX_FANOUT的nets,當(dāng)nets的實(shí)際扇出數(shù)量大于設(shè)置的MAX_FANOUT時(shí),將會(huì)進(jìn)行優(yōu)化。用戶可以通過添加FORCE_MAX_FANOUT到該nets上,從而強(qiáng)制對驅(qū)動(dòng)該nets的寄存器或LUT進(jìn)行復(fù)制,并且此處提到的load都是實(shí)際物理連接的loads,不是邏輯loads。
????????DSP寄存器優(yōu)化:DSP寄存器優(yōu)化是指將寄存器從DSP中移出到邏輯組中,或者從邏輯單元移入到DSP中,從而改善關(guān)鍵路徑的時(shí)延
????????移位寄存器流水線優(yōu)化:操作是將有固定長度的移位寄存器改成動(dòng)態(tài)調(diào)整寄存器流水線,然后再布局流水線流水線來改善時(shí)序,動(dòng)態(tài)的SRLs不支持該優(yōu)化
????????移位寄存器優(yōu)化:該優(yōu)化是針對在移位寄存器單元和其他邏輯單元間存在時(shí)序違例的路徑
????????塊狀RAM寄存器優(yōu)化:塊狀RAM寄存器優(yōu)化是指將寄存器從塊狀RAM中移出到邏輯組中,或者從邏輯單元移入到塊狀RAM中,從而改善關(guān)鍵路徑的時(shí)延
????????動(dòng)態(tài)/靜態(tài)區(qū)域接口網(wǎng)線復(fù)制:在DFX流程中,將靜態(tài)設(shè)計(jì)復(fù)制到可重配的模塊便捷路徑上
????????等價(jià)驅(qū)動(dòng)源重布線優(yōu)化:將邏輯上相等的驅(qū)動(dòng)源進(jìn)行l(wèi)oad的重新分配,減少布線的重復(fù),也能為驅(qū)動(dòng)源和負(fù)載提供更優(yōu)的位置。這個(gè)可以減少資源使用和布線擁塞
????????3.1.4.2 詳細(xì)布局
????????通過詳細(xì)布局,可以讓設(shè)計(jì)從初始化的全局布局成為全部布局。通常是先對大塊單元,如多列的URAM,塊狀RAM,DSP塊組布局,然后是LUTRAM組,用戶在XDC中定義的更小一些的大塊。邏輯單元布局時(shí)是不斷迭代,以保證線長,時(shí)序最優(yōu),不擁塞。在CLBs的LUT-FF對和CLB中的寄存器必須共用普通的控制集
????????3.1.4.3?后期布局優(yōu)化
????????在所有的邏輯單元位置都確定后,后期布局優(yōu)化將進(jìn)行改善時(shí)序和擁塞的最后一步,包括改善關(guān)鍵路徑的布局,BUFG復(fù)制,可選的BUFG插入。在BUFG復(fù)制階段,BUFG驅(qū)動(dòng)的nets跨多個(gè)SLRs時(shí),每個(gè)SLRs都會(huì)分配一個(gè)BUFG。在布局或布線沖突,以及有阻止復(fù)制或時(shí)鐘降級的約束時(shí),該優(yōu)化將不會(huì)進(jìn)行。
????????在BUFG插入階段,布局器將高扇出的net布線到全局布線路徑上,從而釋放普通布線資源,驅(qū)動(dòng)控制信號的高扇出nets如果slack值大于1ns將會(huì)優(yōu)化。
3.2?Routing(布線)
????? ? 在完成布局后,布線器將會(huì)進(jìn)行布線。布線器提供了2個(gè)布線選項(xiàng),對整個(gè)設(shè)計(jì)布線或?qū)蝹€(gè)的引腳或nets布線。當(dāng)對整個(gè)設(shè)計(jì)布線時(shí),流程是時(shí)序驅(qū)動(dòng)的,在時(shí)序約束的基礎(chǔ)上,使用自動(dòng)的時(shí)序計(jì)算規(guī)則。當(dāng)對單個(gè)nets或引腳布線時(shí),有迭代布線和自動(dòng)延時(shí)兩種模式。
????????布線的子流程包括:設(shè)計(jì)規(guī)則檢查DRC,布線優(yōu)先級。
3.2.1 設(shè)計(jì)規(guī)則檢查
????????設(shè)計(jì)規(guī)則檢查主要有兩類檢查,第一類是用戶從report_drc中設(shè)置的規(guī)則,第二類是vivado軟件內(nèi)部的檢查規(guī)則
3.2.2 布線優(yōu)先級
????????布線器首先布線全局資源,如時(shí)鐘,復(fù)位,I/O和其他降級的資源。在布線器內(nèi)部有默認(rèn)的優(yōu)先級,然后根據(jù)時(shí)序重要性對數(shù)據(jù)信號布線。?
四、參考資料
手冊:ug904-vivado-implementation-en-us-2022.2.pdf