2.6.3 多級(jí)邏輯時(shí)鐘
當(dāng)產(chǎn)生門控時(shí)鐘的組合邏輯超過一級(jí)(即超過單個(gè)的“與”門或“或”門)時(shí),證設(shè)計(jì)項(xiàng)目的可靠性變得很困難。即使樣機(jī)或仿真結(jié)果沒有顯示出靜態(tài)險(xiǎn)象,但實(shí)際上仍然可能存在著危險(xiǎn)。通常,我們不應(yīng)該用多級(jí)組合邏輯去鐘控PLD設(shè)計(jì)中的觸發(fā)器。
圖7給出一個(gè)含有險(xiǎn)象的多級(jí)時(shí)鐘的例子。時(shí)鐘是由SEL引腳控制的多路選擇器輸出的。多路選擇器的輸入是時(shí)鐘(CLK)和該時(shí)鐘的2分頻(DIV2)。由圖7 的定時(shí)波形圖看出,在兩個(gè)時(shí)鐘均為邏輯1的情況下,當(dāng)SEL線的狀態(tài)改變時(shí),存在靜態(tài)險(xiǎn)象。險(xiǎn)象的程度取決于工作的條件。 多級(jí)邏輯的險(xiǎn)象是可以去除的。例如,你可以插入“冗余邏輯”到設(shè)計(jì)項(xiàng)目中。然而,PLD/FPGA編譯器在邏輯綜合時(shí)會(huì)去掉這些冗余邏輯,使得驗(yàn)證險(xiǎn)象是否真正被去除變得困難了。為此,必須應(yīng)尋求其它方法來實(shí)現(xiàn)電路的功能。
圖7 有靜態(tài)險(xiǎn)象的多級(jí)時(shí)鐘
圖8給出圖7電路的一種單級(jí)時(shí)鐘的替代方案。圖中SEL引腳和DIV2信號(hào)用于使能D觸發(fā)器的使能輸入端,而不是用于該觸發(fā)器的時(shí)鐘引腳。采用這個(gè)電路并不需要附加PLD的邏輯單元,工作卻可靠多了。 不同的系統(tǒng)需要采用不同的方法去除多級(jí)時(shí)鐘,并沒有固定的模式。
圖8 無靜態(tài)險(xiǎn)象的多級(jí)時(shí)鐘(這個(gè)電路邏輯上等效于圖7,但卻可靠的多)
2.6.4 行波時(shí)鐘
另一種流行的時(shí)鐘電路是采用行波時(shí)鐘,即一個(gè)觸發(fā)器的輸出用作另一個(gè)觸發(fā)器的時(shí)鐘輸入。如果仔細(xì)地設(shè)計(jì),行波時(shí)鐘可以象全局時(shí)鐘一樣地可靠工作。然而,行波時(shí)鐘使得與電路有關(guān)的定時(shí)計(jì)算變得很復(fù)雜。行波時(shí)鐘在行波鏈上各觸發(fā)器的時(shí)鐘之間產(chǎn)生較大的時(shí)間偏移,并且會(huì)超出最壞情況下的建立時(shí)間、保持時(shí)間和電路中時(shí)鐘到輸出的延時(shí),使系統(tǒng)的實(shí)際速度下降。
用計(jì)數(shù)翻轉(zhuǎn)型觸發(fā)器構(gòu)成異步計(jì)數(shù)器時(shí)常采用行波時(shí)鐘,一個(gè)觸發(fā)器的輸出鐘控下一個(gè)觸發(fā)器的輸入,參看圖9同步計(jì)數(shù)器通常是代替異步計(jì)數(shù)器的更好方案,這是因?yàn)閮烧咝枰瑯佣嗟暮陠卧接?jì)數(shù)器有較快的時(shí)鐘到輸出的時(shí)間。圖10給出具有全局時(shí)鐘的同步計(jì)數(shù)器,它和圖9功能相同,用了同樣多的邏輯單元實(shí)現(xiàn),卻有較快的時(shí)鐘到輸出的時(shí)間。幾乎所有PLD開發(fā)軟件都提供多種多樣的同步計(jì)數(shù)器。
圖9 行波時(shí)鐘
圖10 行波時(shí)鐘轉(zhuǎn)換成全局時(shí)鐘
(這個(gè)3位計(jì)數(shù)器是圖9異步計(jì)數(shù)器的替代電路,它用了同樣的3個(gè)宏單元,但有更短的時(shí)鐘到輸出的延時(shí))
2.6.5 多時(shí)鐘系統(tǒng)
許多系統(tǒng)要求在同一個(gè)PLD內(nèi)采用多時(shí)鐘。最常見的例子是兩個(gè)異步微處理器器之間的接口,或微處理器和異步通信通道的接口。由于兩個(gè)時(shí)鐘信號(hào)之間要求一定的建立和保持時(shí)間,所以,上述應(yīng)用引進(jìn)了附加的定時(shí)約束條件。它們也會(huì)要求將某些異步信號(hào)同步化。
圖11給出一個(gè)多時(shí)鐘系統(tǒng)的實(shí)例。CLK_A用以鐘控REG_A,CLK_B用于鐘控REG_B,由于REG_A驅(qū)動(dòng)著進(jìn)入REG_B的組合邏輯,故CLK_A的上升沿相對(duì)于CLK_B的上升沿有建立時(shí)間和保持時(shí)間的要求。由于REG_B不驅(qū)動(dòng)饋到REG_A的邏輯,CLK_B的上升沿相對(duì)于CLK_A沒有建立時(shí)間的要求。此外,由于時(shí)鐘的下降沿不影響觸發(fā)器的狀態(tài),所以CLK_A和CLK_B的下降沿之間沒有時(shí)間上的要求。如圖4,2.II所示,電路中有兩個(gè)獨(dú)立的時(shí)鐘,可是,在它們之間的建立時(shí)間和保持時(shí)間的要求是不能保證的。在這種情況下,必須將電路同步化。圖12 給出REG_A的值(如何在使用前)同CLK_B同步化。新的觸發(fā)器REG_C由GLK_B觸控,保證REG_G的輸出符合REG_B的建立時(shí)間。然而,這個(gè)方法使輸出延時(shí)了一個(gè)時(shí)鐘周期。
?
圖ll 多時(shí)鐘系統(tǒng) (定時(shí)波形示出CLK_A的上升沿相對(duì)于CLK_B的上升沿有建立時(shí)間和保持時(shí)間的約束條件)
圖12 具有同步寄存器輸出的多時(shí)鐘系統(tǒng) (如果CLK_A和CLK_B是相互獨(dú)立的,則REG—A的輸出必須在它饋送到1REG_B之前,用REG_C同步化)
在許多應(yīng)用中只將異步信號(hào)同步化還是不夠的,當(dāng)系統(tǒng)中有兩個(gè)或兩個(gè)以上非同源時(shí)鐘的時(shí)候,數(shù)據(jù)的建立和保持時(shí)間很難得到保證,我們將面臨復(fù)雜的時(shí)間問題。最好的方法是將所有非同源時(shí)鐘同步化。使用PLD內(nèi)部的鎖項(xiàng)環(huán)(PLL或DLL)是一個(gè)效果很好的方法,但不是所有PLD都帶有PLL、DLL,而且?guī)в蠵LL功能的芯片大多價(jià)格昂貴,所以除非有特殊要求,一般場(chǎng)合可以不使用帶PLL的PLD。 這時(shí)我們需要使用帶使能端的D觸發(fā)器,并引入一個(gè)高頻時(shí)鐘。
圖13 不同源時(shí)鐘
如圖13所示,系統(tǒng)有兩個(gè)不同源時(shí)鐘,一個(gè)為3MHz,一個(gè)為5MHz,不同的觸發(fā)器使用不同的時(shí)鐘。為了系統(tǒng)穩(wěn)定,我們引入一個(gè)20MHz時(shí)鐘,將3M和5M時(shí)鐘同步化,如圖15所示。 20M的高頻時(shí)鐘將作為系統(tǒng)時(shí)鐘,輸入到所有觸發(fā)器的的時(shí)鐘端。3M_EN 和5M_EN將控制所有觸發(fā)器的使能端。即原來接3M時(shí)鐘的觸發(fā)器,接20M時(shí)鐘,同時(shí)3M_EN 將控制該觸發(fā)器使能 ,原接5M時(shí)鐘的觸發(fā)器,也接20M時(shí)鐘,同時(shí)5M_EN 將控制該觸發(fā)器使能。 這樣我們就可以將任何非同源時(shí)鐘同步化。
圖14 同步化任意非同源時(shí)鐘
(一個(gè)DFF和后面非門,與門構(gòu)成時(shí)鐘上升沿檢測(cè)電路)
另外,異步信號(hào)輸入總是無法滿足數(shù)據(jù)的建立保持時(shí)間,容易使系統(tǒng)進(jìn)入亞穩(wěn)態(tài),所以也建議設(shè)計(jì)者把所有異步輸入都先經(jīng)過雙觸發(fā)器進(jìn)行同步化.
小結(jié):穩(wěn)定可靠的時(shí)鐘是系統(tǒng)穩(wěn)定可靠的重要條件,我們不能夠?qū)⑷魏慰赡芎忻痰妮敵鲎鳛闀r(shí)鐘信號(hào),并且盡可能只使用一個(gè)全局時(shí)鐘,對(duì)多時(shí)鐘系統(tǒng)要注意同步異步信號(hào)和非同源時(shí)鐘。
2.6.6 多時(shí)鐘系統(tǒng)設(shè)計(jì)的一些方法:
如果時(shí)鐘間存在著固定的頻率倍數(shù),這種情況下它們的相位一般具有固定關(guān)系,可以采用下述方法處理;
使用高頻時(shí)鐘作為工作時(shí)鐘,使用低頻時(shí)鐘作為使能信號(hào),當(dāng)功耗不作為首要因素時(shí)建議使用這種方式;
在仔細(xì)分析時(shí)序的基礎(chǔ)上描述兩個(gè)時(shí)鐘轉(zhuǎn)換處的電路;
如果電路中存在兩個(gè)不同頻率的時(shí)鐘,并且頻率無關(guān),可以采用如下策略:
利用高頻時(shí)鐘采樣兩個(gè)時(shí)鐘,在電路中使用高頻時(shí)鐘作為電路的工作時(shí)鐘,經(jīng)采樣后的低頻時(shí)鐘作為使能;
在時(shí)鐘同步單元中采用兩次同步法
使用握手信號(hào)
使用雙時(shí)鐘FIFO進(jìn)行數(shù)據(jù)緩沖
時(shí)鐘同步化,如果系統(tǒng)中存在兩個(gè)時(shí)鐘clk_a和clk_b,設(shè)計(jì)者可以使用頻率高于max(clk_a,clk_b)兩倍的時(shí)鐘來作為采樣時(shí)鐘,兩個(gè)低頻時(shí)鐘經(jīng)過處理后可以作為觸發(fā)器的使能信號(hào),采用這種方案的好處是整個(gè)電路采用單時(shí)鐘工作,但需要一個(gè)額外的高頻時(shí)鐘,當(dāng)電路有功耗要求時(shí),設(shè)計(jì)者應(yīng)該仔細(xì)考慮;
使用20M采樣3M和5M,syn_5M作為原來5M信號(hào)驅(qū)動(dòng)寄存器的使能信號(hào);
使用高頻時(shí)鐘采樣2個(gè)低頻時(shí)鐘原理圖
使用高頻時(shí)鐘采樣2個(gè)低頻時(shí)鐘波形圖
在構(gòu)件由兩個(gè)不同系統(tǒng)時(shí)鐘控制工作的模塊之間的同步模塊時(shí),應(yīng)該遵守下面原則:兩個(gè)采用不同時(shí)鐘工作的寄存器之間不應(yīng)該再出現(xiàn)邏輯電路,而應(yīng)該僅僅是一種連接關(guān)系,具體如下圖所示,這種方法有利于控制建立保持時(shí)間的滿足。
握手信號(hào)機(jī)制是異步系統(tǒng)之間通信的基本方式,我們?cè)谔幚聿煌瑫r(shí)鐘之間的接口時(shí),也可以采用這種方式,但需要注意的是設(shè)計(jì)者應(yīng)該仔細(xì)分析握手和應(yīng)答信號(hào)有效持續(xù)的時(shí)間,確保采樣數(shù)據(jù)的正確性。
目前各種器件中提供的雙時(shí)鐘FIFO宏單元很好的提供了對(duì)異步雙時(shí)鐘的訪問,單元的內(nèi)部有協(xié)調(diào)兩個(gè)時(shí)鐘的電路,確保讀寫的正確性??梢岳眠@個(gè)器件完成數(shù)據(jù)的同步。
1. 采用全局時(shí)鐘,不要將時(shí)鐘參與運(yùn)算。系統(tǒng)提供一定數(shù)量的全局時(shí)鐘線,在布局布線時(shí),盡量滿足這些信號(hào)的要求以減小時(shí)鐘偏移和傾斜。如果時(shí)序安排不合理使用了較多gated clock,那么這些時(shí)鐘的偏斜就會(huì)較大,不能保障建立時(shí)間和保持時(shí)間,導(dǎo)致電路工作頻率降低或無法工作。
2. 以寄存器為邊界劃分工作模塊。在設(shè)計(jì)較大規(guī)模的電路時(shí),分模塊設(shè)計(jì)是必不可少的,在各模塊通過之后再進(jìn)行系統(tǒng)的聯(lián)調(diào)。但由于在單模塊調(diào)試和聯(lián)調(diào)時(shí)布線資源的占用緊張程度不同,使得每個(gè)模塊的輸出無法保持與單獨(dú)布線時(shí)相同,在聯(lián)調(diào)時(shí)造成困難。如果每一個(gè)模塊的輸出端口都采用寄存器輸出,那么即使在整體布局布線后,各模塊的輸出依然可以保證原來的時(shí)序,這使得聯(lián)調(diào)的工作效率大大提高。加入這些寄存器也使得電路的可測(cè)性有所提高。
3. 組合邏輯盡量采用并行結(jié)構(gòu),降低寄存器間組合路徑的延遲是提高系統(tǒng)工作頻率最主要的手段,因此在完成相同功能的前提下應(yīng)該盡量使用并行邏輯,如圖6所示。
圖6 四輸入比較器的串行和并行實(shí)現(xiàn)
如果沒有優(yōu)先級(jí)要求應(yīng)該盡量采用case語句來描述,這樣綜合出來的電路并行度要大一些,如果采用if-then-else結(jié)構(gòu),綜合出來的電路都是串行的,增大了時(shí)延路徑。
4. 在描述中應(yīng)該消除鎖存器,如果某個(gè)數(shù)據(jù)需要保存應(yīng)該合理安排使用寄存器,因?yàn)殒i存器在整個(gè)工作電平有效期間都對(duì)輸入敏感,輸入中的任何毛刺經(jīng)過鎖存器后都不會(huì)消除,這樣使得在其后的組合電路發(fā)生競(jìng)爭(zhēng)冒險(xiǎn)的可能性大為提高,影響電路性能。一些不適當(dāng)?shù)拿枋鲆矔?huì)使得產(chǎn)生不必要的鎖存器,增加了電路的面積。
5. 在設(shè)計(jì)中應(yīng)該盡量采用同步設(shè)計(jì),信號(hào)被時(shí)鐘采樣后再參與邏輯運(yùn)算,這樣可以隔斷組合路徑,也可以消除毛刺。在設(shè)計(jì)中,組合信號(hào)的輸出不允許反饋?zhàn)鳛樵摻M合邏輯的輸入,這樣可以避免組合環(huán)。
評(píng)論
查看更多