跨越鴻溝:同步世界中的異步信號
握手與 FIFO
本文引用地址:http://butianyuan.cn/article/268638.htm在許多應(yīng)用中,跨時鐘域傳送的不只是簡單的信號,數(shù)據(jù)總線、地址總線和控制總線都會同時跨域傳輸。工程師們用一些其它的手段來處理這些情況,如握手協(xié)議和 FIFO 等。
當(dāng)幾個電路不能預(yù)知相互的響應(yīng)時間時,握手方法能讓數(shù)字電路間實現(xiàn)有效的通信。例如,仲裁總線結(jié)構(gòu)可以讓一個以上的電路請求使用單個的總線,用仲裁方法來決定哪個電路可以獲得總線的訪問權(quán),例如 PCI 或 AMBA(高級微控制器總線架構(gòu))。每個電路都發(fā)出一個請求信號,由仲裁邏輯決定誰是“贏家”。獲勝的電路會收到一個應(yīng)答,表示它可以訪問總線。該電路于是中斷請求,開始使用總線。
不同時鐘域電路使用的握手協(xié)議有兩種基本類型:全握手(Full-handshake)和部分握手(partial-handshake)。每種類型的握手都要用同步器,每種都各有自己的優(yōu)缺點。對全握手信號,雙方電路在聲明或中止各自的握手信號前都要等待對方的響應(yīng)(圖 4)。首先,電路 A 聲明它的請求信號,然后,電路 B 檢測到該請求信號有效后,聲明它的響應(yīng)信號。當(dāng)電路 A 檢測到響應(yīng)信號有效后,中止自己的請求信號。最后,當(dāng)電路 B 檢測到請求無效后,它中止自己的響應(yīng)信號。除非電路 A 檢測到無效的響應(yīng)信號,否則它不會再聲明新的請求信號。
圖4,對全握手信號,雙方電路在聲明或中止各自的握手信號前都要等待對方的響應(yīng)。
這種類型的握手使用了電平同步器。設(shè)計人員將這種技術(shù)用在如下情況:響應(yīng)電路(電路 B)需要告知請求電路(電路 A)它可以處理請求。這種握手方法要求請求電路延遲它的下一個請求,直到它檢測到響應(yīng)信號無效??梢杂媒?jīng)驗估算法判斷這個協(xié)議的時序:信號跨越一個時鐘域要花兩個時鐘周期的時間,信號在跨越多個時鐘域前被電路寄存。全部的時間序列是:A 時鐘域中最多五個周期加上 B 時鐘域最多六個周期。全握手類型很強健,因為通過檢測請求與響應(yīng)信號,每個電路都清楚地知道對方的狀態(tài)。這種方式的不足之處是完成所有交互的整個過程要花費很多時鐘周期。
另一種類型是部分握手,它可以縮短這些事件的過程。使用部分握手信號時,通信雙方的電路都不等對方的響應(yīng)就中止各自的信號,并繼續(xù)執(zhí)行握手命令序列。部分握手類型比全握手類型在健壯性方面稍弱,因為握手信號并不指示各自電路的狀態(tài),每一電路都必須保存狀態(tài)信息(在全握手信號里這個信息被送出去)。但是,由于無需等待其它電路的響應(yīng),完整的事件序列花費時間較少。
當(dāng)使用部
分握手信號方式時,響應(yīng)的電路必須以正確的時序產(chǎn)生它的信號。如果響應(yīng)電路要
求先處理完一個請求,然后才能處理下一個請求,則響應(yīng)信號的時序就很重要。電路用它的響應(yīng)信號來指示它的處理任務(wù)何時完成。一種部分握手方法混合了電平與脈沖信號,而其它的方法則只使用脈沖信號。
在第一種部分握手方法中,電路 A 以有效電平聲明其請求信號,電路 B 則以一個單時鐘寬度脈沖作為響應(yīng)。此時,電路 B 并不關(guān)心電路 A 何時中止它的請求信號。但為了使這種方法成立,電路 A 中止請求信號至少要有一個時鐘周期長,否則,電路 B 就不能區(qū)別前一個請求和新的請求。在這種握手方式下,電路 B 為請求信號使用一個電平同步器,電路 A 為響應(yīng)信號使用一個脈沖同步器。只有當(dāng)電路 B 檢測到請求信號時才發(fā)出響應(yīng)脈沖。這種情況可以使電路 A 通過控制其請求信號的時序,控制同步器接收到的脈沖間隔(圖 5)。同樣可以用經(jīng)驗估算法確定時序,即信號跨越一個時鐘域要花兩個時鐘周期并且在跨越時鐘域前被電路寄存。
圖5,在一種部分握手方法中,電路 A 發(fā)出它的請求信號,電路 B 則以一個單時鐘寬度脈沖作為響應(yīng)。
全部的序列為 A 時鐘域最多三個周期加上 B 時鐘域最多五個周期。這種部分握手方法比全握手方法在 A、B 兩個時鐘域分別少用了兩個和一個時鐘周期。如果采用第二種部分握手方法可以再減少一些時鐘周期,此時電路 A 用一個單時鐘寬度脈沖發(fā)出它的請求,而電路 B 也用一個單時鐘寬度脈沖響應(yīng)這個請求。這種情況下,兩個電路都需要保存狀態(tài),以指示請求正待處理。
圖6,這種握手類型使用的是脈沖同步器,但如果其中一個電路時鐘比另一個電路時鐘快兩倍,則可以用邊沿檢測同步器來代替。
這種握手類型使用的是脈沖同步器,但如果其中一個電路時鐘比另一個電路時鐘快兩倍,則可以用邊沿檢測同步器來代替(圖 6)。完整的時序是:A 時鐘域最多兩個周期加上 B 時鐘域最多三個周期。所以這種部分握手技術(shù)與全握手方法相比,在 A 時鐘域少用三個時鐘周期,在 B 時鐘域也少用三個時鐘周期。同時,也比第一種部分握手方法分別在 A、B 時鐘域快了一個和兩個周期(表 2)。這些握手協(xié)議針對的都是跨越時鐘域的單一信號。但當(dāng)幾組信號要跨越時鐘域時,設(shè)計人員就需要使用更加復(fù)雜的信號傳送方法。
表 2
數(shù)據(jù)路徑設(shè)計
在進(jìn)行信號同步時有一個重要的規(guī)則,那就是不應(yīng)當(dāng)在設(shè)計中的多個地方對同一信號進(jìn)行同步,即單個信號扇出至多個同步器。因為同步要花一到兩個時鐘周期,設(shè)計者不能確切地預(yù)測到每個信號何時跨越一個時鐘域。此外,在新時鐘域中一組經(jīng)同步后的信號其時序是不定的,因為同步延遲可以是一到兩個時鐘周期,這與輸入信號到達(dá)同步器的時間有關(guān)。這種情況會在各個同步信號間形成一種“競爭狀況”。這種競爭狀況在需要跨越時鐘域傳輸?shù)亩嘟M信號間也會發(fā)生,例如數(shù)據(jù)總線、地址總線和控制總線等。因此,不能對組中的每個信號單獨使用同步器,也不能對數(shù)據(jù)或地址總線的每一位單獨使用同步器,因為在新的時鐘域中,要求每個信號同時有效。
一種解決總線同步問題的方法是使用一個保持寄存器和握手信號。這種電路包括一個保持信號總線的寄存器,以及一個握手機制(圖 7)。握手信號指示新時鐘域的電路何時可以對總線采樣,以及源電路何時可以更換當(dāng)前寄存器中保存的內(nèi)容。
圖7,一種數(shù)據(jù)路徑同步器設(shè)計使用一個保持寄存器和握手信令。
在這種設(shè)計中,傳輸電路將數(shù)據(jù)(信號總線)存儲在保持寄存器,同時發(fā)出請求信號。這兩個動作可以同時發(fā)生,因為請求信號至少要花一個時鐘周期才能讓接收電路檢測到它(最小的握手-同步延遲)。當(dāng)接收電路采樣到數(shù)據(jù)(信號總線)時,它發(fā)出一個響應(yīng)信號。這種設(shè)計使用了全握手方法,所以要花較長時間才能完成整個傳輸。對接收電路而言,使用全握手信號的設(shè)計有較大的時間窗口用于對信號總線采樣,因而效率較低。如用部分握手方法代替全握手方法則可以加快傳輸速度。
用這種總線同步方式,你可以同步握手信號,但不能同步信號總線。信號總線來自于保持寄存器,它在接收電路采樣前一直保持穩(wěn)定。注意,如果傳輸電路向接收電路提交數(shù)據(jù)太快以致來不及處理,則應(yīng)用中的總線同步可能不起作用。
高級數(shù)據(jù)路徑設(shè)計
在許多情況下,數(shù)據(jù)在跨越時鐘域時需要“堆積”起來,因此使用單個保持寄存器無法完成工作。例如一種情況是某個傳輸電路猝發(fā)式發(fā)送數(shù)據(jù),接收電路來不及采樣。另一種情況是接收電路采樣速度超出傳輸電路發(fā)送數(shù)據(jù)的速度,但采樣的數(shù)據(jù)寬度不夠。這些情況就要使用 FIFO 了。
基本上,設(shè)計者使用 FIFO 有兩個目的:速度匹配或數(shù)據(jù)寬度匹配。在速度匹配時,F(xiàn)IFO 較快的端口處理猝發(fā)的數(shù)據(jù)傳輸,而較慢的端口則維持恒定的數(shù)據(jù)流。但是,雖然訪問方式和速度不同,但進(jìn)出 FIFO 的平均數(shù)據(jù)速率必須是相同的,否則 FIFO 就會出現(xiàn)上溢(overflow)或下溢(underflow)問題。與單寄存器設(shè)計相同,F(xiàn)IFO 將數(shù)據(jù)保存在寄存器或存儲器中,同時同步狀態(tài)信號,判斷何時可以把數(shù)據(jù)寫入 FIFO 或從 FIFO 中讀出。
在速度匹配應(yīng)用中,每個端口(讀或?qū)?的時鐘不同。FIFO 中的寄存器使用寫端口時鐘,就像保持寄存器使用電路時鐘來改變寄存器內(nèi)容一樣。信號同步發(fā)生在指針邏輯中,而且比握手信號要復(fù)雜得多。
模擬信號相關(guān)文章:什么是模擬信號
電路相關(guān)文章:電路分析基礎(chǔ)
脈沖點火器相關(guān)文章:脈沖點火器原理
評論