1. 程式人生 > >結繩法:文章詳細解讀(非同步時鐘設計的同步策略)(五)

結繩法:文章詳細解讀(非同步時鐘設計的同步策略)(五)

.典型方法(雙鎖存器法


   典型方法即雙鎖存器法,第一個鎖存器可能出現亞穩態,但是第二個鎖存器出現亞穩態的機率已經降到非常小,雙鎖存器雖然不能完全根除亞穩態的出現(事實上所有電路都無法根除,只能儘可能降低亞穩態的出現),但是基本能夠在很大程度上減小這種機率。最後的一個D觸發器和邏輯電路組成的是一個採沿(上升沿,修改一下就能採集下降沿)電路,即當第二個鎖存器的輸出中出現1個上升沿,那麼最後的邏輯輸出就會產生1個clock的高電平脈衝。             

  優點:結構簡單、易實現。 

  缺點:(1) 增加了兩級觸發器延時;

        (2)當快時鐘域轉到慢時鐘域時,易造成慢時鐘取樣丟失(還未來得及取樣,資料就變化了);

        故常用於慢時鐘域轉到快時鐘域。(Clk_slow to Clk_fast) 

適用條件:[1] {(Clk_slow的週期)} > {(Clk_fast的週期) + (路徑延時)}  ,確保訊號可以被Clk_fast取樣到(假設Clk_fast和Clk_slow起始時刻相同求得)。

           [2] {(data資料變化間隔,即脈衝)} > {(Clk_slow的週期) + 2*(Clk_fast的週期) + (路徑延時)}    ,確保所有的資料變化均能採集到。

.結繩法

1、結繩法1:利用資料的邊沿作時鐘(例子中上升沿)。(可以將脈衝無限延長,直到可以採集到資料,然後復位,要考慮產生資料的頻率)。

例項1:



說明:這種結繩法的原理是,資料作為Din_clkA,即當資料有上升沿(0->1)時,暫存器1的輸出將會穩定在高電平,此時等待ClkB取樣;當ClkB完成取樣後,暫存器4會輸出高電平,若此時Din_clkA為低電平,那麼即可完成復位,開始下一次取樣等待。

  這裡需要注意的是當資料來臨(即上升沿)時,ClkB域需要等待3個ClkB才會在暫存器4輸出並完成輸入端的復位,所以Din_ClkA如果變化較快,即持續時間短於3個ClkB,也就是Din_ClkA頻率大於ClkB的1/3,那麼這時Din_ClkA的變化將無法被取樣到,因為ClkB域需要3個ClkB才能完成取樣,並且此時Din_ClkA必須是低電平

才能復位,採用非同步復位。

 因此說,在慢時鐘取樣快時鐘的時候,結繩法適合取樣資料較少(即脈衝間隔較大)的控制訊號。即脈衝間隔Ta>3Tb;即等待3個clkB時鐘後,完成復位,才允許下一個輸入脈衝。

例項1電路適用條件:

(1) {Din_ClkA的脈衝間隔} > {2*(ClkB的週期) + (組合邏輯電路延時及路徑延時)};(確保Din_ClkA的變化均能被撲捉到

(2) {Din_ClkA的脈衝高電平的寬度} < {2*(ClkB的週期) + (組合邏輯電路延時及路徑延時)}。(確保有復位訊號產生,此時Din_ClkA應為低電平) 

例項2:復位需等待(原理與例項1類似)


例項2電路適用條件:

(1) {Din_ClkA的脈衝間隔} > {4*(ClkB的週期) +2*(組合邏輯電路延時及路徑延時)};確保Din_ClkA的變化均能被撲捉到

(2) {Din_ClkA的脈衝高電平的寬度} < {4*(ClkB的週期) +2*(組合邏輯電路延時及路徑延時)}。

與例項1的區別:增加了復位等待延時。

例項3:與例項2的區別是,這種復位更迅速,不需要等到Din_ClkA為低電平,即可完成復位。復位後,經過3個clkB,暫存器2~4相繼復位


 例項3電路使用條件:

(1) {Din_ClkA的脈衝間隔} > {4*(ClkB的週期) + 2*(組合邏輯電路延時及路徑延時)};確保Din_ClkA的變化均能被撲捉到

與例項2的區別對Din_ClkA的脈衝寬度沒有要求。

特別:可將例項3和例項1結合起來組成一個最佳的結繩法電路,如下所示。


2、結繩法2:利用資料作為非同步復位,非同步置位訊號。(適合將不足時鐘寬度的脈衝擴充套件1週期

例項1:輸入高脈衝(Clka域),輸出高脈衝(Clkb域)


     說明:當ClkB因為太慢,沒有采到Din_ClkA時,Din_ClkA的高電平脈衝會非同步置位,即暫存器1從ClkA的上升沿開始到ClkB的下一個上升沿之間輸出為高,暫存器2取樣到高電平,並持續1個ClkB,高電平持續時間為1個ClkB多一點(Q1和Q2輸出是同步的,起始相同)

           當ClkB足夠快,其上升沿採到了Din_ClkA時,置位作用從ClkA的上升沿開始,跨越了ClkB的上升沿,那麼輸出高電平持續了2個ClkB還多一點,因為暫存器1持續了1個週期多一點(Q1和Q2輸出時同步的,起始相同)

例項2:輸入高脈衝(ClkA域),輸出低脈衝(ClkB域)


    說明:同上

例項3:輸入低脈衝(clka域),輸出低脈衝(clkb域)


    說明:同上

例項4:輸入低脈衝(clka域),輸出高脈衝(clkb域)


    說明:同上 

3、結繩法3:輸入作為資料輸入,同樣也是檢測高有效後,輸出一直為高,非同步時鐘域可以採集到資料後再復位。
因為沒有將輸入作為時鐘,或者作為非同步set,reset,所以此類方法方便,比較常用。

觸發器3的反饋的作用是:延長資料脈衝高電平的寬度,直到clk2採集到資料並且通過觸發器6反饋回了復位訊號。

電路適用條件:

{data_clk1資料變化間隔(脈衝間隔)}  >  {3*(clk1的週期)+1*(clk2的週期)+2*(clk1的週期)+(組合邏輯和路徑延時)}

data_clk1資料變化太快,不滿足條件,clk_2會出現採集不到的現象,在輸出data_clk2出現數據丟失。

4、結繩法4:利用握手協議:(可以將脈衝無限延長,直到可以採集到資料,然後復位,要考慮產生資料的頻率)。

               Pulse2Toggle                             Synchronization                    Toggle2Pluse

 

               Toggle2Pluse                             Synchronization                      Pluse2Toggle       

         說明:     結繩模組(Pluse2Toggle): 負責延長待取樣訊號

                          同步模組(Synchronization):負責雙觸發器鎖存

                          解繩模組(Toggle2Pluse):  負責將長訊號轉換成脈衝訊號 

電路適用條件:

       {Req_ClkA資料變化間隔(脈衝間隔)}  > 2* {2*(ClkB的週期)+1*(ClkA的週期)+(組合邏輯和路徑延時)}

確保資料Req_ClkA的變化均能採集到;每次採集的訊號,可以產生穩定的Req_ClkB和Ack_ClkA握手訊號。

 

模擬:

另外對於為了提高速度和準確度的握手操作中,可以將設定一定的握手模組(n>2(clk1+clk2)/Trd),流水操作

結繩就是將單脈衝延長,以方便採集到資料。

結繩的方法歸結為2類:

1.利用脈衝的邊沿做時鐘;

2.利用脈衝的電平(部分場合要求最小脈衝寬度)做選擇器或者非同步復位,置位。

另外的關鍵點就是什麼時候結繩結束(採集到了資料就要讓對方回到初始狀態)

這裡的操作也有2種方法:

1.利用採集到的脈衝做非同步復位,置位。

2.利用採集到的脈衝再次結繩採集做握手響應訊號。

處理的時候應該選擇對應的方法。

宣告:本博文是對以下參考博文的理解和解讀,內容大體與參考博文相同,只是進行了個人的總結、整理!!!