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