【 一 】
數(shù)字IC系統(tǒng)邏輯設(shè)計這部分主要介紹兩個方面,一個是RTL的設(shè)計基礎(chǔ);另一方面是verilog基本語法。這一篇文章主要介紹一下RTL的設(shè)計基礎(chǔ)。
RTL設(shè)計都是采用同步電路設(shè)計方式,了解同步電路的設(shè)計要求是RTL設(shè)計的第一步。下圖是一個同步電路的示例:
其中,組合邏輯實現(xiàn)設(shè)計所需要的功能,寄存器用于暫存數(shù)據(jù)用時鐘控制。只有當(dāng)時鐘進(jìn)行有效跳變時,才將新的數(shù)據(jù)所存起來,否則數(shù)據(jù)保持原值。時鐘相當(dāng)于同步電路中的指揮。時鐘一般是由晶振產(chǎn)生,或者由外部輸入,如果需要還需要用鎖相環(huán)進(jìn)行倍頻、相移等操作。
下面對寄存器做一個介紹,一個寄存器的結(jié)構(gòu)如下圖所示:
寄存器的功能如下圖所示:
由圖可得,該寄存器在時鐘的跳變沿鎖存數(shù)據(jù),然后數(shù)據(jù)會保持直到下一個跳變沿。寄存器要正常工作,必須保證D端的數(shù)據(jù)變化與時鐘的有效沿不能距離太近,否則有可能鎖存錯誤的數(shù)據(jù)。在綜合庫中,規(guī)定了數(shù)據(jù)變化端跟時鐘跳變沿最短的時間要求,即建立時間約束和保持時間約束。建立時間規(guī)定,在時鐘沿到達(dá)前的某段時間內(nèi),數(shù)據(jù)必須穩(wěn)定;保持時間定義了在時鐘沿之后的某段時間之后,數(shù)據(jù)才能發(fā)生變化。
對于一個寄存器來說,除了數(shù)據(jù)端與時鐘端有時序要求。異步復(fù)位端與時鐘端也有要求。假設(shè)一個寄存器是已不復(fù)位的,復(fù)位信號低電平有效。當(dāng)復(fù)位信號是低電平時,寄存器被初始化。當(dāng)異步復(fù)位信號跳高時,寄存器在時鐘跳變沿鎖存新的數(shù)據(jù)。如果異步復(fù)位信號跳高的時刻距離時鐘有效沿太近,寄存器可能繼續(xù)保持復(fù)位狀太,也可能鎖存新的數(shù)據(jù)。因此有必要定義時鐘有效沿與異步復(fù)位無效沿之間的時序要求,這就是recovery/removal的時序要求,如圖所示;
寄存器中建立時間/保持時間、recovery/removal的時序要求, 對設(shè)計的最大組合邏輯延時、時鐘樹的構(gòu)造、復(fù)位樹的構(gòu)造都提出了要求。復(fù)位樹、時鐘樹一般由后端工具進(jìn)行處理。對RTL設(shè)計者來說,最需關(guān)注的是建立時間的問題。設(shè)計中的時序違例通過靜態(tài)時序分析工具可以檢查出來。
在IC系統(tǒng)中, 復(fù)位的目的是為了將芯片強制到一個已知的狀態(tài)。同步復(fù)位與異步復(fù)位都能達(dá)到這個目的。兩者的差別在于:同步復(fù)位需要時鐘有效沿到達(dá)時才能起作用,而異步復(fù)位不需要。如下,是同步復(fù)位電路:
同步復(fù)位的優(yōu)點在于:
1)在采用基于周期的仿真器場合,同步復(fù)位簡單
2)寄存器可以濾掉復(fù)位上的毛刺
缺點:
1)需要時鐘,在某些場合帶來不便。假如設(shè)計中包含三態(tài)總線,總線上接著許多寄存器。當(dāng)上電后,晶振還未起振,鎖相環(huán)還未穩(wěn)定,這時候沒有時鐘,所以復(fù)位還沒有起作用,因此會導(dǎo)致總線上發(fā)生沖突。只有增加上電復(fù)位電路才能解決此問題。
2)采用同步復(fù)位,復(fù)位成為路徑組合邏輯的一部分,由于復(fù)位的負(fù)載比較大,因此會使得復(fù)位樹的延遲比較大,從而導(dǎo)致在路徑上的延遲比較大。
異步復(fù)位的優(yōu)點是不需要時鐘,且復(fù)位不會影響到路徑延時。缺點是:復(fù)位上的毛刺不能被由它復(fù)位的寄存器過濾掉;復(fù)位的無效沿與時鐘之間存在時序要求。
將同步復(fù)位和異步復(fù)位優(yōu)點結(jié)合起來:給出了一種異步復(fù)位,同步釋放的復(fù)位方法,如下圖所示:
該電路的原理是:當(dāng)復(fù)位信號有效時,兩個同步器都為低,因此同步器的輸出立即變低,而不管此時是否存在時鐘。當(dāng)復(fù)位信號變高后,經(jīng)過時鐘跳變沿后才能將高電平鎖存到同步器的輸出,也就是說,同步器的輸出的無效沿是與時鐘同步的。
【 二 】
這篇文章主要講一下RTL設(shè)計中多時鐘域的處理,之前在異步FIFO設(shè)計中已經(jīng)講到這個問題,這篇更全面詳細(xì)的介紹一下多時鐘域的處理。
多時鐘域之所以難以處理,是因為在兩個時鐘域之間傳遞信號時,不可避免地會出現(xiàn)建立時間/保持時間違例的問題。寄存器會鎖存錯誤的數(shù)據(jù),引起功能錯誤。
現(xiàn)考慮在兩個時鐘域間傳遞1位信號的情況。如下圖是多時鐘域傳遞一位信號的示例:
在這個例子中,aclk與bclk是兩個異步時鐘。由aclk時鐘域產(chǎn)生的數(shù)據(jù)adat要送到bclk的時鐘域。由于bclk與aclk不同步,所以會出現(xiàn)這種情形:在一定時刻,adat的變化沿距離bclk的采樣沿非常接近,不能滿足建立時間和保持時間的要求。這樣, 寄存器可能會進(jìn)入亞穩(wěn)態(tài)。下圖是這種情況下的波形圖:
bdat1的值會傳遞給其他模塊。在實際芯片中,在bdat1處于亞微態(tài)的時候,有些模塊會認(rèn)為自己收到的是“1”, 有些會認(rèn)為是“0”,這種不一致會導(dǎo)致功能錯誤,如下圖所示:
這種情形需要采用下圖所示的同步器來避免:
采用同步器之后,其波形如下圖所示:
下面看一下相關(guān)的多位信號的傳遞,同步器適用于在多時鐘域間傳遞1位信號,但是對于相關(guān)的多位信號,采用這種技術(shù)仍然會出現(xiàn)問題。如下圖所示,在多時鐘域間傳遞兩位信號:
在這個例子中,有兩個信號b-load和b-en由bclk時鐘域傳遞到aclk時鐘域。這兩個信號相關(guān)。我們假設(shè)在某個時鐘周期內(nèi), b-load與b-en同時有效,那么這兩個信號分別經(jīng)過同步器后,得到的波形如下所示:
由于b-load信號與b-en信號的延遲不同,兩者的上升沿之間有一些偏移。如果同步器的采樣時鐘正好也位于兩個信號變化沿之間, 則采樣后的信號有可能會相差一個周期。這種情況下,可以將兩個信號進(jìn)行邏輯與操作變成一個信號送到同步器。但是很多時候,無法對傳遞信號進(jìn)行簡單的合并。這個時候就可以考慮先將這些信號變成格雷碼,然后通過同步器來傳遞。由于格雷碼在一個周期內(nèi)僅有一位發(fā)生變化,這樣經(jīng)過同步器之后就可以得到正確的結(jié)果。
上述方案都是基于同步器的,依據(jù)的原理是降低寄存器處于亞穩(wěn)態(tài)的概率。另外一種方案是用多組寄存器來存儲信號,過一段時間再進(jìn)行讀操作。在開始讀操作的時候,數(shù)據(jù)早已經(jīng)穩(wěn)定下來,就不會出現(xiàn)建立時間/保持時間違例的情況。這也就是基于異步fifo在多時鐘減傳遞信號的基本原理。關(guān)于異步FIFO的設(shè)計,已經(jīng)講過,在此不再贅述。
下面講一下時鐘切換電路,有些設(shè)計中需要進(jìn)行時鐘切換。動態(tài)地將始終從高頻切換到低頻或者由低頻切換到高頻,切換過程中會出現(xiàn)毛刺。時鐘上的毛刺是非常致命的,可能會導(dǎo)致功能錯誤。要避免這種問題可以采取兩種方法,一種是在時鐘切換時,進(jìn)入復(fù)位,當(dāng)切換完成后,復(fù)位結(jié)束;另一種方法是采用時鐘切換電路,如下圖所示,這種切換電路跟鎖存器的設(shè)計有異曲同工之妙。
原文標(biāo)題:帶你科普RTL設(shè)計基礎(chǔ)
文章出處:【微信公眾號:路科驗證】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
審核編輯:湯梓紅
-
寄存器
+關(guān)注
關(guān)注
31文章
5434瀏覽量
124445 -
RTL
+關(guān)注
關(guān)注
1文章
389瀏覽量
61088 -
多時鐘域
+關(guān)注
關(guān)注
0文章
6瀏覽量
6109
原文標(biāo)題:帶你科普RTL設(shè)計基礎(chǔ)
文章出處:【微信號:Rocker-IC,微信公眾號:路科驗證】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
如何處理好FPGA設(shè)計中跨時鐘域間的數(shù)據(jù)
IC設(shè)計中多時鐘域處理的常用方法相關(guān)資料推薦
基于多時鐘域的異步FIFO設(shè)計
關(guān)于FPGA中跨時鐘域的問題分析
多時鐘域的同步時序設(shè)計和幾種處理異步時鐘域接口的方法

RTL中多時鐘域的異步復(fù)位同步釋放

解析多時鐘域和異步信號處理解決方案

評論