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

揭秘FPGA跨時(shí)鐘域處理的三大方法
RTL中多時(shí)鐘域的異步復(fù)位同步釋放

解析多時(shí)鐘域和異步信號(hào)處理解決方案

介紹3種方法跨時(shí)鐘域處理方法

評(píng)論