第一章 FPGA設(shè)計(jì)之時(shí)序約束四大步驟
作者:潘文明
本文章探討一下FPGA的時(shí)序約束步驟,本文章內(nèi)容,來(lái)源于配置的明德?lián)P時(shí)序約束專題課視頻。
時(shí)序約束是一個(gè)非常重要的內(nèi)容,而且內(nèi)容比較多,比較雜。因此,很多讀者對(duì)于怎么進(jìn)行約束,約束的步驟過(guò)程有哪些等,不是很清楚。明德?lián)P根據(jù)以往項(xiàng)目的經(jīng)驗(yàn),把時(shí)序約束的步驟,概括分成四大步,分別是時(shí)鐘的約束、input delays的約束、output delays的約束和時(shí)序例外。
時(shí)序約束是有先后的,首先要做時(shí)鐘約束、其次是input delays約束、再次是output delays約束,最后才是時(shí)序例外的約束。這是一個(gè)完整的大步驟,也就是說(shuō)我們?cè)陧?xiàng)目開始階段就可以約束我們的時(shí)鐘,把我們時(shí)鐘的頻率、周期、來(lái)源等等定義好。這一步做完之后,先不要做二三四步。這時(shí)候我們要完成我們的設(shè)計(jì),要把我們內(nèi)部的時(shí)序都完成之后才做第二步設(shè)置“input delays”,比如說(shuō)我們從外部進(jìn)來(lái)的一個(gè)情況。第三步output delays,也就是說(shuō)要往下游器件發(fā)送的一個(gè)時(shí)序情況。當(dāng)這一二三步都做完之后,我們?cè)谧詈箜?xiàng)目的階段才做一個(gè)時(shí)序例外的情況。時(shí)序例外也就是說(shuō)哪些時(shí)序是不需要分析的,這種情況要設(shè)置好。最后我們才能把整個(gè)時(shí)序約束完成。
以上是大的步驟,但事實(shí)上每一個(gè)步驟又可以細(xì)分成很多種情況。例如時(shí)鐘約束,時(shí)鐘可以分很多種,一種是差分時(shí)鐘,一種是管腳進(jìn)來(lái)的時(shí)鐘、還有我們PLL產(chǎn)生時(shí)鐘等等。還有一種是有數(shù)據(jù)但沒(méi)有時(shí)鐘的情況。input delays、output delays 也有很多種,我們到底要怎么樣去分析,怎么去看。明德?lián)P就把這四個(gè)步驟再進(jìn)行細(xì)化,就是根據(jù)情況來(lái)分別列出來(lái)。
下面分別展開描述。
第1節(jié) 時(shí)鐘
時(shí)鐘約束可以分成很多種情況,不同的情況就有不同的約束方法,一般有哪幾種情況呢?
如上圖,時(shí)鐘約束概括地,可以分成三種情況,分別是輸入時(shí)鐘、PLL等衍生時(shí)鐘以及自己分步的時(shí)鐘。
1.1 輸入時(shí)鐘
輸入時(shí)鐘是指時(shí)鐘從FPGA管腳進(jìn)來(lái)的情形,這也是最常見(jiàn)的情況。根據(jù)輸入的管腳的不同,輸入時(shí)鐘情況又可以分成:輸入管腳是單端的、輸入管腳是差分的,以及GT或者恢復(fù)時(shí)鐘三種情況。
第一種:輸入管腳是單端的,即時(shí)鐘直接從管腳進(jìn)來(lái)、并且是單端信號(hào)。例如普通低速晶振,大部分是這種情況,明德?lián)P的FPGA ALTERA學(xué)習(xí)板,如MP801、MP603,其時(shí)鐘均是由晶振產(chǎn)生,送到FPGA,并且是單端的信號(hào)。
第二種:輸入管腳是差分的,即時(shí)鐘直接從管腳進(jìn)來(lái),并且是差分信號(hào)。大部分高速晶振、LVDS接口等,屬于此情形。例如明德?lián)PFPGA XILINX學(xué)習(xí)板,如MP802,其包含了PCIE管腳,其輸入的時(shí)鐘就是差分的;這個(gè)板子的DDR的驅(qū)動(dòng)時(shí)鐘,時(shí)鐘頻率在200M左右,也是屬于此種以情形。
第三種:GT或者恢復(fù)時(shí)鐘,即使用了高速收發(fā)器的情形。在高速收發(fā)器管腳中,是沒(méi)有時(shí)鐘的,時(shí)鐘已經(jīng)嵌入到數(shù)據(jù)里面,使用FPGA的GTX IP核接收數(shù)據(jù),并且從數(shù)據(jù)恢復(fù)出時(shí)鐘。這個(gè)恢復(fù)出來(lái)的時(shí)鐘就是此種情形。最常見(jiàn)的就是光纖接口。
1.2 PLL等衍生時(shí)鐘
那假如說(shuō)我不是輸入管腳,而是PLL產(chǎn)生的輸出時(shí)鐘,這個(gè) 就是PLL等衍生時(shí)鐘。這種時(shí)鐘,F(xiàn)PGA的工具,會(huì)自行推導(dǎo),一般無(wú)需約束,但實(shí)質(zhì)應(yīng)用中,強(qiáng)烈建議約束,會(huì)有好處的,好處在下一篇文章中說(shuō)明。
1.3 自己分頻的時(shí)鐘
還有一種情況是自己分頻的時(shí)鐘,假如說(shuō)我們自己寫了一個(gè)計(jì)數(shù)器,把它二分頻、四分頻、八分頻等,分頻出來(lái)的信號(hào)當(dāng)為時(shí)鐘,這種情況就是自己分頻的時(shí)鐘。
首先說(shuō)明,明德?lián)P不推薦使用此方法來(lái)產(chǎn)生時(shí)鐘。但確實(shí)要用到分頻時(shí)鐘時(shí),那就要記得做時(shí)鐘約束。這種情況下要怎么進(jìn)行約束呢?
以上概括了說(shuō)明了時(shí)鐘的幾種情況,每種情況下,其約束方法都有些不同以及注意點(diǎn)。具體約束方法,可以看后續(xù)文章的內(nèi)容。
第2節(jié) input delays
input delay約束,即輸入延時(shí)約束,是時(shí)序約束的重點(diǎn),input delay 又分幾種呢?
如上圖,input delay約束概括地,可以分成三種情況,分別是系統(tǒng)同步、源同步和有數(shù)據(jù)無(wú)時(shí)鐘。
2.1 系統(tǒng)同步
第一個(gè)是系統(tǒng)同步方式,也就是說(shuō)整個(gè)電路板上FPGA以及上游器件都共用一個(gè)時(shí)鐘,并且相位嚴(yán)格相同,這個(gè)就是系統(tǒng)同步的方式。
2.2 源同步
第二種是源同步的方式,源同步是怎么樣?就是上游器件,把數(shù)據(jù)和時(shí)鐘信號(hào)一起送到FPGA上來(lái)的,那這種就是源同步。
源同步是更常用的一種方式,系統(tǒng)同步比較少用,為什么呢?因?yàn)橐龅缴嫌纹骷鶩PGA的相位差為0,沒(méi)有一點(diǎn)時(shí)鐘差,這種要求非常高。而源同步是數(shù)據(jù)跟時(shí)鐘都是從上游器件一起輸送過(guò)來(lái)給FPGA,這是一種更常用的方式。
這個(gè)源同步,又有很多種,具體SDR、DDR和有數(shù)據(jù)無(wú)時(shí)鐘三種情況。
第一種:SDR。SDR是指時(shí)鐘是單沿有效的方式,比如說(shuō)我只用上升延或者下降延的一個(gè)方式,SDR約束的參數(shù),其獲取的方法有兩種:查看上游器件手冊(cè)(通過(guò)查看上游器的數(shù)據(jù)手冊(cè),獲取參數(shù))以及通過(guò)示波器測(cè)量(通過(guò)示波器測(cè)量信號(hào)的相位差,獲取參數(shù))。
第二種:DDR。DDR是另一種方式,它是一種時(shí)鐘雙沿有效的一個(gè)方式。也就說(shuō)即用它的上升延,也用它的下降延。例如說(shuō)我們的DDR2、DDR3的時(shí)鐘,都是上下降沿一直采數(shù)據(jù)的;包括千兆網(wǎng)的RGMII接口,也是通過(guò)雙沿的方式。
DDR的這種情況,我們還可以繼續(xù)劃分成中心對(duì)齊和邊沿對(duì)齊兩種情況。
中心對(duì)齊是指:時(shí)鐘邊沿始終在數(shù)據(jù)的中間,時(shí)鐘上升沿的左右兩邊,數(shù)據(jù)都是穩(wěn)定的。邊沿對(duì)齊是指:時(shí)鐘和數(shù)據(jù)邊沿對(duì)齊的,在時(shí)鐘變化沿兩邊,其數(shù)據(jù)是不穩(wěn)定的。
第三種:有數(shù)據(jù)無(wú)時(shí)鐘。第三種就是有數(shù)據(jù)無(wú)時(shí)鐘的情況。例如說(shuō)常見(jiàn)的串口。串口是直接數(shù)據(jù)過(guò)來(lái)的,它是沒(méi)有隨路時(shí)鐘過(guò)來(lái)的。而我們用本地時(shí)鐘去采樣,就會(huì)出現(xiàn)有數(shù)據(jù)無(wú)時(shí)鐘。那對(duì)于這種我們應(yīng)該怎么去約束,又是另一種情況。
第3節(jié) output delays
輸出延時(shí)約束和輸入延時(shí)一樣,也是約束的重點(diǎn)。output delay 我們主要分兩種,系統(tǒng)同步和源同步。
3.1 系統(tǒng)同步
整個(gè)電路板上FPGA以及下游器件都共用一個(gè)時(shí)鐘,并且相位嚴(yán)格相同,這個(gè)就是系統(tǒng)同步的方式。此時(shí)FPGA往下游器件發(fā)送數(shù)據(jù),這時(shí)候只傳送數(shù)據(jù)線就可以了。而時(shí)鐘跟FPGA共用一個(gè)的,不需要傳時(shí)鐘。
3.2 源同步
源同步就是FPGA往這個(gè)器件發(fā)數(shù)據(jù),在發(fā)數(shù)據(jù)過(guò)程中也發(fā)一個(gè)時(shí)鐘過(guò)去,這是一個(gè)隨路時(shí)鐘的一個(gè)方式,是源同步。
源同步我們還分SDR和DDR。
第一種:SDR。SDR是指時(shí)鐘是單沿有效的方式,比如說(shuō)我只用上升延或者下降延的一個(gè)方式,SDR約束的參數(shù),其獲取的方法有兩種:查看上游器件手冊(cè)(通過(guò)查看上游器的數(shù)據(jù)手冊(cè),獲取參數(shù))以及通過(guò)示波器測(cè)量(通過(guò)示波器測(cè)量信號(hào)的相位差,獲取參數(shù))。示波器測(cè)量比較少用。
第二種:DDR。DDR是另一種方式,它是一種時(shí)鐘雙沿有效的一個(gè)方式。也就說(shuō)即用它的上升延,也用它的下降延。例如說(shuō)我們的DDR2、DDR3的時(shí)鐘,都是上下降沿一直采數(shù)據(jù)的;包括千兆網(wǎng)的RGMII接口,也是通過(guò)雙沿的方式。
DDR的這種情況,我們還可以繼續(xù)劃分成中心對(duì)齊和邊沿對(duì)齊兩種情況。
中心對(duì)齊是指:時(shí)鐘邊沿始終在數(shù)據(jù)的中間,時(shí)鐘上升沿的左右兩邊,數(shù)據(jù)都是穩(wěn)定的。邊沿對(duì)齊是指:時(shí)鐘和數(shù)據(jù)邊沿對(duì)齊的,在時(shí)鐘變化沿兩邊,其數(shù)據(jù)是不穩(wěn)定的。
第4節(jié) 時(shí)序例外
時(shí)序例外一般用在clock與IO都約束后,還是不滿足時(shí)序要求的情況下。主要包括多周期路徑、不需要檢查的路徑和組合電路延時(shí)等三種情況,如下圖。
4.1 多周期路徑
多周期路徑是指完成一個(gè)運(yùn)算需要超過(guò)1個(gè)時(shí)鐘周期的情形,多周期路徑在IC設(shè)計(jì)領(lǐng)域運(yùn)用較多,但在FPGA里應(yīng)用較少。
4.2 不需要檢查的路徑
有一些路徑是不需要分析的,具體可以分成三種:常量或偽常量信號(hào)、互斥路徑和異步時(shí)鐘。
第一種:常量或偽常量信號(hào)。某些信號(hào)雖然不滿足時(shí)序要求,但實(shí)質(zhì)上該信號(hào)在應(yīng)用場(chǎng)景中,是不會(huì)改變的,例如某個(gè)開關(guān)信號(hào),它在上電時(shí)打開后,就一直保持打開狀態(tài),不會(huì)變來(lái)變?nèi)?。那么這個(gè)信號(hào)就可以認(rèn)為是偽常量信號(hào)。假設(shè)它不滿足時(shí)序要求,也是無(wú)所謂的,因?yàn)椴粫?huì)變,不會(huì)變就意味著建立時(shí)間和保持時(shí)間肯定滿足,所以不存在問(wèn)題。這種信號(hào)是不需要檢查 的。
第二種:互斥的路徑。可以簡(jiǎn)單認(rèn)為是雙向端口,即代碼中,使用inout定義的信號(hào)。
第三種:異步時(shí)鐘。即信號(hào)從一個(gè)時(shí)鐘域,跨到另一個(gè)時(shí)鐘域的情況。這也是不需要檢查 的。注意,這里說(shuō)不用檢查,是指完成異步信號(hào)同步化后,不用檢查的意思。
4.3 組合電路延時(shí)
還有一種是組合電路的延時(shí)。組合電路延時(shí)就是說(shuō)我從這個(gè)管腳到另一個(gè)管腳之間,另一個(gè)管腳進(jìn)來(lái),這個(gè)管腳出去中間沒(méi)有任何一個(gè)時(shí)鐘,這是組合電路給延時(shí)的一種情況。
第5節(jié) 總結(jié)與建議
前面我們講了時(shí)鐘約束、輸入延時(shí)、輸出延時(shí)還時(shí)序例外的情況。每一種情況又分了很多種,根據(jù)它的不同類型來(lái)區(qū)分,每次約束的時(shí)候都是其中的一種情況。比如說(shuō)CLK差分,就去找時(shí)鐘,然后根據(jù)差分管腳怎么約束,來(lái)找到對(duì)應(yīng)情況,按照要求進(jìn)行約束。這相當(dāng)于我已經(jīng)提供一個(gè)表給你,你按照這個(gè)表去核對(duì)。找到對(duì)應(yīng)的情況,按要求進(jìn)行約束就可以了。
記?。洪_始的時(shí)候,只是配置時(shí)鐘,不配置input delay 、 output delays和持續(xù)例外。因?yàn)槲覀冮_始的時(shí)候是專心于內(nèi)部電路,我們時(shí)序的一個(gè)設(shè)計(jì),滿足內(nèi)部要求之后,再去配置我們的接口。在時(shí)鐘完全通過(guò)之后再配置input delay 和output delays 。
時(shí)序例外是最后差不多要完工了再進(jìn)行配置的。而且這個(gè)配置是要很小心。因?yàn)槲覀儗?shí)際例外,比如說(shuō)不用檢查,我們set false path這種情況,設(shè)置好就是表示不用檢查。如果在開始的時(shí)候,就設(shè)置好了,萬(wàn)一中間又要改變,你改變的話,那你忘了把這個(gè)約束給干掉了,這種情況就會(huì)出現(xiàn)有錯(cuò)誤也提示不出來(lái)的情況。所以說(shuō)時(shí)序例外應(yīng)該是最后情況下進(jìn)行的。
這個(gè)順序是明德?lián)P經(jīng)驗(yàn)的一個(gè)順序,我們的項(xiàng)目基本上是按照這個(gè)順序做的。但是不同的公司也會(huì)有不同的做法。例如說(shuō)我一開始全部都不約束,到最后再生約束,這也是可以的。這種做法沒(méi)有統(tǒng)一標(biāo)準(zhǔn),反正學(xué)明德?lián)P的課程,你就按這個(gè)步驟做,去到其他公司,再根據(jù)公司要求去做就可以了。
本文章是基于賽靈思的一個(gè)時(shí)序約束,ALTERA也是相似的,甚至IC芯片設(shè)計(jì)領(lǐng)域,也是同樣的思路。
有句話講的很好,我們的時(shí)序是設(shè)計(jì)出來(lái)的,不是約束出來(lái)的。所以說(shuō)時(shí)序重要還是不重要?當(dāng)然重要。但是它不是非常重要,更重要的是假如說(shuō)我時(shí)序出現(xiàn)例外,不滿足的時(shí)候,更重要是改變你的設(shè)計(jì),而不是要求約束。
下一篇文章,我們將具體探討“時(shí)鐘約束”的內(nèi)容,講解各種情況下的時(shí)序約束方法。需要更多更詳細(xì)的資料,可以找作者了解。
審核編輯:湯梓紅
評(píng)論
查看更多