精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

IC設計中的多時鐘域處理方法總結

sanyue7758 ? 來源:處芯積律 ? 2023-04-06 10:56 ? 次閱讀

我們在ASICFPGA系統設計中,常常會遇到需要在多個時鐘域下交互傳輸的問題,時序問題也隨著系統越復雜而變得更為嚴重。

跨時鐘域處理技術是IC設計中非常重要的一個部分,我們需要學習并應用一些常用的處理方法,從而提高電路運行的穩定性,使得整個系統更魯棒。

下面考慮ASIC設計場景,為了滿足系統功能需求,整個系統由不同的功能塊構成,例如:

處理器

存儲器

浮點引擎

存儲控制器

總線接口

高速接口

假如考慮處理器和存儲器的工作頻率為500MHz,帶有存儲器控制器的浮點引擎的工作頻率為666.66MHz,總線接口和高速接口工作頻率為250MHz,則該設計具有多個時鐘,被視為多個時鐘域的設計。

01多時鐘域設計常用方法

如前所述,多個時鐘域的處理問題是在傳輸數據和控制信號時,它對數據完整性有影響。下面的策略在ASIC設計階段是有用的。

嘗試為數據和控制路徑優化制定策略。

嘗試創建多個時鐘域組來定義策略。

在多個時鐘域之間傳遞控制信號時,嘗試使用同步器的策略。

嘗試使用FIFO和緩存的數據路徑同步器來提高數據完整性。

現在討論重要的跨時鐘處理問題與策略及其在多時鐘域設計中的使用。

02多時鐘域設計有哪些問題

如果我們考慮適度的門數設計或使用單時鐘工作的處理器核心和設計,它可能在布局階段由于額外的互連延遲而產生時序違例。但是這種設計可能會通過架構、RTL、綜合和基于工具的優化調整來滿足時序和性能。

現在考慮圖中所示的需要多個時鐘的設計,讓我們試著理解設計中的問題。

1.由于多個時鐘域,數據完整性是主要問題,設計需要通過數據完整性檢查。

2.沒有使用同步器的時鐘域邊界上的觸發器將由于建立和保持違例而存在亞穩態問題。

3.該設計將存在時序違例,并且很難強制時序電路輸出進入有效的合法狀態。

讓我們用具有多個時鐘域的時序電路來理解上面的內容。由于到達clk1和clk2之間的相差,第二個時鐘域的觸發器將有建立和保持違例,即觸發器輸出data_out將是亞穩態的。原因是時鐘域1的q輸出在clk2活動邊的建立和保持窗口期間可能會改變,因此data_out將被迫進入非法狀態,即亞穩態。如圖1所示。

fe163fca-d305-11ed-bfe3-dac502259ad0.png

圖1 多時鐘域概念

時序如圖2所示。

fe24bfd2-d305-11ed-bfe3-dac502259ad0.png

圖2 亞穩態輸出

03架構設計策略

考慮圖3中有三個時鐘域的設計,表1描述了不同時鐘頻率下的時鐘域信息。

fe322dca-d305-11ed-bfe3-dac502259ad0.png

圖3 多時鐘域架構

表1 多時鐘域時鐘組

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設計人員或架構師,我們需要考慮多個時鐘域設計的整體數據完整性檢查,并需要為數據路徑和控制路徑提供干凈的時序。

考慮到這一點,我們需要設計同步器來在多個時鐘域設計之間傳輸數據。當在多個時鐘域設計之間傳遞控制信號時,電平、多路復用器和脈沖等同步器是有用的。異步FIFO可以用作同步器,在時鐘域和數據路徑之間傳輸數據。

以下是我們在進行多時鐘域設計時應該使用的一些準則,以消除CDC錯誤。

避免亞穩態:在傳遞控制信號信息時,使用寄存器輸出,因為這有助于避免毛刺和冒險。通過在傳遞控制信號時使用寄存的輸出邏輯,可以避免單時鐘周期內的多次轉換。亞穩態阻塞邏輯如圖4所示。

fe3d446c-d305-11ed-bfe3-dac502259ad0.png

圖4 亞穩態阻塞邏輯

使用MCP:強烈推薦多周期路徑策略,以避免在多個時鐘域之間傳遞數據和控制信號信息時的亞穩態問題。在MCP中,采用的策略是建立控制和數據對,將具有單比特控制信號的多比特數據從發送時鐘域傳遞到接收時鐘域。利用脈沖同步器可以在接收時鐘域對控制信息進行采樣,并在有或沒有同步器的情況下將數據傳遞到接收時鐘域。該技術可以在多個周期內保持數據的穩定值,并且可以利用脈沖同步器產生的同步信號在接收時鐘域中采樣??缭綍r鐘域的邊界,以下是需要考慮的關鍵點。

(a)控制信號必須使用多級同步器進行同步。

(b)控制信號應無冒險和毛刺。

(c)應該有跨越時鐘邊界的過渡。

(d)控制信號應至少穩定一個時鐘周期。

MCP策略如圖5所示。

fe55b402-d305-11ed-bfe3-dac502259ad0.png

圖5 MCP策略

采用FIFO:異步FIFO是傳遞多位控制信號或數據信息的有效技術。在這種技術中,發送時鐘域在FIFO未滿時將數據寫入FIFO內存緩沖區,接收時鐘域在FIFO未空時從FIFO緩沖區讀取數據。

使用格雷碼計數器:在大多數具有跨時鐘域(CDC)的ASIC設計中,跨時鐘域傳遞計數器值是至關重要的。如果二進制計數器用于在時鐘域邊界交換數據,那么由于一個或多個比特的轉換,數據轉換很容易出錯。在這種情況下,建議使用格雷碼計數器在跨時鐘邊界傳遞數據。在接收端時鐘域,采用格雷碼到二進制碼的轉換,將原始數據恢復。

設計分區:在為多個時鐘域設計邏輯時,通過使用時鐘組對設計進行分區。

時鐘命名約定:為了更好地識別時鐘源,建議使用時鐘命名約定。時鐘的命名約定應該由有意義的前綴/后綴支持。例如,發送時鐘域使用clk_s,接收時鐘域使用clk_r。

同步復位:對于ASIC設計,強烈建議使用同步復位器。

避免保持時間違例:為了避免保持時間違例,建議仔細查看體系結構,并制定在多個時鐘周期之間傳遞穩定數據的策略。

避免丟失相關性:在時鐘域邊界上,有幾種可能導致丟失相關性的方式。比如有:

(a)總線上的多個比特

(b)多個握手信號

(c)不相關的信號

為了避免這種情況,使用時鐘意圖驗證技術,因為這些技術將確保在時鐘邊界上傳遞多位信號。

04控制路徑與同步

本節討論ASIC設計中使用的各種同步器和策略。

電平或多觸發同步器

在多個時鐘域之間傳遞的控制信號主要由快時鐘域向慢時鐘域傳遞,會出現時序錯誤,設計中會出現時序違例。因此,在體系結構設計期間,更好的策略是確定多個時鐘域設計的接口邊界,然后在RTL設計中使用同步器的策略。

當在多個時鐘域之間傳遞控制信號時,可以通過設計電平同步器(可能使用兩個或三個觸發器)來解決亞穩態問題。圖6使用了兩級電平同步器邏輯。

fe626a80-d305-11ed-bfe3-dac502259ad0.png

圖6 控制路徑中有二級電平同步器

如圖6所示,利用電平同步器將控制信號q1從時鐘域1傳遞到時鐘域2。主要的設計策略是將有效的輸出q1傳遞到第二個時鐘域。電平同步器在第二個時鐘域,對輸出q1進行采樣。由于違反了設置或保持時間,第二個時鐘域的輸入觸發器將是亞穩態的,這應該通過設置EDA工具屬性來忽略。輸出的data_out是有效的數據,由于使用了同步器,本設計有兩個時鐘的延遲。

圖6所示的設計時序描述如下(圖7所示)。

fe743e86-d305-11ed-bfe3-dac502259ad0.png

圖7 使用兩級同步器的時序

如圖7所示,q1由第一個時鐘域輸出。在clk2的上升沿上,觸發器FF1的輸出q2將由于建立或保持時間違例而進入亞穩態。但是觸發器FF2輸出在接下來的時鐘邊是data_out是有效的輸出。使用該命令設置false path:

set_false_path –from FF0/q –to FF1/q

使用這兩個觸發器的電平同步器如圖8所示,可以在設計中采用。更好的策略是在RTL設計期間將電平同步器的RTL描述作為單獨的模塊。引入的延遲取決于將輸出驅動到有效合法狀態所需的觸發器數。

fe8ea974-d305-11ed-bfe3-dac502259ad0.png

圖8 電平同步器

下面將對RTL描述部分進行描述:

always@(posedgeclk)
begin
q<=data_in;
data_out<=q
end

在ASIC設計中,當控制信息需要從快時鐘域傳遞到慢時鐘域時,就會出現數據完整性問題。該問題是由于在將控制信號從時鐘域1傳遞到時鐘域2時觸發器輸出的合法狀態不收斂造成的。

利用脈沖展寬器可以解決從快時鐘域到慢時鐘域的采樣問題。工作在正時鐘邊緣的電平脈沖發生器如圖9所示。

fe9d9f7e-d305-11ed-bfe3-dac502259ad0.png

圖9 電平到脈沖轉換

另一種機制是信號的握手,可以用來實現數據的收斂。

如圖10所示,將時鐘域2的采樣信號作為握手信號反饋到時鐘域1。這種握手機制類似于對較快時鐘域1的確認或通知,較快時鐘域傳遞的控制信號被較慢時鐘域成功采樣。在實際的大多數場景中,都采用了這種機制,即使較快的時鐘域在收到較慢時鐘域的有效通知或確認信號后,也可以發送另一個控制信號。

fea8e8a2-d305-11ed-bfe3-dac502259ad0.png

圖10 控制信號的握手機制

脈沖同步器

這種類型的同步器使用多級電平同步器,其中兩級電平同步器的輸出由輸出觸發器采樣。這種同步器也稱為切換同步器,用于將發送時鐘域產生的脈沖同步到目標時鐘域。當將數據從較快的時鐘域傳遞到較慢的時鐘域時,如果使用兩級電平同步器,脈沖可能跳過。在這種情況下,脈沖同步器是有效和有用的。脈沖同步器圖如圖11所示。

feb49da0-d305-11ed-bfe3-dac502259ad0.png

圖11 脈沖同步器

Mux同步器

將時鐘域1的信息發送到時鐘域2時,使用這對數據和控制信號。使用多bit數據和使用單bit控制信號。在接收端,根據發送時鐘和接收時鐘的比值,使用電平或脈沖同步器為多路復用器產生控制信號。這種技術類似于MCP,并且如果數據在跨越時鐘邊界的多個時鐘周期中是穩定的,則這種技術是有效的。如圖12所示。

fec2feb8-d305-11ed-bfe3-dac502259ad0.png

圖12 Mux同步器

05多bit數據傳輸的挑戰

在多個時鐘域之間傳遞多個控制信號是一個重要的挑戰。問題是這些控制信號到達的時間不同。如果這些控制信號的到達沒有得到正確的管理,那么真正的問題是由于傾斜??紤]圖13所示的場景,其中“enable ” “load_en ”和“ready ”需要從一個時鐘域傳遞到另一個時鐘域。在這種情況下,如果使用獨立的電平同步器,則接收端可能會因為信號的歪斜(信號到達時間不同)而出現同步失敗。

fed44218-d305-11ed-bfe3-dac502259ad0.png

圖13 對接收端時鐘域內的多個信號進行采樣

考慮其中一個控制信號,例如enable到達較晚,則控制路徑中可能存在同步失敗,為了避免這組3個控制信號,嘗試在時鐘域之間傳遞共同信號。策略如圖14所示。

fee2c0a4-d305-11ed-bfe3-dac502259ad0.png

圖14 固定在多時鐘域內傳遞的控制信號

06數據路徑同步

用于在時鐘域之間傳遞多個數據bit的技術是:

握手機制

異步FIFO緩存

格雷編碼

握手機制

在時鐘域之間傳遞多比特信號時,握手機制的使用是一種有用的技術。如圖15所示,發射機工作在clk1,接收機工作在clk2。數據可以從發射機傳送到接收機。這里要注意,該握手與AXI總線的握手略有不同。

接收端時鐘域可以產生數據有效(data valid)和設備就緒(ready)等握手信號。因此,目的是通知發送器總線上還存在有效數據可用,設備還沒有準備好接收新數據。

ff02defc-d305-11ed-bfe3-dac502259ad0.png

圖15 握手機制框圖

握手信號datavalid它是來自時鐘域2的主動高電平握手信號,表示傳輸的數據是有效數據,接收端只需要很少的時鐘就可以對該數據進行采樣。傳輸數據時的時鐘延遲取決于同步器中使用的觸發器的數量,而延遲是握手機制的最大缺點之一。

握手信號deviceready它表明當數據有效的時候,接收端已經準備好接收新數據,并且設備ready好了可以拉高通知發送端將新數據放到數據總線上。

如果我們有多個時鐘域的FSM控制器,那么設計架構來通過使用請求(request)和確認(ack)信號建立同步。FSM控制的握手機制如圖16所示。

ff16cb4c-d305-11ed-bfe3-dac502259ad0.png

圖16 FSM握手機制

異步FIFO同步器

異步FIFO是有用的,因為數據路徑同步器是用來交換多個時鐘域之間的數據。如果FIFO內存緩沖區沒有滿,發送端時鐘域或發送端時鐘域可以使用write_clk將數據寫入FIFO內存緩沖區,如果FIFO內存緩沖區沒有空,接收端時鐘域可以使用read_clk讀取數據(圖17)。

FIFO由以下幾個塊組成:

Memory:內存緩沖區

Write Clock Domain:在write_clk上工作的寫時鐘域邏輯。

Read clock Domain:讀時鐘域邏輯,它正在read_clk上工作。

Flag Logic:生成標志邏輯empty和full。

FIFO和相關的邏輯塊如圖17所示。

ff2937c8-d305-11ed-bfe3-dac502259ad0.png

圖17 FIFO框圖

如何得到FIFO的深度?

考慮寫時鐘域的工作頻率為250 MHz,讀時鐘域的工作頻率為100 MHz,沒有延遲,然后傳輸50字節的突發長度,可以使用以下計算:

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的深度。

格雷編碼

在傳遞多個位的數據或控制信號時,必須使用格雷編碼技術,因為這種技術保證了兩個連續的數字只有一bit的變化。例如,如果4bit二進制數據需要在多個時鐘域之間傳遞,那么一個或多個bit轉換,因此需要更多的功率和出錯的機會。因此,為了避免這種情況,提高性能,在發送端或發送端時鐘域采用二進制到格雷碼轉換邏輯。這保證了在時鐘邊界上只有一bit變化。為了得到接收端時鐘域的原始二進制數據,采用格雷碼到二進制碼的轉換。該技術如圖18所示。

ff3aaf8a-d305-11ed-bfe3-dac502259ad0.png

圖18 格雷編碼技術

07總結

總結幾個要點:

在多個時鐘域之間傳遞數據時,設計數據路徑同步器。

在多個時鐘域之間傳遞控制信號時,需要設計控制路徑同步器。

在通過時鐘域傳遞數據和控制信號信息時,強烈建議使用多周期路徑來避免亞穩態問題。

傳遞多bit控制或數據信息的常用而有效的技術是使用異步FIFO。

對于在多個時鐘域之間傳遞的多位控制信號,采用分組技術來避免由于到達時間不同而產生的歪斜。

審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • FPGA
    +關注

    關注

    1626

    文章

    21667

    瀏覽量

    601840
  • asic
    +關注

    關注

    34

    文章

    1194

    瀏覽量

    120327
  • 存儲器
    +關注

    關注

    38

    文章

    7452

    瀏覽量

    163605
  • IC設計
    +關注

    關注

    37

    文章

    1291

    瀏覽量

    103768
  • 多時鐘域
    +關注

    關注

    0

    文章

    6

    瀏覽量

    5995

原文標題:IC設計中的多時鐘域處理方法總結

文章出處:【微信號:處芯積律,微信公眾號:處芯積律】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    IC設計多時鐘設計常用方法及其問題

    假如考慮處理器和存儲器的工作頻率為500MHz,帶有存儲器控制器的浮點引擎的工作頻率為666.66MHz,總線接口和高速接口工作頻率為250MHz,則該設計具有多個時鐘,被視為多個時鐘
    發表于 08-01 18:07 ?998次閱讀
    <b class='flag-5'>IC</b>設計<b class='flag-5'>中</b><b class='flag-5'>多時鐘</b><b class='flag-5'>域</b>設計常用<b class='flag-5'>方法</b>及其問題

    關于跨時鐘信號的處理方法

    我在知乎看到了多bit信號跨時鐘的問題,于是整理了一下自己對于跨時鐘信號的處理方法。
    的頭像 發表于 10-09 10:44 ?5991次閱讀

    如何處理好FPGA設計時鐘間的數據

    時鐘處理是FPGA設計中經常遇到的問題,而如何處理好跨時鐘間的數據,可以說是每個FPGA初
    發表于 07-29 06:19

    多時鐘的設計和綜合技巧系列

    出現問題,來自快時鐘的控制信號必須寬于較慢時鐘的周期。否則如下圖所示,快時鐘的控制信號無法被采樣到慢
    發表于 04-11 17:06

    IC設計多時鐘處理的常用方法相關資料推薦

    1、IC設計多時鐘處理方法簡析我們在ASIC或FPGA系統設計
    發表于 06-24 16:54

    討論一下在FPGA設計多時鐘和異步信號處理有關的問題和解決方案

    和發送數據,處理異步信號,以及為帶門控時鐘的低功耗ASIC進行原型驗證?! ∵@里以及后面章節提到的時鐘,是指一組邏輯,這組邏輯的所有同步
    發表于 10-14 15:43

    基于多時鐘的異步FIFO設計

    在大規模集成電路設計,一個系統包含了很多不相關的時鐘信號,當其目標時鐘與源時鐘不同時,如何
    發表于 12-14 10:19 ?14次下載

    關于FPGA時鐘的問題分析

    時鐘問題(CDC,Clock Domain Crossing )是多時鐘設計的常見現象。在FPGA領域,互動的異步時鐘
    發表于 08-19 14:52 ?3318次閱讀

    多時鐘的同步時序設計和幾種處理異步時鐘接口的方法

    外部輸入的信號與本地時鐘是異步的。在SoC設計,可能同時存在幾個時鐘,信號的輸出驅動和輸入采樣在不同的時鐘節拍下進行,可能會出現一些不穩
    的頭像 發表于 07-24 09:52 ?4339次閱讀
    <b class='flag-5'>多時鐘</b><b class='flag-5'>域</b>的同步時序設計和幾種<b class='flag-5'>處理</b>異步<b class='flag-5'>時鐘</b><b class='flag-5'>域</b>接口的<b class='flag-5'>方法</b>

    揭秘FPGA跨時鐘處理的三大方法

    時鐘處理方法,這三種方法可以說是 FPGA 界最常用也最實用的方法,這三種
    的頭像 發表于 12-05 16:41 ?1613次閱讀

    解析多時鐘和異步信號處理解決方案

    減少很多與多時鐘有關的問題,但是由于FPGA外各種系統限制,只使用一個時鐘常常又不現實。 FPGA時常需要在兩個不同時鐘頻率系統之間交換數據,在系統之間通過多I/O接口接收和發送數據
    的頭像 發表于 05-10 16:51 ?3946次閱讀
    解析<b class='flag-5'>多時鐘</b><b class='flag-5'>域</b>和異步信號<b class='flag-5'>處理</b>解決方案

    介紹3種方法時鐘處理方法

    時鐘處理是FPGA設計中經常遇到的問題,而如何處理好跨時鐘間的數據,可以說是每個FPGA初
    的頭像 發表于 09-18 11:33 ?2.2w次閱讀
    介紹3種<b class='flag-5'>方法</b>跨<b class='flag-5'>時鐘</b><b class='flag-5'>域</b><b class='flag-5'>處理</b><b class='flag-5'>方法</b>

    FPGA多時鐘和異步信號處理的問題

    減少很多與多時鐘有關的問題,但是由于FPGA外各種系統限制,只使用一個時鐘常常又不現實。FPGA時常需要在兩個不同時鐘頻率系統之間交換數據,在系統之間通過多I/O接口接收和發送數據,
    的頭像 發表于 09-23 16:39 ?3046次閱讀

    FPGA跨時鐘處理方法(二)

    上一篇文章已經講過了單bit跨時鐘處理方法,這次解說一下多bit的跨時鐘
    的頭像 發表于 05-25 15:07 ?989次閱讀
    FPGA跨<b class='flag-5'>時鐘</b><b class='flag-5'>域</b><b class='flag-5'>處理</b><b class='flag-5'>方法</b>(二)

    關于FPGA設計多時鐘和異步信號處理有關的問題

    減少很多與多時鐘有關的問題,但是由于FPGA外各種系統限制,只使用一個時鐘常常又不現實。FPGA時常需要在兩個不同時鐘頻率系統之間交換數據,在系統之間通過多I/O接口接收和發送數據,
    的頭像 發表于 08-23 16:10 ?597次閱讀