|
本帖最后由 51黑黑黑 于 2016-2-23 01:24 編輯
對于Altera FPGA芯片,靜態(tài)時序分析工具為Timequest。
Timequest靜態(tài)時序分析的對象包括:
(1)寄存器和寄存器之間的路徑;
(2)I/O之間;
(3)I/O和寄存器之間的路徑;
(4)異步復(fù)位和寄存器之間的路徑。
Timequest 根據(jù) Data Arrival Time 和 Data Required Time 計算出時序余量(Slack)。當(dāng)時序余量為負(fù)值時,發(fā)生時序違規(guī)(Timing Violation)。
由于時序分析是針對時鐘驅(qū)動的電路進(jìn)行的,所以分析的對象一定是“寄存器-寄存器對”。在分析涉及到I/O的時序關(guān)系對時,看似缺少一個寄存器分析對象,構(gòu)不成“寄存器-寄存器對”,其實(shí)是穿過 FPGA的 I/O引腳,在FPGA外部虛擬了一個寄存器作為分析對象。
在建立、保持時間檢查中,都假設(shè)數(shù)據(jù)從launch edge開始發(fā)送,在latch edge被捕獲;launch edge和latch edge是相鄰最近的一對時鐘沿。在多周期路徑檢查中,仍然采用launch edge和latch edge的概念,但是launch edge和latch edge不再是相鄰的一對時鐘沿,而是間隔一定時鐘周期的一對時鐘沿,間隔的時鐘周期個數(shù)由用戶指定。
在同步邏輯設(shè)計中,通常都是按照單周期關(guān)系考慮數(shù)據(jù)路徑的。但是往往存在這樣的情況:一些數(shù)據(jù)不需要在下一個時鐘周期就穩(wěn)定下來,可能在數(shù)據(jù)發(fā)送后幾個時鐘周期之后才起作用;一些數(shù)據(jù)經(jīng)過的路徑太復(fù)雜,延時太大,不可能在下一個時鐘周期穩(wěn)定下來,必須要在數(shù)據(jù)發(fā)送后數(shù)個時鐘周期之后才能被采用。針對這兩種情況,設(shè)計者的設(shè)計意圖都是:數(shù)據(jù)的有效期在以launch edge為起始到數(shù)個時鐘周期之后的latch edge。這一設(shè)計意圖不能夠被時序分析工具猜度出來,必須由設(shè)計者在時序約束中指定;否則,時序約束工具會按照單周期路徑檢查的方式執(zhí)行,往往會誤報出時序違規(guī)。
不設(shè)置多周期路徑約束的后果有兩種:一是按照單周期路徑檢查的結(jié)果,虛報時序違規(guī);二是導(dǎo)致布局布線工具按照單周期路徑的方式執(zhí)行,雖然滿足了時序規(guī)范,但是過分優(yōu)化了本應(yīng)該多個周期完成的操作,造成過約束。過約束會侵占本應(yīng)該讓位于其他邏輯的布局布線資源,有可能造成其他關(guān)鍵路徑的時序違規(guī)或時序余量變小。
在多周期路徑的建立時間(Setup Time)檢查中,Timequest會按照用戶指定的周期數(shù)延長Data Required Time,放松對相應(yīng)數(shù)據(jù)路徑的時序約束,從而得到正確的時序余量計算結(jié)果;在保持時間(Hold Time)檢查中,Timequest也會相應(yīng)地延長Data Required Time,不再按照單周期路徑的分析方式執(zhí)行(不再采用launch edge最近的時鐘沿,而是采用latch edge最近的時鐘沿),這就需要用戶指定保持時間對應(yīng)的多周期個數(shù)。
Timequest缺省的Hold Time檢查公式是需要用戶修改的——針對Setup Time多周期路徑的設(shè)置也會影響到Hold Time的檢查。究其原因,多周期路徑是為了解決信號傳播太慢的問題,慢到一個周期都不夠,所以要把Setup Time的檢查往后推幾個周期——擴(kuò)大Setup Time檢查的時間窗口。而Hold Time檢查信號是否傳播得太快,如果把檢查時刻往后推,就縮小了Hold Time檢查的時間窗口。
“信號跳變抵達(dá)窗口”:對latch寄存器來說,從previous時鐘對應(yīng)的Hold Time開始,到current時鐘對應(yīng)的Setup Time結(jié)束。
“信號電平采樣窗口”:對latch寄存器來說,從current時鐘對應(yīng)的 Setup Time 開始,到current時鐘對應(yīng)的Hold Time結(jié)束。
launch寄存器必須保證驅(qū)動的信號跳變到達(dá)latch寄存器的時刻恰好處于 “信號跳變抵達(dá)窗口”內(nèi),才能保證不破壞latch寄存器的“信號電平采樣窗口”。
時序檢查的目的就是確認(rèn)信號跳變發(fā)生在“信號跳變抵達(dá)窗口”內(nèi),而不會發(fā)生在“信號電平采樣窗口”內(nèi)。 多周期路徑的設(shè)置是通過延后Setup Time檢查的時刻,擴(kuò)大了“信號跳變抵達(dá)窗口”,放松了時序約束。因此,延后Hold Time,就會縮小“信號跳變抵達(dá)窗口”。
時序分析(2)——Altera器件時序模型 Quartus提供兩種PVT條件下的器件時序模型(注:65nm及以下的高級器件還有其他模型): (1)Slow Corner模型:通過假設(shè)最大的環(huán)境溫度(operating temperature)和VCCmin來模擬一條信號路徑可能的最慢的情況。
(2)Fast Corner模型 :通過假設(shè)最小的環(huán)境溫度(operating temperature)和VCCmin來模擬一條信號路徑可能的最快的情況。
這兩個模型的意義在于:通過slow corner模型來保證建立時間的時序,通過fast corner來保證保持時間的時序(對于源同步來說必須使用)。
一般情況下的設(shè)計以建立時間違規(guī)為主,所以Timequest默認(rèn)使用slow corner。
時序分析(3)——網(wǎng)表文件
Timequest需要讀入布局布線后的網(wǎng)表才能進(jìn)行時序分析。讀入的網(wǎng)表是由以下一系列的基本單元構(gòu)成的 (1) Cells:Altera器件中的基本結(jié)構(gòu)單元(例如,查找表、寄存器、IO單元、PLL、存儲器塊等)。LE可以看作是Cell。 (2) Pins:Cell的輸入輸出端口。可以認(rèn)為是LE的輸入輸出端口。注意:這里的Pins不包括器件的輸入輸出引腳,代之以輸入引腳對應(yīng)LE的輸出端口和輸出引腳對應(yīng)LE的輸入端口。
(3) Nets:同一個Cell中,從輸入pin到輸出pin經(jīng)過的邏輯。注意,網(wǎng)表中連接兩個相鄰Cell的連線不被看作Net,而被看作同一個點(diǎn),等價于Cell的pin。雖然連接兩個相鄰Cell的連線不被看作Net,但這個連線還是有其物理意義的,即等價于Altera器件中的一段布線邏輯,會引入一定的延遲。
(4) Ports:頂層邏輯的輸入輸出端口。對應(yīng)已經(jīng)分配的器件引腳。
(5) Clocks:約束文件中指定的時鐘類型的pin。不僅指時鐘輸入引腳。
(6) Keepers:泛指Port和寄存器類型的Cell。
(7) Nodes:基本時序網(wǎng)表單元,例如端口、引腳、寄存器和keepers。 Nodes & Keepers是Timequest特有的擴(kuò)展。

這是一個時序網(wǎng)表的實(shí)例,摘自Quartus II的使用手冊。
Timequest進(jìn)行時序分析的對象paths的描述。
Edge paths:the connections from ports-to-pins, from pins-to-pins, and from pins-to-ports。其中,pins-to-pins連接關(guān)系既包括Cell內(nèi)部的連接(Net),也包括相鄰Cell外部的pins-to-pins連接。
Path通常分為三類:
(1) Clock paths:從Clock Port或內(nèi)部生成的clock pin到寄存器Cell的時鐘輸入Pin。
(2) Data paths:從輸入Port到寄存器Cell的數(shù)據(jù)輸入pin,或從寄存器Cell的數(shù)據(jù)輸出pin到另一個寄存器Cell的數(shù)據(jù)輸入pin。
(3) Asynchronous paths:從輸入Port到寄存器Cell的異步輸入pin,或從寄存器Cell的數(shù)據(jù)輸出pin到另一個寄存器Cell的異步輸入pin。 三種path如下圖所示。

|
|