增量設(shè)計(jì)流程針對需要變更部分進(jìn)行優(yōu)化
將綜合工具的功能和集成設(shè)計(jì)環(huán)境 (IDE) 結(jié)合在一起,提供高效的增量設(shè)計(jì)方法,管理工程設(shè)計(jì)變更通知 (ECO) 需求,使設(shè)計(jì)人員能對原設(shè)計(jì)作模塊級變更,即只更改那些需要變更的部分。這種設(shè)計(jì)流程大大減少了變更對那些原已成熟的設(shè)計(jì)部分的影響,因此能夠節(jié)省時間和資源。
FPGA設(shè)計(jì)人員總是希望設(shè)計(jì)“一次便成功”,但由于復(fù)雜的大型系統(tǒng)中涉及各種復(fù)雜功能、性能要求,以及數(shù)量龐大的系統(tǒng)門,因此,不管他們花費(fèi)多少時間和精力,通常都需要更改設(shè)計(jì)、糾正一些邏輯問題或做進(jìn)一步的優(yōu)化。與傳統(tǒng)的設(shè)計(jì)流程相比,面向設(shè)計(jì)/綜合及布局布線物理實(shí)現(xiàn)而開發(fā)的增量設(shè)計(jì)流程,卻非常適合于修改或優(yōu)化設(shè)計(jì)中的特定部分,而且不會影響已經(jīng)達(dá)到設(shè)計(jì)要求的其它部分。如果因?yàn)橄到y(tǒng)內(nèi)存受限或涉及大強(qiáng)度運(yùn)行時間而難于采用自上而下的嚴(yán)密方法時,設(shè)計(jì)人員還可采用增量設(shè)計(jì)流程完成大型設(shè)計(jì)。在增量設(shè)計(jì)流程中還采用了其它一些設(shè)計(jì)策略,以便在繼續(xù)獨(dú)立地開發(fā)設(shè)計(jì)某些部分的同時,凍結(jié)該設(shè)計(jì)的另一些部分。
傳統(tǒng)設(shè)計(jì)的創(chuàng)建和物理實(shí)現(xiàn)
一般的FPGA開發(fā)流程有如下幾個步驟:用HDL語言創(chuàng)建設(shè)計(jì);運(yùn)行綜合前仿真;設(shè)置約束;綜合設(shè)計(jì);運(yùn)行綜合后仿真 ;進(jìn)行布局布線 ;分析設(shè)計(jì)的時序性能。
若能滿足功能和時序性能的要求,則可生成編程文件并對器件進(jìn)行編程。Libero IDE (集成設(shè)計(jì)環(huán)境) 白金版工具配有Actel及其合作伙伴提供的一流開發(fā)工具,可成功地管理“一次性成功”的設(shè)計(jì)。為了改善性能,Actel 的SmartTime時序分析和約束管理工具提供了識別和解析設(shè)計(jì)中關(guān)鍵路徑的功能。此外,Magma PALACE物理綜合工具一般都能大幅提升Actel的Fusion可編程系統(tǒng)芯片 (PSoC) 和ProASIC3器件的整體性能。
但若在初始布局完成后還需要進(jìn)一步優(yōu)化設(shè)計(jì)的某些部分,那該怎么辦?若性能還不穩(wěn)定,或有些構(gòu)件還存在功能問題,又該怎么辦?
增量設(shè)計(jì)流程的概念和優(yōu)勢
增量設(shè)計(jì)流程 (見圖1) 與傳統(tǒng)的綜合/物理實(shí)現(xiàn)流程非常相似。不過,該流程在初始綜合項(xiàng)目設(shè)置和編譯之后增加了一些“編譯點(diǎn)”。這些編譯點(diǎn)是設(shè)計(jì)的一部分,但作為相對獨(dú)立的綜合單元存在;它們有自己的約束文件,進(jìn)行單獨(dú)優(yōu)化 ;而且只在必要時才需根據(jù)設(shè)計(jì)關(guān)聯(lián)分析和設(shè)計(jì)變更性質(zhì)進(jìn)行重新綜合。為確保增量設(shè)計(jì)的穩(wěn)定性以及實(shí)現(xiàn)具有多個輸出網(wǎng)表的層次化的布局布線 (每個編譯點(diǎn)有一個輸出網(wǎng)表,每個設(shè)計(jì)的頂層有一個網(wǎng)表),這些編譯點(diǎn)會被鎖定。“鎖定”編譯點(diǎn)是指在綜合該編譯點(diǎn)的上一層時,不對該點(diǎn)進(jìn)行重新優(yōu)化,其層次接口保持不變,且不對其邊界進(jìn)行優(yōu)化。這意味著同一個被鎖定的編譯點(diǎn)的所有實(shí)例都采用相同的物理實(shí)現(xiàn),在綜合中均同等對待。
另外,設(shè)計(jì)組可同時在各個編譯點(diǎn)獨(dú)立展開工作,每個編譯點(diǎn)均視為可進(jìn)行增量修改和個別映射的單獨(dú)構(gòu)件,設(shè)計(jì)中可識別和嵌套任意數(shù)目的編譯點(diǎn)。采用編譯點(diǎn)后,就可管理設(shè)計(jì)變更,且不影響其它設(shè)計(jì)部分。
增量設(shè)計(jì)流程中采用一種“基于差異”的增量綜合方法,跟蹤設(shè)計(jì)的變化和關(guān)聯(lián)。這樣,只有那些直接受增量變更影響的設(shè)計(jì)部分才會進(jìn)行重新綜合。這種綜合方法也可確保網(wǎng)表中所作的增量變更能被相應(yīng)的網(wǎng)表導(dǎo)入和編譯功能所識別。設(shè)計(jì)人員可用“Layout Options”(布局選項(xiàng)) 菜單中的“Incremental Mode”(增量模式) 和“Lock Existing Layout”(鎖定現(xiàn)有布局) 選項(xiàng)來盡可能保持原有的布局布線。只有那些與綜合工具產(chǎn)生的編譯點(diǎn)變更直接相關(guān)的布局部分才會被更新和修改。
Synplify Pro 綜合工具的MultiPoint功能和Actel的Libero集成設(shè)計(jì)環(huán)境 (IDE) 一起提供了高效的增量設(shè)計(jì)方法,管理真正的工程設(shè)計(jì)變更通知 (ECO) 需求。兩者的結(jié)合使設(shè)計(jì)人員能對原設(shè)計(jì)作模塊級變更,即只更改那些需要變更的部分。這種設(shè)計(jì)流程大大減少了變更對那些原已成熟的設(shè)計(jì)部分的影響,因此能夠節(jié)省時間和資源。
例如,你可用Synplify Pro中的MultiPoint 為日后設(shè)計(jì)或重新設(shè)計(jì)預(yù)留多個“編譯點(diǎn)”。也可將設(shè)計(jì)分成一些較小的綜合對象,以便對其中一些區(qū)塊進(jìn)行修改,同時又不影響另一些區(qū)塊。在特大型設(shè)計(jì)中,MultiPoint還能對增量區(qū)塊進(jìn)行設(shè)計(jì)和綜合,避免系統(tǒng)內(nèi)存或運(yùn)行時間方面的問題。
Actel 的Libero可輕易接受Synplify Pro的MultiPoint 綜合產(chǎn)生的更新網(wǎng)表。Libero中“增量”布局布線流程提供ECO方法,而且,只更新那些需要更新的布局部分,原布局中 (由用戶選中) 的其余部分將不受影響。顯然,用增量布局方法比重新進(jìn)行整個布局快得多。
在許多情況下,你可能需要返回到最初的設(shè)計(jì),進(jìn)行功能和性能修改,使其達(dá)到設(shè)計(jì)要求。此時,若使用Synplify Pro中的MultiPoint 綜合和Libero IDE中的布局布線選項(xiàng),設(shè)計(jì)人員就可用有效的增量ECO模式方法,以最短的時間完成設(shè)計(jì)更新,且不會影響那些已經(jīng)完成的寶貴的設(shè)計(jì)和開發(fā)工作。
而且,Libero IDE中的設(shè)計(jì)“視圖”允許在同一設(shè)計(jì)項(xiàng)目中獨(dú)立保存設(shè)計(jì)的不同版本。這個功能可讓設(shè)計(jì)人員保存先前的約束和布局布線文件,從而在增量設(shè)計(jì)布局與原來的布局間作比較。這樣,你就能輕松判斷增量修改后的設(shè)計(jì)能否滿足設(shè)計(jì)要求,或原來的方案是否更好些。有了這些視圖,你就能輕松地在原始布局上進(jìn)行更改,或以各增量布局為起點(diǎn)逐次進(jìn)行更改,并比較每次迭代的結(jié)果。
增量設(shè)計(jì)流程能夠給用戶帶來許多益處 :一方面,可將大型設(shè)計(jì)分解成一些較小的區(qū)塊,減少綜合和布局布線的總體運(yùn)行次數(shù)和內(nèi)存需求;第二,可在Synplify Pro中標(biāo)記網(wǎng)表或布局中感興趣的區(qū)域,并以增量方法進(jìn)行修改,最大限度地減少對原布局的影響,同時還能節(jié)約重新綜合和布局運(yùn)行時間;第三,傳統(tǒng)自下而上的設(shè)計(jì)需要設(shè)計(jì)人員編寫和維護(hù)一些費(fèi)時且易出錯的腳本,用于引導(dǎo)綜合和跟蹤設(shè)計(jì)關(guān)聯(lián)。增量流程采用基于差異的增量綜合方法,無需這類腳本。
增量設(shè)計(jì)流程的六個實(shí)施步驟
步驟一:準(zhǔn)備采用增量流程的設(shè)計(jì)
創(chuàng)建設(shè)計(jì)后,使用Synplify Pro綜合工具中MultiPoint的第一步是在啟動Synplify Pro時創(chuàng)建“實(shí)現(xiàn)選項(xiàng)”。該選項(xiàng)包含器件、速度級別、全局頻率,以及其它設(shè)計(jì)和優(yōu)化參數(shù)。之后,也可以創(chuàng)建一些采用不同參數(shù)或包含設(shè)計(jì)變更的實(shí)現(xiàn)方案來測試設(shè)計(jì)的變更效果。例如可為初始參數(shù)和HDL設(shè)計(jì)代碼創(chuàng)建名為“實(shí)現(xiàn)方案 1”的實(shí)現(xiàn)方案。
Synplify Pro的“Compile Only” (只有編譯) 功能有助于Synplify Pro的SCOPE約束編輯器理解設(shè)計(jì)的層次結(jié)構(gòu)。Synplify Pro中的SCOPE(r) 約束編輯器管理綜合和布局布線的約束條件,同時也用于定義各編譯點(diǎn)及其相應(yīng)的約束條件。編譯點(diǎn)和約束條件都保存在約束文件中,作為該實(shí)現(xiàn)方案的一部分,且約束條件已設(shè)置為編譯點(diǎn)定義的一部分。編譯點(diǎn)被定義在新的頂層約束文件中,或者說,編譯點(diǎn)的定義被添加到已有的頂層約束文件 (.sdc) 中。
然后,從Synplify Pro的工具條中啟動SCOPE,并從“Select File Type”(選擇檔案類型) 對話框中選擇“Top Level Module”(頂層模塊)。使用這個菜單命令,你可根據(jù)設(shè)計(jì)識別出的模塊列表創(chuàng)建各編譯點(diǎn)。你可鎖定某些感興趣的模塊或功能區(qū)塊。這些被鎖定的區(qū)塊將被Synplify Pro識別為編譯點(diǎn),并同時設(shè)置好其它的一些頂層約束,如輸入/輸出延遲、時鐘頻率、或多循環(huán)路徑。
必須在相應(yīng)的 .sdc文檔中為每個編譯點(diǎn)規(guī)定其約束條件,并在頂層.sdc文件中為整個設(shè)計(jì)添加單獨(dú)的頂層約束條件。設(shè)計(jì)環(huán)境提供名為“Create SCOPE File”(創(chuàng)制 SCOPE 檔案) 的對話框,讓用戶輕松建立編譯點(diǎn)和約束條件。
在SCOPE中完成編譯點(diǎn)和約束的設(shè)置后,就可以對頂層設(shè)計(jì)進(jìn)行綜合處理。
步驟二:分析Synplify Pro的結(jié)果
評價(jià)綜合結(jié)果有幾種方法。Synplify Pro將時序和區(qū)域?qū)懭雽?shí)現(xiàn)方案目錄中的日志文檔。你可在Synplify Pro的"HDL Analyst RTL"和" Technology schematic views"中評價(jià)設(shè)計(jì);確定其是否已達(dá)到設(shè)計(jì)目的。你也可查看和隔離某些關(guān)鍵路徑,搜索和標(biāo)出某些重點(diǎn)設(shè)計(jì)目標(biāo),在源文件間進(jìn)行交叉探測。在這個層面上發(fā)現(xiàn)的任何錯誤都應(yīng)當(dāng)予以糾正。
步驟三:綜合或以增量方式重新綜合
Synplify Pro允許用戶以增量方式綜合設(shè)計(jì)或?qū)φ麄€設(shè)計(jì)進(jìn)行綜合。如果某一編譯點(diǎn)從未改變,Synplify Pro便會使用前次綜合運(yùn)行時產(chǎn)生的建模文件。你可選擇以增量方式綜合設(shè)計(jì) (即執(zhí)行“run incrementally”指令),該指令只綜合編譯點(diǎn);而且,只有那些已經(jīng)出現(xiàn)源代碼、約束或?qū)崿F(xiàn)變更的編譯點(diǎn)才會改變。也可用“re-synthesize all”(重新綜合所有) 指令重新綜合整個設(shè)計(jì)。一般來說,選擇以增量方式綜合設(shè)計(jì)比較省時。
步驟四:在物理實(shí)現(xiàn)環(huán)節(jié)將更新的網(wǎng)表導(dǎo)入Libero
一旦Synplify Pro生成網(wǎng)表,就自動成為Libero IDE文檔管理器的一部分,并且可用于布局布線 (即可被布局功能調(diào)用)。在設(shè)計(jì)流程和文檔管理器與Libero之間的用戶界面上,你很容易就找到和選出Synplify Pro創(chuàng)建的網(wǎng)表實(shí)現(xiàn)方案(參見圖2)。
假設(shè)該網(wǎng)表是更新后的網(wǎng)表,包含設(shè)計(jì)和綜合過程中產(chǎn)生的增量變更,你可能首先希望保護(hù)Libero的初始布局布線過程生成的原始布局。在Libero中,你可輕松地將原始布局保存為物理設(shè)計(jì)“View”(也叫做“implementation”) 文件,可按使用方便給該視圖命名,比如命名為“Design_Layout_1”。Libero不會用更新的網(wǎng)表結(jié)果覆蓋“Design_Layout_1”這個文件,它允許在同一項(xiàng)目中創(chuàng)建新的View。例如,可將名為“Design_Layout_2”的文件用于存放更新網(wǎng)表的實(shí)現(xiàn)和測試結(jié)果。這個功能使用戶能夠比較用Synplify Pro產(chǎn)生增量網(wǎng)表變化前后的結(jié)果。
接下來,在Libero中打開Actel的物理實(shí)現(xiàn)工具Designer,將更新的網(wǎng)表用新的實(shí)現(xiàn)方案名稱導(dǎo)入Libero,并編譯設(shè)計(jì)。編譯設(shè)計(jì)后,在Libero的布局選項(xiàng)中完成設(shè)計(jì)布局。該菜單的缺省選項(xiàng)會對整個布局進(jìn)行重新布局布線。對于包含經(jīng)MultiPoint更新后的網(wǎng)表,Actel建議采用完全布局布線。完全布局布線的布局效率最高,但需要對所有時序進(jìn)行重新驗(yàn)證。從增量修改策略的角度來看,只對那些直接受增量變化影響的布局部分進(jìn)行重新布局布線也許更為有利。布局選項(xiàng)菜單包括“Place Incrementally”(放置增量)、“Lock Existing Placement (Fix)”[鎖定現(xiàn)有放置 (修正)]和“Route Incrementally”(布線增量)
用“Lock Existing Placement (Fix)”鎖定現(xiàn)有的布局,可減小布局結(jié)果因增量變更而引起的不可預(yù)測性,這是因?yàn)長ibero的布局過程沒有涉及所有的固定 (不改變的) 區(qū)塊。若加入增量變更,用戶需要確保FPGA陣列具有足夠的設(shè)計(jì)空間。如果增量變更大,而且設(shè)計(jì)空間已經(jīng)非常緊張,布局有可能不成功。如果事先知道以后會進(jìn)行增量變更,可使用Libero IDE的平面空間規(guī)劃工具 (Chipplanner)在芯片上為變更保留一些區(qū)域。該方法與鎖定初始布局配合,就可快速、有效地將增量變更加入,而且能按要求保留原布局中的某些部分。
步驟五:評測更新后的布局
完成布局后,使用Libero的靜態(tài)時序分析工具SmartTime來驗(yàn)證新的實(shí)現(xiàn)方案的整體器件性能 ;必要時,分析關(guān)鍵路徑:比較Design_Layout_1和Design_Layout_2增量布局流程的性能結(jié)果,并確定增量更新是否已達(dá)到設(shè)計(jì)目標(biāo)。
步驟六:器件編程和調(diào)試
在采用ECO流程達(dá)到設(shè)計(jì)目標(biāo)后,就可使用Libero IDE提供的FlashPro ISP (在系統(tǒng)內(nèi)編程) 工具、Silicon Sculptor編程工具,以及Synplicity的 Identify(r) 及Actel的Silicon Explorer器件調(diào)試工具和驗(yàn)證工具。
總結(jié)
Synplify Pro MultiPoint綜合和Libero IDE開發(fā)工具為管理實(shí)際的ECO需求提供了有效的增量設(shè)計(jì)流程。兩者的結(jié)合使設(shè)計(jì)人員能對原設(shè)計(jì)作模塊級變更,而且只更改那些需要變更的部分。這種設(shè)計(jì)流程最大限度地減少了變更對那些原已成熟的設(shè)計(jì)部分的影響;由于無需對整個設(shè)計(jì)重新布局,因而節(jié)省了時間。用戶可使用Synplify和 Libero中的“實(shí)現(xiàn)選項(xiàng)和視圖”,輕松地建立不同設(shè)計(jì)選項(xiàng)方案,進(jìn)而分析和比較這些方案,并選出性能最佳的方案。