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