01提出問題(點(diǎn)燈程序)
觀看以下程序:
module led(
input clk ,//系統(tǒng)時(shí)鐘,50MHZ
input rst_n ,//系統(tǒng)復(fù)位,低電平有效
output reg led
);
reg [24:0] cnt ;//定義一個(gè)計(jì)數(shù)器
always @(posedge clk or negedge rst_n)begin
if(rst_n==1'b0)begin
cnt <= 25'd0;
end
else begin
cnt <= cnt + 1;
end
end
always @(posedge clk or negedge rst_n)begin
if(rst_n==1'b0)begin
led <= 1'b1;
end
else if(cnt == 25'd24_999_999)begin
led <= ~led;
end
end
endmodule
問題:上述代碼所描述的邏輯電路在Cyclone IV E的EP4CE10F17C8(65nm)這個(gè)器件上能最高運(yùn)行在多少頻率的時(shí)鐘?
此問題需要時(shí)序分析軟件來告知我們答案,Altera通過Quartus的TimeQuest軟件對(duì)___進(jìn)行分析,并給出報(bào)告。
時(shí)序分析注意:
1、時(shí)序分析一定是基于特定器件(該器件需要具體到一個(gè)特定型號(hào)的特定速度等級(jí));
2、時(shí)序分析一定是基于某個(gè)邏輯設(shè)計(jì)在特定器件上經(jīng)過布局布線之后的網(wǎng)表(該網(wǎng)表包含了設(shè)計(jì)中每一個(gè)邏輯具體在該器件的什么資源上實(shí)現(xiàn),而且還包括該資源在器件內(nèi)的具體位置,還包括信號(hào)從每個(gè)節(jié)點(diǎn)傳輸?shù)较乱粋€(gè)節(jié)點(diǎn)的具體延遲時(shí)間)。
3、時(shí)序分析不是在對(duì)代碼進(jìn)行分析,而是在對(duì)真實(shí)的門級(jí)傳輸路徑進(jìn)行分析。

圖1 quartus軟件顯示工程使用的器件
02時(shí)序約束
全編譯工程
準(zhǔn)備好工程之后,先對(duì)工程全編譯一次,注意,是全編譯,不是分析和綜合,新手如果不確定,直接使用組合鍵 CTRL + L 吧。
為什么要全編譯呢?
這里有一個(gè)(知識(shí))點(diǎn):時(shí)序分析一定是基于軟件編譯好的具體到一個(gè)特定型號(hào)的芯片網(wǎng)表進(jìn)行的。
時(shí)序分析的本質(zhì)是什么?
分析設(shè)計(jì)中每個(gè)信號(hào)在實(shí)際物理傳輸時(shí)的各種延遲是否滿足一定的要求。既然是延遲,那么就必須對(duì)應(yīng)到具體的一個(gè)物理網(wǎng)表,純粹對(duì)代碼進(jìn)行時(shí)序分析是沒有任何意義和依據(jù)的。時(shí)序分析分析的不是代碼,而是代碼描述的電路在某個(gè)具體型號(hào)芯片上實(shí)現(xiàn)時(shí)的物理特性。因此,進(jìn)行時(shí)序分析前,全編譯工程很重要。
正常編譯之后,TimeQuest會(huì)變紅報(bào)錯(cuò),這是由于沒有手動(dòng)加入時(shí)序約束,系統(tǒng)默認(rèn)給CLK添加的時(shí)序約束是1GHZ,現(xiàn)綜合之后的最高時(shí)鐘頻率如圖2所示只能達(dá)到304.79MHZ,不能滿足默認(rèn)的1GHZ,軟件當(dāng)然就報(bào)錯(cuò)了;

圖2 工程編譯后TimeQuest報(bào)錯(cuò)
默認(rèn)添加1GHZ的最大時(shí)鐘頻率約束如圖3所示:

圖3 quartus默認(rèn)給工程添加1GHz時(shí)鐘約束
系統(tǒng)運(yùn)行最高時(shí)鐘頻率查看方式如圖4所示:

圖4 quartus查看工程運(yùn)行最大系統(tǒng)時(shí)鐘
理解時(shí)序與溫度的關(guān)聯(lián)
執(zhí)行全編譯之后,就可以查看整個(gè)工程的時(shí)序報(bào)告了。怎么看呢?每次編譯完成,Quartus軟件都會(huì)自動(dòng)顯示編譯報(bào)告界面,如果沒有顯示,也可以點(diǎn)擊編譯報(bào)告圖標(biāo)來切換到編譯報(bào)告頁面,編譯報(bào)告圖標(biāo)就在下圖所示的位置,打開之后,時(shí)序報(bào)告都在 TimeQuest Timing Analyzer 這個(gè)欄目下面,點(diǎn)擊前面的三角符號(hào)即可展開,如圖5所示:

圖5 quartus全編譯工程后查看時(shí)序報(bào)告
展開之后有好多個(gè)選項(xiàng),例如 Clocks,Slow 1200mV 85C Model、Slow 1200mV 0C Model、Fast 1200mV 0C Model。這里先介紹下這幾項(xiàng)的物理意義。
1、Clocks:這一項(xiàng)是顯示當(dāng)前的設(shè)計(jì)中有哪些時(shí)鐘信號(hào),比如本節(jié)所用的例子中,就只有一個(gè) clk的時(shí)鐘。
2、Slow 1200mV 85℃ Model:芯片內(nèi)核供電電壓 1200mV,工作溫度85度情況下的慢慢速傳輸模型。
3、Slow 1200mV 0℃Model:芯片內(nèi)核供電電壓 1200mV,工作溫度0度情況下的慢速傳輸模型。
4、Fast 1200mV 0℃ Model:芯片內(nèi)核供電電壓 1200mV,工作溫度0度情況下的快速傳輸模型。
根據(jù)專家說法(我還沒到能夠引經(jīng)據(jù)典講解芯片中信號(hào)傳輸特性隨溫度變化的能力,即使有講,也是 BD 來的,索性就不說原理了),溫度越高,芯片內(nèi)信號(hào)傳輸速度越慢,說是溫度會(huì)改變硅片材料,泄露電流和電子移動(dòng)能力等特性,導(dǎo)致較高溫度下芯片內(nèi)信號(hào)傳輸速度變慢(這幾句我是借鑒來的)。信號(hào)在相同路徑中的傳輸時(shí)間變長(zhǎng),也就是延時(shí)會(huì)增加,這也就是做產(chǎn)品需要關(guān)心的問題。在實(shí)驗(yàn)室環(huán)境下運(yùn)行良好的系統(tǒng),能否在環(huán)境溫度達(dá)到 85℃ 的情況下依舊運(yùn)行良好?如果到了 85℃ 環(huán)境下運(yùn)行不好了,可能就是高溫導(dǎo)致的信號(hào)傳輸速度下降,從而導(dǎo)致時(shí)序不滿足了。
既然說溫度越高,芯片內(nèi)信號(hào)傳輸速度越慢,那么請(qǐng)問在“芯片內(nèi)核供電電壓 1200mV,工作溫度 0℃ 情況下也說個(gè) Slow 又是什么意思呢?這個(gè)嘛,網(wǎng)上說法是晶體管閾值電壓會(huì)隨著溫度降低而降低,出現(xiàn)逆溫現(xiàn)象,有可能在低溫是克服載流子遷移加速問題,從而導(dǎo)致延時(shí)時(shí)間變長(zhǎng),實(shí)際上時(shí)序最差情況往往出現(xiàn)在低溫,而不是高溫狀態(tài)下。(不要問我更多,這幾句內(nèi)容我也是網(wǎng)上抄來的)。
不管是 0℃ 還是 85℃ 慢速條件下,信號(hào)傳輸速率變慢都有可能影響到目的寄存器的建立時(shí)間余量,信號(hào)傳輸速率變慢了,建立時(shí)間余量就小了。如果之前實(shí)驗(yàn)室環(huán)境下建立時(shí)間余量都已經(jīng)處于臨界狀態(tài)了,結(jié)果一到高溫環(huán)境,數(shù)據(jù)速率變慢,建立時(shí)間可能就無法再滿足了,整個(gè)設(shè)計(jì)就工作異常了。
當(dāng)然了,低溫情況下并不是所有的特性都會(huì)變慢,還是有些地方信號(hào)傳輸會(huì)變快,一旦傳輸速度變快,這個(gè)時(shí)候就要考慮另一個(gè)問題了——保持時(shí)間余量??焖偾闆r下數(shù)據(jù)傳輸速度變快了,如果之前實(shí)驗(yàn)室環(huán)境下保持時(shí)間余量都已經(jīng)處于臨界狀態(tài)了,結(jié)果一到低溫環(huán)境,數(shù)據(jù)速率變更快,保持時(shí)間可能就無法再滿足了,整個(gè)設(shè)計(jì)就工作異常了。
所以,看報(bào)告的時(shí)候,一般 Slow 1200mV 85C Model 和 Slow 1200mV 0C Model 情況下重點(diǎn)關(guān)注寄存器建立時(shí)間余量,而 Fast 1200mV 0C Model 情況下重點(diǎn)關(guān)注寄存器保持時(shí)間余量。當(dāng)然,話還是不說絕對(duì)了,在涉及到 IO 時(shí)序約束的時(shí)候,幾種情況還是都得看(雖然目前大部分情況下只關(guān)心了 Slow 1200mV 85C Model)
03查看最大時(shí)鐘運(yùn)行頻率
大部分情況下關(guān)心 Slow 1200mV 85C Model 時(shí)的情況,那么就先看這種模式下的時(shí)序報(bào)告。
展開 “TimeQuest Timing Analyzer” 下的 “Slow 1200mV 85C Model”,可以看到,排在第一項(xiàng)的就是 “Fmax Summary”。點(diǎn)擊 “Fmax Summary”,則右側(cè)顯示了當(dāng)前設(shè)計(jì)中每個(gè)時(shí)鐘域的邏輯能夠運(yùn)行的最大時(shí)鐘頻率。由于本例子只有一個(gè)時(shí)鐘信號(hào),所以只顯示 clk 這個(gè)時(shí)鐘的最大運(yùn)行頻率,為 304.79MHz。

圖6 quartus查看最大系統(tǒng)時(shí)鐘頻率
等等,大家有沒有發(fā)現(xiàn)一個(gè)神奇的事情,設(shè)計(jì)中有且僅有一個(gè)時(shí)鐘信號(hào),而我們并沒有對(duì)設(shè)計(jì)加入任何的時(shí)序約束內(nèi)容,甚至連 SDC 文件都沒有,但是報(bào)告卻自動(dòng)的搜尋到了這個(gè) clk 信號(hào),并且報(bào)告了其時(shí)鐘頻率,這。。。。是為啥呢?
這里就又有一個(gè)(知識(shí))點(diǎn)。因?yàn)椋瑢?duì)于這樣一個(gè)簡(jiǎn)單的設(shè)計(jì),Quartus 軟件能夠在編譯過程中自動(dòng)的識(shí)別出設(shè)計(jì)中潛在的時(shí)鐘屬性的信號(hào),并按照軟件默認(rèn)的對(duì)時(shí)鐘的約束去分析設(shè)計(jì)。而對(duì)于一些較為復(fù)雜的設(shè)計(jì)或者多時(shí)鐘信號(hào)的設(shè)計(jì),軟件可能就分析不出來或者無法確定到底誰是時(shí)鐘信號(hào)了,所以就無法給出時(shí)序報(bào)告。
只需要點(diǎn)擊 “TimeQuest Timing Analyzer” 下的 Clock 選項(xiàng)就可以查看軟件默認(rèn)的對(duì)該信號(hào)加的約束是多少了,如圖7所示:

圖7 quartus默認(rèn)添加的時(shí)鐘約束
可以看到,軟件自動(dòng)識(shí)別了 clk 信號(hào)為設(shè)計(jì)的時(shí)鐘,而且認(rèn)為其周期為 1ns,也就是時(shí)鐘頻率為 1000MHz,占空比為 50%。芯片也就最高 400 多兆的運(yùn)行能力,軟件上來就加個(gè) 1000MHz 的時(shí)鐘信號(hào),大概是想通過這種方式,讓每個(gè)設(shè)計(jì)都報(bào)時(shí)序錯(cuò)誤,好提醒用戶記得加時(shí)序約束。當(dāng)然了,另一個(gè)好處就是按照 1000MHz 這種超極限約束,全局會(huì)默認(rèn)就按照最優(yōu)的可能去對(duì)設(shè)計(jì)進(jìn)行布局布線,使得設(shè)計(jì)即使忘了加約束,編譯結(jié)果也能有個(gè)較好的時(shí)序性能。
當(dāng)然,這只是對(duì)于簡(jiǎn)單的設(shè)計(jì),軟件能夠分析出來,而對(duì)于復(fù)雜的設(shè)計(jì),軟件就沒這個(gè)本事了。所以還是希望大家不要以為軟件能幫你包辦一切,該自己動(dòng)手的,還是不要讓軟件去浮想聯(lián)翩。
04加入時(shí)鐘約束
假如,這是一個(gè)很復(fù)雜的系統(tǒng),那么軟件將無法分析出系統(tǒng)中的時(shí)鐘信號(hào),也就不能自動(dòng)加入約束,所以,我們是無法查看到最大時(shí)鐘運(yùn)行頻率的,因此,接下來我們自己來為工程加入時(shí)鐘約束。
加入時(shí)鐘約束的方法有很多,比如:
1. 高手可以直接自己寫 SDC 文件。 ?
2. 可以用 TimeQuest Timing Analyzer Wizard 軟件按照向?qū)У闹敢徊揭徊讲僮鳌???
3. 可以使用 TimeQuest Timing Analyzer 工具以圖形化界面添加約束。
為了讓大家更加熟悉 TimeQuest Timing Analyzer 的用法,所以還是使用 TimeQuest Timing Analyzer 工具來對(duì)工程添加約束。
05打開 TimeQuest Timing Analyzer
打開TimeQuest Timing Analyzer的方法也有很多,通過菜單欄依次點(diǎn)擊:Tools->TimeQuest Timing Analyzer 可以打開,也可以直接點(diǎn)擊工具欄里的 TimeQuest Timing Analyzer 圖標(biāo),如下圖所示:

圖8 quartus的TimeQuest打開方式
不管用什么方法,總之打開就是了。打開之后的界面就是圖 9 的樣子了:

圖9 quartus的TimeQuest界面
06創(chuàng)建網(wǎng)表(Create Timing Netlist)
要想進(jìn)行時(shí)序約束或時(shí)序分析,必須要有一個(gè)能夠進(jìn)行分析或約束的基本對(duì)象,那么什么是這個(gè)對(duì)象呢?對(duì)象就是網(wǎng)表模型。
網(wǎng)表模型是啥?先來說說網(wǎng)表是啥吧。簡(jiǎn)單的理解,網(wǎng)表就是 Quartus 軟件經(jīng)過編譯,布局布線后得到的實(shí)際適配某一個(gè)特定型號(hào)芯片的電路信息,該電路信息就是對(duì)應(yīng)下載到芯片中后實(shí)際在芯片中呈現(xiàn)的電路。
一個(gè)具體的設(shè)計(jì),在不同的溫度環(huán)境下,其工作表現(xiàn)是不一樣的,而分析的時(shí)候,取了三種模型,分別為 Slow 1200mV 85C Model、Slow 1200mV 0C Model 和 Fast 1200mV 0C Model,這三種模型,就是進(jìn)行時(shí)序分析時(shí)候的對(duì)象。
打開 TimeQuest Timing Analyzer 工具之后,是沒有選擇網(wǎng)表對(duì)象的,所以要想能夠進(jìn)行時(shí)序分析,先要選擇網(wǎng)表。選擇網(wǎng)表的過程稱為創(chuàng)建時(shí)序網(wǎng)表(Create Timing Netlist),至于如何創(chuàng)建網(wǎng)表,很多時(shí)序約束之類的文章會(huì)講多種方法,這里只分享最簡(jiǎn)單直接明了的方法,就是在 TimeQuest Timing Analyzer 界面中直接雙擊 Create Timing Netlist 選項(xiàng)即可,如下圖10所示:

圖10 TimeQuest創(chuàng)建網(wǎng)表
這種情況下,默認(rèn)創(chuàng)建的就是 Slow 1200mV 85C Model,創(chuàng)建完成后該選項(xiàng)會(huì)變成綠色,表示創(chuàng)建完成,同時(shí),在這一欄的上方,也就是 Report 欄里,會(huì)出現(xiàn)各種當(dāng)前以及能提高的報(bào)告。如果選中 TimeQuest Timing Analyzer Summary 選項(xiàng),就能看的當(dāng)前使用的延時(shí)模型確實(shí)是 Slow 1200mV 85C Model。
07讀取時(shí)序約束文件(Read SDC File)
什么是讀取時(shí)序約束文件?為什么要讀取時(shí)序約束文件?
先說時(shí)序約束文件的作用吧,時(shí)序約束文件有兩個(gè)作用,一是指導(dǎo)EDA軟件(Quartus)進(jìn)行布局布線,二是指導(dǎo)時(shí)序分析軟件(TimeQuest Timing Analyzer)對(duì)EDA軟件編譯得到的網(wǎng)表進(jìn)行分析報(bào)告。
指導(dǎo)EDA軟件(Quartus)進(jìn)行布局布線這個(gè)功能很好理解,正如上面提到的一樣,如果沒有為工程加入時(shí)序約束,軟件就會(huì)默認(rèn)自動(dòng)分析出可能的時(shí)鐘信號(hào),并按照 1000MHZ 的高頻率對(duì)該信號(hào)進(jìn)行約束,那么軟件在進(jìn)行布局布線時(shí)候,就會(huì)認(rèn)為用戶希望所有的邏輯都必須能夠穩(wěn)定運(yùn)行在 1000MHZ 的時(shí)鐘頻率下,軟件會(huì)按照這個(gè)指示,盡可能的對(duì)工程中的布局布線進(jìn)行優(yōu)化,保證編譯結(jié)果能夠盡可能的穩(wěn)定運(yùn)行在 1000MHZ 的頻率下(當(dāng)然這在當(dāng)前的技術(shù)下是不可能實(shí)現(xiàn)的)。這就是約束文件的第一個(gè)作用,即指導(dǎo) EDA 軟件進(jìn)行布局布線。
指導(dǎo)時(shí)序分析軟件(TimeQuest Timing Analyzer)對(duì) EDA 軟件編譯得到的網(wǎng)表進(jìn)行分析報(bào)告這個(gè)功能也很好理解,通過系統(tǒng)最大運(yùn)行時(shí)鐘頻率的計(jì)算方法,要想知道當(dāng)前設(shè)計(jì)實(shí)際能夠運(yùn)行在多少 MHZ 的頻率下,需要有一個(gè)參考,既當(dāng)前網(wǎng)表在指定的時(shí)鐘頻率下,寄存器的建立時(shí)間余量是多少,有了這個(gè)建立時(shí)間余量,就能夠計(jì)算出該邏輯能運(yùn)行的最高時(shí)鐘頻率了。
這里,就可以回答上面的兩個(gè)問題了。
什么是讀取時(shí)序約束文件?就是查詢了解針對(duì)當(dāng)前網(wǎng)表,添加了哪些約束內(nèi)容。為什么要讀取時(shí)序約束文件?就是為了能夠基于該時(shí)序約束信息對(duì)當(dāng)前的網(wǎng)表進(jìn)行分析,查看當(dāng)前的網(wǎng)表是否滿足約束的內(nèi)容,或者說計(jì)算出當(dāng)前的網(wǎng)表實(shí)際的表現(xiàn)參數(shù)與約束信息之間的關(guān)系。
針對(duì)上述的操作只需一秒間,讀取時(shí)序約束文件的方法也很簡(jiǎn)單,直接雙擊“Read SDC File”選項(xiàng)即可。如圖 11 所示:

圖11 TimeQuest讀取工程的時(shí)序約束文件
做到這里,相信就會(huì)有人質(zhì)疑了:這個(gè)工程并沒有加入任何的 SDC 文件,那這個(gè)操作,讀取的又是什么內(nèi)容呢?實(shí)際上,和前面說的一樣,因?yàn)闆]有加約束,所以軟件就自己分析出了一個(gè)時(shí)鐘,然后對(duì)那個(gè)時(shí)鐘信號(hào)添加1000MHZ的約束。只是用戶看不到具體的 sdc 文件而已。這里執(zhí)行讀取 Read SDC File 操作的時(shí)候,讀取的就是這個(gè)看不見的默認(rèn)約束文件。而如果用戶主動(dòng)為當(dāng)前工程添加了時(shí)序約束文件,那么讀取的就是用戶添加的約束文件了。
08創(chuàng)建時(shí)鐘(Create Clock)
創(chuàng)建時(shí)鐘,嚴(yán)格來說應(yīng)該叫創(chuàng)建時(shí)鐘約束,就是為當(dāng)前網(wǎng)表模型(注意,此時(shí)還只是針對(duì)網(wǎng)表模型)指定一個(gè)明確的時(shí)鐘信號(hào)。這樣時(shí)序分析軟件就能夠基于該時(shí)鐘參數(shù),對(duì)網(wǎng)表中的各信號(hào)進(jìn)行分析了。創(chuàng)建時(shí)鐘(約束)步驟如下所示:
1、菜單欄依次點(diǎn)擊 Constraints -> Create Clock,打開時(shí)鐘約束界面。

圖12 TimeQuest創(chuàng)建時(shí)鐘約束
2、在彈出的時(shí)鐘約束圖形界面中,輸入該時(shí)鐘的各項(xiàng)屬性。如圖 13 所示:

圖13 TimeQuest創(chuàng)建時(shí)鐘約束界面
時(shí)鐘名稱,這里的時(shí)鐘名稱是用戶為約束的該時(shí)鐘信號(hào)取一個(gè)方便識(shí)別的別名,而非被約束的時(shí)鐘的原本名稱。比如周星星是一個(gè)特工,組織上叫他 007,那么組織上在給他安排任務(wù)的時(shí)候,稱呼他就是 007,而不會(huì)叫他周星星,當(dāng)然也可以使用原本名稱。本工程中,需要被約束的時(shí)鐘信號(hào)本身名稱為 clk,這里約束也為 clk。
周期,時(shí)鐘周期,clk 的時(shí)鐘頻率為 50MHz,所以換算過來其周期就是 1000/50 =20ns。約束的時(shí)候,時(shí)鐘信號(hào)的頻率不能直接作為參數(shù)輸入,而是需要換算為周期后再作為參數(shù)。
上升時(shí)間,這里的上升時(shí)間是指什么時(shí)刻時(shí)鐘信號(hào)出現(xiàn)上升沿,不寫就默認(rèn)是0時(shí)刻了,右側(cè)的波形也能看出來。
下降時(shí)間,這里的下降時(shí)間是指什么時(shí)刻時(shí)鐘信號(hào)出現(xiàn)下降沿,不寫就默認(rèn)是周期的一半時(shí)刻了,右側(cè)的波形也能看的出來。
目標(biāo),這才是真正的時(shí)鐘信號(hào)的本名,這才是 007 的真名——周星星,只不過這個(gè)名字在執(zhí)行任務(wù)的時(shí)候沒有人理會(huì)而已。但是組織上為了知道 007 究竟是哪個(gè)人,必須給他建個(gè)檔案,檔案里會(huì)寫,007,真名周星星。所以這里的目標(biāo)就是指定約束的這個(gè)時(shí)鐘信號(hào)具體是對(duì)應(yīng)的哪個(gè)物理上的時(shí)鐘。
上述所有參數(shù)輸入好之后,生成的一個(gè)真實(shí)起作用的腳本命令。換句話說,上面輸入的各種參數(shù)只是為了方便用戶更加方便的添加約束,這些參數(shù)輸入之后,軟件就會(huì)根據(jù)這些參數(shù)生成最終起作用的腳本命令。
3、 上述參數(shù)輸入完畢之后,點(diǎn)擊 Run 即可完成創(chuàng)建時(shí)鐘約束的操作。執(zhí)行操作后可以看到,軟件的信息窗口中執(zhí)行了前面 UI 界面中展示的那句腳本。

圖14 TimeQuest創(chuàng)建時(shí)鐘約束成功界面
=create_clock -name clk -period 20.000 [get_ports {clk}]=
部分Quartus版本可能會(huì)出現(xiàn)圖 15 的問題:

圖15 TimeQuest創(chuàng)建時(shí)鐘約束失敗界面
這句腳本下面緊跟著的一條警告信息才是關(guān)鍵,警告原話是:
Ignored create_clock: Incorrect assignment for clock. Source node: Clk9M already has a clock(s) assigned to it. Use the -add option to assign multiple clocks to this node. Clock was not created or updated.
EDA軟件居然把剛剛的命令給忽略了,為啥呢?就因?yàn)?Clk9M 這個(gè)信號(hào)已經(jīng)被綁定到一個(gè)時(shí)鐘上了,哪里綁定的呢?就是軟件默認(rèn)自動(dòng)的呀。哎,明明上面的約束才是真正想要的,結(jié)果軟件居然不認(rèn),還是認(rèn)他自己分析總結(jié)到的那個(gè)時(shí)鐘信號(hào)。
到這里,也是希望借此例子告訴大家一個(gè)事情,那就是每次加入一個(gè)約束之后,一定要看工具對(duì)這條約束的執(zhí)行報(bào)告,看看這條約束是否被正確執(zhí)行了,有沒有報(bào)告其他信息說約束失敗之類的。否則很有可能出現(xiàn)上述情況,導(dǎo)致約束并沒有生效。
警告說可以通過-add 選項(xiàng)來為此節(jié)點(diǎn)創(chuàng)建多個(gè)時(shí)鐘,不能那樣做,因?yàn)槟蔷瓦`背本意了,本意就是這個(gè)節(jié)點(diǎn)有且只有一個(gè)時(shí)鐘約束,所以變換思路,既然約束加不了,改總行了吧。怎么改呢?
在 TimeQuest Timing Analyzer 中,找到 Reports 下面的 Diagnostic 下面的 Report Clocks 選項(xiàng),如下圖 16 所示,雙擊該選項(xiàng),即可彈出時(shí)鐘報(bào)告窗口,如下圖 17 所示:

圖16 TimeQuest打開時(shí)鐘報(bào)告步驟

圖17 TimeQuest時(shí)鐘報(bào)告界面
從圖 17 中可以看到,確實(shí)已經(jīng)存在一個(gè)名為 Clk9M 的約束。本來想著,既然有這個(gè)約束存在,那就刪了再創(chuàng)建,不是就能搞定了么。于是選中該信號(hào),右鍵,選中 Remove Clock 選項(xiàng),將其刪除。本以為一切操作水到渠成,結(jié)果剛刪完,然后重新 Report Clocks,這廝馬上又回來了。

圖18 TimeQuest刪除時(shí)鐘約束
刪不掉,那試試編輯這個(gè)約束,改掉它呢?說干就干,還是選中該信號(hào),右鍵,選中Edit Clock Constraint…選項(xiàng),如圖 19 所示:

圖19 TimeQuest修改時(shí)鐘約束
點(diǎn)擊之后,果然彈出了熟悉的約束編輯畫面,如圖 20 所示:

圖20 TimeQuest修改時(shí)鐘約束界面
彈出的編輯框中注意看,要改的地方很多,所以基本上除了 targets 一項(xiàng)不需要?jiǎng)右酝?,其他都得改。所以按照前面的約束方法,修改時(shí)鐘約束參數(shù),如圖 21 所示。

圖21 TimeQuest修改時(shí)鐘約束完成后的界面
=這里面又有 2 個(gè)大坑= :
1、 Clock name 改不得,一改就又認(rèn)為是新創(chuàng)建時(shí)鐘,就是不給辦,依舊忽略。所以不得已,名字繼續(xù)保持為系統(tǒng)默認(rèn)的 Clk9M。
2、 Rising 和 Falling 兩項(xiàng)的值,要改還得自己計(jì)算,太麻煩,干脆直接將這兩個(gè)選項(xiàng)內(nèi)容刪除了,就可以讓軟件自動(dòng)計(jì)算了。
改好之后,再 Run,沒有報(bào)告忽略的信息了,再 Report Clocks,發(fā)現(xiàn)時(shí)鐘的約束信息終于和設(shè)定的是一樣的了。

圖22 TimeQuest時(shí)鐘約束修改成功
到此為止,時(shí)鐘約束就算是完成了。接下來,就應(yīng)該根據(jù)該時(shí)鐘約束生成對(duì)應(yīng)的 sdc 文件了。TimeQuest Timing Analyzer 提供了將當(dāng)前的所有 sdc 命令寫入到 sdc 文件的方法,在菜單欄依次點(diǎn)擊 Constraints -> Write SDC File 可以實(shí)現(xiàn),也可以在 Task 欄中直接雙擊 Write SDC File 選項(xiàng)。

圖23 TimeQuest 保存時(shí)序約束文件
Write SDC File 打開之后,界面如圖 24 所示,默認(rèn)會(huì)以工程名稱+.out+.sdc 的格式命名該文件,可以把第一項(xiàng)中的.out 刪掉,就變成了“l(fā)ed.sdc”,點(diǎn)擊 OK,即可自動(dòng)將約束內(nèi)容寫到“l(fā)ed.sdc”文件里。

圖24 TimeQuest時(shí)序約束文件名更改

圖25 TimeQuest時(shí)鐘約束文件名修改完
補(bǔ)充說明,如果工程中已經(jīng)有同名文件,那么該操作會(huì)直接使用新內(nèi)容覆蓋文件里原本的內(nèi)容。如果工程中沒有該同名文件,軟件就會(huì)新建此文件并將所有約束寫入該內(nèi)容。
上述操作完成后,TimeQuest Timing Analyzer 軟件就可以關(guān)掉了。但每次關(guān)閉的時(shí)候,軟件又會(huì)提示說讓用戶寫 SDC 文件,如下圖所示。剛剛已經(jīng)寫過了。直接選 No 就 OK 了,選 Yes 無非就是再重新寫一遍。
09使用約束文件指導(dǎo) Quartus 編譯
通過前面的操作,時(shí)鐘約束也約了,約束文件也創(chuàng)建了。但是這個(gè)文件是否就一定能夠指導(dǎo) Quartus 軟件進(jìn)行編譯了呢?接下來執(zhí)行下述幾步,以確保該文件已經(jīng)正確的被用于指導(dǎo) Quartus 軟件布局布線。
在 Quartus 菜單欄中,依次點(diǎn)擊 Assignments -> Settings 打開工程設(shè)置界面,如圖 26 所示。

圖26 quartus添加時(shí)序約束文件步驟1
設(shè)置界面如圖 27 所示。點(diǎn)擊設(shè)置里面的 TimeQuest Timing Analyzer,發(fā)現(xiàn)“SDC files to include in the project”里面,沒有添加任何文件。要知道,一個(gè)工程可以有多個(gè) SDC 文件,而 Quartus 最終使用哪個(gè)約束文件,一定是要在這里添加的。

圖27 quartus添加時(shí)序約束文件步驟2
所以在這里,將剛剛建好的 led.sdc 文件添加進(jìn)來。如圖 28 所示。

圖28 quartus添加時(shí)序約束文件步驟3
添加好之后,應(yīng)用設(shè)置并關(guān)閉,回到 Quartus 主界面中,會(huì)發(fā)現(xiàn)該文件已經(jīng)被加入工程了,然后對(duì)工程進(jìn)行全編譯(CTRL + L),軟件就會(huì)在該約束文件指導(dǎo)下進(jìn)行編譯了。編譯完成之后,就可以根據(jù)本節(jié)內(nèi)容開頭的描述,查看最大運(yùn)行時(shí)鐘頻率了,新的報(bào)告如圖 29 所示。

圖29 quartus編譯含有SDC文件工程后查看最大系統(tǒng)時(shí)鐘頻率
然后你會(huì)發(fā)現(xiàn)一個(gè)真理,Quartus 編譯出來的結(jié)果,能夠運(yùn)行的最大頻率與約束息息相關(guān),約束要求不高,Quartus 也就隨便編譯優(yōu)化下,能滿足添加的約束要求即可。不會(huì)去做到最優(yōu)。
當(dāng)然,也可以雙擊 led.sdc 文件,看看里面的內(nèi)容,里面內(nèi)容最關(guān)鍵的就是下面這句了。
=create_clock -name {clk} -period 20.000 -waveform { 0.000 10.000 } [get_ports {clk}=
本文轉(zhuǎn)載自數(shù)字站公眾號(hào)
-
FPGA
+關(guān)注
關(guān)注
1663文章
22487瀏覽量
638682 -
計(jì)數(shù)器
+關(guān)注
關(guān)注
32文章
2320瀏覽量
98485 -
程序
+關(guān)注
關(guān)注
117文章
3847瀏覽量
85425 -
時(shí)序分析
+關(guān)注
關(guān)注
2文章
130瀏覽量
24264
原文標(biāo)題:FPGA時(shí)序分析工具(TimeQuest)
文章出處:【微信號(hào):FPGA研究院,微信公眾號(hào):FPGA研究院】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
FPGA 高級(jí)設(shè)計(jì):時(shí)序分析和收斂
fpga時(shí)序分析一般都做哪些分析
TimeQuest新手入門
FPGA的約束設(shè)計(jì)和時(shí)序分析
試用手記:為國(guó)產(chǎn)FPGA正名(四,時(shí)序工具)
如何使用TimeQuest
調(diào)用timequest工具對(duì)工程時(shí)序進(jìn)行分析
正點(diǎn)原子FPGA靜態(tài)時(shí)序分析與時(shí)序約束教程
華為FPGA硬件的靜態(tài)時(shí)序分析與邏輯設(shè)計(jì)
時(shí)序分析的Timequest教程
時(shí)序分析的Timequest教程
FPGA時(shí)序分析工具TimeQuest詳解
評(píng)論