對(duì)于減少Quartus II的編譯時(shí)間的方法,可從三個(gè)角度進(jìn)行考慮。
第一,從開(kāi)發(fā)所使用的計(jì)算機(jī)入手,選擇合適的CPU、操作系統(tǒng)并進(jìn)行合理的設(shè)置從而提高編譯速度;
第二,從Quartus II軟件入手,對(duì)編譯相關(guān)的選項(xiàng)進(jìn)行合理設(shè)置,從而提高編譯效率;
第三,針對(duì)具體的工程,采用增量編譯的方法,合理地進(jìn)行分區(qū)和設(shè)置,從而減少編譯時(shí)間。
第一種方法是網(wǎng)友在實(shí)際的使用過(guò)程中摸索出來(lái)的,第二種和第三種方法在Quartus II的開(kāi)發(fā)手冊(cè)中都有跡可循。
下面進(jìn)行具體的介紹:
一、開(kāi)發(fā)所使用的計(jì)算機(jī)方面的考慮
要使用最快的CPU,編譯程序拼的就是CPU的速度,而增加RAM沒(méi)有作用。
另外,切勿使用低電壓和超低電壓的CPU,要使用標(biāo)準(zhǔn)電壓的CPU。
若使用的是Windows操作系統(tǒng),在任務(wù)管理器的進(jìn)程一欄,列出了CPU當(dāng)前運(yùn)行的各個(gè)進(jìn)程,并且給出了內(nèi)存使用情況。
在任意一個(gè)進(jìn)程上點(diǎn)擊右鍵,可以看到一個(gè)“設(shè)置優(yōu)先級(jí)”的功能。
查大部分進(jìn)程的優(yōu)先級(jí),都在“標(biāo)準(zhǔn)”狀態(tài)。通過(guò)把一個(gè)進(jìn)程的優(yōu)先級(jí)設(shè)置為“高于標(biāo)準(zhǔn)”,可以給該進(jìn)程分配更多的CPU資源,相應(yīng)地,其運(yùn)行速度也就上去了。
Quarutus II編譯過(guò)程中,通常要順序運(yùn)行quartus_map、quartus_fit、quartus_asm、quartus_tan四個(gè)進(jìn)程。
其中前兩個(gè)進(jìn)程占用了編譯時(shí)間的95%以上。
手工修改這兩個(gè)進(jìn)程的優(yōu)先級(jí)就可以保證Quartus II的編譯過(guò)程不受干擾,從而實(shí)現(xiàn)調(diào)整編譯速度的目的。
二、Quartus II開(kāi)發(fā)工具方面的考慮
Quartus II的編譯過(guò)程包括分析綜合、布局布線、匯編、時(shí)序分析以及生成網(wǎng)表,編譯的過(guò)程中耗時(shí)最多的是分析綜合和布局布線,所以想提高編譯速度也應(yīng)該從這點(diǎn)入手。
Quartus也有相關(guān)的自動(dòng)增量編譯的設(shè)置,如圖1所示,
首先是可用處理器數(shù)目的設(shè)置,選擇使用所有可用的處理器,這樣可以提高整體的速度;
其次是采用Smart Compilation,即智能編譯方式,它可以完成的功能是如果設(shè)計(jì)源文件沒(méi)有改動(dòng),那Quartus II將不再進(jìn)行分析綜合,而直接進(jìn)入布局布線階段。
圖1
另外,還可用通過(guò)編寫(xiě)TCL腳本的方法減少Q(mào)uartus II綜合時(shí)間。
使用Quartus II完成建立工程、編寫(xiě)HDL文件、設(shè)置以及分配管腳等操作,然后將qsf文件中的內(nèi)容復(fù)制到TCL文件中。
將上述的TCL文件和其他工程文件放入相同的文件夾,運(yùn)行CMD,使用CD命令將目錄更改到設(shè)計(jì)文件的文件夾,運(yùn)行命令quartus_sh -t test_top.tcl。
查看CMD窗口的報(bào)告,看是否有錯(cuò)誤或警告,有則更改HDL設(shè)計(jì)文件,重新運(yùn)行命令quartus_sh -t test_top.tcl即可。
還可以在TCL腳本中添加查看TimeQuest的時(shí)序報(bào)告命令,在Quartus II的幫助文件中可以查到這些命令。
但是這樣只減少了Quartus II的綜合時(shí)間,實(shí)際上使用TCL腳本建立工程、約束等比圖形化操作Quartus II更省時(shí)間。
三、增量編譯方面的考慮
增量編譯的原理是減少每次編譯里設(shè)計(jì)已經(jīng)完成的部分,進(jìn)而不需要再重復(fù)編譯設(shè)計(jì)者認(rèn)為已經(jīng)完成的工作。
具體方法為,設(shè)計(jì)者手動(dòng)得將整個(gè)工程分成N個(gè)子模塊(此處指的是邏輯模塊),并設(shè)定各個(gè)模塊的狀態(tài)(已經(jīng)完成了,不需要更改了,編譯時(shí)就采用上一次的結(jié)果),這樣編譯器在分析綜合的時(shí)候便可以對(duì)那些不需修改的部分直接采用上次的結(jié)果。
布局布線的時(shí)候也是一樣的,如果該子模塊不需要更改了就采用上次的結(jié)果,如需更改再重新進(jìn)行布局布線,只不過(guò)布局布線的過(guò)程要相比分析綜合復(fù)雜一些。
而上面提到的將整個(gè)工程手動(dòng)分成N個(gè)模塊,我們就要用到Quartus II提供的兩個(gè)高級(jí)工具——Design Partitions和LogicLock Regions。
增量編譯技術(shù)的另一主要優(yōu)點(diǎn)是保持性能不變。通過(guò)只對(duì)設(shè)計(jì)中的特定分區(qū)進(jìn)行編譯,其他分區(qū)的時(shí)序性能保持不變。
漸進(jìn)式流程適用的設(shè)計(jì)環(huán)境:當(dāng)改變?cè)次募r(shí),縮短編譯時(shí)間;在加入其他邏輯前,優(yōu)化設(shè)計(jì)部分結(jié)果;采用在系統(tǒng)邏輯分析器進(jìn)行漸進(jìn)式調(diào)試;實(shí)現(xiàn)基于團(tuán)隊(duì)的設(shè)計(jì)環(huán)境和自下而上的設(shè)計(jì)流程。
增量編譯流程要比固定式編譯需要進(jìn)行更多的前端規(guī)劃。
例如,必須構(gòu)造源代碼或者設(shè)計(jì)層次以保證邏輯能夠正確分組,進(jìn)行優(yōu)化。
比起在設(shè)計(jì)后期重新構(gòu)造代碼,更容易在設(shè)計(jì)早期實(shí)現(xiàn)正確的邏輯分組。
設(shè)計(jì)分區(qū)后,設(shè)計(jì)人員需要將每個(gè)分區(qū)分配到器件中的某個(gè)物理位置,以建立設(shè)計(jì)平面規(guī)劃。
不好的分區(qū)或者平面規(guī)劃分配會(huì)劣化設(shè)計(jì)面積利用率和性能,很難達(dá)到時(shí)序逼近。
和固定式編譯相比,增量編譯通常需要設(shè)計(jì)人員嚴(yán)格按照良好的設(shè)計(jì)習(xí)慣進(jìn)行設(shè)計(jì)。
規(guī)劃設(shè)計(jì)時(shí),設(shè)計(jì)人員應(yīng)記住每個(gè)分區(qū)的大小和范圍,隨著設(shè)計(jì)的發(fā)展,知道設(shè)計(jì)的不同部分會(huì)怎樣變化。
經(jīng)常變化的邏輯應(yīng)和設(shè)計(jì)中的固定部分分開(kāi)。
設(shè)計(jì)層次應(yīng)該和一個(gè)分區(qū)中的關(guān)鍵時(shí)序邏輯分開(kāi),最好和寄存端口邊界分開(kāi),這樣,軟件能夠高效的優(yōu)化每個(gè)獨(dú)立分區(qū)。
為進(jìn)行增量編譯需要在Hierarchy tab of the Project Navigator中對(duì)Design partitions進(jìn)行定義,在定義之前需要運(yùn)行Analysis & Elaboration生成design hierarchy,定義之后會(huì)在實(shí)體名字上面出現(xiàn)一個(gè) 標(biāo)志,如圖2所示。
通過(guò)設(shè)置可使Design partitions在增量編譯的過(guò)程中被保留或重新編譯。
使用漸進(jìn)式編譯時(shí),設(shè)計(jì)層次被映射到設(shè)計(jì)分區(qū)中,在編譯過(guò)程中單獨(dú)處理它,以實(shí)現(xiàn)漸進(jìn)式編譯功能。
設(shè)計(jì)中的每個(gè)實(shí)體或者實(shí)例不會(huì)被自動(dòng)考慮為設(shè)計(jì)分區(qū);設(shè)計(jì)人員必須將頂層以下的一個(gè)或者多個(gè)設(shè)計(jì)層次指定為漸進(jìn)式編譯設(shè)計(jì)分區(qū)。
當(dāng)分區(qū)被聲明后,該分區(qū)中的每個(gè)層次成為同一分區(qū)的組成部分。
當(dāng)為已有分區(qū)中的層次建立新分區(qū)時(shí),新的低層分區(qū)中的邏輯不再是上層分區(qū)的組成部分。
圖3 所示是一個(gè)設(shè)計(jì)層次實(shí)例,其中,實(shí)例B 和F 被指定為設(shè)計(jì)分區(qū)。
分區(qū)B 包括子實(shí)例D 和E。
“頂層”默認(rèn)分區(qū)含有頂層模塊A 以及實(shí)例C,原因是它沒(méi)有被分配到任何其他分區(qū)中。
責(zé)任編輯:lq6
-
處理器
+關(guān)注
關(guān)注
68文章
19896瀏覽量
235265 -
cpu
+關(guān)注
關(guān)注
68文章
11080瀏覽量
217108 -
操作系統(tǒng)
+關(guān)注
關(guān)注
37文章
7152瀏覽量
125595 -
QUARTUS II
+關(guān)注
關(guān)注
0文章
52瀏覽量
30478
原文標(biāo)題:如何減少Q(mào)uartus II的編譯時(shí)間
文章出處:【微信號(hào):gh_9d70b445f494,微信公眾號(hào):FPGA設(shè)計(jì)論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
如何減少dsp啟動(dòng)時(shí)間?
請(qǐng)問(wèn)MPC5748G如何減少啟動(dòng)時(shí)間?
在SPI通信中啟動(dòng)SCLK之前如何減少CS低電平時(shí)間?
Triton編譯器功能介紹 Triton編譯器使用教程
英特爾Quartus Prime Pro 24.3版本的全新亮點(diǎn)
時(shí)間繼電器的調(diào)節(jié)方法 時(shí)間繼電器與普通繼電器的區(qū)別
分享關(guān)于編譯器的科普
Keil編譯器優(yōu)化方法

淺談Vivado編譯時(shí)間

java反編譯的代碼可以修改么
linux驅(qū)動(dòng)程序的編譯方法是什么
linux驅(qū)動(dòng)程序的編譯方法有哪兩種
通過(guò)優(yōu)化補(bǔ)償最大限度地減少導(dǎo)通時(shí)間抖動(dòng)和紋波

評(píng)論