1. FPGA時(shí)序的基本概念
FPGA器件的需求取決于系統(tǒng)和上下游(upstream and downstrem)設(shè)備。我們的設(shè)計(jì)需要和其他的devices進(jìn)行數(shù)據(jù)的交互,其他的devices可能是FPGA外部的芯片,可能是FPGA內(nèi)部的硬核。
對(duì)于FPGA design來(lái)說(shuō),必須要關(guān)注在指定要求下,它能否正常工作。這個(gè)正常工作包括同步時(shí)序電路的工作頻率,以及輸入輸出設(shè)備的時(shí)序要求。在FPGA design內(nèi)部,都是同步時(shí)序電路,各處的延時(shí)等都能夠估計(jì)出來(lái),但是FPGA內(nèi)部并不知道外部的設(shè)備的時(shí)序關(guān)系。所以,Timing constraints包括
輸入路徑(Input paths )
寄存器-寄存器路徑(Register-to-register paths )
輸出路徑(Output paths )
例外(Path specific exceptions )
這正好對(duì)應(yīng)了上圖中三個(gè)部分,Path specific exceptions 暫時(shí)不提。
Input paths對(duì)應(yīng)的是OFFSET IN約束,即輸入數(shù)據(jù)和時(shí)鐘之間的相位關(guān)系。針對(duì)不同的數(shù)據(jù)輸入方式(系統(tǒng)同步和源同步,SDR和DDR)有不同的分析結(jié)果。
Register-to-register paths 對(duì)應(yīng)的是整個(gè)FPGA design的工作時(shí)鐘。如果只有一個(gè)時(shí)鐘,那么只需要指定輸入的頻率即可。如果有多個(gè)時(shí)鐘,這些時(shí)鐘是通過(guò)DCM,MMCM,PLL生成的,那么顯然ISE知道這些時(shí)鐘之間的頻率、相位關(guān)系,所以也不需要我們指定。如果這些不同的時(shí)鐘是通過(guò)不同的引腳輸入的,ISE不知道其相位關(guān)系,所以指定其中一個(gè)為主時(shí)鐘,需要指定其間的相位關(guān)系。
Output paths對(duì)應(yīng)的是OFFSET OUT 約束,和OFFSET IN約束很類似,不過(guò)方向相反。
2.輸入時(shí)序約束
The input timing constraints cover the data path from the external pin or pad of the package of the? FPGA device to the internal synchronous element or register that captures that data.
輸入時(shí)序約束控制外部引腳到內(nèi)部模塊的路徑。采用OFFSET IN來(lái)指出輸入時(shí)序約束。也就是說(shuō)OFFSET IN定義了時(shí)鐘沿河被采集數(shù)據(jù)的關(guān)系(相位)。這里我們關(guān)心兩類不同的輸入方式,系統(tǒng)同步輸入和源同步輸入。(對(duì)于SDR和DDR,即單數(shù)據(jù)速率和雙數(shù)據(jù)速率而言,區(qū)別只在于一個(gè)時(shí)鐘周期的采樣次數(shù),不做說(shuō)明)
System Synchronous inputs
系統(tǒng)同步輸入,指由同一時(shí)鐘傳輸和捕獲數(shù)據(jù),如下圖所示。
上圖可以看出,F(xiàn)PGA和輸入源設(shè)備是同源的,共用一個(gè)系統(tǒng)時(shí)鐘。這一個(gè)系統(tǒng)時(shí)鐘在源設(shè)備觸發(fā)輸出數(shù)據(jù),同時(shí)還作為FPGA的時(shí)鐘接收輸入的數(shù)據(jù)。因此源設(shè)備只需要提供輸入的數(shù)據(jù)就可以了。
Source synchronous inputs
源同步如下圖所示(這里是DDR,同時(shí)在上升沿和下降沿采樣)
源同步和系統(tǒng)同步的最大區(qū)別在于源設(shè)備(Source Device)在輸出數(shù)據(jù)的同時(shí),輸出了一路和數(shù)據(jù)同步的時(shí)鐘。FPGA采用這一路時(shí)鐘來(lái)進(jìn)行數(shù)據(jù)的采樣。
這兩種輸入方式看起來(lái)有很大的差別,但是OFFSET IN約束的寫法是一致的,后文將詳細(xì)明。
3.寄存器-寄存器的時(shí)序約束
寄存器-寄存器的約束,在同步時(shí)序電路中,就是周期的約束。對(duì)于完全采用一個(gè)時(shí)鐘的電路而言,對(duì)這一個(gè)clk指定周期約束即可。但是如果采用了多個(gè)時(shí)鐘,那么情況就復(fù)雜了。多個(gè)時(shí)鐘中的“多個(gè)”,可能由DCM等倍/分頻得到,也有可能FPGA外部就引入了兩個(gè)時(shí)鐘信號(hào),還有可能是其他情況。這里Xilinx將其分成了以下幾類
自動(dòng)相關(guān)同步時(shí)鐘域
手動(dòng)相關(guān)同步時(shí)鐘域
異步時(shí)鐘域
自動(dòng)相關(guān)同步時(shí)鐘域(DLL,DCM,PLL,MMCM)
因?yàn)樗亲詣?dòng)的,從字面意思上看就是自動(dòng)分析。當(dāng)我們例化了一個(gè)DCM,DCM的輸入輸出信號(hào)之間的關(guān)系就已近確定了,譬如頻率關(guān)系和相位關(guān)系。當(dāng)指定了DCM輸入時(shí)鐘的頻率和相關(guān)信息之后,再去指定輸出的相對(duì)關(guān)系就有畫蛇添足的感覺(jué)了,因?yàn)檫@些關(guān)系以及在生成DCM的時(shí)候確定了。對(duì)于PLL,MMCM來(lái)說(shuō)也是一樣的。
手動(dòng)相關(guān)同步時(shí)鐘域
對(duì)應(yīng)上文的“自動(dòng)”,這里的“手動(dòng)”指需要人為指定時(shí)鐘之間的關(guān)系。在什么情況下,ISE套件無(wú)法知道時(shí)鐘之間的關(guān)系?如果兩組時(shí)鐘都是由FPGA外部引入的,那么它們之間的相位關(guān)系是未知的,需要認(rèn)為指定。時(shí)鐘之間的相位關(guān)系都是相對(duì)的,因此這個(gè)過(guò)程需要指定一個(gè)主時(shí)鐘,之后定義其他時(shí)鐘和主時(shí)鐘之間的相對(duì)相位關(guān)系。
NET “PrimaryClock” TNM_NET = “TNM_Primary”;
NET “RelatedClock” TNM_NET = “TNM_Related”;
TIMESPEC “TS_primary” = PERIOD “TNM_Primary” PeriodValue HIGH HighValue%;
TIMESPEC TS_related” = PERIOD “TNM_Related” TS_Primary_relation PHASE value;
異步時(shí)鐘域
xilinx無(wú)法分析,具體參考ug612。
4.輸出時(shí)序約束
輸出就是輸入的逆,因此分析的過(guò)程是類似的,分類也是類似的。針對(duì)時(shí)鐘的不同,有系統(tǒng)同步和源同步兩種。此處不再詳細(xì)說(shuō)明。
系統(tǒng)同步SDR
源同步DDR(一般來(lái)說(shuō)不給約束就可以)
5. 總結(jié)
時(shí)序收斂的目的是讓FPGA design 按預(yù)設(shè)的邏輯正常的工作。
為了使其正常工作,需要考慮至少三處:FPGA內(nèi)部的寄存器-寄存器時(shí)序要求,F(xiàn)PGA輸入數(shù)據(jù)的時(shí)序要求,F(xiàn)PGA輸出信號(hào)的要求。
評(píng)論