跨越鴻溝:同步世界中的異步信號(hào)
現(xiàn)在指針邏輯的設(shè)計(jì)有多種方法。第一種方法是將讀、寫(xiě)選通進(jìn)行同步,同時(shí)在各個(gè)時(shí)鐘域使用計(jì)數(shù)器來(lái)跟蹤 FIFO 中可用的項(xiàng)。計(jì)數(shù)器反映出可用于讀寫(xiě)的 FIFO 項(xiàng)目號(hào),計(jì)數(shù)器也與相應(yīng)的端口同步。讀計(jì)數(shù)器跟蹤包含有效數(shù)據(jù)的項(xiàng)數(shù),而寫(xiě)計(jì)數(shù)器則跟蹤可以存儲(chǔ)數(shù)據(jù)的項(xiàng)數(shù)。當(dāng)對(duì)指針邏輯進(jìn)行復(fù)位時(shí),由于沒(méi)有數(shù)據(jù)可讀,讀計(jì)數(shù)器從零起始。寫(xiě)計(jì)數(shù)器則從 FIFO 中項(xiàng)的總數(shù)開(kāi)始計(jì)數(shù),即所有項(xiàng)均可用來(lái)存儲(chǔ)數(shù)據(jù)。
本文引用地址:http://2s4d.com/article/268638.htm讀選通信號(hào)累減讀計(jì)數(shù)器,并與寫(xiě)時(shí)鐘域同步,因?yàn)樗瑫r(shí)也累加寫(xiě)計(jì)數(shù)器。寫(xiě)選通信號(hào)則累減寫(xiě)計(jì)數(shù)器,并與讀時(shí)鐘域同步,因?yàn)樗瑫r(shí)也累加讀計(jì)數(shù)器。
這種設(shè)計(jì)需要單時(shí)鐘寬度脈沖以及用于讀、寫(xiě)選通的脈沖同步器,因?yàn)楫?dāng)一個(gè)電平信號(hào)從一個(gè)時(shí)鐘域跨越到
另一個(gè)更快的時(shí)鐘域時(shí),在較快時(shí)鐘域中它能在更多的時(shí)鐘周期中保持有效。由于只要讀或?qū)懶盘?hào)是有效的,每個(gè)計(jì)數(shù)器就會(huì)發(fā)生變化,因此較快的時(shí)鐘域就檢測(cè)到更多的讀、寫(xiě),超出較慢時(shí)鐘域?qū)嶋H發(fā)生的數(shù)量。脈沖同步器可以將一個(gè)時(shí)鐘域的時(shí)鐘寬度脈沖轉(zhuǎn)換為新時(shí)鐘域的時(shí)鐘寬度脈沖,每個(gè)脈沖都表示一次 FIFO 的讀或?qū)憽?/p>
這種 FIFO 狀態(tài)技術(shù)對(duì)讀、寫(xiě)狀態(tài)都不太有利。當(dāng) FIFO 中所有項(xiàng)均充滿時(shí),寫(xiě)端口狀態(tài)指示為滿,并在讀選通觸發(fā)后繼續(xù)指示 FIFO 滿,因?yàn)橥竭^(guò)程會(huì)使選通信號(hào)延遲送給寫(xiě)計(jì)數(shù)器。讀端口為空時(shí)也會(huì)出現(xiàn)這種情況,因?yàn)橥竭^(guò)程會(huì)使寫(xiě)選通信號(hào)延遲到達(dá)讀計(jì)數(shù)器。
這種設(shè)計(jì)的另一種考慮是及時(shí)檢測(cè)全滿/全空狀態(tài)。如果 FIFO 還有一項(xiàng)可用,并且有寫(xiě)選通觸發(fā),則 FIFO 必須立即置為全滿狀態(tài)。這樣才能提前一個(gè)時(shí)鐘給出全滿標(biāo)志,使 FIFO 有足夠時(shí)間防止下一個(gè)數(shù)據(jù)寫(xiě)入而產(chǎn)生溢出。對(duì) FIFO 的讀端口也是這樣。這種情況下,如果 FIFO 里只有一個(gè)數(shù),并且有讀選通觸發(fā),則必須置全空狀態(tài),以給讀電路足夠的時(shí)間防止讀空 FIFO。
這種指針邏輯限制電路在每個(gè)時(shí)鐘周期中訪問(wèn) FIFO,即使在慢速時(shí)鐘域中也是這樣。這一功能的優(yōu)點(diǎn)在于訪問(wèn) FIFO 的電路至少有一個(gè)時(shí)鐘周期來(lái)評(píng)估 FIFO 的狀態(tài)。FIFO 可以將所有項(xiàng)都填滿數(shù)據(jù),而不會(huì)出現(xiàn)數(shù)據(jù)被覆蓋或全空無(wú)數(shù)據(jù)可讀的情況。這種設(shè)計(jì)的另一個(gè)優(yōu)點(diǎn)是每一端都可以讀其相應(yīng)的計(jì)數(shù)器,來(lái)判斷 FIFO 中還有多少項(xiàng)可用。設(shè)計(jì)者可以將這種 FIFO設(shè)計(jì)用在進(jìn)行多次數(shù)據(jù)讀/寫(xiě)的電路中,而不會(huì)造成上溢或下溢的情況。
這種設(shè)計(jì)的不足之處是由計(jì)數(shù)器來(lái)判斷狀態(tài),而不是直接比較讀、寫(xiě)指針。對(duì)大型 FIFO 來(lái)說(shuō),這些計(jì)數(shù)器也很大。而且,由于使用脈沖同步時(shí),來(lái)自較快時(shí)鐘域的讀、寫(xiě)脈沖在較慢時(shí)鐘域的脈沖間至少必須有兩個(gè)時(shí)鐘周期,因此平均數(shù)據(jù)速率為最低時(shí)鐘頻率的一半。解決這些問(wèn)題的一種方法是采用直接指針比較法。
在這種 FIFO 設(shè)計(jì)中,讀、寫(xiě)指針的比較決定了 FIFO 的狀態(tài)。異步設(shè)計(jì)中的指針比較更富有挑戰(zhàn)性,因?yàn)槊總€(gè)指針位于不同的時(shí)鐘域中,對(duì)信號(hào)總線的同步要求在同步握手信號(hào)期間總線不發(fā)生改變。將這種技術(shù)用于指針同步的 FIFO 設(shè)計(jì)可能會(huì)很慢。要解決這個(gè)問(wèn)題,F(xiàn)IFO 指針邏輯使用了格雷碼,代替指針使用的二進(jìn)制碼。
格雷碼在每一次計(jì)數(shù)增減時(shí)只改變其中的一位(表 3)。你可以在格雷碼總線上使用同步器,因?yàn)槊恳淮慰偩€改變時(shí)只有一根信號(hào)線有變化,于是就消除了格雷碼總線各位通過(guò)不同同步器時(shí)的競(jìng)爭(zhēng)情況。這種設(shè)計(jì)的指針為格雷碼計(jì)數(shù)器。使用二進(jìn)制指針時(shí)需要將其變換成格雷碼后的同步指針,而使用變換邏輯會(huì)違反對(duì)同步信號(hào)的限制,即同步的信號(hào)在跨越時(shí)鐘域前要來(lái)自觸發(fā)器。
表 3
格雷碼計(jì)數(shù)器是一個(gè)二進(jìn)制累加器,在累加器前、后各帶有一個(gè)轉(zhuǎn)換器,分別用于格雷碼轉(zhuǎn)換為二進(jìn)制碼,和二進(jìn)制碼轉(zhuǎn)換為格雷碼(圖 8)。格雷碼與二進(jìn)制碼的轉(zhuǎn)換是一個(gè)異或運(yùn)算,所以只需比一個(gè)二進(jìn)制計(jì)數(shù)器多幾個(gè)邏輯電平。在格雷碼轉(zhuǎn)換成二進(jìn)制碼時(shí),使用:BN=GN;BN-1=BN+GN-1;BN-2=BN-1+GN-2 . B1=B2+G1;B0=B1+G0。而將二進(jìn)制碼轉(zhuǎn)換成格雷碼時(shí),使用:GN=BN;GN-1=BN+BN-1;GN-2=BN-1+BN-2 . G1=B2+B1;G0=B1+B0。在設(shè)計(jì)中可以采用同樣的技術(shù)來(lái)比較格雷碼指針的值,即在各個(gè)指針與二進(jìn)制比較邏輯之間增加轉(zhuǎn)換器。
圖8,格雷碼計(jì)數(shù)器是一個(gè)二進(jìn)制累加器,在累加器前、后各帶有一個(gè)轉(zhuǎn)換器。
用這種指針邏輯的 FIFO 很快,每個(gè)時(shí)鐘周期中電路都可以讀寫(xiě) FIFO。但是,在每個(gè)周期都訪問(wèn) FIFO 意味著 FIFO 狀態(tài)要包括“將滿”和“將空”兩種指示,這樣讀寫(xiě) FIFO 的電路才能有停止時(shí)間。“將滿”表示只能再寫(xiě)入一項(xiàng),“將空”則表示只有一項(xiàng)可讀。這種情況描述了一個(gè)要求最少的可能狀態(tài)信號(hào)的設(shè)計(jì),以及一個(gè)需要更多指示的設(shè)計(jì),如果在固定的最小尺寸情況下用猝發(fā)方式訪問(wèn) FIFO 的電路的話。
這種 FIFO 狀態(tài)技術(shù)會(huì)給讀、寫(xiě)帶來(lái)不良狀態(tài)。當(dāng) FIFO 滿時(shí),寫(xiě)端口的狀態(tài)指示已滿,而在電路從 FIFO 中讀出一項(xiàng)后,該狀態(tài)仍為滿,因?yàn)橥綑C(jī)制使讀指針相對(duì)寫(xiě)入一側(cè)的比較邏輯有個(gè)延遲。同樣,在讀出一側(cè)的空狀態(tài)指示也有這個(gè)問(wèn)題,因?yàn)橥綑C(jī)制使寫(xiě)指針相對(duì)讀出一側(cè)的比較邏輯有延遲。
如果你在設(shè)計(jì)跨不同時(shí)鐘域電路時(shí),使用一些技術(shù)來(lái)降低通信失敗的風(fēng)險(xiǎn),則處理跨時(shí)鐘域的信號(hào)就不再是艱巨的任務(wù)。同步機(jī)制可以防止接收跨時(shí)鐘域信號(hào)的觸發(fā)器出現(xiàn)亞穩(wěn)態(tài),從而避免導(dǎo)致不可預(yù)知的電路行為。對(duì)于在多個(gè)時(shí)鐘周期內(nèi)一直保持有效的信號(hào)來(lái)說(shuō),電平同步器的效果很好。對(duì)于要轉(zhuǎn)換成新時(shí)鐘域脈沖的較慢時(shí)鐘域電平信號(hào),要采用邊沿檢測(cè)同步器。最后,對(duì)跨時(shí)鐘
域的脈沖信號(hào)應(yīng)使用脈沖同步器。還要記住,當(dāng)一個(gè)信號(hào)總線跨越時(shí)鐘域時(shí),整個(gè)總線要在同一個(gè)時(shí)鐘周期內(nèi)到達(dá)新的時(shí)鐘域。不要分別同步每一個(gè)信號(hào),而要采用一個(gè)保持寄存器和握手方式。握手用來(lái)表示寄存器中的信號(hào)何時(shí)有效,何時(shí)可以采樣。對(duì)數(shù)據(jù)總線來(lái)說(shuō),握手和一個(gè)保持寄存器很有用,但每次向新時(shí)鐘域傳送的數(shù)據(jù)字不超過(guò)一個(gè)。
模擬信號(hào)相關(guān)文章:什么是模擬信號(hào)
電路相關(guān)文章:電路分析基礎(chǔ)
脈沖點(diǎn)火器相關(guān)文章:脈沖點(diǎn)火器原理
評(píng)論