?1 時(shí)鐘Clock
理想的時(shí)鐘模型是一個(gè)占空比為50%且周期固定的方波。時(shí)鐘是FPGA中同步電路邏輯運(yùn)行的一個(gè)基準(zhǔn)。理想的時(shí)鐘信號(hào)如下圖:
2 時(shí)鐘抖動(dòng)Clock Jitter
理想的時(shí)鐘信號(hào)是完美的方波,但是實(shí)際的方波是存在一些時(shí)鐘抖動(dòng)的。那么什么是時(shí)鐘抖動(dòng)呢?時(shí)鐘抖動(dòng),Clock Jitter,是相對(duì)于理想時(shí)鐘沿,實(shí)際時(shí)鐘存在不隨時(shí)間積累的、時(shí)而超前、時(shí)而滯后的偏移稱為時(shí)鐘抖動(dòng)(時(shí)鐘脈沖寬度發(fā)生暫時(shí)變化,也就是T cycle【時(shí)鐘周期】或大或小)。有抖動(dòng)的時(shí)鐘信號(hào)如下圖:
3 時(shí)鐘偏差Clock Skew
????????時(shí)鐘偏差,Clock Skew,是指同一個(gè)時(shí)鐘域內(nèi)的時(shí)鐘信號(hào)到達(dá)數(shù)字電路各寄存器所用時(shí)間的差異。時(shí)序分析的起點(diǎn)一般是源寄存器(reg1) ,終點(diǎn)—般是目標(biāo)寄存器(reg2)。
????????時(shí)鐘信號(hào)也會(huì)走線,那么和其它信號(hào)的傳輸一樣,就會(huì)有延時(shí)。下圖中,時(shí)鐘信號(hào)從時(shí)鐘源傳輸?shù)皆醇拇嫫鞯难訒r(shí)我們定義為Tc2s,傳輸?shù)侥繕?biāo)寄存器的延時(shí)我們定義為Tc2d。如下圖:
時(shí)鐘網(wǎng)絡(luò)延時(shí) Tskew就是Tc2d與Tc2s之差,即Tskew=Tc2d - Tc2s。如下圖:
第一個(gè)方波是時(shí)鐘源,第二個(gè)方波為時(shí)鐘到達(dá)REG1時(shí)的波形,第三個(gè)方波為時(shí)鐘到達(dá)REG2時(shí)的波形,從圖上可以看出Tskew是時(shí)鐘到達(dá)兩個(gè)寄存器時(shí)的相位偏差。
?
4 時(shí)鐘不確定性Clock Uncertainty
Clock Uncertainty,即時(shí)鐘的不確定性。時(shí)鐘的不確定性主要是由Clock Skew和.Jitter構(gòu)成。因此Clock Uncertainty = ClockSkew + Clock Jitter。大家搞明白什么是Skew和Jitter,那么也就明白什么是Clock Uncertainty。
一般標(biāo)準(zhǔn)的時(shí)序約束文件中,都需要加Clock Uncertainty的約束,這個(gè)約束是為了讓時(shí)序分析更貼近真實(shí)的電路設(shè)計(jì)。對(duì)于Uncertainty的設(shè)置,每種工藝,或者每種設(shè)計(jì)來(lái)說(shuō),都不盡相同。
5 同步電路和異步電路
簡(jiǎn)單來(lái)講,F(xiàn)PGA設(shè)計(jì)中寄存器全部使用一個(gè)時(shí)鐘的設(shè)計(jì)是同步設(shè)計(jì)電路,F(xiàn)PGA設(shè)計(jì)寄存器使用多個(gè)時(shí)鐘的設(shè)計(jì)是異步設(shè)計(jì)電路。我們說(shuō)的所有時(shí)序分析都是建立在同步電路的基礎(chǔ)上的,異步電路不能做時(shí)序分析(或者說(shuō)只能做偽路徑約束)。
異步電路由于使用的時(shí)鐘不同,導(dǎo)致上游寄存器的輸出數(shù)據(jù)進(jìn)入下游寄存器的時(shí)間是任意的,這非??赡軐?dǎo)致不滿足下游寄存器的建立時(shí)間要求和保持時(shí)間要求,從而導(dǎo)致亞穩(wěn)態(tài)。同樣的原因,由于兩者時(shí)鐘不同,所以也不法建立對(duì)應(yīng)的模型來(lái)分析異步電路是否能滿足時(shí)序要求。
6 建立時(shí)間(Setup Time)和保持時(shí)間(Hold Time)
建立時(shí)間和保持時(shí)間是寄存器的固定屬性,為了使寄存器穩(wěn)定地采樣到當(dāng)前D端的數(shù)據(jù),D端數(shù)據(jù)必須滿足建立時(shí)間和保持時(shí)間的要求:
建立時(shí)間: Setup Time,縮寫(xiě)是TSu,即在時(shí)鐘上升沿之前數(shù)據(jù)必須穩(wěn)定的最短時(shí)間。
保持時(shí)間: Hold Time,縮寫(xiě)是 Th,即在時(shí)鐘上升沿之后數(shù)據(jù)必須穩(wěn)定的最短時(shí)間
通俗來(lái)講:建立時(shí)間和保持時(shí)間就是在寄存器采樣窗口中輸入數(shù)據(jù)必須保持不變,以免寄存器無(wú)法穩(wěn)定采樣。也就是說(shuō),在我寄存器的采樣窗口之前你輸入數(shù)據(jù)就必須要保持穩(wěn)定,即輸入數(shù)據(jù)不能來(lái)的太晚(建立時(shí)間);同樣的,你寄存器的輸入數(shù)據(jù)也必須在我寄存器的采樣窗口結(jié)束后才變化,在此之前必須保持問(wèn)題,即輸入數(shù)據(jù)不能走的太早(保持時(shí)間)。
建立時(shí)間和保持時(shí)間的示意圖如下:
7? 什么是時(shí)序分析?
時(shí)序分析主要有兩種辦法:
????????靜態(tài)時(shí)序分析: (static timing analysis,STA),是遍歷電路存在的所有時(shí)序路徑,根據(jù)給定工作條件(PVT)下的時(shí)序庫(kù).lib文件計(jì)算信號(hào)在這些路徑上的傳播延時(shí),檢查信號(hào)的建立和保持時(shí)間是否滿足約束要求,根據(jù)最大路徑延時(shí)和最小路徑延時(shí)找出違背時(shí)序約束的錯(cuò)誤。
????????動(dòng)態(tài)時(shí)序分析: (dynamic timing analysis,DTA),通常是所有的輸入信號(hào)都會(huì)給一個(gè)不同時(shí)刻的激勵(lì),在testbech ( sp或者.v)中設(shè)置一段仿真時(shí)間,最后對(duì)仿真結(jié)果進(jìn)行時(shí)序和功能分析。這里的仿真可以是門級(jí)或者晶體管級(jí),包括spice格式和RTL格式的網(wǎng)表。
????????STA不需要輸入向量就能窮盡所有的路徑,運(yùn)行速度快,占用內(nèi)存小。不僅可以對(duì)芯片設(shè)計(jì)進(jìn)行全面的時(shí)序功能檢查,還可以利用時(shí)序分析的結(jié)果來(lái)優(yōu)化設(shè)計(jì)。DTA的優(yōu)點(diǎn)是結(jié)果精確,并且適用于更多的設(shè)計(jì)類型;缺點(diǎn)是速度慢,并且可能會(huì)遺漏一些關(guān)鍵路徑。一般來(lái)講,我們提到的時(shí)序分析都是指靜態(tài)時(shí)序分析STA。
8? 什么是時(shí)序約束?
????????了解了時(shí)序分析后,其實(shí)時(shí)序約束也就好理解了。簡(jiǎn)單來(lái)講,時(shí)序約束就是你要告訴綜合工具,你的標(biāo)準(zhǔn)是什么。綜合工具應(yīng)該如何根據(jù)你的標(biāo)準(zhǔn)來(lái)布線,以滿足所有寄存器的時(shí)序要求。
????????在FPGA設(shè)計(jì)中,一旦時(shí)鐘頻率上升,那么時(shí)鐘周期就會(huì)減少。不難想象頻率越高,時(shí)鐘周期越小,而建立時(shí)間和保持時(shí)間的要求不變,那么對(duì)應(yīng)的,滿足建立時(shí)間和保持時(shí)間也會(huì)變難,因?yàn)榱艚o信號(hào)到達(dá)的窗口變小了嘛!
????????但是綜合工具怎么知道你的設(shè)計(jì)要求是多少?那它又怎么去約束時(shí)鐘呢?所以我們開(kāi)發(fā)者需要告訴綜合工具,我們的約束標(biāo)準(zhǔn)是什么,綜合工具才可以根據(jù)這個(gè)標(biāo)準(zhǔn)去布局布線,從而滿足我們的時(shí)序要求。
????????假設(shè)信號(hào)需要從輸入到輸出在FPGA內(nèi)部經(jīng)過(guò)一些邏輯延時(shí)和路徑延時(shí)。我們的系統(tǒng)要求這個(gè)信號(hào)在FPGA內(nèi)部的延時(shí)不能超過(guò)13ns(約束條件),而開(kāi)發(fā)工具在執(zhí)行過(guò)程中找到了下圖所示的一些可能的布局布線方式。圖中區(qū)域1的延遲是5ns,區(qū)域2的延遲是7ns,區(qū)域3的延遲是5ns,區(qū)域4的延遲是11ns。那么,怎樣的布局布線能夠達(dá)到我們的要求呢?仔細(xì)分析一番,發(fā)現(xiàn)所有路徑的延時(shí)可能為12ns(走路徑1)、16ns(走路徑3)、21ns(走路徑2到路徑5)、17ns(走路徑2到路徑4),只有1條路徑能夠滿足要求,布局布線工具就會(huì)選擇滿足要求的路徑1。
????????這個(gè)地方我們系統(tǒng)要求這個(gè)信號(hào)在FPGA內(nèi)部的延時(shí)不能超過(guò)13ns,是有1條路徑可以滿足要求的,那么如果系統(tǒng)要求這個(gè)信號(hào)在FPGA內(nèi)部的延時(shí)不能超過(guò)5ns,那么沒(méi)有任何一條路徑可以滿足要求,這個(gè)就說(shuō)明這個(gè)FPGA器件速度等級(jí)比較慢,可以選擇速度等級(jí)比較快的FPGA器件,當(dāng)然也有可能是系統(tǒng)要求過(guò)于苛刻(過(guò)約束)。
????????如果系統(tǒng)要求這個(gè)信號(hào)在FPGA內(nèi)部的延時(shí)不能超過(guò)18ns,那么是有3條路徑可以滿足要求的,分別是走路徑1,走路徑3,走路徑2到路徑4這3條路徑,這個(gè)說(shuō)明如果系統(tǒng)要求松,那么布局布線工具可以選擇就很多,這樣對(duì)布局布線工具比較友好。時(shí)序分析的前提就是我們先提出要求,然后時(shí)序分析工具才會(huì)根據(jù)特定的時(shí)序模型進(jìn)行分析,即有約束才會(huì)有分析。如果我們不添加時(shí)序約束,那么時(shí)序分析工具就不會(huì)去分析時(shí)序和做時(shí)序收斂。也就是說(shuō),只有在對(duì)設(shè)計(jì)添加了時(shí)序約束后,系統(tǒng)的時(shí)序問(wèn)題才有可能暴露出來(lái).
9? 什么是時(shí)序收斂?
????????在我們給出時(shí)序約束的標(biāo)準(zhǔn)后,綜合工具會(huì)自動(dòng)進(jìn)行時(shí)序分析,然后出具時(shí)序報(bào)告表。如果我們的設(shè)計(jì)欠佳或者約束條件過(guò)高,導(dǎo)致綜合工具無(wú)法實(shí)現(xiàn)滿足我們要求的布局布線。這種情況下,就可以說(shuō)該設(shè)計(jì)是不滿足時(shí)序要求的。
通過(guò)修改RTL設(shè)計(jì)(如減少扇出、重新布線優(yōu)化、重定時(shí)、流水線切割等一系列方法)或其他方法,來(lái)使綜合工具能重新實(shí)現(xiàn)滿足我們?cè)O(shè)計(jì)要求的布局布線的這一設(shè)計(jì)過(guò)程,就被稱為時(shí)序收斂Timing closure。同樣的,當(dāng)所有的時(shí)序設(shè)計(jì)要求被滿足后,也可以說(shuō)這一設(shè)計(jì)是時(shí)序收斂的。
????????簡(jiǎn)單點(diǎn)講,時(shí)序收斂就是你改作業(yè)的過(guò)程,把不及格的作業(yè)通過(guò)改、抄等手段給改到合格的過(guò)程就是時(shí)序收斂。
????????好的時(shí)序是設(shè)計(jì)出來(lái)的,不是約束出來(lái)的。好的約束必須以好的設(shè)計(jì)為前提。沒(méi)有好的設(shè)計(jì),在約束上下再大的功夫也是沒(méi)有意義的。不過(guò),通過(guò)正確的約束也可以檢查設(shè)計(jì)的優(yōu)劣,通過(guò)時(shí)序分析報(bào)告可以檢查出設(shè)計(jì)上時(shí)序考慮不周的地方,從而加以修改。
????????通過(guò)多次“分析—修改—分析”的迭代也可以達(dá)到完善設(shè)計(jì)的目標(biāo)。所以說(shuō),設(shè)計(jì)是約束的根本,約束是設(shè)計(jì)的保證,二者是相輔相成的。
10? 組合邏輯與時(shí)序邏輯
數(shù)字電路根據(jù)邏輯功能的不同特點(diǎn),可以分成兩大類:組合邏輯電路與時(shí)序邏輯電路。
組合邏輯電路的最大特點(diǎn)是輸出是實(shí)時(shí)跟隨輸入變化的,如下面的組合邏輯,如果兩個(gè)輸入之間到達(dá)的路徑延時(shí)不一致的話,則很容易產(chǎn)生毛刺。偏偏FPGA又不是理想器件,在資源被大量使用的情況下,要做到不同的路徑達(dá)到門電路的延時(shí)一致幾乎是不可能的,所以可以說(shuō)純組合邏輯電路的毛刺現(xiàn)象幾乎是不可避免的。毛刺的產(chǎn)生很多時(shí)候都是個(gè)災(zāi)難,因?yàn)樗⒉皇悄泐A(yù)期設(shè)計(jì)的一部分,這相當(dāng)于你的設(shè)計(jì)遇上了沒(méi)有預(yù)料到的輸入情況,所以輸出在很大程度上也會(huì)變得不可控。
?
時(shí)序邏輯電路的最大特點(diǎn)是輸出不是實(shí)時(shí)跟隨輸入變化的,而是在時(shí)鐘的上升沿(或下降沿,一般以上升沿為主流)統(tǒng)一發(fā)生變化(誠(chéng)然這個(gè)變化也不是瞬時(shí)的,還需要一定的Tco時(shí)間)。在時(shí)鐘的上升沿之前,只要輸入滿足建立時(shí)間和保持時(shí)間的要求,則任你如何有毛刺也不會(huì)對(duì)輸出造成影響,這很容易理解,因?yàn)樵诜巧仙夭粫?huì)發(fā)生采樣,自然也不會(huì)有輸出。
?
時(shí)序邏輯電路解決了組合邏輯電路無(wú)法解決的毛刺問(wèn)題,將電路的行動(dòng)全部置于統(tǒng)一的行動(dòng)之下...鐘。在時(shí)鐘信號(hào)的控制下,整個(gè)電路可以有條不紊的運(yùn)行。當(dāng)然,組合邏輯電路并不是被替代,因?yàn)槲覀內(nèi)匀恍枰鋵?shí)現(xiàn)邏輯功能。所以組合邏輯與時(shí)序邏輯可以說(shuō)是共生,你中有我我中有你----組合邏輯實(shí)現(xiàn)邏輯功能,而時(shí)序邏輯則將電路的運(yùn)行置于統(tǒng)一的管理之下。
?
11 同步電路和異步電路
基于FPGA的設(shè)計(jì)Q幾乎都是時(shí)序邏輯電路,極少會(huì)有設(shè)計(jì)純組合邏輯電路的情況。因此,時(shí)序邏輯電路在FPGA的設(shè)計(jì)中占有非常重要的地位。對(duì)于時(shí)序邏輯,按信號(hào)間關(guān)系來(lái)看,又可分為同步時(shí)序邏輯和異步時(shí)序邏輯,簡(jiǎn)稱同步邏輯和異步邏輯。
簡(jiǎn)單來(lái)講,FPGA設(shè)計(jì)中寄存器全部使用一個(gè)時(shí)鐘的設(shè)計(jì)是同步設(shè)計(jì)電路,F(xiàn)PGA設(shè)計(jì)寄存器使用多個(gè)時(shí)鐘的設(shè)計(jì)是異步設(shè)計(jì)電路。我們說(shuō)的所有時(shí)序分析都是建立在同步電路的基礎(chǔ)上的,異步電路不能做時(shí)序分析(或者說(shuō)只能做偽路徑約束)。
異步電路由于使用的時(shí)鐘不同,導(dǎo)致上游寄存器的輸出數(shù)據(jù)進(jìn)入下游寄存器的時(shí)間是任意的,這非??赡軐?dǎo)致不滿足下游寄存器的建立時(shí)間要求和保持時(shí)間要求,從而導(dǎo)致亞穩(wěn)態(tài)。同樣的原因,由于兩者時(shí)鐘不同,所以也不法建立對(duì)應(yīng)的模型來(lái)分析異步電路是否能滿足時(shí)序要求。
所以,對(duì)FPGA的時(shí)序分析其實(shí)主要就是對(duì)同步時(shí)序邏輯電路進(jìn)行分析,然后再做約束。那么到底要約束些什么?
?
12 建立時(shí)間與保持時(shí)間
時(shí)序邏輯電路的基礎(chǔ)是觸發(fā)器FF,對(duì)FF的使用有兩個(gè)要求是必須滿足的----建立時(shí)間與保持時(shí)間。
????????建立時(shí)間: Setup Time,縮寫(xiě)是TSu,即在時(shí)鐘上升沿之前數(shù)據(jù)必須穩(wěn)定的最短時(shí)間
????????保持時(shí)間: Hold Time,縮寫(xiě)是 Th,即在時(shí)鐘上升沿之后數(shù)據(jù)必須穩(wěn)定的最短時(shí)間
通俗來(lái)講:建立時(shí)間和保持時(shí)間就是在寄存器采樣窗口中輸入數(shù)據(jù)必須保持不變,以免寄存器無(wú)法穩(wěn)定采樣。也就是說(shuō),在我寄存器的采樣窗口之前你輸入數(shù)據(jù)就必須要保持穩(wěn)定,即輸入數(shù)據(jù)不能來(lái)的太晚(建立時(shí)間)﹔同樣的,你寄存器的輸入數(shù)據(jù)也必須在我寄存器的采樣窗口結(jié)束后才變化,在此之前必須保持問(wèn)題,即輸入數(shù)據(jù)不能走的太早(保持時(shí)間)。
建立時(shí)間和保持時(shí)間的示意圖如下:
????????建立時(shí)間和保持時(shí)間是觸發(fā)器的固定屬性,也就是說(shuō)同一FPGA型號(hào)其所有的FF的建立時(shí)間和保持時(shí)間都是相同的,而不同的FPGA型號(hào)之間,其建立時(shí)間與保持時(shí)間則不同。關(guān)于FPGA對(duì)應(yīng)的建立時(shí)間和保持時(shí)間可以通過(guò)手冊(cè)來(lái)查詢,也可以用vivado做時(shí)序分析時(shí)查詢。高級(jí)的FPGA芯片其建立時(shí)間和保持時(shí)間會(huì)比低級(jí)的FPGA芯片較小,這也是其能運(yùn)行頻率更高的原因。
????????了解FPGA的建立時(shí)間和保持時(shí)間非常重要,它是我們進(jìn)行時(shí)序分析的基礎(chǔ),甚至可以說(shuō),時(shí)序分析就是要分析所有的FF是不是都滿足建立時(shí)間與保持時(shí)間的要求。如果建立時(shí)間或者保持時(shí)間的要求無(wú)法被滿足,那么就會(huì)發(fā)生亞穩(wěn)態(tài)現(xiàn)象。
????????亞穩(wěn)態(tài)(Metastability):如果數(shù)據(jù)傳輸中不滿足觸發(fā)器的Tsu和Th不滿足,就可能產(chǎn)生亞穩(wěn)態(tài),此時(shí)觸發(fā)器輸出端Q在有效時(shí)鐘沿之后比較長(zhǎng)的一段時(shí)間處于不確定的狀態(tài),在這段時(shí)間里Q端在0和1之間處于振蕩狀態(tài),而不是等于數(shù)據(jù)輸入端D的值。這段時(shí)間稱為決斷時(shí)間Tmet (resolution time)。經(jīng)過(guò)resolution time之后Q端將穩(wěn)定到O或1上,但是穩(wěn)定到O或者1,是隨機(jī)的,與輸入沒(méi)有必然的關(guān)系。
13 恢復(fù)時(shí)間與去除時(shí)間
????????恢復(fù)時(shí)間(Recovery Time)是指異步控制信號(hào)(如寄存器的異步清除和置位控制信號(hào))在"下個(gè)時(shí)鐘沿來(lái)臨之前變無(wú)效的最小時(shí)間長(zhǎng)度。這個(gè)時(shí)間的意義是,如果保證不了這個(gè)最小恢復(fù)時(shí)間,也就是說(shuō)這個(gè)異步控制信號(hào)的解除與下個(gè)時(shí)鐘沿'離得太近(但在這個(gè)時(shí)鐘沿之前),沒(méi)有給寄存器留有足夠時(shí)間來(lái)恢復(fù)至正常狀態(tài),那么就不能保證"下個(gè)時(shí)鐘沿”能正常作用,也就是說(shuō)這個(gè)時(shí)鐘沿"可能會(huì)失效。
????????去除時(shí)間(Removal)是指異步控制信號(hào)(如寄存器的異步清除和置位控制信號(hào))在"有效時(shí)鐘沿'之后變無(wú)效的最小時(shí)間長(zhǎng)度。這個(gè)時(shí)間的意義是,如果保證不了這個(gè)去除時(shí)間,也就是說(shuō)這個(gè)異步控制信號(hào)的解除與‘有效時(shí)鐘沿'離得太近《但在這個(gè)時(shí)鐘沿之后),那么就不能保證有效地屏蔽這個(gè)“時(shí)鐘沿”,也就是說(shuō)這個(gè)“時(shí)鐘沿"可能會(huì)起作用。
換句話來(lái)說(shuō),如果你想讓某個(gè)時(shí)鐘沿起作用,那么你就應(yīng)該在"恢復(fù)時(shí)間'之前是異步控制信號(hào)變無(wú)效,如果你想讓某個(gè)時(shí)鐘沿不起作用,那么你就應(yīng)該在“去除時(shí)間"過(guò)后使控制信號(hào)變無(wú)效。如果你的控制信號(hào)在這兩種情況之間,那么就沒(méi)法確定時(shí)鐘沿是否起作用或不起作用了,也就是說(shuō)可能會(huì)造成寄存器處于不確定的狀態(tài)。而這些情況是應(yīng)該避免的。所以恢復(fù)時(shí)間和去除時(shí)間是應(yīng)該遵守的。
????????比如下圖中:復(fù)位信號(hào)rst_n作為一個(gè)異步控制型號(hào),需要在下一個(gè)時(shí)鐘有效沿之前就變無(wú)效(拉高),以保證Recovery恢復(fù)時(shí)間,這樣寄存器才有足夠的時(shí)間恢復(fù)到正常狀態(tài)(這有點(diǎn)類似建立時(shí)間);同樣的,復(fù)位信號(hào)rst_n的移除不能與上一個(gè)時(shí)鐘有效沿間隔太近,以保證其無(wú)法影響上—個(gè)時(shí)鐘有效沿(這有點(diǎn)類似保持時(shí)間)。
14 4種基本的時(shí)序路徑
下圖是—張典型的FPGA與上游、下游器件通信的示意圖。
?
其可以劃分為基本的四條數(shù)據(jù)路徑,這四條路徑也是需要進(jìn)行時(shí)序約束的最基本的路徑。
1 管腳到寄存器
????????路徑1,上游器件通過(guò)FPGA管腳到FPGA的寄存器的時(shí)序路徑,即pin2reg(管腳到寄存器),需要對(duì)其進(jìn)行約束,以滿足FPGA端寄存器的建立時(shí)間和保持時(shí)間要求;
????????路徑1約束的是上游器件的源寄存器(起點(diǎn))和FPGA內(nèi)部的目的寄存器(終點(diǎn))的數(shù)據(jù)路徑,其目的是要滿足后端即FPGA內(nèi)部寄存器的建立時(shí)間要求和保持時(shí)間要求。
????????路徑1可以視為是路徑2的一種,只不過(guò)路徑1的源寄存器和目的寄存器都在FPGA內(nèi)部,而路徑2的源寄存器在上游器件中。
2 寄存器到寄存器
????????路徑2,F(xiàn)PGA內(nèi)部的寄存器到另一個(gè)寄存器,即reg2reg(寄存器到寄存器),需要對(duì)其進(jìn)行約束,以滿足FPGA端寄存器的建立時(shí)間和保持時(shí)間要求;
????????路徑2約束的是FPGA內(nèi)部源寄存器(起點(diǎn))和FPGA內(nèi)部目的寄存器(終點(diǎn))的數(shù)據(jù)路徑,其目的是要通過(guò)提供要求的方式來(lái)使得綜合工具vivado滿足所有FPGA內(nèi)部寄存器的建立時(shí)間要求和保持時(shí)間要求。
3 寄存器到管腳
????????路徑3,F(xiàn)PGA管腳到下游器件的寄存器的時(shí)序路徑,即reg2pin(寄存器到管腳),需要對(duì)其進(jìn)行約束,以滿足下游器件的寄存器的建立時(shí)間和保持時(shí)間要求;
????????路徑3約束的是FPGA內(nèi)部的源寄存器(起點(diǎn))和下游器件的目的寄存器(終點(diǎn))的數(shù)據(jù)路徑,其目的是要滿足前端即FPGA內(nèi)部寄存器的建立時(shí)間要求和保持時(shí)間要求。
????????路徑3同樣可以視為是路徑2的一種,只不過(guò)路徑1的源寄存器和目的寄存器都在FPGA內(nèi)部,而路徑3的目的寄存器在下游器件中。
4 管腳到管教
????????路徑4,F(xiàn)PGA管腳到FPGA管腳的時(shí)序路徑〈不通過(guò)任何寄存器),其本質(zhì)上是純組合邏輯電路,僅僅需要約束其值在一個(gè)指定范圍,不需要滿足建立時(shí)間和保持時(shí)間要求。
????????路徑4中不存在任何寄存器,通常都是純組合邏輯或者走線延遲等,所以也就不需要滿足寄存器的建立時(shí)間要求和保持時(shí)間要求。需要的僅僅是根據(jù)開(kāi)發(fā)需求約束其延遲的最小值和最大值。
15 發(fā)射沿(Launch Edge)與鎖存沿(Latch Edge)
????????路徑1、2、3實(shí)際上都是對(duì)寄存器到寄存器之間的數(shù)據(jù)路徑之間的約束,而路徑4則是約束純組合邏輯。
????????由于寄存器的采樣往往都發(fā)生在時(shí)鐘的邊沿,所以目的寄存器采樣的值實(shí)際上是上個(gè)時(shí)鐘周期的源寄存器的值,也就是說(shuō)在源寄存器與目的寄存器之間其采樣時(shí)間相差—個(gè)時(shí)鐘周期。
????????發(fā)射沿(Launch Edge)∶是源寄存器采樣的時(shí)間點(diǎn),也是時(shí)序分析路徑的起點(diǎn)。
????????鎖存沿(Latch Edge)︰是目的寄存器采樣的時(shí)間點(diǎn),也是時(shí)序分析路徑的終點(diǎn)
16 數(shù)據(jù)到達(dá)時(shí)間(Data Arrival Time)
由于2個(gè)寄存器之間存在的組合邏輯和走線延遲等,使得在發(fā)射沿采樣到的數(shù)據(jù)需要一定的時(shí)間才能到達(dá)后級(jí)的鎖存沿,這個(gè)時(shí)間就被稱為數(shù)據(jù)到達(dá)時(shí)間(Data Arrival Time) 。
如上圖,在計(jì)算數(shù)據(jù)到達(dá)時(shí)間時(shí),存在3個(gè)時(shí)間參數(shù):
????????Tclk1:時(shí)鐘信號(hào)從起點(diǎn)到達(dá)源寄存器REG1的時(shí)鐘端口的時(shí)鐘網(wǎng)絡(luò)延時(shí),產(chǎn)生原因一般是走線延遲
????????Tco:源寄存器REG1內(nèi)部的數(shù)據(jù)輸出延遲,這個(gè)延遲時(shí)間是寄存器的固有屬性,只和使用的FPGA芯片型號(hào)有關(guān)
????????Tdata:數(shù)據(jù)從源寄存器REG1輸出Q端到下級(jí)目的寄存器REG2的數(shù)據(jù)輸入D之間的延時(shí),一般是組合邏輯器件產(chǎn)生的固有延時(shí)和走線延時(shí)
????????根據(jù)上圖可以算出數(shù)據(jù)到達(dá)時(shí)間:Data Arrival Time = launch edge + Tclk1 + Tco +Tdata
17、數(shù)據(jù)需求時(shí)間--建立時(shí)間(Data Required Time - Setup)
時(shí)序約束的本質(zhì)就是要滿足所有寄存器的建立時(shí)間要求和保持時(shí)間要求,所以在數(shù)據(jù)經(jīng)過(guò)一定的延遲從源寄存器到達(dá)目的寄存器后,同樣需要滿足目的寄存器的建立時(shí)間要求(Tsu) 。
如上圖,在計(jì)算數(shù)據(jù)需求時(shí)間--建立時(shí)間時(shí),存在2個(gè)時(shí)間參數(shù):
????????Tclk2:時(shí)鐘信號(hào)從起點(diǎn)到達(dá)目的寄存器REG2的時(shí)鐘端口的時(shí)鐘網(wǎng)絡(luò)延時(shí),產(chǎn)生原因一般是走線延遲
????????Tsu:在時(shí)鐘有效邊沿到達(dá)之間,輸入數(shù)據(jù)必須保持不變的時(shí)間,這意味著上級(jí)寄存器的輸入至少要在這之前就保持穩(wěn)定
????????根據(jù)上圖可以算出: Data Required Time + Tsu = latch edge +Tck2,即Data Required Time = latch edge + Tclk2- Tsu
????????數(shù)據(jù)需求時(shí)間--建立時(shí)間,實(shí)際上是一種對(duì)數(shù)據(jù)到來(lái)之前數(shù)據(jù)保持穩(wěn)定的最極端時(shí)間要求。比如為了滿足目的寄存器的建立時(shí)間要求,計(jì)算得到上級(jí)寄存器的輸出必須至少在3ns之前即保持穩(wěn)定,這也就意味著上級(jí)數(shù)據(jù)能到達(dá)的最晚時(shí)間是3ns,那么1ns、2ns到達(dá)自然是可以的,
18 數(shù)據(jù)需求時(shí)間--保持時(shí)間(Data Required Time - Hold)
建立時(shí)間和保持時(shí)間是寄存器的2個(gè)固定需求屬性,所以在數(shù)據(jù)經(jīng)過(guò)一定的延遲從源寄存器到達(dá)目的寄存器后,同樣需要滿足目的寄存器的保持時(shí)間要求(Th) 。
如上圖,在計(jì)算數(shù)據(jù)需求時(shí)間--保持時(shí)間時(shí),存在2個(gè)時(shí)間參數(shù):
????????Tclk2:時(shí)鐘信號(hào)從起點(diǎn)到達(dá)目的寄存器REG2的時(shí)鐘端口的時(shí)鐘網(wǎng)絡(luò)延時(shí),產(chǎn)生原因一般是走線延遲
????????Th:在時(shí)鐘有效邊沿到達(dá)之后,輸入數(shù)據(jù)必須保持不變的時(shí)間,這意味著上級(jí)寄存器的輸入至少要在這之后才能發(fā)生變化
????????所以可以算出: Data Required Time = latch edge + Tclk2+ Th
19、建立時(shí)間裕量(Setup Slack)
????????數(shù)據(jù)需求時(shí)間--建立時(shí)間實(shí)際上是一種對(duì)數(shù)據(jù)到來(lái)之前保持穩(wěn)定的最極端的時(shí)間要求,比如為了滿足目的寄存器的建立時(shí)間要求,計(jì)算得到上級(jí)寄存器的輸出必須至少在時(shí)間刻度3ns之前即保持不變,這也就意味著上級(jí)數(shù)據(jù)能到達(dá)的最晚時(shí)間是3ns,那么1ns、2ns到達(dá)自然是可以的。
????????如果數(shù)據(jù)在1ns即到達(dá)了目的寄存器,那么建立時(shí)間裕量就是3ns-1ns = 2ns,那么這個(gè)裕星有什么作用呢或者說(shuō)代表著什么?前面我們知道到寄存器之間可能會(huì)存在一段組合邏輯和走線延遲,如果你的設(shè)計(jì)中某2個(gè)寄存器之間的建立時(shí)間裕量是2ns,則意味著你還有空間去折騰,比如寄存器彼此之間還可以增加一些組合邏輯器件或者更長(zhǎng)的走線。
根據(jù)上圖,可以算出: Setup Slack = Data Required Time-Data Arval Time,即Setup Slack = (latch edge + Tck2 - Tsu ) -(launch edge + Tck1 +Tco +Tdata ) = (latch edge - launch edge)+(Tclk2-Tck1 ) - (Tsu + Tco +Tdata) = Tperiod + Tskew-(Tsu + Tco +Tdata) 。
????????如果Setup Slack為正,則說(shuō)明數(shù)據(jù)在規(guī)定的時(shí)間內(nèi)達(dá)到了目的寄存器;反之,則認(rèn)為數(shù)據(jù)并沒(méi)有在規(guī)定的時(shí)間達(dá)到目標(biāo),此時(shí)REG2鎖存的數(shù)據(jù)很有可能是亞穩(wěn)態(tài)狀態(tài)。
20、保持時(shí)間裕量(Hold Slack)
數(shù)據(jù)需求時(shí)間--保持時(shí)間實(shí)際上是一種對(duì)時(shí)鐘沿到來(lái)之后數(shù)據(jù)保持穩(wěn)定的最極端的時(shí)間要求,比如為了滿足目的寄存器的保持時(shí)間要求,計(jì)算得到上級(jí)寄存器的輸出必須至少在時(shí)間刻度3ns之前都保持不變,這也就意味著上級(jí)數(shù)據(jù)能變化的最早時(shí)間是3ns,那么4ns,5ns到達(dá)自然是可以的。
如果數(shù)據(jù)在5ns處才在目的寄存器發(fā)生了變化,那么保持時(shí)間裕量就是5ns-3ns = 2ns。
根據(jù)上圖,可以算出: Hold Slack = Data Arival Time - Data Required Time,即Hold Slack = (latch edge + Tck1 +Tco +Tdata)(latch edge + Tclk2 + Th) = (Tco +Tdata - Th) - (Tclk2 - Tck1) + (latch edge - latch edge) = (Tco +Tdata -Th) - Tskew。
????????如果Hold Slack為正,則認(rèn)為數(shù)據(jù)在被鎖存的時(shí)候有足夠多的穩(wěn)定時(shí)間,是有效的;反之則認(rèn)為數(shù)據(jù)可能是亞穩(wěn)態(tài)狀態(tài)。
21 、總結(jié)
搞明白了這些概念,那么靜態(tài)時(shí)序分析9.其實(shí)也就很簡(jiǎn)單了。上文出現(xiàn)了很多的公式,看起來(lái)有點(diǎn)晦澀難懂,但是沒(méi)關(guān)系,這些公示實(shí)際上僅僅是起到一個(gè)輔助理解時(shí)序分析的作用,并不需要去記憶,更也不需要熟練掌握這些公式來(lái)生搬硬套時(shí)序分析。因?yàn)楝F(xiàn)在的綜合工具已經(jīng)足夠智能了,你只需要提出時(shí)序約束的要求,綜合工具vivado自然會(huì)對(duì)這些路徑——進(jìn)行計(jì)算,你所要做的僅僅是找到時(shí)序裕量為負(fù)的路徑并想辦法改善即可。
此外,通過(guò)對(duì)上面公式的分析,可以讓我們更好的了解靜態(tài)時(shí)序分析的本質(zhì)。
根據(jù)上文有(1)和(2)兩式:
?
????????建立時(shí)間裕量: Setup Slack = Tperiod + Tskew - (Tsu +Tco +Tdata)--- (1)
????????保持時(shí)間裕量:Hold Slack = (Tco +Tdata - Th) - Tskew ----- (2)
其中,Tperiod是時(shí)鐘周期;Tskew是寄存器之間的時(shí)鐘偏差,產(chǎn)生的原因是時(shí)鐘到達(dá)不同的寄存器的時(shí)鐘端口有延遲;Tsu與Th分別是寄存器的建立時(shí)間要求和保持時(shí)間要求,這是寄存器的固有屬性,只和FPGA的型號(hào)相關(guān);Tco是從寄存器的輸入端口到輸出端口所需要的延時(shí)時(shí)間,同樣是寄存器的固有屬性;Tdata是寄存器之間的組合邏輯和走線延遲等之和,這與具體設(shè)計(jì)有關(guān),平時(shí)我們大多都是通過(guò)減少Tdata來(lái)使得時(shí)間裕量為正,以此實(shí)現(xiàn)設(shè)計(jì)的時(shí)序收斂。
????????Tskew實(shí)際上是一個(gè)可以被忽略掉的較小值,所以把它去掉,再對(duì)(1)和(2)兩式做變形(Slack>0需被滿足),然后有(3)和(4)兩式
????????????????????????Tperiod >(Tsu + Tco +Tdata) ---- (3)
????????????????????????(Tco +Tdata ) > Th ---- (4)
(3))式子中的(Tsu +Tco +Tdata)代表數(shù)據(jù)從源寄存器到目的寄存器所消耗的時(shí)間,即(Tsu + Tco +Tdata)<Tperiod表示數(shù)據(jù)從源寄存器的采樣時(shí)刻傳到目的寄存器的采樣時(shí)刻,不能超過(guò)一個(gè)時(shí)鐘周期。如果數(shù)據(jù)傳輸超過(guò)一個(gè)時(shí)鐘周期,那么就會(huì)導(dǎo)致目的寄存器器開(kāi)始采樣的時(shí)候,從源寄存器出發(fā)的數(shù)據(jù)還沒(méi)有傳過(guò)來(lái)。
對(duì)于(4)式可以兩邊同時(shí)加上Tsu ,得到(5)式:
????????????????????????(Tco +Tdata + Tsu ) >(Th + Tsu) ---- (5)文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-732676.html
(5)式子中的(Tsu + Tco +Tdata)代表數(shù)據(jù)從源寄存器到目的寄存器所消耗的時(shí)間,(Th+TSu)是建立時(shí)間和保持時(shí)間之和,即寄存器的采樣窗口時(shí)間。那么(Tsu +Tco +Tdala)> Th+Tsu表示數(shù)據(jù)從源寄存器的采樣時(shí)刻傳到目的寄存器的采樣時(shí)刻,至少要大于寄存器的采樣窗口。假如數(shù)據(jù)傳輸時(shí)間不大于采樣窗口,則意味著數(shù)據(jù)的傳輸是特別快的,有可能目的寄存器開(kāi)始采樣時(shí),源寄存器的采樣仍沒(méi)有結(jié)束,如果這個(gè)時(shí)候輸入端數(shù)據(jù)有變化,那么不僅源寄存器處于亞穩(wěn)態(tài),目的寄存器也將處于亞穩(wěn)態(tài)!
所以,數(shù)據(jù)傳輸延時(shí)既不能太大以至于超過(guò)一個(gè)時(shí)鐘周期,也不能太小以至于小于觸發(fā)器采樣窗口的寬度。這就是靜態(tài)時(shí)序分析的物理意義了。
?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-732676.html
到了這里,關(guān)于數(shù)字IC設(shè)計(jì)之時(shí)序分析基礎(chǔ)概念匯總的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!