內(nèi)容概要: ·跨時鐘域與亞穩(wěn)態(tài) ·跨同步時鐘的控制信號傳輸 ·時鐘同源,周期之間非整數(shù)倍的跨時鐘域 ·跨異步時鐘域的控制信號傳輸 01 跨時鐘域與亞穩(wěn)態(tài) 跨時鐘域通俗地講,就是模塊之間有數(shù)據(jù)交互,但是模塊用的不是同一個時鐘進(jìn)行驅(qū)動,如下圖所示: 左邊的模塊1由clk1驅(qū)動,屬于clk1的時鐘域;右邊的模塊2由clk2驅(qū)動,屬于clk2的時鐘域。當(dāng)clk1比clk2的頻率高時,則稱模塊1(相對于模塊2)為快時鐘域,而模塊2位為慢時鐘域。根據(jù)clk1和clk2是不是同步時鐘,可以將上面的跨時鐘域分為跨同步時鐘域(clk1與clk2是同步時鐘)和跨異步時鐘域(clk1和clk2不是同步時鐘)。根據(jù)信號是控制信號還是數(shù)據(jù)信號可以分為跨時鐘域的控制信號傳輸和數(shù)據(jù)信號的傳輸。 在跨時鐘域的信號傳輸過程中,可能出現(xiàn)亞穩(wěn)態(tài)的情況,這個時候,需要同步器進(jìn)行同步,減小亞穩(wěn)態(tài)傳播下去的概率;注意這里的同步器只能減少亞穩(wěn)態(tài)往下傳播的概率,如果產(chǎn)生亞穩(wěn)態(tài),亞穩(wěn)態(tài)恢復(fù)穩(wěn)定后的電平不一定是正確的電平,如果穩(wěn)定后的電平是錯誤的,那么就很有可能引起后面的邏輯的錯誤,這是需要強(qiáng)調(diào)的;當(dāng)然,一般情況下(我這里是說一般情況)很少發(fā)生亞穩(wěn)態(tài),不然后面的邏輯豈不是要掛? 根據(jù)上面的內(nèi)容可知,跨時鐘域可能需要同步器來抑制亞穩(wěn)態(tài)的往下傳播的概率,根據(jù)情況的不同需要不同的同步器,大致情況如下所示: ·跨同步時鐘域下,快時鐘域到慢時鐘域 的控制信號傳輸; ·跨同步時鐘域下,慢時鐘域到塊時鐘域 的控制信號傳輸; ·跨同步時鐘域下,快時鐘域到慢時鐘域 的數(shù)據(jù)信號傳輸; ·跨同步時鐘域下,慢時鐘域到塊時鐘域 的數(shù)據(jù)信號傳輸; ·跨異步時鐘域下,快時鐘域到慢時鐘域 的控制信號傳輸; ·跨異步時鐘域下,慢時鐘域到塊時鐘域 的控制信號傳輸; ·跨異步時鐘域下,快時鐘域到慢時鐘域 的數(shù)據(jù)信號傳輸; ·跨異步時鐘域下,慢時鐘域到塊時鐘域 的數(shù)據(jù)信號傳輸; 看著這八大類型,心里就虛,但是這里先劇透一下,在數(shù)據(jù)的傳輸(主要是多位數(shù)據(jù)的傳輸)里面,無論是跨同步還是跨異步,主要(注意是主要)都是使用比較大的同步隔離器,進(jìn)行隔離緩沖數(shù)據(jù),比如FIFO、RAM;因此一般就會分為控制信號(一般是1位信號)和數(shù)據(jù)這兩種情況設(shè)計同步器??鐣r鐘域的數(shù)據(jù)傳輸我們放在最后講。今天主要整理跨時鐘域的控制信號傳輸。 在這里更新一下傳統(tǒng)同步時鐘的概念:系統(tǒng)中的多個時鐘,如果他們的邊沿相對的時間差固定(或者說相位固定),那么就屬于同步時鐘。它們可以是不同時鐘源產(chǎn)生的,但是通過鎖相環(huán)把它們之間的相位進(jìn)行固定,因此是同步時鐘。它們可能是同一時鐘源產(chǎn)生的,但是經(jīng)過分頻之后,它們之間的相位隨著初始相位和時間變化,這類時鐘可以叫他同步時鐘,但是從這個傳統(tǒng)的概念出發(fā),這就是異步時鐘(這個與我上面的那篇博客不一樣,要注意),在處理上當(dāng)做異步時鐘進(jìn)行處理。好了,說了這么多,接下來我們就根據(jù)時鐘的分類來進(jìn)行說說吧。 02 跨同步時鐘的控制信號傳輸 (1)同頻同相位的兩個同步時鐘: 波形如下所示: 這兩個時鐘可以看做是同一個時鐘,也就是單時鐘設(shè)計,允許有1個時鐘的周期進(jìn)行傳輸數(shù)據(jù),因此只要滿足普通的同步電路設(shè)計要求(滿足建立時間和保持時間,控制信號的傳輸延時要在一定范圍內(nèi))就可以了,不會出現(xiàn)亞穩(wěn)態(tài),也不會出現(xiàn)數(shù)據(jù)丟失的情況,一般不需要同步器。 (2)同頻不同相位的兩個同步時鐘 波形如下所示: 這個固定的相位可以看成是時鐘的偏移,允許的傳輸時間小于一個時鐘周期,但是只要滿足控制信號的輸出是在clk1的控制下進(jìn)行翻轉(zhuǎn)的,因此只要滿足同步設(shè)計的一般要求(滿足建立時間和保持時間,控制信號的傳輸延時要在一定范圍內(nèi)),就可以滿足時序,不會出生亞穩(wěn)態(tài),也不會出現(xiàn)數(shù)據(jù)丟失的情況,因此一般不需要同步器。 (3)不同頻,但是存在整數(shù)倍的關(guān)系 假設(shè)沒有初始相位差(或者即使有初始相位差固定,也可以通過后期修復(fù)),clk1的時鐘頻率是clk2的3倍。 ·當(dāng)從快時鐘域跨到慢時鐘域時(也就是控制信號從clk1的模塊傳輸?shù)絚lk2的模塊),波形如下所示: 如果是clk1在第2個上升沿進(jìn)行發(fā)送信號,只要控制信號在3個clk1的周期內(nèi)到達(dá),就不會出現(xiàn)亞穩(wěn)態(tài);...如果clk1在第4個上升沿進(jìn)行發(fā)送信號,就需要控制信號在1個clk1的周期內(nèi)到達(dá),就不會出現(xiàn)亞穩(wěn)態(tài)。因此只要控制信號從發(fā)送時鐘域出發(fā)到達(dá)目的時鐘域的時間小于clk1的時鐘周期,就不需要同步器;一般情況下,控制信號是觸發(fā)器觸發(fā),觸發(fā)器捕獲,一般滿足這個關(guān)系,如下所示: 然而需要注意的,這個是從快傳到慢,慢時鐘域可能會采樣不到控制信號從而丟失控制信號,也就是說,我控制信號在從clk1跑到clk2,并且保持一個時鐘(clk1)周期,但是你clk2的時鐘沿還沒有來,等到clk2的上升沿來了,我這個控制信號就已經(jīng)更新(或者失效)了,上面恰好在時鐘clk2上升沿的前一個時鐘周期clk1發(fā)出信號才采到,如果不是那個時候發(fā)送,就會丟失控制信號,如下所示: 在第2個時鐘沿發(fā)送信號的時候,只持續(xù)了一個時鐘周期,因此clk2捕捉不到(這樣就是功能性錯誤了,不單單是時序上的亞穩(wěn)態(tài)而已了);只有在第4個時鐘沿的時候發(fā)送控制信號,clk2才捕捉得到。因此我們就需要把這個控制信號的周期延遲到clk1周期的3倍,這個可以通過計數(shù)器或者狀態(tài)機(jī)進(jìn)行實現(xiàn),延長后的波形如下所示: 可見,這時候不論在上面時候進(jìn)行發(fā)送數(shù)據(jù),clk2都能捕捉得到。 因此一般情況下不需要同步器,但是需要把快時鐘域的控制信號根據(jù)進(jìn)行延長合適的時間(根據(jù)時鐘之間的倍數(shù)關(guān)系進(jìn)行確定,控制信號的長度要≥捕獲時鐘的周期,一般取1.5倍,上圖只是1倍),避免慢時鐘域丟失信號。 當(dāng)慢時鐘到快時鐘域時(也就是控制信號從clk2的模塊傳輸?shù)絚lk1的模塊),波形如下圖所示: 很顯然,快時鐘能夠采樣得到慢時鐘的控制信號,而且采樣了三次,輸出為: Clock2的控制信號就達(dá)到了clk2周期的3倍,如果只需要1個clk周期的控制信號,可以通過上升沿檢測電路實現(xiàn),其輸出波形如下所示: 03 時鐘同源,周期之間非整數(shù)倍關(guān)系 當(dāng)兩個時鐘都來源于同一個時鐘,經(jīng)過PLL分頻之后,產(chǎn)生兩個時鐘時鐘,一個時鐘是另外一個時鐘的非整數(shù)倍,相位是隨時間變化的。在這種情況下,我們可以把這兩個時鐘當(dāng)做同步時鐘,也可以當(dāng)做異步時鐘;在傳統(tǒng)的設(shè)計中,這樣的時鐘會當(dāng)做異步時鐘進(jìn)行處理。下面我們就來看看這樣的時鐘處理要不要加同步器吧。 假如時鐘源的時鐘頻率為clk,經(jīng)過PLL后,產(chǎn)生一個時鐘clk1和一個時鐘clk2: 假設(shè)clk1是快時鐘,clk2是慢時鐘。由于控制信號僅僅在兩個時鐘域的觸發(fā)器之間傳輸,觸發(fā)器之間不存在任何邏輯,因此控制信號從發(fā)送觸發(fā)器到捕獲觸發(fā)器的時間很小,假設(shè)為t ps,當(dāng)發(fā)送沿與捕獲沿之間的間距大于tps,就不會產(chǎn)生亞穩(wěn)態(tài)(理論情況,不考慮時鐘偏移、翻轉(zhuǎn)等因素)。當(dāng)clk1的頻率不是clk2的整數(shù)倍的時候,他們的相位是隨著時間的改變而改變的,在知道了clk1和clk2的頻率后,就可以知道理論下clk1和clk2的相位關(guān)系,那么就會有下面的情況:(其實也就分為要不要加同步器的的情況) ![]() 畫風(fēng)粗狂,盡請海涵 ?。?)(跨時鐘域無論是快到慢還是慢到快)兩個時鐘存在最小相位差,且最小相位差大于t。如下所示: 這里的這種情況下,時鐘最小最小的相位差T>t,也就是說,控制信號不會違反捕獲寄存器的建立時間和時間。需要注意的是,這是快時鐘到慢時鐘域的控制信號傳輸,要防止信號丟失的情況,也就是需要將控制信號延長到一定的長度。 從慢時鐘到時鐘的波形就不畫了, 但是主要符合兩個時鐘(無論是快到慢還是慢到快)存在最小相位差,且最小相位差大于t,就不會違反建立時間和保持時間,基本不會產(chǎn)生亞穩(wěn)態(tài)。因此在這種情況下,是不需要同步器的。 (2)(跨時鐘域無論是快到慢還是慢到快)兩個時鐘中,發(fā)送沿到接收沿的相位很窄,小于t,也就是違反捕獲寄存器的建立時間和保持時間,但是下一次的發(fā)送沿到接收沿的相位很大(不違反捕獲寄存器的建立時間和保持時間)的情況,如下所示: 在相位小的地方,建立時間不足,引起了亞穩(wěn)態(tài),這時候就要上我們的同步器了,這里隆重推出我們的同步器——雙D觸發(fā)器,其電路圖如下所示: 要注意,其中間不能有任何組合邏輯,電路圖與對于的時序關(guān)系如下所示(代碼就不寫了,電路簡單): 再次強(qiáng)調(diào),雙D觸發(fā)器(觸發(fā)器鏈)只能抑制亞穩(wěn)態(tài)往下傳輸(或者減小其往下傳輸?shù)母怕?,并不一定能夠同步正確的控制信號的值,這與亞穩(wěn)態(tài)穩(wěn)定后的值有關(guān),上圖中一級觸發(fā)器的亞穩(wěn)態(tài)穩(wěn)定后的值恰好是高電平,因此二級觸發(fā)器采樣后的輸出值為高電平。如果上圖中一級觸發(fā)器的亞穩(wěn)態(tài)穩(wěn)定后的值是低電平,那么二級觸發(fā)器采樣后的輸出值將為低電平,也就是輸出了錯誤的控制信號。 (3)兩個時鐘相鄰的幾次發(fā)送沿和接收沿的相位差都很小的情況,如下圖所示: 這種情況可以說就基本是異步時鐘域之間的控制信號傳輸了,在這種情況下,必定要加觸發(fā)器鏈同步器,抑制亞穩(wěn)態(tài)往下傳播。跟前面的情況一樣,從慢到快,只有亞穩(wěn)態(tài)的問題;而從快傳輸?shù)铰?,不僅有要抑制亞穩(wěn)態(tài)往下傳播的問題,還有控制信號丟失的問題,這里就需要延長控制信號的長度或者采取其他措施(后面會講)。 01 跨異步時鐘域的控制信號傳輸 其實跨異步時鐘域的波形跟前面的3.(3)類似,只不過兩個時鐘域的時鐘是完全沒有關(guān)系的時鐘而已。在這樣的情況下,我們可以采取跟前面類似的方法:首先觸發(fā)器鏈抑制亞穩(wěn)態(tài)的傳輸一定是要的,然后是快時鐘到慢時鐘的問題,也就是采樣短脈沖的控制信號問題,除了對控制信號進(jìn)行延長之外,我們還可以其他的方法,下面就來整理整理吧: (1)握手/反饋機(jī)制 采用握手反饋機(jī)制,即可以抑制亞穩(wěn)態(tài)的傳輸,又可以正確地傳輸控制信號。這種握手/反饋機(jī)制對所有的跨異步時鐘的控制信號都有用,不過主要用在快到慢時鐘、易產(chǎn)生亞穩(wěn)態(tài)的情況。說了那么多,都沒有實在的,下面就來看點實在的吧——握手/反饋機(jī)制電路圖: 波形如下所示(粗狂畫風(fēng)....): 其實原理很簡單,當(dāng)控制信號變高時(adat與adat1),慢時鐘域的觸發(fā)器鏈(bdat1和bdat2)進(jìn)行采樣,采樣得到的高電平(bdat2)后,也就是確認(rèn)采樣得到控制信號后,再通過觸發(fā)器鏈反饋給快時鐘域(abdat1和abdat2),讓快時鐘域把控制信號拉低(拉低的或者處理時長在后面有電路),就完成控制信號的正確跨時鐘傳輸。本來不想寫代碼了的,畢竟有電路了,但是想想還是貼一下代碼吧,畢竟最近整理過程中都沒有寫代碼了,感覺有點生疏了,代碼如下(如果有錯請指出): 當(dāng)然,在慢時鐘域階段,我們也可以添加邊沿檢測(上升沿)電路,一方面讓輸出只有一個脈沖的控制信號,另一方面準(zhǔn)確地進(jìn)行控制,以防止亞穩(wěn)態(tài)的干擾。 在上面的握手方案中,我們通過反饋信號進(jìn)行控制信號的延時來讓慢時鐘域充分采樣得到控制信號,本質(zhì)上是也是對控制信號的延時。這個延時的具體實現(xiàn),需要對控制信號的產(chǎn)生邏輯進(jìn)行處理,來滿足延時的要求,如下所示: 除了上面對控制信號處理之外,我們還可以對快時鐘域的時鐘動點手腳,具體電路如下所示: 這里通過讓快時鐘域觸發(fā)器(特指rd_en觸發(fā)器)的時鐘停止工作的方式,讓控制信號保持一定的時間。時鐘停止之后,rd_en觸發(fā)器的輸出就會保持不變,等到反饋信號回來,告知慢時鐘域采樣得到高電平后,再恢復(fù)快時鐘域的時鐘,波形如下所示: 時鐘停止的邏輯電路(類門控電路)的代碼如下所示(代碼如果有錯,歡迎指出): 當(dāng)然,這是一個組合電路。這樣子會令后面的輸出電路產(chǎn)生毛刺,類似于門控時鐘那樣,于是乎我們就可以使用門控時鐘那樣的技巧,防止輸出產(chǎn)生毛刺。這里就不詳細(xì)說明了。 (2)窄脈沖捕捉電路 前面的控制信號,它都需要反饋信號來把有效拉為無效,可以說這個控制信號是不“自由”的。有時候,我們需要捕捉異步短脈沖控制信號,這個控制信號完全由前面的邏輯電路生成,與我后面的電路信號無關(guān),也就是說沒有反饋信號,你也需要采樣到這個短脈沖控制信號。下面的窄脈沖捕捉電路可以捕捉到快時鐘域產(chǎn)生的異步窄脈沖控制信號,電路如下所示: 從波形圖中可以知道,這是利用了脈沖信號的上升沿進(jìn)行輸出脈沖信號,然后通過后面反饋回來的信號進(jìn)行清零,從而為下一次脈沖控制信號做好準(zhǔn)備。需要注意的是,窄脈沖控制信號的產(chǎn)生頻率不能太快,也就是需要等到清零信號無效(三個觸發(fā)器的延時)后才能發(fā)出下一個脈沖控制信號,不然后面的慢時鐘域采樣電路無法識別兩次控制信號,而只當(dāng)成一次控制信號處理。代碼根據(jù)電路圖寫就好了=.=。 在跨時鐘域的時候,不一定需要跨時鐘域電路(同步器或者握手信號),接近異步時鐘或者就是異步時鐘的時候跨時鐘域就得加上了。 在慢到快的時鐘域中,加上觸發(fā)器鏈基本上就可以了,主要是抑制亞穩(wěn)態(tài)的傳播。 在快到慢的時鐘域中,不僅需要觸發(fā)器鏈進(jìn)行抑制亞穩(wěn)態(tài)的傳播,還要防止慢時鐘域采不到快時鐘域的數(shù)據(jù),因此就添加反饋/握手電路(這個反饋信號是指跨時鐘域的反饋信號)。 在最后,介紹了窄脈沖控制信號捕捉電路,這個電路不需要添加反饋信號,也就是說只要控制信號的頻率不是快,只要有窄脈沖(不是毛刺),就可以捕捉得到,而不需要反饋信號控制脈沖寬度(這個反饋信號是指跨時鐘域的反饋信號,其實還是需要反饋清0的)。 歡迎通信工程師和FPGA工程師關(guān)注公眾號 ![]() FPGA微信技術(shù)群 歡迎大家加入全國FPGA微信技術(shù)群,這里有一群熱愛技術(shù)的工程師,在這里可以一起交流討論技術(shù)! 用手指按住就可以加入FPGA全國技術(shù)群哦 FPGA技術(shù)群平臺自營:Xilinx Altera ADI TI ST NXP 等品牌的優(yōu)勢代理分銷商,歡迎大家有需求隨時發(fā)型號清單,我們將在第一時間為您提供最優(yōu)競爭力的報價!價格低于您原有供應(yīng)商5%以上!歡迎詢價-微信:1051197468 或者直接把需求發(fā)給群主 FPGA技術(shù)群官方鳴謝品牌:Xilinx、 intel(Altera)、microsemi(,Actel)、LattIC e,Vantis,Quicklogic,Lucent等 |
|