我們?cè)?a href="http://wenjunhu.com/tags/asic/" target="_blank">ASIC或FPGA系統(tǒng)設(shè)計(jì)中,常常會(huì)遇到需要在多個(gè)時(shí)鐘域下交互傳輸?shù)膯栴},時(shí)序問題也隨著系統(tǒng)越復(fù)雜而變得更為嚴(yán)重。
跨時(shí)鐘域處理技術(shù)是IC設(shè)計(jì)中非常重要的一個(gè)部分,我們需要學(xué)習(xí)并應(yīng)用一些常用的處理方法,從而提高電路運(yùn)行的穩(wěn)定性,使得整個(gè)系統(tǒng)更魯棒。
下面考慮ASIC設(shè)計(jì)場景,為了滿足系統(tǒng)功能需求,整個(gè)系統(tǒng)由不同的功能塊構(gòu)成,例如:
存儲(chǔ)器
浮點(diǎn)引擎
存儲(chǔ)控制器
總線接口
高速接口
假如考慮處理器和存儲(chǔ)器的工作頻率為500MHz,帶有存儲(chǔ)器控制器的浮點(diǎn)引擎的工作頻率為666.66MHz,總線接口和高速接口工作頻率為250MHz,則該設(shè)計(jì)具有多個(gè)時(shí)鐘,被視為多個(gè)時(shí)鐘域的設(shè)計(jì)。
01多時(shí)鐘域設(shè)計(jì)常用方法
如前所述,多個(gè)時(shí)鐘域的處理問題是在傳輸數(shù)據(jù)和控制信號(hào)時(shí),它對(duì)數(shù)據(jù)完整性有影響。下面的策略在ASIC設(shè)計(jì)階段是有用的。
嘗試為數(shù)據(jù)和控制路徑優(yōu)化制定策略。
嘗試創(chuàng)建多個(gè)時(shí)鐘域組來定義策略。
在多個(gè)時(shí)鐘域之間傳遞控制信號(hào)時(shí),嘗試使用同步器的策略。
嘗試使用FIFO和緩存的數(shù)據(jù)路徑同步器來提高數(shù)據(jù)完整性。
現(xiàn)在討論重要的跨時(shí)鐘處理問題與策略及其在多時(shí)鐘域設(shè)計(jì)中的使用。
02多時(shí)鐘域設(shè)計(jì)有哪些問題
如果我們考慮適度的門數(shù)設(shè)計(jì)或使用單時(shí)鐘工作的處理器核心和設(shè)計(jì),它可能在布局階段由于額外的互連延遲而產(chǎn)生時(shí)序違例。但是這種設(shè)計(jì)可能會(huì)通過架構(gòu)、RTL、綜合和基于工具的優(yōu)化調(diào)整來滿足時(shí)序和性能。
現(xiàn)在考慮圖中所示的需要多個(gè)時(shí)鐘的設(shè)計(jì),讓我們?cè)囍斫庠O(shè)計(jì)中的問題。
1.由于多個(gè)時(shí)鐘域,數(shù)據(jù)完整性是主要問題,設(shè)計(jì)需要通過數(shù)據(jù)完整性檢查。
2.沒有使用同步器的時(shí)鐘域邊界上的觸發(fā)器將由于建立和保持違例而存在亞穩(wěn)態(tài)問題。
3.該設(shè)計(jì)將存在時(shí)序違例,并且很難強(qiáng)制時(shí)序電路輸出進(jìn)入有效的合法狀態(tài)。
讓我們用具有多個(gè)時(shí)鐘域的時(shí)序電路來理解上面的內(nèi)容。由于到達(dá)clk1和clk2之間的相差,第二個(gè)時(shí)鐘域的觸發(fā)器將有建立和保持違例,即觸發(fā)器輸出data_out將是亞穩(wěn)態(tài)的。原因是時(shí)鐘域1的q輸出在clk2活動(dòng)邊的建立和保持窗口期間可能會(huì)改變,因此data_out將被迫進(jìn)入非法狀態(tài),即亞穩(wěn)態(tài)。如圖1所示。
圖1 多時(shí)鐘域概念
時(shí)序如圖2所示。
圖2 亞穩(wěn)態(tài)輸出
03架構(gòu)設(shè)計(jì)策略
考慮圖3中有三個(gè)時(shí)鐘域的設(shè)計(jì),表1描述了不同時(shí)鐘頻率下的時(shí)鐘域信息。
圖3 多時(shí)鐘域架構(gòu)
表1 多時(shí)鐘域時(shí)鐘組
Clock domain control |
Frequency inMHz |
Description |
clk1 | 500 | The clock domain one operating at frequency of 500 MHz |
Clk2 | 666.66 | The clock domain one operating at frequency of 666.66 MHz |
Clk3 | 250 | The clock domain one operating at frequency of 250 MHz |
作為一名IC設(shè)計(jì)人員或架構(gòu)師,我們需要考慮多個(gè)時(shí)鐘域設(shè)計(jì)的整體數(shù)據(jù)完整性檢查,并需要為數(shù)據(jù)路徑和控制路徑提供干凈的時(shí)序。
考慮到這一點(diǎn),我們需要設(shè)計(jì)同步器來在多個(gè)時(shí)鐘域設(shè)計(jì)之間傳輸數(shù)據(jù)。當(dāng)在多個(gè)時(shí)鐘域設(shè)計(jì)之間傳遞控制信號(hào)時(shí),電平、多路復(fù)用器和脈沖等同步器是有用的。異步FIFO可以用作同步器,在時(shí)鐘域和數(shù)據(jù)路徑之間傳輸數(shù)據(jù)。
以下是我們?cè)谶M(jìn)行多時(shí)鐘域設(shè)計(jì)時(shí)應(yīng)該使用的一些準(zhǔn)則,以消除CDC錯(cuò)誤。
避免亞穩(wěn)態(tài):在傳遞控制信號(hào)信息時(shí),使用寄存器輸出,因?yàn)檫@有助于避免毛刺和冒險(xiǎn)。通過在傳遞控制信號(hào)時(shí)使用寄存的輸出邏輯,可以避免單時(shí)鐘周期內(nèi)的多次轉(zhuǎn)換。亞穩(wěn)態(tài)阻塞邏輯如圖4所示。
圖4 亞穩(wěn)態(tài)阻塞邏輯
使用MCP:強(qiáng)烈推薦多周期路徑策略,以避免在多個(gè)時(shí)鐘域之間傳遞數(shù)據(jù)和控制信號(hào)信息時(shí)的亞穩(wěn)態(tài)問題。在MCP中,采用的策略是建立控制和數(shù)據(jù)對(duì),將具有單比特控制信號(hào)的多比特?cái)?shù)據(jù)從發(fā)送時(shí)鐘域傳遞到接收時(shí)鐘域。利用脈沖同步器可以在接收時(shí)鐘域?qū)刂菩畔⑦M(jìn)行采樣,并在有或沒有同步器的情況下將數(shù)據(jù)傳遞到接收時(shí)鐘域。該技術(shù)可以在多個(gè)周期內(nèi)保持?jǐn)?shù)據(jù)的穩(wěn)定值,并且可以利用脈沖同步器產(chǎn)生的同步信號(hào)在接收時(shí)鐘域中采樣。跨越時(shí)鐘域的邊界,以下是需要考慮的關(guān)鍵點(diǎn)。
(a)控制信號(hào)必須使用多級(jí)同步器進(jìn)行同步。
(b)控制信號(hào)應(yīng)無冒險(xiǎn)和毛刺。
(c)應(yīng)該有跨越時(shí)鐘邊界的過渡。
(d)控制信號(hào)應(yīng)至少穩(wěn)定一個(gè)時(shí)鐘周期。
MCP策略如圖5所示。
圖5 MCP策略
采用FIFO:異步FIFO是傳遞多位控制信號(hào)或數(shù)據(jù)信息的有效技術(shù)。在這種技術(shù)中,發(fā)送時(shí)鐘域在FIFO未滿時(shí)將數(shù)據(jù)寫入FIFO內(nèi)存緩沖區(qū),接收時(shí)鐘域在FIFO未空時(shí)從FIFO緩沖區(qū)讀取數(shù)據(jù)。
使用格雷碼計(jì)數(shù)器:在大多數(shù)具有跨時(shí)鐘域(CDC)的ASIC設(shè)計(jì)中,跨時(shí)鐘域傳遞計(jì)數(shù)器值是至關(guān)重要的。如果二進(jìn)制計(jì)數(shù)器用于在時(shí)鐘域邊界交換數(shù)據(jù),那么由于一個(gè)或多個(gè)比特的轉(zhuǎn)換,數(shù)據(jù)轉(zhuǎn)換很容易出錯(cuò)。在這種情況下,建議使用格雷碼計(jì)數(shù)器在跨時(shí)鐘邊界傳遞數(shù)據(jù)。在接收端時(shí)鐘域,采用格雷碼到二進(jìn)制碼的轉(zhuǎn)換,將原始數(shù)據(jù)恢復(fù)。
設(shè)計(jì)分區(qū):在為多個(gè)時(shí)鐘域設(shè)計(jì)邏輯時(shí),通過使用時(shí)鐘組對(duì)設(shè)計(jì)進(jìn)行分區(qū)。
時(shí)鐘命名約定:為了更好地識(shí)別時(shí)鐘源,建議使用時(shí)鐘命名約定。時(shí)鐘的命名約定應(yīng)該由有意義的前綴/后綴支持。例如,發(fā)送時(shí)鐘域使用clk_s,接收時(shí)鐘域使用clk_r。
同步復(fù)位:對(duì)于ASIC設(shè)計(jì),強(qiáng)烈建議使用同步復(fù)位器。
避免保持時(shí)間違例:為了避免保持時(shí)間違例,建議仔細(xì)查看體系結(jié)構(gòu),并制定在多個(gè)時(shí)鐘周期之間傳遞穩(wěn)定數(shù)據(jù)的策略。
避免丟失相關(guān)性:在時(shí)鐘域邊界上,有幾種可能導(dǎo)致丟失相關(guān)性的方式。比如有:
(a)總線上的多個(gè)比特
(b)多個(gè)握手信號(hào)
(c)不相關(guān)的信號(hào)
為了避免這種情況,使用時(shí)鐘意圖驗(yàn)證技術(shù),因?yàn)檫@些技術(shù)將確保在時(shí)鐘邊界上傳遞多位信號(hào)。
04控制路徑與同步
本節(jié)討論ASIC設(shè)計(jì)中使用的各種同步器和策略。
電平或多觸發(fā)同步器
在多個(gè)時(shí)鐘域之間傳遞的控制信號(hào)主要由快時(shí)鐘域向慢時(shí)鐘域傳遞,會(huì)出現(xiàn)時(shí)序錯(cuò)誤,設(shè)計(jì)中會(huì)出現(xiàn)時(shí)序違例。因此,在體系結(jié)構(gòu)設(shè)計(jì)期間,更好的策略是確定多個(gè)時(shí)鐘域設(shè)計(jì)的接口邊界,然后在RTL設(shè)計(jì)中使用同步器的策略。
當(dāng)在多個(gè)時(shí)鐘域之間傳遞控制信號(hào)時(shí),可以通過設(shè)計(jì)電平同步器(可能使用兩個(gè)或三個(gè)觸發(fā)器)來解決亞穩(wěn)態(tài)問題。圖6使用了兩級(jí)電平同步器邏輯。
圖6 控制路徑中有二級(jí)電平同步器
如圖6所示,利用電平同步器將控制信號(hào)q1從時(shí)鐘域1傳遞到時(shí)鐘域2。主要的設(shè)計(jì)策略是將有效的輸出q1傳遞到第二個(gè)時(shí)鐘域。電平同步器在第二個(gè)時(shí)鐘域,對(duì)輸出q1進(jìn)行采樣。由于違反了設(shè)置或保持時(shí)間,第二個(gè)時(shí)鐘域的輸入觸發(fā)器將是亞穩(wěn)態(tài)的,這應(yīng)該通過設(shè)置EDA工具屬性來忽略。輸出的data_out是有效的數(shù)據(jù),由于使用了同步器,本設(shè)計(jì)有兩個(gè)時(shí)鐘的延遲。
圖6所示的設(shè)計(jì)時(shí)序描述如下(圖7所示)。
圖7 使用兩級(jí)同步器的時(shí)序
如圖7所示,q1由第一個(gè)時(shí)鐘域輸出。在clk2的上升沿上,觸發(fā)器FF1的輸出q2將由于建立或保持時(shí)間違例而進(jìn)入亞穩(wěn)態(tài)。但是觸發(fā)器FF2輸出在接下來的時(shí)鐘邊是data_out是有效的輸出。使用該命令設(shè)置false path:
set_false_path –from FF0/q –to FF1/q
使用這兩個(gè)觸發(fā)器的電平同步器如圖8所示,可以在設(shè)計(jì)中采用。更好的策略是在RTL設(shè)計(jì)期間將電平同步器的RTL描述作為單獨(dú)的模塊。引入的延遲取決于將輸出驅(qū)動(dòng)到有效合法狀態(tài)所需的觸發(fā)器數(shù)。
圖8 電平同步器
下面將對(duì)RTL描述部分進(jìn)行描述:
always@(posedgeclk) begin q<=data_in; data_out<=q end
在ASIC設(shè)計(jì)中,當(dāng)控制信息需要從快時(shí)鐘域傳遞到慢時(shí)鐘域時(shí),就會(huì)出現(xiàn)數(shù)據(jù)完整性問題。該問題是由于在將控制信號(hào)從時(shí)鐘域1傳遞到時(shí)鐘域2時(shí)觸發(fā)器輸出的合法狀態(tài)不收斂造成的。
利用脈沖展寬器可以解決從快時(shí)鐘域到慢時(shí)鐘域的采樣問題。工作在正時(shí)鐘邊緣的電平脈沖發(fā)生器如圖9所示。
圖9 電平到脈沖轉(zhuǎn)換
另一種機(jī)制是信號(hào)的握手,可以用來實(shí)現(xiàn)數(shù)據(jù)的收斂。
如圖10所示,將時(shí)鐘域2的采樣信號(hào)作為握手信號(hào)反饋到時(shí)鐘域1。這種握手機(jī)制類似于對(duì)較快時(shí)鐘域1的確認(rèn)或通知,較快時(shí)鐘域傳遞的控制信號(hào)被較慢時(shí)鐘域成功采樣。在實(shí)際的大多數(shù)場景中,都采用了這種機(jī)制,即使較快的時(shí)鐘域在收到較慢時(shí)鐘域的有效通知或確認(rèn)信號(hào)后,也可以發(fā)送另一個(gè)控制信號(hào)。
圖10 控制信號(hào)的握手機(jī)制
脈沖同步器
這種類型的同步器使用多級(jí)電平同步器,其中兩級(jí)電平同步器的輸出由輸出觸發(fā)器采樣。這種同步器也稱為切換同步器,用于將發(fā)送時(shí)鐘域產(chǎn)生的脈沖同步到目標(biāo)時(shí)鐘域。當(dāng)將數(shù)據(jù)從較快的時(shí)鐘域傳遞到較慢的時(shí)鐘域時(shí),如果使用兩級(jí)電平同步器,脈沖可能跳過。在這種情況下,脈沖同步器是有效和有用的。脈沖同步器圖如圖11所示。
圖11 脈沖同步器
Mux同步器
將時(shí)鐘域1的信息發(fā)送到時(shí)鐘域2時(shí),使用這對(duì)數(shù)據(jù)和控制信號(hào)。使用多bit數(shù)據(jù)和使用單bit控制信號(hào)。在接收端,根據(jù)發(fā)送時(shí)鐘和接收時(shí)鐘的比值,使用電平或脈沖同步器為多路復(fù)用器產(chǎn)生控制信號(hào)。這種技術(shù)類似于MCP,并且如果數(shù)據(jù)在跨越時(shí)鐘邊界的多個(gè)時(shí)鐘周期中是穩(wěn)定的,則這種技術(shù)是有效的。如圖12所示。
圖12 Mux同步器
05多bit數(shù)據(jù)傳輸?shù)奶魬?zhàn)
在多個(gè)時(shí)鐘域之間傳遞多個(gè)控制信號(hào)是一個(gè)重要的挑戰(zhàn)。問題是這些控制信號(hào)到達(dá)的時(shí)間不同。如果這些控制信號(hào)的到達(dá)沒有得到正確的管理,那么真正的問題是由于傾斜。考慮圖13所示的場景,其中“enable ” “l(fā)oad_en ”和“ready ”需要從一個(gè)時(shí)鐘域傳遞到另一個(gè)時(shí)鐘域。在這種情況下,如果使用獨(dú)立的電平同步器,則接收端可能會(huì)因?yàn)樾盘?hào)的歪斜(信號(hào)到達(dá)時(shí)間不同)而出現(xiàn)同步失敗。
圖13 對(duì)接收端時(shí)鐘域內(nèi)的多個(gè)信號(hào)進(jìn)行采樣
考慮其中一個(gè)控制信號(hào),例如enable到達(dá)較晚,則控制路徑中可能存在同步失敗,為了避免這組3個(gè)控制信號(hào),嘗試在時(shí)鐘域之間傳遞共同信號(hào)。策略如圖14所示。
圖14 固定在多時(shí)鐘域內(nèi)傳遞的控制信號(hào)
06數(shù)據(jù)路徑同步
用于在時(shí)鐘域之間傳遞多個(gè)數(shù)據(jù)bit的技術(shù)是:
握手機(jī)制
異步FIFO緩存
格雷編碼
握手機(jī)制
在時(shí)鐘域之間傳遞多比特信號(hào)時(shí),握手機(jī)制的使用是一種有用的技術(shù)。如圖15所示,發(fā)射機(jī)工作在clk1,接收機(jī)工作在clk2。數(shù)據(jù)可以從發(fā)射機(jī)傳送到接收機(jī)。這里要注意,該握手與AXI總線的握手略有不同。
接收端時(shí)鐘域可以產(chǎn)生數(shù)據(jù)有效(data valid)和設(shè)備就緒(ready)等握手信號(hào)。因此,目的是通知發(fā)送器總線上還存在有效數(shù)據(jù)可用,設(shè)備還沒有準(zhǔn)備好接收新數(shù)據(jù)。
圖15 握手機(jī)制框圖
握手信號(hào)datavalid它是來自時(shí)鐘域2的主動(dòng)高電平握手信號(hào),表示傳輸?shù)臄?shù)據(jù)是有效數(shù)據(jù),接收端只需要很少的時(shí)鐘就可以對(duì)該數(shù)據(jù)進(jìn)行采樣。傳輸數(shù)據(jù)時(shí)的時(shí)鐘延遲取決于同步器中使用的觸發(fā)器的數(shù)量,而延遲是握手機(jī)制的最大缺點(diǎn)之一。
握手信號(hào)deviceready它表明當(dāng)數(shù)據(jù)有效的時(shí)候,接收端已經(jīng)準(zhǔn)備好接收新數(shù)據(jù),并且設(shè)備ready好了可以拉高通知發(fā)送端將新數(shù)據(jù)放到數(shù)據(jù)總線上。
如果我們有多個(gè)時(shí)鐘域的FSM控制器,那么設(shè)計(jì)架構(gòu)來通過使用請(qǐng)求(request)和確認(rèn)(ack)信號(hào)建立同步。FSM控制的握手機(jī)制如圖16所示。
圖16 FSM握手機(jī)制
異步FIFO同步器
異步FIFO是有用的,因?yàn)閿?shù)據(jù)路徑同步器是用來交換多個(gè)時(shí)鐘域之間的數(shù)據(jù)。如果FIFO內(nèi)存緩沖區(qū)沒有滿,發(fā)送端時(shí)鐘域或發(fā)送端時(shí)鐘域可以使用write_clk將數(shù)據(jù)寫入FIFO內(nèi)存緩沖區(qū),如果FIFO內(nèi)存緩沖區(qū)沒有空,接收端時(shí)鐘域可以使用read_clk讀取數(shù)據(jù)(圖17)。
FIFO由以下幾個(gè)塊組成:
Memory:內(nèi)存緩沖區(qū)
Write Clock Domain:在write_clk上工作的寫時(shí)鐘域邏輯。
Read clock Domain:讀時(shí)鐘域邏輯,它正在read_clk上工作。
Flag Logic:生成標(biāo)志邏輯empty和full。
FIFO和相關(guān)的邏輯塊如圖17所示。
圖17 FIFO框圖
如何得到FIFO的深度?
考慮寫時(shí)鐘域的工作頻率為250 MHz,讀時(shí)鐘域的工作頻率為100 MHz,沒有延遲,然后傳輸50字節(jié)的突發(fā)長度,可以使用以下計(jì)算:
Writeclocktime:T1=1/250MHz=4ns. TheTimeRequiredto WriteBurstof50Bytesofdata=4ns*50=200ns ReadClockTime:T2=1/100MHz=10ns NumberofReadswith10ns=200ns/10ns=20 Depth of FIFO = 50–20 = 30 Bytes.
如果指定了讀和寫延遲,那么嘗試修改上面的步驟來獲得FIFO的深度。
格雷編碼
在傳遞多個(gè)位的數(shù)據(jù)或控制信號(hào)時(shí),必須使用格雷編碼技術(shù),因?yàn)檫@種技術(shù)保證了兩個(gè)連續(xù)的數(shù)字只有一bit的變化。例如,如果4bit二進(jìn)制數(shù)據(jù)需要在多個(gè)時(shí)鐘域之間傳遞,那么一個(gè)或多個(gè)bit轉(zhuǎn)換,因此需要更多的功率和出錯(cuò)的機(jī)會(huì)。因此,為了避免這種情況,提高性能,在發(fā)送端或發(fā)送端時(shí)鐘域采用二進(jìn)制到格雷碼轉(zhuǎn)換邏輯。這保證了在時(shí)鐘邊界上只有一bit變化。為了得到接收端時(shí)鐘域的原始二進(jìn)制數(shù)據(jù),采用格雷碼到二進(jìn)制碼的轉(zhuǎn)換。該技術(shù)如圖18所示。
圖18 格雷編碼技術(shù)
07總結(jié)
總結(jié)幾個(gè)要點(diǎn):
在多個(gè)時(shí)鐘域之間傳遞數(shù)據(jù)時(shí),設(shè)計(jì)數(shù)據(jù)路徑同步器。
在多個(gè)時(shí)鐘域之間傳遞控制信號(hào)時(shí),需要設(shè)計(jì)控制路徑同步器。
在通過時(shí)鐘域傳遞數(shù)據(jù)和控制信號(hào)信息時(shí),強(qiáng)烈建議使用多周期路徑來避免亞穩(wěn)態(tài)問題。
傳遞多bit控制或數(shù)據(jù)信息的常用而有效的技術(shù)是使用異步FIFO。
對(duì)于在多個(gè)時(shí)鐘域之間傳遞的多位控制信號(hào),采用分組技術(shù)來避免由于到達(dá)時(shí)間不同而產(chǎn)生的歪斜。
-
FPGA
+關(guān)注
關(guān)注
1629文章
21738瀏覽量
603464 -
asic
+關(guān)注
關(guān)注
34文章
1200瀏覽量
120510 -
存儲(chǔ)器
+關(guān)注
關(guān)注
38文章
7492瀏覽量
163854 -
IC設(shè)計(jì)
+關(guān)注
關(guān)注
38文章
1296瀏覽量
103965 -
多時(shí)鐘域
+關(guān)注
關(guān)注
0文章
6瀏覽量
6003
原文標(biāo)題:IC設(shè)計(jì)中的多時(shí)鐘域處理方法總結(jié)
文章出處:【微信號(hào):處芯積律,微信公眾號(hào):處芯積律】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論