Verilog 同步與異步

2022-05-20 14:34 更新

關(guān)鍵詞: 同步,異步

由前5章內(nèi)容可知,當(dāng)觸發(fā)器輸入端的數(shù)據(jù)和觸發(fā)器的時鐘不相關(guān)時,很容易導(dǎo)致電路時序不滿足。本章主要解決模塊間可導(dǎo)致時序 violation 的異步問題。

關(guān)于異步與同步的定義,許多地方都有介紹,細節(jié)上也有所差異。本章主要的關(guān)注點是解決異步問題的方法,而不關(guān)心為什么會出現(xiàn)異步時鐘,也不關(guān)心異步電路的具體結(jié)構(gòu),僅從異步時鐘的時序結(jié)果去分析解決問題。

同步時鐘

數(shù)字設(shè)計中,一般認為,頻率相同或頻率比為整數(shù)倍、且相位相同或相位差固定的兩個時鐘為同步時鐘。

或者理解為,時鐘同源且頻率比為整數(shù)倍的兩個時鐘為同步時鐘。其實,時鐘同源,就保證了時鐘相位差的固定性。具體可以分類如下:

同源同頻同相位

此類時鐘頻率和相位均相同,是同步的。時鐘間數(shù)據(jù)傳輸只要滿足正常的建立時間和保持時間即可,不需要特殊的同步設(shè)計。

同源同頻不同相位

兩個時鐘同頻但不同相位時,只要相位差保持固定,也可以認為是同步的。因為只要控制兩個時鐘間傳輸?shù)臄?shù)據(jù)延遲在合理范圍內(nèi),就不會導(dǎo)致時序問題。而且,固定的時鐘延遲也可以在版圖級網(wǎng)表中修復(fù)。

固定的相位差可以理解為同源時鐘下兩個時鐘因路徑不同而導(dǎo)致的偏移。


同源不同頻但存在整數(shù)倍分頻比

此類情況下,一個時鐘往往是另一個時鐘的分頻,即便存在相位差也是固定的。

當(dāng)單 bit 信號從慢時鐘域傳遞到快時鐘域時,因為同源,只要滿足建立時間和保持時間,快時鐘域總會采集到從慢時鐘域傳遞來的信號。

如下圖所示,clk2 上升沿總能采集從 clk1 域來的信號 sig1,且采集到的信號 sig2 高電平持續(xù)周期也是兩個時鐘的頻率比,即 2 個周期。


如果要求 clk2 域的信號 sig2 只需要持續(xù)一個時鐘周期,則需要對 sig1 進行上升沿檢測。同步信號間的上升沿檢測程序 Verilog 描述如下。

   reg [1:0]    sig2_r ;
   always @(posedge clk2 or negedge rstn) begin
     if (!rstn) sig2_r  <= 2'b0 ;
     else       sig2_r  <= {sig2_r[0], sig1} ;
   end
   assign sig2 = sig2_r[0] && !sig2_r[1];

仿真結(jié)果下圖所示。


當(dāng)單 bit 信號從快時鐘域傳遞到慢時鐘域時,只要慢時鐘域能安全采集到從快時鐘域傳遞來的信號,就不存在異步問題。因為兩個時鐘是同源的。如下圖 sig1 到 sig2 的傳輸。

但是如果快時鐘域信號過窄,慢時鐘域可能會漏掉該信號,如下圖 sig11 到 sig22 的傳輸。此時就需要對快時鐘域的窄脈沖信號進行展寬。


當(dāng)兩個時鐘頻率比相對較小時,可以在快時鐘域采用對信號延遲的方法進行展寬;

當(dāng)兩個時鐘頻率比相差較大時,可在快時鐘域采用計數(shù)的方法來延長單 bit 信號有效的時間。

利用延遲來展寬窄脈沖信號的方法 Verilog 描述如下。因為 clk1 與 clk2 的頻率比為 2,只需要在 clk2 時鐘域延遲 2 拍即可。

   reg [1:0]    sig11_r ;
   always @(posedge clk1 or negedge rstn) begin
     if (!rstn) sig11_r  <= 2'b0 ;
     else       sig11_r  <= {sig11_r[0], sig11} ;
   end

   reg          sig22_r ;
   always @(posedge clk2 or negedge rstn) begin
      if (!rstn)        sig22_r  <= 1'b0 ;
      else              sig22_r  <= |sig11_r ;
   end
   assign sig22 = sig22_r ;

此時,快時鐘域的信號被延遲 2 拍,總會被慢時鐘域采集到,如下圖所示。


總之,同源且頻率比為整數(shù)倍關(guān)系時,可以理解為這兩個時鐘是同步的,不需要特殊的同步處理。下面,簡單介紹下異步時鐘的情況。

異步時鐘

工作在異步時鐘下的兩個模塊進行數(shù)據(jù)交互時,由于時鐘相位關(guān)系不可控制,很容易導(dǎo)致建立時間和保持時間 violation。以下 3 種情況下的時鐘可以認為是異步的。

不同源

由兩個不同的時鐘源產(chǎn)生的兩個時鐘是異步的,這是最常見的異步時鐘。即便兩個時鐘頻率相同,但是也不能保證每次上電后兩者的相位或相位差是相同的,所以信號間的傳輸與時鐘關(guān)系也是不確定的。

同源但頻率比不是整數(shù)倍

此時兩個時鐘間相位差也可能會有多個,例如同源的 7MHz 時鐘和 3MHz 時鐘,他們之間也會出現(xiàn)多個相位差,時序也難以控制。一般情況下也需要當(dāng)異步時鐘處理。

同源雖頻率比為整數(shù)倍但不滿足時序要求

前面介紹同步問題時有說明,當(dāng)信號從快時鐘域傳遞到慢時鐘域時,只要慢時鐘域能安全采集到從快時鐘域傳來的信號,就不存在異步問題。但如果信號在快時鐘域翻轉(zhuǎn)速率過快,慢時鐘域可能不會安全的采集到從快時鐘域傳來的信號,這也可以認為是異步問題。

一般來說,慢時鐘域時序約束較為寬松,快時鐘域較為嚴(yán)格。

如下圖,快時鐘域信號在慢時鐘域上升沿前翻轉(zhuǎn)了 2 次。此時,慢時鐘域會漏掉部分數(shù)據(jù)。而且,數(shù)據(jù)的快速變化也可能導(dǎo)致 timing violation。


這里只簡單介紹下異步時鐘的分類情況,異步問題的解決方法請參考后面的章節(jié)。

點擊這里下載源碼


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號