文章目錄
????????寫在前面
????????磨刀不誤砍柴工
????????什么是時(shí)序分析?
????????什么是時(shí)序約束?
????????什么是時(shí)序收斂?
寫在前面
????????時(shí)序約束與分析是FGPA開發(fā)過程中一項(xiàng)必備的技能,同時(shí)也是設(shè)計(jì)開發(fā)中相對(duì)較難的部分。很多人一談起FPGA開發(fā),言必稱時(shí)序約束,搞得好像不會(huì)時(shí)序分析就不會(huì)進(jìn)行FPGA開發(fā)一樣。
????????舉個(gè)例子:我以前面試某公司的硬件工程師職位,2面面試官是嵌入式軟件出身的技術(shù)經(jīng)理,聊天過程中偶然提到了我會(huì)點(diǎn)兒FPGA,結(jié)果他只問了我會(huì)不會(huì)做時(shí)序約束,得到我肯定的答復(fù)后,一口認(rèn)定我的FPGA水平很高(實(shí)際半吊子水)。這樣的看法雖然不夠準(zhǔn)確,但也代表了許多工程師的心聲----FPGA的時(shí)序約束仍是一門較高級(jí)的技能。????????
? ? ? ? 這個(gè)專欄,我會(huì)從時(shí)序分析、時(shí)序約束和時(shí)序收斂3個(gè)方面來一起學(xué)習(xí)基于Xlinx FPGA和Vivado開發(fā)平臺(tái)的FPGA時(shí)序相關(guān)內(nèi)容。
磨刀不誤砍柴工
? ? ? ? 正所謂磨刀不誤砍柴工,在學(xué)習(xí)時(shí)序內(nèi)容之前,一些相關(guān)的概念有必要先學(xué)一下。
(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 = Clock Skew + Clock Jitter。大家搞明白什么是 Skew和 Jitter,那么也就明白什么是 Clock Uncertainty。
????????一般標(biāo)準(zhǔn)的時(shí)序約束文件中,都需要加 Clock Uncertainty 的約束,這個(gè)約束是為了讓時(shí)序分析更貼近真實(shí)的電路設(shè)計(jì)。?對(duì)于 Uncertainty 的設(shè)置,每種工藝,或者每種設(shè)計(jì)來說,都不盡相同。
(5)同步電路和異步電路
? ? ? ? 簡(jiǎn)單來講,F(xiàn)PGA 設(shè)計(jì)中寄存器全部使用一個(gè)時(shí)鐘的設(shè)計(jì)是同步設(shè)計(jì)電路,F(xiàn)PGA 設(shè)計(jì)寄存器使用多個(gè)時(shí)鐘的設(shè)計(jì)是異步設(shè)計(jì)電路。我們說的所有時(shí)序分析都是建立在同步電路的基礎(chǔ)上的,異步電路不能做時(shí)序分析(或者說只能做偽路徑約束)。
? ? ? ? 異步電路由于使用的時(shí)鐘不同,導(dǎo)致上游寄存器的輸出數(shù)據(jù)進(jìn)入下游寄存器的時(shí)間是任意的,這非常可能導(dǎo)致不滿足下游寄存器的建立時(shí)間要求和保持時(shí)間要求,從而導(dǎo)致亞穩(wěn)態(tài)。同樣的原因,由于兩者時(shí)鐘不同,所以也不法建立對(duì)應(yīng)的模型來分析異步電路是否能滿足時(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,縮寫是 Tsu,即在時(shí)鐘上升沿之前數(shù)據(jù)必須穩(wěn)定的最短時(shí)間
- 保持時(shí)間:Hold Time,縮寫是 Th,即在時(shí)鐘上升沿之后數(shù)據(jù)必須穩(wěn)定的最短時(shí)間
? ? ? ? ?通俗來講:建立時(shí)間和保持時(shí)間就是在寄存器采樣窗口中輸入數(shù)據(jù)必須保持不變,以免寄存器無法穩(wěn)定采樣。也就是說,在我寄存器的采樣窗口之前你輸入數(shù)據(jù)就必須要保持穩(wěn)定,即輸入數(shù)據(jù)不能來的太晚(建立時(shí)間);同樣的,你寄存器的輸入數(shù)據(jù)也必須在我寄存器的采樣窗口結(jié)束后才變化,在此之前必須保持問題,即輸入數(shù)據(jù)不能走的太早(保持時(shí)間)。
? ? ? ? 建立時(shí)間和保持時(shí)間的示意圖如下:
????????建立時(shí)間和保持時(shí)間的概念非常重要,一定要記住。因?yàn)?,我們所謂的時(shí)序分析(靜態(tài)時(shí)序分析STA),簡(jiǎn)單來講就是使用特定的模型來判斷當(dāng)前設(shè)計(jì)中的所有寄存器的建立時(shí)間要求和保持時(shí)間要求能否被滿足。
什么是時(shí)序分析?
????????時(shí)序分析主要有兩種辦法:
- 靜態(tài)時(shí)序分析:(static timing analysis, STA),是遍歷電路存在的所有時(shí)序路徑,根據(jù)給定工作條件(PVT)下的時(shí)序庫.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é)果來優(yōu)化設(shè)計(jì)。DTA的優(yōu)點(diǎn)是結(jié)果精確,并且適用于更多的設(shè)計(jì)類型;缺點(diǎn)是速度慢,并且可能會(huì)遺漏一些關(guān)鍵路徑。一般來講,我們提到的時(shí)序分析都是指靜態(tài)時(shí)序分析STA。
什么是時(shí)序約束?
? ? ? ? 了解了時(shí)序分析后,其實(shí)時(shí)序約束也就好理解了。簡(jiǎn)單來講,時(shí)序約束就是你要告訴綜合工具,你的標(biāo)準(zhǔn)是什么。綜合工具應(yīng)該如何根據(jù)你的標(biāo)準(zhǔn)來布線,以滿足所有寄存器的時(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í)鐘呢?所以我們開發(fā)者需要告訴綜合工具,我們的約束標(biāo)準(zhǔn)是什么,綜合工具才可以根據(jù)這個(gè)標(biāo)準(zhǔn)去布局布線,從而滿足我們的時(shí)序要求。
????????假設(shè)信號(hào)需要從輸入到輸出在 FPGA 內(nèi)部經(jīng)過一些邏輯延時(shí)和路徑延時(shí)。我們的系統(tǒng)要求這個(gè)信號(hào)在 FPGA 內(nèi)部的延時(shí)不能超過 13ns(約束條件),而開發(fā)工具在執(zhí)行過程中找到了下圖所示的一些可能的布局布線方式。圖中區(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í)不能超過 13ns,是有 1 條路徑可以滿足要求的,那么如果系統(tǒng)要求這個(gè)信號(hào)在 FPGA 內(nèi)部的延時(shí)不能超過 5ns,那么沒有任何一條路徑可以滿足要求,這個(gè)就說明這個(gè) FPGA 器件速度等級(jí)比較慢,可以選擇速度等級(jí)比較快的 FPGA 器件,當(dāng)然也有可能是系統(tǒng)要求過于苛刻(過約束)。?
????????如果系統(tǒng)要求這個(gè)信號(hào)在 FPGA 內(nèi)部的延時(shí)不能超過 18ns,那么是有 3 條路徑可以滿足要求的,分別是走路徑 1,走路徑 3,走路徑 2 到路徑 4 這 3 條路徑,這個(gè)說明如果系統(tǒng)要求松,那么布局布線工具可以選擇就很多,這樣對(duì)布局布線工具比較友好。?時(shí)序分析的前提就是我們先提出要求,然后時(shí)序分析工具才會(huì)根據(jù)特定的時(shí)序模型進(jìn)行分析,即有約束才會(huì)有分析。如果我們不添加時(shí)序約束,那么時(shí)序分析工具就不會(huì)去分析時(shí)序和做時(shí)序收斂。也就是說,只有在對(duì)設(shè)計(jì)添加了時(shí)序約束后,系統(tǒng)的時(shí)序問題才有可能暴露出來。
什么是時(shí)序收斂?
? ? ? ? 在我們給出時(shí)序約束的標(biāo)準(zhǔn)后,綜合工具會(huì)自動(dòng)進(jìn)行時(shí)序分析,然后出具時(shí)序報(bào)告表。如果我們的設(shè)計(jì)欠佳或者約束條件過高,導(dǎo)致綜合工具無法實(shí)現(xiàn)滿足我們要求的布局布線。這種情況下,就可以說該設(shè)計(jì)是不滿足時(shí)序要求的。
? ? ? ? 通過修改RTL設(shè)計(jì)(如減少扇出、重新布線優(yōu)化、重定時(shí)、流水線切割等一系列方法)或其他方法,來使綜合工具能重新實(shí)現(xiàn)滿足我們?cè)O(shè)計(jì)要求的布局布線的這一設(shè)計(jì)過程,就被稱為時(shí)序收斂Timing closure。同樣的,當(dāng)所有的時(shí)序設(shè)計(jì)要求被滿足后,也可以說這一設(shè)計(jì)是時(shí)序收斂的。
? ? ? ? 簡(jiǎn)單點(diǎn)講,時(shí)序收斂就是你改作業(yè)的過程,把不及格的作業(yè)通過改、抄等手段給改到合格的過程就是時(shí)序收斂。
????????好的時(shí)序是設(shè)計(jì)出來的,不是約束出來的 。好的約束必須以好的設(shè)計(jì)為前提。沒有好的設(shè)計(jì),在約束上下再大的功夫也是沒有意義的。不過,通過正確的約束也可以檢查設(shè)計(jì)的優(yōu)劣,通過時(shí)序分析報(bào)告可以檢查出設(shè)計(jì)上時(shí)序考慮不周的地方,從而加以修改。文章來源:http://www.zghlxwxcb.cn/news/detail-653475.html
????????通過多次“?分析—修改—分析” 的迭代也可以達(dá)到完善設(shè)計(jì)的目標(biāo)。所以說,設(shè)計(jì)是約束的根本,約束是設(shè)計(jì)的保證,二者是相輔相成的。文章來源地址http://www.zghlxwxcb.cn/news/detail-653475.html
- ??您有任何問題,都可以在評(píng)論區(qū)和我交流??!
- ??本文由 孤獨(dú)的單刀 原創(chuàng),首發(fā)于CSDN平臺(tái)??,博客主頁:wuzhikai.blog.csdn.net
- ??您的支持是我持續(xù)創(chuàng)作的最大動(dòng)力!如果本文對(duì)您有幫助,還請(qǐng)多多點(diǎn)贊??、評(píng)論??和收藏?!
到了這里,關(guān)于FPGA的時(shí)序分析、約束和收斂(1)----什么是時(shí)序分析?什么是時(shí)序約束?什么又是時(shí)序收斂?的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!