利用SmartCompile和賽靈思的設(shè)計工具進行設(shè)計保存
在FPGA環(huán)境下,設(shè)計保存實施比較復雜,需要保存的事項包括:一項設(shè)計的HDL描述、一個模塊的綜合網(wǎng)表、約束文件內(nèi)的布局信息,以及在局部比特文件中的配置數(shù)據(jù)。賽靈思集成軟件環(huán)境(ISE) 9.1i 軟件以新的SmartCompile 技術(shù)為特色,其中包含兩種新的方法:SmartGuide和Partitions,這兩種方法可以保存像布局或布線這樣的設(shè)計執(zhí)行數(shù)據(jù),并且可以減少解決問題所花費的時間。
本文引用地址:http://www.ex-cimer.com/article/79446.htmSmartGuide采用命名和拓樸匹配技術(shù)來識別一個FPGA設(shè)計中相對于以前的實現(xiàn)還沒有發(fā)生改變的各個部分。在新的和已修改過的設(shè)計被重新實現(xiàn)時,設(shè)計中匹配元器件得到了保存。
Partitions 采用的技術(shù)中,FPGA 設(shè)計的模塊實例被自動分析,接著,與以前的模塊實現(xiàn)比較,確定該模塊實例是最新的還是過時的。如果Partition 是過時的,它也完全可以重新實現(xiàn)且不發(fā)生保存。如果Partition是最新的,它可從以前的實現(xiàn)中被嚴格地復制且(從綜合網(wǎng)表通過布線)完整地保存布局和布線運行時間。
SmartGuide如何運作?
SmartGuide工作在像查找表(LUT)和觸發(fā)器這樣的FPGA中最低級的物理單元上。這些單元及其連通性被依次匹配和保存。
要成功引導的第一步是對已經(jīng)作出較小變更的設(shè)計綜合一個一致的網(wǎng)表。例如,減法器等式regAB=(A"B),可以被綜合成Msub_sub0001的邏輯名稱。下一個減數(shù)就稱為Msub_sub0002,并且依此類推。在引入新減數(shù)的設(shè)計中的任何變更都可能造成設(shè)計中所有減數(shù)的重新命名。為了解決這個問題,像SynplICity 公司的Synplify和Synplify Pro以及賽靈思公司的XST這樣的綜合工具,已經(jīng)改變了邏輯命名的慣例。利用這些工具,無論用戶有沒有對RTL進行變更或進行了小的變更,邏輯命名從一個綜合運行到下一個綜合都變得更加可以預測。按照以上的實例, 減法邏輯就被命名為Msub_regAB_sub0001。通過采用在邏輯中的寄存器名,就能防止改變到其它的減數(shù)。
綜合命名慣例的另一項增強措施是以本地而不是全局上下文為基礎(chǔ)。在RTL出現(xiàn)小的變化以及設(shè)計沿著非關(guān)鍵路徑重新綜合時,這可能有所幫助。在綜合之后,與非關(guān)鍵時序路徑相關(guān)的邏輯被修改,而機器給未改變邏輯產(chǎn)生的實例名稱保持不變。綜合網(wǎng)表變化被本地化到網(wǎng)表內(nèi)的已修改的或新的邏輯。最優(yōu)化一向是可復制的,這是因為它們以本地邏輯為基礎(chǔ)。例如,作為最優(yōu)化過程的一個部分,Synplicity的 Synplify/Pro目前創(chuàng)建路徑組(path groups),它是被分別最優(yōu)化的各個邏輯組。當邏輯在非關(guān)鍵時序路徑上優(yōu)化時,只有受影響的路徑組被改變,以最小化對綜合網(wǎng)表的影響。
在生成綜合網(wǎng)表后,ISE 9.1i中的實現(xiàn)工具會處理網(wǎng)表,并把它轉(zhuǎn)換成針對特定FPGA 架構(gòu)的經(jīng)布局和布線的設(shè)計。在匹配過程中會發(fā)生引導,所有的元器件以匹配元器件名稱為基礎(chǔ)被引導。如果一個元器件在目前的實現(xiàn)和引導設(shè)計中都有相同的名稱,那么,該元器件就能被成功地引導。該元器件可能有不同的LUT方程式或引腳,并仍可以成功地被引導。
如果在當前實現(xiàn)和引導設(shè)計中的源和負載引腳是相同的,就能對網(wǎng)絡(luò)進行引導。這消除了對兩次實現(xiàn)之間的網(wǎng)絡(luò)名稱要保持一致的依賴。它也極大地增加了成功引導網(wǎng)絡(luò)的機率。
如圖1所示,例如,LUT4的邏輯等式已經(jīng)被修改。LUT4將被引導,因為即使它的邏輯等式是不同的,它的相關(guān)名稱也沒有被改變。LUT4和LUT2 之間的布線將被引導,這是因為LUT4 和 LUT2之間的連通性沒有被修改。
圖1.元器件和網(wǎng)絡(luò)被成功引導。
在元器件和網(wǎng)絡(luò)被引導之后,新的和經(jīng)修改的元器件及網(wǎng)絡(luò)被增加到設(shè)計中。網(wǎng)表中沒有變更的那部分在某些情況下必須被重新布局和布線,但是,這只在設(shè)計變化引起電路中另一個部分出現(xiàn)一個重大路徑時序沖突的情況下。正是因為該原因,這是一個清除階段。如果存在關(guān)鍵路徑的時序沖突,就會有一些引導邏輯的移動以確定時序。在來自新的和已修改邏輯的關(guān)鍵路徑上的清除階段可能迫使引導邏輯的移動。這個清除階段極大地增加成功實現(xiàn)一項設(shè)計的機率,該設(shè)計以稍微降低一些邏輯的保存為代價,以滿足時序約束的要求。
Partition如何運作?
為了做到準確無誤的保存,設(shè)計工程師必須對模塊實例設(shè)置一個被稱為Partition的屬性。這將把Partition與該設(shè)計的其它部分相隔離。通過隔離模塊實例,其接口(跨越Partition邊界的連通性)被保證不會在各種實現(xiàn)之間被修改。這使得在Partition內(nèi)的元器件和網(wǎng)絡(luò)可從以前的實現(xiàn)中被復制并粘貼到當前的實現(xiàn)中。復制和粘貼這些設(shè)計信息的過程比重新實現(xiàn)要快得多,并且保證始終是前一次實現(xiàn)的準確復 制。
Partition必須在設(shè)計被綜合之前就在模塊實例上進行設(shè)置。然后,綜合引擎將把Partition接口作為待優(yōu)化的障礙進行處理。例如,圖2所示的異步邏輯結(jié)構(gòu)可能被合并成一個更優(yōu)化的形式。如果Partition在這個邏輯的一個部分上已被設(shè)置,綜合引擎不能對它進一步優(yōu)化,這是因為它會修改Partition接口。類似的情況會出現(xiàn)在像映射這樣的下游實現(xiàn)工具中。邏輯內(nèi)部和外部的Partition將被完全最優(yōu)化。如果關(guān)鍵時序路徑需要這種優(yōu)化出現(xiàn),它將會被Partition邊界閉塞。為了避免出現(xiàn)這個問題,要把寄存器添加到跨越Partition邊界的各種信號上,或者確信這些信號的時序不是關(guān)鍵的。
圖2.邏輯優(yōu)化被Partition邊界閉塞。
ISE 9.1i將自動確定要對哪一個Partitions進行重新實現(xiàn)。某些類型的設(shè)計變更只會影響直接相關(guān)的Partition。這些類型的設(shè)計變更包括源代碼修改和物理約束。其它類型的設(shè)計變更將迫使所有的Partitions被重新實現(xiàn)。修改時序約束或優(yōu)化設(shè)置如映射努力級別將影響整個設(shè)計。
在缺省條件下,Partition將促成實現(xiàn)工具保存從綜合網(wǎng)表到已布線設(shè)計的所有實現(xiàn)數(shù)據(jù)。在某些情況下,它可能需要讓像布線器這樣的實現(xiàn)工具能修改某一個已保存的Partition,同時保存它的布局。Partition屬性,即眾所周知的保存(preserve),能實現(xiàn)這一級別的控制。Preserve可以被設(shè)置到綜合、布局、 布線或繼承上。繼承屬性將采用與Partition的雙親相同的特性。綜合屬性只保存綜合網(wǎng)表;所有實現(xiàn)的其它方面可能會被修改。布局屬性通過布局保存已綜合的網(wǎng)表。此外,輸出也可能被修改。布線屬性將保證包括布線在內(nèi)的所有實現(xiàn)數(shù)據(jù)得到保存。在 Synplify Pro Partition的流程中,由Partition流程保存的信息的級別(綜合;布局與綜合;或布線、布局與綜合)作為一種屬性在tcl 文件中有詳細的說明,然后,再通過ISE布局和布線工具讀出。
通過放寬要保存的信息級別,一些Partition的實現(xiàn)可以被修改。實現(xiàn)工具將盡可能多地保存Partition,同時,仍能滿足時序約束的要求,而且還能成功的對設(shè)計進行布局和布線。 要促使Partition在沒有任何保存的情況下完全地被重新實現(xiàn),就要使用Partition的"rerun"命令。
采用 SmartGuide
SmartGuide對于像修改邏輯等式這樣的小邏輯變更最為有用。像增加新的模塊或?qū)嵗@樣大的變更,將會影響設(shè)計層次,并減少從以前的實現(xiàn)中成功匹配元器件的可能性。與SmartGuide能夠很好配合的變更類型有:
• 在一個或兩個模塊中的小邏輯變更(不到10%);
• 移動引腳位置;
• 改變一個元器件的屬性;
• 改變一個時序約束。
SmartGuide僅僅是在映射實現(xiàn)過程中開啟的一個選項。SmartGuide自動地使用以時序約束為基礎(chǔ)直接實現(xiàn)的映射時序算法。為了在ISE Project Navigator軟件工具中啟動SmartGuide,可從頂層菜單中選擇Source > Use SmartGuide,或者右擊頂層模塊并選擇 Use SmartGuide,如圖3所示。
圖3.在Project Navigator軟件工具中開啟SmartGuide。
要在tcl接口上開啟 SmartGuide,需要調(diào)用如下命令:
% project set "Use Smartguide" True
用批處理命令使用SmartGuide,要采用這種語法:
map "smartguide
par "smartguide
在設(shè)計被實現(xiàn)后,映射和標準報告將表明有多少設(shè)計被成功地引導。在以下所示的報告文件中,有71%的元器件及77%的網(wǎng)絡(luò)被引導。
有關(guān)元器件和網(wǎng)絡(luò)的詳細信息被存儲在引導報告文件(GRF)。該文件列出了被重新實現(xiàn)的新文件和網(wǎng)絡(luò)的名稱。
大約在10次的引導實現(xiàn)后,建議無需引導就進行重新實現(xiàn)以最優(yōu)化整個的設(shè)計。這將使得以前已被引導的邏輯與新的或已修改過的邏輯之間得到最優(yōu)化。
采用 Partitions
有若干策略可用于決定設(shè)計中什么邏輯模塊成為待Partition的最佳候選模塊。如果縮短運行時間是主要的目標,要把設(shè)計分成具有類似數(shù)量邏輯的4到10個之間的Partitions。如果其中的一個Partitions被修改,其它的將被保存。因此,保存數(shù)量與設(shè)計中Partitions 的數(shù)量 是成比例的。另一個策略是當難以滿足時序約束時實例創(chuàng)建一個Partition。一旦針對這個Partition的時序約束得到滿足,即使在該Partition外部的邏輯被修改時,它也會被保存起來。
為了向設(shè)計添加更多的Partitions,存在一個逐漸減小的返回點。Partition接口是最優(yōu)化的障礙。如果只能通過對 Partition接口最優(yōu)化來解決一個關(guān)鍵路徑或包裝問題, 那么,應(yīng)該從設(shè)計中把那個Partition消除。在Partition接口上創(chuàng)建寄存器將排除出現(xiàn)時序或包裝問題的可能性。
XST和Synplify Pro兩者都可被用詳細說明RTL Partitions。
在Partition流程中使用XST
如圖4所示,要采用XST綜合工具在ISE Project Navigator中創(chuàng)建Partitions,右擊Sources列表中的實例并選擇New Partition。從這個菜單可以修改其它的Partition屬性,如保存。
圖4.在ISE Project Navigator軟件工具 (XST流程)中創(chuàng)建Partitions。
在tcl接口中創(chuàng)建Partition,要使用這條命令:
% partition new
Partitions不能用批處理命令創(chuàng)建,因為他們需要在設(shè)計中的特定邏輯模塊上設(shè)置一種屬性。
實現(xiàn)FPGA設(shè)計(XST, ngdbuild, map, par)的個別應(yīng)用生成關(guān)于哪一個Partitions在它們各自的報告文件中被保存和實現(xiàn)的信息。例如,在這個XST 綜合報告中,一些Partitions被保存,而其它的被重新實現(xiàn)。每一個已實現(xiàn)的Partition都有一個原因解釋它為什么沒有被保存。
在9.1i版本ISE中,對時序約束或命令行變更做出的修改—如努力級別—將迫使所有的Partitions被重新實現(xiàn)。
在Partition流程中采用Synplify Pro
在Synplify Pro Partition流程的情況下,用戶在運行綜合之前,指定RTL模塊/子模塊(Partitions)作為Synplify Pro中的編譯點。在整個設(shè)計中運行最初的布局和布線之后,該工具檢測哪些模塊/子模塊已經(jīng)發(fā)生了改變,并且能利用這一變化對所選擇的任意模塊執(zhí)行后續(xù)的增量布局和布線,與此同時,使其它已布局/布線的模塊保持不動。在已傳遞到布局和布線的tcl文件中,有可能詳細說明布局或布局和布線是否被保存(缺省是布局和布線)。
Synplify把時間戳寫入到EDIF,它可用于確定每一個編輯點自上一次的布局和布線運行后是否發(fā)生改變。一份tcl文件也由Synplify 寫入,從而為賽靈思布局和布線定義分區(qū)。當用戶指定“syn_hier=locked,physICal”時, Synplify把額外屬性寫入 EDIF之中,要觀察的內(nèi)容包括該模塊最近被綜合時的時間戳。如果從上一次運行開始模塊一直沒有發(fā)生變化,舊的時間戳被存入EDIF之中。每個標有“locked, physical”的編輯點將含有這樣一個時間戳。賽靈思ISE 9.1i 拾取該時間戳,與以前的布局和布線時間戳進行比較,并且只在發(fā)生改變的模塊上進行增量布局和布線。
總結(jié)和優(yōu)點
一般說來,保存一項設(shè)計要比重新實現(xiàn)一項設(shè)計更快。因此,如果大部分設(shè)計能通過采用Partitions或SmartGuide進行保存,實現(xiàn)這項設(shè)計所需的時間將會更少。在用于測試這些技術(shù)的廣泛的工具套件中平均運行時間的改善,比最初的實現(xiàn)要快 2.5倍。例如,如果一項設(shè)計要花3個小時實現(xiàn),那么,利用設(shè)計保存的實現(xiàn)所需時間就要少1個小時。在一些最佳的情形下,運行時間比最初實現(xiàn)要快到6倍之多。
設(shè)計保存的另一個優(yōu)點是減少了驗證。如果一個設(shè)計模塊被嚴格地保存,那么,那部分設(shè)計在設(shè)計修改后就不需要再重新驗證。因為已保存的實現(xiàn)與前一次的實現(xiàn)是完全相同的,布局、布線和時序是相同的,這樣重新驗證就沒有必要了。
圖5.采用設(shè)計保存技術(shù)把一個200天的FPGA項目設(shè)計周期縮短的情況。
要花大約200天來實現(xiàn)的FPGA設(shè)計通常涉及設(shè)計定義、實現(xiàn)、驗證和調(diào)試。分配到每個階段的預計時間如圖5所示。采用設(shè)計保存技術(shù),就有可能使解決問題所花費的時間減少幾個月。這是基于這樣的假定:FPGA 的實現(xiàn)時間是幾個小時,因此,運行時間可能被減少。它還假定該設(shè)計采用基于模塊的驗證測試基準,因此,在該設(shè)計內(nèi)已保存的模塊不需要被重新驗證。如果一項設(shè)計采用了這種技術(shù),采用SmartCompile技術(shù)獲得解決方案所花費的時間就被大幅縮短。
評論