本文講一下隨路時(shí)鐘,什么是隨路的時(shí)鐘呢?
第1節(jié) 隨路時(shí)鐘的概念
如圖1是一個(gè)SDRAM的接口時(shí)序圖,大家如果做外部接口,使用過各種芯片,一般也能看到類似這樣接口時(shí)序圖。CLK是時(shí)鐘信號(hào),INPUT代表輸入SDRAM的各種信號(hào),OUTPUT表示SDRAM輸出的各種信號(hào)線。其實(shí)芯片接口就是一些寄存器,既然是寄存器,那么這些寄存器想要穩(wěn)定寄存數(shù)據(jù),就會(huì)對(duì)數(shù)據(jù)信號(hào)有建立時(shí)間和保持時(shí)間相關(guān)的要求。
圖1 SDRAM接口時(shí)序圖
如圖1所示,在CLK的上升沿時(shí),要求INPUT必須提前tCS到達(dá),并且延遲tCH,所以該接口寄存器的建立時(shí)間為tCS,保持時(shí)間為tCH,最后通過數(shù)據(jù)手冊(cè)可以獲取這些參數(shù)對(duì)應(yīng)數(shù)值。那么在設(shè)計(jì)時(shí)序時(shí)就要考慮建立時(shí)間和保持時(shí)間對(duì)數(shù)據(jù)的影響,即INPUT要在時(shí)鐘上升沿的建立時(shí)間之前穩(wěn)定,并且在上升沿之后最少穩(wěn)定保持時(shí)間對(duì)應(yīng)的時(shí)間。這是SDRAM的一個(gè)接口時(shí)序要求,也與多數(shù)的芯片接口時(shí)序類似。
這是芯片接口需要滿足的時(shí)序要求,那我們?cè)谧鰧?shí)際項(xiàng)目的時(shí)候,如何去滿足這個(gè)下游器件的時(shí)序要求呢?
第2節(jié) 實(shí)際應(yīng)用中,如何做到滿足
2.1建立時(shí)間、保持時(shí)間的影響因素
那在設(shè)計(jì)當(dāng)中如何做才能滿足這個(gè)時(shí)序要求,首先分析一下影響建立時(shí)間和保持時(shí)間的因素有哪些呢?
其實(shí)影響建立時(shí)間、保持時(shí)間的因素是很多的,例如說FPGA內(nèi)部的寄存器傳輸延時(shí)、寄存器到管腳的延時(shí)和PCB板上的走線延時(shí)等等,這些延時(shí)最終都會(huì)影響時(shí)鐘與數(shù)據(jù)的關(guān)系,從而就會(huì)影響到下游器件的輸入數(shù)據(jù)到底能不能滿足芯片接口時(shí)序的建立時(shí)間和保持時(shí)間要求了。
2.1.1 理想波形
如圖2是一個(gè)理想的波形,信號(hào)a的波形在時(shí)鐘的上升沿發(fā)生變化,在第2個(gè)時(shí)鐘上升沿到達(dá)時(shí),信號(hào)a從低電平變?yōu)楦唠娖?,在?個(gè)時(shí)鐘上升沿到達(dá)時(shí),信號(hào)a由高電平變?yōu)榈碗娖?。在兩次變化過程中,沒有任何延遲。能夠在時(shí)鐘變化時(shí)立即發(fā)生相應(yīng)的變化,這種理想的波形,它的數(shù)據(jù)會(huì)立即到達(dá)下一個(gè)寄存器,會(huì)發(fā)現(xiàn)時(shí)鐘上升沿之前的時(shí)間周期就是時(shí)鐘周期T,而且在時(shí)鐘上升沿之后穩(wěn)定的時(shí)間是0。由此,很明顯理想觀點(diǎn)是不滿足保持時(shí)間要求的。
圖2 理想的時(shí)序圖
2.1.2 帶有寄存器延時(shí)、寄存器到管腳延時(shí)的波形
如果信號(hào)a在傳輸時(shí)經(jīng)過寄存器延時(shí)、寄存器到FPGA管腳的傳輸延遲Tco后,那么可能看到FPGA管腳上出來的信號(hào)相位關(guān)系就變成如圖3所示。
圖3 引入寄存器延遲和寄存器到管腳延時(shí)
clk是時(shí)鐘,信號(hào)a可能對(duì)時(shí)鐘會(huì)有一定的延時(shí)。由圖3中可以看到,信號(hào)a會(huì)在時(shí)鐘的第2個(gè)上升沿之后的一段時(shí)間才發(fā)生變化,這是由于寄存器延時(shí)造成的。在時(shí)鐘上升沿第3個(gè)去采樣時(shí)候,才發(fā)現(xiàn)信號(hào)a會(huì)提前時(shí)鐘周期T-Tco這么長的時(shí)間變?yōu)榉€(wěn)定。上升沿之后保持了Tco,有時(shí)候延時(shí)多久就保持多久,對(duì)不對(duì)?
2.1.3 加上走線或其他延時(shí)(Tpcb)
實(shí)際波形如下:
增加延遲,信號(hào)可能會(huì)相對(duì)時(shí)鐘往后延遲,在時(shí)鐘上升沿之前的時(shí)間會(huì)保持多久?在時(shí)鐘2時(shí)信號(hào)a變高,經(jīng)過寄存器延時(shí)(tco)之后,在經(jīng)過走線延遲等等,信號(hào)傳遞時(shí)鐘3,因此時(shí)鐘上升沿前的時(shí)間為(T-tco-tpcb),上升沿后保持的時(shí)間為(tco+tpcb)。那這是正常的延時(shí)情況。
那么只要滿足T-tco-tpcb這個(gè)延時(shí)大于建立時(shí)間要求,并且tco+tpcb這個(gè)延時(shí)大于保持時(shí)間要求。那電路就是正常的,那如何才能做到這一點(diǎn)呢?但時(shí)鐘周期,PCB走線延遲一般都是固定的,對(duì)于特定的FPGA芯片,寄存器延遲也是固定的,只有信號(hào)從寄存器傳輸?shù)叫酒苣_的延遲可以改變。
第3節(jié) 兩種有效解決方法
3.1 添加時(shí)序約束,設(shè)置輸出延時(shí)set_output_delay
有兩種做法,一種是添加時(shí)序約束,Set output delay。這個(gè)約束會(huì)告訴綜合軟件下游器件的建立要求是多少和PCB走線延遲是多少,由于時(shí)鐘周期和PCB走線延遲是固定的,對(duì)于特定的器件,寄存器延時(shí)也是固定的,根據(jù)T-TCO-TPCB,綜合軟件就會(huì)通過調(diào)整寄存器到管角的延時(shí),這個(gè)延時(shí)放大或放小,從而使下游器件能采集到這個(gè)數(shù)據(jù),滿足下游器件的建立時(shí)間和保持性要求。
3.2 添加隨路時(shí)鐘
另一種方式添加隨路時(shí)鐘,什么是隨路時(shí)鐘再看一下。
如上圖所示,信號(hào)a是在clk時(shí)鐘域產(chǎn)生的信號(hào)。Sdram_clk是與clk同源、頻率相同、相位不同的時(shí)鐘信號(hào)。當(dāng)sdram_clk 輸出作為sdram的工作時(shí)鐘,通過調(diào)整sdram_clk的相位就能調(diào)整時(shí)序,從而滿足建立時(shí)間和保持時(shí)間的要求。假如這是CLK,用PLL產(chǎn)生一個(gè)SDRAM的CLK,這兩個(gè)CLK的使用頻率是一樣的。比如說一開始有個(gè)150M的FPGA時(shí)鐘clk ,F(xiàn)PGA的時(shí)鐘clk通過PLL產(chǎn)生一個(gè)相位有一定偏差的150M時(shí)鐘sdram_clk。可以看到clk上升沿的時(shí)候,隔了很久,sdram_clk的上升沿才出現(xiàn),而這兩個(gè)時(shí)鐘的時(shí)鐘頻率一樣、相位不一樣。
那么sdram_clk如何產(chǎn)生呢?可以通過PLL來產(chǎn)生,PLL可以保證頻率相同、相位偏移量,所以該系統(tǒng)的結(jié)構(gòu)如圖:
第一個(gè)時(shí)鐘clk可能就給Sdram接口模塊作為系統(tǒng)時(shí)鐘,sdram_clk直接就給SDRAM芯片作為數(shù)據(jù)采集的時(shí)鐘了,那這樣就有什么后果呢?
由于信號(hào)a是在clk時(shí)鐘產(chǎn)生的,使得信號(hào)a是相對(duì)于時(shí)鐘clk有一定的延時(shí)的。sdram_clk相對(duì)時(shí)鐘clk有一定延時(shí),有一定項(xiàng)目偏差。只要調(diào)整sdram_clk相位,就可以使得信號(hào)a在時(shí)鐘sdram_clk的上升沿滿足建立時(shí)間和保持時(shí)間的要求。比如可以調(diào)整sdram_clk,讓sdram_clk上升沿剛好在信號(hào)a變化的中間。也就是說項(xiàng)目開始可以通過調(diào)節(jié)鎖相環(huán)PLL的sdram_clk相位,使得下游芯片使用sdram_clk的上升沿去采集信號(hào)a時(shí),能夠同時(shí)滿足建立時(shí)間和保持時(shí)間要求。只要調(diào)整好,那么這個(gè)系統(tǒng)就可以正常工作。
Sdram_clk就是隨路時(shí)鐘,隨時(shí)鐘把數(shù)據(jù)一起送到下游芯片。通過調(diào)整Sdram_clk相位,讓接口信號(hào)和時(shí)鐘滿足下游接口芯片的建立時(shí)間和保持時(shí)間要求,這就是隨路時(shí)鐘的方法。
第4節(jié) 兩種方法優(yōu)缺點(diǎn)及取舍
4.1 第一種方法優(yōu)缺點(diǎn)
那這種方法有什么優(yōu)缺點(diǎn),如何取舍,第一點(diǎn)就是常規(guī)做法,就是一個(gè)時(shí)序約束的做法。產(chǎn)生兩個(gè)時(shí)鐘,但調(diào)試還是比較麻煩的。并且有一點(diǎn)就是我們用的時(shí)間,對(duì)不對(duì)?它是有時(shí)間有限度的,因?yàn)檎{(diào)整是TCO,它一定是有限度的,就是任意調(diào)都可以是吧?比如說是調(diào)不了的,這時(shí)候就需要用Sdram_clk隨路時(shí)鐘的方法去做了。
4.2 第二種方法優(yōu)缺點(diǎn)
隨路時(shí)鐘調(diào)試起來簡單,PLL設(shè)置簡單,出錯(cuò)可能性小。不斷的調(diào)整相位,總能找到一個(gè)點(diǎn)讓時(shí)序滿足。但是也明顯的,需要有個(gè)PLL來產(chǎn)生這個(gè)時(shí)鐘,會(huì)消耗鎖相環(huán)硬件資源。如果使用這種方法,就不用設(shè)置output delay之類的約束,直接用調(diào)整相位方式找到同時(shí)滿足建立時(shí)間和保持時(shí)間要求的點(diǎn)就ok 了,所以隨路時(shí)鐘這種方法很多項(xiàng)目都喜歡用。
第5節(jié) 接收方向
SDRAM是TX(輸出)方向的,輸入方向是同樣的道理。比如說千兆網(wǎng)模塊就是接收數(shù)據(jù)的,如下圖所示。
它有個(gè)時(shí)鐘rx_clk,假設(shè)信號(hào)a為輸入數(shù)據(jù),時(shí)鐘信號(hào)與數(shù)據(jù)a對(duì)齊。這個(gè)時(shí)候如果我直接用rx_clk去采集信號(hào)a,可能就就不滿足了寄存器的建立時(shí)間和保持時(shí)間了,那怎么辦呢?以下兩種方法:此時(shí)就可以時(shí)鐘信號(hào),
5.1 方法1
設(shè)置輸入延時(shí)set_input_delay。FPGA根據(jù)時(shí)序情況,增加寄存器延時(shí)、時(shí)鐘延時(shí)等,從而滿足FPGA本身的建立時(shí)間和保持時(shí)間要求。比如說set input delay,F(xiàn)PGA 根據(jù)調(diào)整,去增加寄存器延時(shí)等方式,來滿足自身建立時(shí)間和保持要求。
5.2 方法2
另一種方式也可以跟SDRAM一樣,用rx clk通過鎖相環(huán)生成一個(gè)與rx_clk頻率相同,相位不同的pll_clk作為千兆網(wǎng)接口模塊的時(shí)鐘信號(hào)。用pll_clk去采集信號(hào)a的數(shù)據(jù),這樣不斷調(diào)整pll_clk相位,使得pll_clk時(shí)鐘上升沿位于信號(hào)a中間,此時(shí)就可能滿足寄存器建立時(shí)間和保持時(shí)間要求了。這個(gè)時(shí)候就不用設(shè)input delay 了,就不用設(shè)時(shí)序約束了,這個(gè)時(shí)候就ok 了。所以這種方法特別是做接口調(diào)試的時(shí)候特別有用。像千兆網(wǎng)、SDRAM、DDR2這種東西,全部都可以用這種方式去做。
要注意的是由于這種方式,使用了一個(gè)鎖相環(huán)PLL的,鎖相環(huán)PLL對(duì)其輸入時(shí)鐘是有要求的,要求輸入的時(shí)鐘必須來自于FPGA芯片的時(shí)鐘管腳,否則綜合軟件會(huì)報(bào)錯(cuò),這是唯一的要求。
審核編輯:湯梓紅
-
FPGA
+關(guān)注
關(guān)注
1645文章
22033瀏覽量
617734 -
寄存器
+關(guān)注
關(guān)注
31文章
5433瀏覽量
124250 -
時(shí)鐘
+關(guān)注
關(guān)注
11文章
1895瀏覽量
133128 -
時(shí)序約束
+關(guān)注
關(guān)注
1文章
118瀏覽量
13671
發(fā)布評(píng)論請(qǐng)先 登錄
FPGA的IO口時(shí)序約束分析
FPGA主時(shí)鐘約束詳解 Vivado添加時(shí)序約束方法

FPGA時(shí)序約束之衍生時(shí)鐘約束和時(shí)鐘分組約束
關(guān)于FPGA時(shí)序約束的一點(diǎn)總結(jié)
時(shí)序約束與時(shí)序分析 ppt教程
FPGA開發(fā)之時(shí)序約束(周期約束)
添加時(shí)序約束的技巧分析
xilinx時(shí)序分析及約束
如何使用時(shí)序約束向?qū)?/a>

約束、時(shí)序分析的概念

FPGA時(shí)序約束之設(shè)置時(shí)鐘組

評(píng)論