2014年6月29日 星期日

用數學式子講解兩種跨clock domain處理的timing是不同的

真是抱歉! 這陣子比較忙,所以就沒有更新文章。

今天我想從數學多項式子來說明跨 clock訊號上的觀念。以下有兩個圖。


Fig1:pq先做and邏輯運算後,再sync.clockB.


Fig2:p q先做sync.處理後,才做and邏輯運算。

有兩個訊號pq。第一種情況是先做and邏輯運算後,再同步處理到clockB,所需要的時間是Y(t1). 第二種情況是先同步處理到clockB後,才做and邏輯運算,所需要的時間是Y(t2)。請問Y(t1)Y(t2)的時間是否相同?

Sync_1, Sync_2, Sync_3 是用相同的module呼叫,同步處理的步驟一致。

你認為,從開始到結束,Y(t1) 所需要花費的時間和Y(t2)會是相同的嗎?

大部份的人都會認為Y(t1)=Y(t2),但是,事實是這樣子的嗎?我們可以試著用數學不等式來證明它們所需要花費的時間。以下,我們列出Y(t1)Y(t2)的不等式。看看是否一致?

假設,DFF.clockA所需要的時間是Xa, DFF.clockB所需要的時間是Xb.
and邏輯運算時間不計。Sync_1所需要的時間為X1, Sync_2所需要的時間為X2, Sync_3所需要的時間為X3.

Y(t1)的不等式是
Y(p)=Xa+X1+Xb;
Y(q)= Xa+X1+Xb;
所以Y(t1)= Xa+X1+Xb;

Y(t2)的不等式是
Y(p)=Xa+X2+Xb;
Y(q)= Xa+X3+Xb;

Y(t2)= max( Y(p), Y(q));

在這裏有一個觀念,雖然Sync_1, Sync_2, Sync_3,是呼叫同一個同步處理的module,但是因為在合成netlist時,clockAclockB是設成不用檢查 timing的 false path,所以Sync_1Sync_2,和Sync_3所需要的時間就會不同,因為我們不曉得DC會怎麼 place and route Sync_1的電路,它可能在Sync_1路徑上放100buffer, Sync_2路徑上放500buffer, Sync_3路徑上放1000buffer,因為我們已經設定成clockAclockB之間是false path。只要是設成false path的路徑,我們就要將它視為 timing上無法精準的算計,這是因為我們設定的限制條件不足。

所以我們得到Y(t1)Y(t2)的不等式,

Y(t1)= Xa+X1+Xb;
Y(t2)= max( Y(p), Y(q));

請問,這兩個不等式是相同的嗎?答案很明顯地是不同的。或許有些人會說,我以前的經驗兩個都設計過,並沒有不同。為什麼?

從理論上來說,這本來就是兩種不同的不等式,我們並不能否定這個事實。可是為什麼實務經驗裏,卻有機會可以相容?因為在DC合成器裏,它會儘量將跨clockpath 做最佳化處理,讓分別在兩個不同clock下的DFF 路徑上,是最短時間的路徑。再加上,我們所需要的只是要符合一個 clock period的 timing。所以就會有機會可以讓Y(t1)和Y(t2)可以相容。

但理論上不相同的東西。數位工程師在設計晶片時,從一開始就要想清楚,從理論上就要證明自己的方法是對的,然後才會在實務的過程中實現自己方法。這樣子的系統才是從根本上的穩定系統。如果不用穩定數學式子證明,只想要在DC合成過程中尋求穩定,那無異是緣木求魚;結果總會有例外發生,無法穩定系統。

理論上,不同的數學式子,就是不同的,數位工程師在設計跨 clock的程式時,必須要有以上的觀念,如此才能真正了解系統不穩定的問題。所以如果你著重的是 P和 Q到達Y的時間,那麼你必須選擇 Y(t1)的設計方法。如果你不注重 P和 Q的到達時間,那麼你就可以選 Y(t2)的設計方法。 Y(t1)和 Y(t2)就本質上就是不同的數學式子,視你的需要,選擇你的式子,沒有對錯可言。

2 則留言:

  1. Thanks for sharing this concept.
    另外請教個問題,這兩種同步電路,理論上功能都一樣,但是Fig.1省了一個 Synchronizer, 那 Fig.2 的優勢是什麼呢 ? 同樣的電路,採取省面積的做法不是更好嗎 ? 謝謝.

    回覆刪除
  2. 都是六年前的貼文了,現在才發現您的 blog,我真是 lag 好久.

    回覆刪除