<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > EDA/PCB > 設計應用 > QIC 在縮短大容量FPGA編譯時(shí)間中的作用

QIC 在縮短大容量FPGA編譯時(shí)間中的作用

作者: 時(shí)間:2012-12-13 來(lái)源:網(wǎng)絡(luò ) 收藏

前言

本文引用地址:http://dyxdggzs.com/article/189739.htm

按照相對論的理論,時(shí)間也是可以被拉長(cháng)縮短的,只不過(guò)需要巨大的能量支撐著(zhù)您達到一個(gè)和光速可比擬的高速度而已。這話(huà)說(shuō)著(zhù)輕松,你我心里都明白,估計咱們的有生之年是看不到這樣的情景的……

回到可編程邏輯器件領(lǐng)域,隨著(zhù)65nm、40nm,乃至目前的28nm深亞微米工藝的采用,廠(chǎng)家生產(chǎn)出了越來(lái)越大,也越來(lái)越復雜的器件。而用戶(hù)們在為不斷增強的功能和不斷下降的單位成本而欣喜不已的同時(shí),也在為相關(guān)EDA軟件的性能滯后所帶來(lái)的開(kāi)發(fā)效率相對降低而苦惱不已,尤其是對芯片動(dòng)輒10到20個(gè)小時(shí)的可謂怨氣沖天。筆者在許多次面對一線(xiàn)的FPGA工程師時(shí),都聽(tīng)到了這樣類(lèi)似的話(huà):要是能壓一壓就好了!

Altera不能真的壓縮時(shí)間,但我們能改變“速度”!從數年前的版本開(kāi)始,Quartus2軟件中就整合了一種新技術(shù),或者說(shuō)一種新的設計流程:增量式編譯(Incremental Compilation)。它是ALTERA為解決FPGA設計太長(cháng)的問(wèn)題給出的一個(gè)新式工具!您,了解它嗎?

增量式編譯原理及流程

增量式編譯的原理很容易理解:對一個(gè)復雜的設計而言,肯定是需要做一定的功能劃分,由不同的子功能模塊來(lái)實(shí)現。那么在設計進(jìn)入后期比較成熟的時(shí)候,前后兩次編譯的設計版本中,會(huì )有很大部分的電路邏輯都是相同的(沒(méi)有修改),如果能在后一次編譯中,重復利用前一次編譯中未改變部分的編譯結果,也就是相應部分的布局布線(xiàn)信息,那么就能把這部分邏輯所消耗的布局布線(xiàn)時(shí)間節約下來(lái),從而在很大程度上縮短整個(gè)設計的編譯時(shí)間。當然,聰明的讀者都能想到,這樣的編譯方式,除了能縮短編譯時(shí)間,還能支持許多別的用途,比如IP設計交付、團隊開(kāi)發(fā)、不改變正常設計結果插入調試接口等。這些確實(shí)都是ALTERA 增量式編譯能夠實(shí)現的功能,但在本文中我們只闡述在縮短編譯時(shí)間方面的作用。

增量式編譯原理雖然簡(jiǎn)單,但要在FPGA的EDA軟件中實(shí)現,卻是一個(gè)復雜的系統工程。它不是簡(jiǎn)單地在軟件中增加一個(gè)功能模塊,而是對編譯處理流程多方面的改變和增強!請比較圖1和圖2兩幅附圖:圖1是傳統的FPGA編譯流程(Altera名稱(chēng):Flat compilation),圖2則是增量式編譯流程的示意圖。我們很容易發(fā)現增量式編譯流程復雜了許多,不僅引入了一些新的概念,比如設計分區(partition)、分區綜合后網(wǎng)表、分區布局/布線(xiàn)后網(wǎng)表等,同時(shí)加入了新的處理階段——分區合并(partition merging),而且對分析綜合(AnalysisSynthesis)和布局布線(xiàn)(fitter)階段進(jìn)行了改進(jìn),增加了許多針對分區的具體操作。

9.jpg

圖1 Flat Compilation 流程

8.jpg

圖2 增量式編譯流程

經(jīng)過(guò)幾年的研究與實(shí)踐,QuartusII的增量式編譯已逐步完善,無(wú)論是在可操作性、穩健性方面,還是在縮短編譯時(shí)間的效果方面,都十分出色。筆者參與的幾個(gè)客戶(hù)項目中,通過(guò)QIC的實(shí)施,都得到了50%左右的編譯時(shí)間節約,極大提高了客戶(hù)的開(kāi)發(fā)效率。下面,我將結合這些實(shí)際項目中的經(jīng)驗,介紹如何實(shí)踐利用QIC來(lái)高效的縮短設計編譯時(shí)間。

QIC實(shí)踐

QIC的效果評估

在討論具體如何使用QIC之前,先考慮一個(gè)問(wèn)題:如果讀者在您的工作中使用了增量式編譯QIC,怎么評估它的效能呢?

您需要至少做3輪實(shí)驗,才能看到QIC節約編譯時(shí)間的效果。首先,需要把您的設計用傳統編譯流程Flat Compilation進(jìn)行編譯,記錄下各階段所花費的時(shí)間。然后,創(chuàng )建合理的設計分區,指定分區網(wǎng)表性質(zhì),進(jìn)行第二次編譯,得到QIC各個(gè)分區的初始網(wǎng)表,并請記錄下操作時(shí)間。第三次編譯,您可以選擇修改設計中的某一個(gè)分區,然后再編譯一次,記錄下操作花費的時(shí)間。將第三次的編譯時(shí)間和第一次相比,正常的話(huà)應當看到非常明顯的時(shí)間節約,這才是QIC增量式編譯在編譯時(shí)間節約方面的體現。

值得注意的是,第二次編譯中已經(jīng)使用了QIC,但往往花費時(shí)間和第一次編譯差不多,有時(shí)還有增長(cháng)。許多人為此懷疑QIC的性能,認為QIC沒(méi)有效果甚至惡化了編譯時(shí)間。這其實(shí)是一種誤解!為什么呢?回到圖2,我們可以看到,QIC流程在A(yíng)nalysisSynthesis和fitter之間增加了一個(gè)新的處理階段——分區合并,它是需要額外花費在第一次Flat Compilation中不存在的時(shí)間。而且,由于這是創(chuàng )建分區后的第一次編譯,所有分區的網(wǎng)表都是空白的,也就是說(shuō)整個(gè)設計都需要被編譯、分析、綜合、布局布線(xiàn)等的工作量和第一次編譯是類(lèi)似的,因此這部分花費的時(shí)間也是差不多。把這兩部分時(shí)間加起來(lái),自然第2次編譯時(shí)間有可能會(huì )比第一次長(cháng)了。只有當進(jìn)行第3次編譯的時(shí)候,各個(gè)分區都有可重用的網(wǎng)表了,才有可能將那些沒(méi)有設計改變的分區的網(wǎng)表重用,從而節約綜合和布局布線(xiàn)階段的時(shí)間,達到整體編譯時(shí)間的節約。

圖3是筆者支持的一個(gè)客戶(hù)所進(jìn)行的QIC增量式編譯性能評估的結果總結??蛻?hù)的設計是高端路由器中的包處理應用,使用了ALTERA公司的Stratix4GX530器件,邏輯利用率大約是60%??蛻?hù)的編譯硬件是一臺高性能服務(wù)器:、

7.jpg

圖3 Z客戶(hù)增量式編譯評估實(shí)驗效果

• CPU:16core Intel(R) Xeon(R) CPU E7420 @2.13GHz

• Memory:64GB

即使是如此,在不使用QIC的情況下,客戶(hù)的每次編譯都需要12到13個(gè)小時(shí)。而在使用QIC并根據QIC指導原則進(jìn)行了必要的設計優(yōu)化后,最好的實(shí)驗結果是可以在6個(gè)小時(shí)左右(大約350分鐘)完成一次編譯,節約了接近55%的總編譯時(shí)間!從圖3中很容易看出前面文字描述的幾個(gè)特點(diǎn):

1. 第一次編譯和第二次編譯的總時(shí)間差不多(750 VS 730)

2. 第三次編譯中,AnalysisSynthesis操作的時(shí)間,fitter操作得時(shí)間都比第一次編譯有非常明顯的降低;

3. 從原理上看,QIC的網(wǎng)表重用對Assembly和時(shí)序分析沒(méi)有直接影響。因此三次編譯中,Assembler和時(shí)序分析所花費的時(shí)間是差不多的。

QIC指導原則

合理創(chuàng )建分區

Quartus中的“分區”是和設計層次緊密關(guān)聯(lián)的。任何設計,無(wú)論簡(jiǎn)單還是復雜,都會(huì )有一個(gè)頂層模塊(top-level module),Quartus自動(dòng)將它設置為一個(gè)默認分區(命名為top),不需要用戶(hù)設定。而別的分區,需要用戶(hù)手動(dòng)創(chuàng )建。創(chuàng )建分區的方法很簡(jiǎn)單,在Quartus GUI界面左上角的Hierarchy窗口,選擇想創(chuàng )建分區的實(shí)體,右鍵喚出的菜單中選擇“Design Partition”,然后在下一級菜單中選擇”Setting as Design Partition”,分區就創(chuàng )建成功了。

從圖2可以看出,分區(Partition)是增量式編譯中的一個(gè)關(guān)鍵概念。Altera規定:只要是有完整設計邊界的設計實(shí)體,無(wú)論它在設計的哪一層次,都可以用它來(lái)創(chuàng )建設計分區。也就是說(shuō),Quartus II中,設計中任何層次中的任何一個(gè)設計模塊,可以作為一個(gè)設計分區;一個(gè)設計中也可以包含不止一個(gè)設計分區;即使是在設計的同一層次,也可有多個(gè)分區。同時(shí),請注意:分區之間沒(méi)有層次關(guān)系,任何邏輯只能歸屬于某一個(gè)分區。以圖5為例,A模塊由A1、B1、C1三個(gè)子模塊組成。如果A模塊被設置為分區,Quartus會(huì )用模塊名來(lái)為此分區命名:A分區。那么,A分區中就會(huì )包含A1、B1、C1三個(gè)子模塊的所有邏輯。但如果把B1子模塊也創(chuàng )建為分區,那么,A分區中就只包含A1、C1兩個(gè)子模塊的邏輯,B1子模塊的邏輯只屬于新的B1分區了。


上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: FPGA QIC 大容量 編譯時(shí)間

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>