原文鏈接:跨時鐘域設計-CSDN博客
前言
CDC(clock domain crossing)檢查(跨時鐘域的檢查)是對電路設計中同步電路設計的檢查。非同步時鐘沒有固定的相位關系,這樣Setup/Hold不滿足而產生了亞穩態是無法避免的。我們采用同步設計的方法保證亞穩態不會無序的在電路中傳播,從而導致功能問題。
隨著當今SOC設計的規模越來越大,時鐘越來越多,工作模式越來越復雜。跨時鐘域電路不但多,而且非常復雜。 在當今的電路設計中我們通常使用多級同步,異步FIFO,握手等同步設計來保證亞穩態信號不會在電路中無序的傳播。
但同步設計中,同步處理不當依然會出現glitch,多路扇出等問題導致電路實際運行出現故障。
目前我們的數字設計大部分是基于RTL設計的,直接通過RTL檢查"跨時鐘域的同步設計" 很難做到100%覆蓋的檢查,特別是當今SOC中集成大量IP,直接通過RTL檢查幾乎不可能的。 電路設計中同步電路設計的檢查都是使用專門的EDA工具做靜態的CDC檢查。常用的CDC檢查工具有Conformal CDC 和 Spyglass CDC。
此外CDC檢查也是前端sign off 重要項目和數字IC設計工程師的必備的技能。
第一講 時鐘域
1.1 什么是時鐘
· 時鐘信號是一個按一定電壓幅值、一定時間間隔連續發出的脈沖信號。
脈沖信號之間的時間間隔稱為周期;
將單位時間(如1秒)內所產生的脈沖個數稱為頻率。
· 每一次脈沖到來,芯片內的晶體管就改變一次狀態,讓整個芯片完成一定任務
· 時鐘相當于芯片的脈搏,心臟跳動
時鐘偏斜(clock skew)
時鐘偏斜,指的是同一個時鐘信號到達兩個不同寄存器之間的時間差值,Skew的定義就是時鐘最長路徑減去最短路徑的值。
時鐘抖動(jitter)
時鐘抖動,指的是兩個時鐘周期之間存在的差值,這個誤差是在時鐘發生器內部產生的,和晶振或者PLL內部電路有關。
1.2 什么是時鐘源
數字電路里一般用晶振提供基本的時鐘信號。晶振是晶體振淓器( Quartz Crystal OSC)的簡稱。
?有些芯片的一部分時鐘來自于其他芯片。它的時鐘源就是外部芯片的輸出信號。比如芯片12C、SPI接口時鐘就來自外部芯片。
下面這個電路圖就是兩個時鐘源(CLKA是外部時鐘源、clk_osc是晶體振蕩器提供的)
1.3 同步時鐘
同源,比如分頻
有固定的相位關系
右下角的圖中:如果C1和C2是一個時鐘源,則為同步時鐘。
ASIC中的時鐘結構
FPGA中的時鐘結構
MMCM( Mixed- Mode Clock Manager)混合模式時鐘管理器
High-performance Clock
BUFG(全局時鐘緩沖器)
BUFH( horizontal clock buffers橫向BANK時鐘綬沖器)
BUFR(用于縱向BANK時鐘緩沖器)
BUFMR (multi-clock region buffers)
BUFIO(用于IO輸入輸出緩沖)
1.4 異步時鐘
不同源
沒有固定的相位關系
下圖中,CLKA和CLK_OSC就是異步時鐘。
問題:有兩個不同頻率的時鐘A和B。A:clk0 為100MHz,B:clk1為99MHz。他們兩個是不是異步時鐘?
不一定!
問題:有兩個相同頻率的時鐘A和B,他們無固定相位,他們兩個是不是同步時鐘?
不是同步時鐘!
1.5 什么是時鐘域
時鐘域(Clock Domain)是以捕獲時鐘劃分時鐘域
單時鐘(Single clock domain):數據發送和接收是一個時鐘
多時鐘(Multiple clock domain):數據發送和接收不是一個時鐘
1.6 跨時鐘域問題
跨時鐘域
若一個電路 launch時鐘和 capture時鐘不是同一個時鐘,就是跨時鐘電路
若兩個時鐘是同步時鐘就是同步時鐘域
若兩個時鐘是異步時鐘就是異步時鐘
跨時鐘域的例子
單個模塊:switches, UART receivers, USB-FPGA interfacing
整個系統:Different clock in a large design, e.g., Socs
跨時鐘域問題
CLK1與CLK2來自不同的時鐘源。
由于時鐘源不同,對REG2和REG3來講,在同一時刻,一個認為REG1的輸出是1,另一個認為是0,這必定造成電路判斷出現錯誤。
第二講 亞穩態
2.1 建立時間和保持時間
建立時間t(su)(setup time)
對任何一種觸發器,在時鐘觸發沿前后的一個小時向窗口內,輸入信號必須穩定。
觸發器的時鐘信號上升沿到來以前,數據穩定不變的時間。輸入信號應提前時鐘上升沿(假設上升沿有效)T時間到達芯片,這個T就是建立時間 Setup time。如不滿足setup time,這個正確的數據(或穩定后的數據)就不能被這一時刻時鐘打入觸發器
保持時間t(H)(hold time)
保持時間是指觸發器的時鐘信號上升沿到來以后,數據穩定不變的時間。如果 hold time不夠,數據同樣不能被正確打入觸發
2.2 什么是亞穩態
亞穩態
觸發器無法在某個規定時間段內達到一個可確認的狀態。亞穩態會帶來功能的錯誤
亞穩態時
既無法預測該單元的輸出電平,也無法預測何時輸出才能穩定在某個正確的電平上。觸發器輸岀一些中間級電平,或者可能處于振蕩狀態。
亞穩態傳播
這種無用的輸出電平可以沿信號通道上的各個觸發器級聯式傳播下去
2.3 如何處理亞穩態
①降低系統時鐘
②用反應更快的FF
③引入同步機制,防止亞穩態傳播
④改善時鐘質量,用邊沿變化快速的時鐘信號
2.4 二級寄存器
使用同步器降低亞穩態發生的概率:
1.亞穩態需要一段時間才能到達穩態
2.二級寄存器可以增加一個 clock cycle的時間使亞穩態穩定
2.5 MTBF
平均故障間隔時間MTBF (Mean Time Between Failure )
使用同步器降低亞穩態發生的概率
兩級并不能完全隔離亞穩態危害,但極大的概率隔離了亞穩態發生概率。
第三講 跨時鐘域設計——單比特信號的跨時鐘域處理
3.1 慢時鐘域信號同步到快時鐘域的處理方法
兩級觸發器同步
慢時鐘信號進入到更快的時鐘域時(頻率相差2倍以上),此時不用考慮快時鐘域信號采樣的丟失,可以考慮使用兩級觸發器進行同步處理
邊沿檢測同步器
慢時鐘信號進入到更快的時鐘域時(頻率相差2倍以上),為了避免快時鐘多次采樣到有效信號,快時鐘域需要對信號進行邊沿檢測。需要使用邊沿檢測同步器
握手處理
當一個慢時鐘域的單比特信號進入到更快的時鐘域,但是兩個時鐘頻率相差不大(頻率相差2倍下),為了避免快時鐘采樣丟失,需要進行握手的同步處理
3.2 信號上升沿檢測
快時鐘先將輸入信號進行兩級同步處理,再進行一個時鐘的延遲,延遲后的信號取反與同步信號做與邏輯,得到信號的上升沿
3.3 信號下降沿檢測
快時鐘先將輸入信號進行兩級同步處理,再進行一個時鐘的延遲,延遲后的信號與取反同步信號后做與邏輯,得到脈沖信號的下降沿
3.4 雙沿檢測器
快時鐘先將輸入信號進行兩級同步處理,再進行一個時鐘的延退,延遲后的信號與同步信號做異或邏輯,就可得到信號的雙沿脈沖。
3.5 快時鐘域信號同步到慢時鐘域的處理方法
電平拓展
如果已知慢時鐘域的時鐘頻率,可以考慮將快時鐘域的信號進行電平擴展,使其足以被慢時鐘域采樣。
脈沖同步器
快時鐘域中需要同步的信號是脈沖信號,它觸發原時鐘域的反轉電路,每當翻轉電路收到脈沖時,電路翻轉一次慢時鐘域的同步器對翻轉后的信號進行采樣,和邊沿檢測,重新在本時鐘域恢復出脈沖信號
握手處理
當一個快時鐘域的單比特信號進入到慢的時鐘域,同樣可以使用握手的方式進行同步處理
3.6 脈沖同步器(快時鐘域到慢時鐘域)
脈沖同步器的使用中,快時鐘域的有效信號需要時單脈沖信號,且兩個有效信號的時間間隔需要大于等于兩個同步器的時鐘周期,否則無法恢復出有效信號
3.7 典型電路案例分析(此處再看)
對跨時鐘域的 Timing path如果不處理容易導致亞穩態。如果做了同步處理,但同步處理不當儼然會出現 glitch,多路扇出,Re-convergence,Datahold等問題導致電路實際運行出現故障
CLKA domain中,DA1和DA2分別為兩個DFF的輸出,理想狀態下,DA1和DA2到達與門兩個輸入端的時間是一樣的,這樣設計就不會出問題。但由于后端布局,環境等因素導致的傳播延遲Td會使A&B存在一個 Glitch。而由于CLKB和CLKA為兩個 clock domain,之間不存在固定的相位關系,假設這個 Glitch恰好被CLKB鎖存住,那么就會在DB2生成一個有效的高電平信號,這個高電平信號不是我們的設計所期望的,那就會導致后繼的電路功能出現問題。
錯誤解決方案
跨時鐘域的多個相關連的單比特信號不可以通過打拍的方式同步到目的時鐘域
第四講 跨時鐘域設計——多比特信號的跨時鐘域處理
4.1 兩級觸發器的問題
兩級觸發器用來處理多比特信號的同步的問題
如果簡單的按照單比特信號穿越方法各bit打兩拍單獨穿越,則會造成各個bit穿越時間不一致(寄存器
對于每個信號的延遲時間不ー樣),則會造成另一個時鐘域里面有一些被前一個時鐘沿采到了,有些
被后面的采到了,導致目的時鐘域采到的值錯誤,造成中間態無意義的數據。
兩級觸發器同步多比特信號的解決方法
如果多比特信號之間存在邏輯相關性。可以在源時鐘域將信號合成一個單一的控制信號然后進行兩級寄存器同步
4.2 多比特信號跨時鐘域的處理方法
格需碼編碼
通過編碼的方式將多位信號轉化為每次只有一位變化的信號,將“多比特”的跨時鐘域變換成“單比特”進行處理。
異步FFO
異步FIFO融合了寄存器同步,格雷碼編碼,握手控制等處理方式,是處理跨時鐘域數據傳輸最常用的方式。
握手處理
所謂握手,是指通信雙方使用了專用控制信號進行數據收發的狀態指示。這個控制信號既有發送域給接收域的,也有接收域給發送域的,有別于前面的單向控制信號檢測方式。類似于DMA與外設模塊的通信,會用到dma_req,dma_ack
4.3 格雷碼編碼處理跨時鐘域
什么是格雷碼
是一種特殊的二進制編碼方式,在一定程度上優于二進制編碼
可以通過算法與二進制編碼進行相互轉換
相鄰兩個編碼之間只有一位不同
格碼編碼的跨時鐘域處理
格雷碼的特點是相鄰的兩個編碼之間只有1位不同,消除了在同一個時鐘沿,多比特信號或者數據同時變化所帶來的跨時鐘域問題
應用局限:只有在數據在相數值間連續變化的情況下才有用,不適用于大多數信號傳輸或者數據傳輸的情況。
4.4 異步FIFO
異步FIFO的特點
異步FIFO的特點是擁有兩個相互獨立的讀寫時鐘,允許兩個獨立時鐘的頻率有較大的差距
跨時鐘域的讀寫地址傳輸采用格雷碼編碼,然后加上兩級寄存器同步的方式。
“滿”邏輯用來控制寫信號,將讀時鐘域的讀指針同步到寫時鐘域,在寫時鐘域進行比較。
“空”邏輯用來控制讀信號,將寫時鐘域的寫指針同步到讀時鐘域,在讀時鐘域進行比較。
異步FIFO的結構
寫控制邏:控割寫操作與滿信號(wfuI)的判斷與產生。
讀控制邏輯:控割讀操作與空信號(empy)的判斷與產生
RAM:雙端口RAM
二進制碼與格雷碼轉換模塊:用于將讀寫地址二進剖碼轉成格番碼。
跨時鐘同步模塊:將讀地址的格雷碼與wclk同步;將寫地址的格雷碼與rclk同步。主要操作就是兩級寄存器同步
4.5 多比特跨時鐘域的握手處理
握手方式的原理
握手方式處理跨時鐘域數據傳輸,需要對雙方的握手信號(req和ack)分別使用脈沖檢測方法進行同步。
在具體實現中,發送域先把數據放入總線,隨后發送有效的req信號給接收域。接收域在檢測到有效的req信號后鎖存數據總線,然后回送一個有效的ack信號表示讀取完成應笞。發送域在檢測到有效ack信號后撤銷當前的req信號,接收域在檢測到req撤后也相應撤銷ack信號,此時完成一次正常握手通信。
握手方式是一種穩定可靠的同步處理方式,但控制信號握手檢測會消耗通信雙方較多的時間。
第五講 跨時鐘域設計——握手處理
5.1 握手的原理
握手,即通信雙方使用約定的控制信號進行數據傳輸的狀態指示。這個控制信號既有發送域給接收域的,也有接收域給發送域的。
5.2 什么時候使用握手同步處理
通信過程需要保障數據的穩定可靠,并能允許通信過程消耗雙方較多的時間
當通信雙方不能預知相互的響應時間時,握手能讓兩個時鐘域間實現有效的通信
方式一般使用在總線數據的傳輸上
5.3 握手電路的實現
雙方對握手信號(req和ack)分別使用脈沖檢測方法進行同步。
接收方利用脈沖有效沿對傳輸的數據進行鎖存。
完成數據鎖存后通知接收方。
第六講 跨時鐘域設計——異步FIFO
6.1 異步FIFO的應用
異步FIFO的作用
解決兩個不同時鐘域之間批量數據的高效傳遞。
異步FIFO的應用
數據速率的轉換,比如突發速率轉換為線性均勻速率( burst write and single read).
不同時鐘域數據快速傳輸與緩存。
不同數據位寬的數據接口的匹配。
6.2 異步FFO的結構
異步FIFO的一般結構
雙端口RAM:用于存儲效據。
讀控制邏輯:控制讀操作與空信號( empty)的判斷與產生,屬于讀時鐘域。
寫控制邏輯:控制寫操作與滿信號(wfull)的判斷與產生,屬于寫時鐘域。
二進制碼與格雷碼轉換模塊:用于將讀寫地址二進制碼轉成格雷碼。
跨時鐘同步模塊:將讀地址的格雷碼與wclk同步;將寫地址的格雷碼與rclk同步。
異步FIFO處理的核心問題
FIFO深度的計算。
讀寫地址的編碼
控制信號、讀寫地址的跨時鐘域同步
讀寫控制信號的產生。
經典異步FIFO的結構一
將讀時鐘域的讀地址(經格雷碼轉換后),再同步到寫時鐘域,進行邏輯比較
將寫時鐘域的寫地址(經格雷碼轉換后),再同步到讀時鐘域,進行邏輯比較
經典異步FFO的結構二
將讀寫地址(經格雷碼轉換后)同步到一個組合邏輯電路中(異步比較)直接比較空滿,然后將空滿信號同步到各自對應的模塊中。
6.3 異步FIFO深度的計算
異步FIFO深度的計算
計算異步FIFO的深度,需要綜合考慮讀、寫的時鐘頻率,讀、寫數據的位寬,讀、寫的頻率等。
寫快讀慢的情況下,突發 burst寫入的數據減去該 burst時間內讀出的數據,多余的數據需要能緩沖下來,讓接收端在剩下空閑的時間能從容地把多余的數據讀出來。
讀快寫慢的情況下,FIFO的深度最小可以設置為1.
異步FIFO深度的計算示例1
FIFO讀、寫位寬都為8,寫時鐘 wclk為100MHz,讀時鐘rclk為95MHz,寫入數據的總長為4Kbit,且兩次寫操作之間的時間間隔足夠大。每一個rclk讀取一個數據。求FIFO的深度。
寫入的突發長度: burst_length=4K/8=500字節(即T時間內寫入了500字節的數據)
要保證FIFO不溢出,那么在T時間內,500字節數據要被全部讀出。T=500/100MHz.
T時間段讀取的數據量為:T95MHz=475字節,FIFO的深度至少要大于等于25
公式總結:fifo_depth= burst_ length-( burst_ length /w_clk)r_cIkX/Y
這里X、Y代表的意思:每Y個rclk會有X個數據讀出FIFO
異步FIFO深度的計算示例2
FIFO讀、寫位寬都為8,寫時鐘wclk為80MHz,讀時鐘rclk為40MHz,寫入數據的總長為120byte,每2個寫時鐘寫入一個數據,每4個讀時鐘讀取一個數據。求FIFO的深度。
寫入的突發長度: burst length=120字節(即T時間內寫入了120字節的數據)
等效的寫時鐘頻率wclk=80/2=40M
等效的讀時鐘頻率rclk=40/4=10M
要保證FIFO不溢出,那么在T時間內,120字節數據要被全部讀出。T=120/40MHz
T時間段讀取的數據量為:T*10MHz=30字節,FIFO的深度至少要大于等于90字節
6.4 異步FIFO讀寫地址的編碼
異步FIFO讀寫地址的格雷碼編碼
FIFO的讀寫地址都是連續的。采用格雷碼編碼,每次地址的變化,都只有1位數據跳變,有利于信號的跨時鐘域同步。
二進制碼轉換成格雷碼
轉換規則:從最右邊一位起(最低位開始),依次與前一位“異或",作為該位的輸出,最高位不變
module BINARY_TO_GRAY(binarycode,graycode);
?? ?parameter n = 4;
?? ?
?? ?input ?? ??? ?[n-1:0]?? ?binarycode;
?? ?output?? ?reg?? ?[n-1:0]?? ?graycode;
?? ?
?? ?integer i;
?? ?
?? ?always@(binarycode)begin
?? ??? ?graycode[n-1] = binary[n-1];
?? ??? ?for(i=0;i<n;i++)
?? ??? ??? ?graycode[i] = binarycode[i]^binarycode[i-1];
?? ?end
endmodule
1
2
3
4
5
6
7
8
9
10
11
12
13
14
格雷碼轉換成二進制碼
轉換規則:最高位不變,從最左邊起將產生的每一位二進制碼,與下一位相鄰的格雷碼"異或”,作為二進制碼的下一位。
module GRAY_TO_BINARY(graycode,binarycode);
?? ?parameter n = 4;
?? ?
?? ?input ?? ??? ?[n-1:0]?? ?graycode;
?? ?output?? ?reg?? ?[n-1:0]?? ?binarycode;
?? ?
?? ?integer i;
?? ?
?? ?always@(graycode)begin
?? ??? ?binarycode[n-1] = graycode[n-1];
?? ??? ?for(i=0;i<n;i++)
?? ??? ??? ?binarycode[i] = graycode[i]^graycode[i-1];
?? ?end
endmodule
1
2
3
4
5
6
7
8
9
10
11
12
13
14
6.5 異步FIFO讀寫時鐘域的信號同步
異步FIFO的跨時鐘域信號同步
滿”信號控制寫邏輯,在寫時鐘域產生。“滿控制信號不需要同步到讀時鐘域。只需要將寫地址進行跨時鐘域的同步。
“空信號控制讀邏輯,在讀時鐘域產芏。“空”控制信號不需要同步到寫時鐘域。只需要將讀地址進行跨時鐘域的同步。
跨時鐘域地址同步:將讀地址的格雷碼與wclk同步;將寫地址的格雷碼與rclk同步。主要操作就是兩級寄存器同步。
為什么使用兩級寄存器同步多比特位寬的地址信號?
異步FIFO讀寫地址都是連續變化的,在進行兩級寄存器同步之前,進行格雷碼編碼,可以將多比特變化的信號變成每次只有單一比特変化的信號進行同步。
6.6 異步FFO滿空信號的產生
異步FIFO空滿信號的產生
讀寫控制信號判斷與產生是通過對讀寫地址指針的比較判斷出來的
二進制比較:因為跨時鐘域同步后的地址是格雷碼,需要在本時鐘域對地址進行二進制轉換
格雷碼直接比較:省去了二進制的轉換,直接將本時鐘域的格雷碼編碼地址與同步過來的格雷碼地址進行比較
傳統二進制比較
當wren有效,寫地址=讀地址-1或者寫地址=讀地址+ FIFO_DEP,full為1.寫指針超越讀指針
當rden有效,讀地址=寫地址-1或者讀地址=寫地址+FIFO_DEP, empty為1;讀指針超越寫指針
格需碼直接比較產生空滿信號
假如FIFO的深度為8,我們用寬度為4的指針對FIFO進行尋址
如果讀指針的最高位為0,而寫指針的最高位為1,說明寫指針超前于讀指針,這時如果讀寫指針指向同一存儲空間(次高位相異),則可判斷為full
如果讀指針的最高位為1,而寫指針的最高位為0,說明寫指針發生了回轉,這時如果讀寫指針指向同一存儲空間(次高位相異),則可判斷為full
當讀指針完全與寫指針相同時,則判斷為 empty
格碼直接比較產生空滿信號舉例
假如FIFO的深度為8,我們用寬度為4的指針對FIFO進行尋址
起初初始化時。Wr_ptr_bin=“0000,rd_ptr_bin=0000、此時,FIFO空”
首先執行8次寫操作。Wr_ptr_bin=1100,rd_ ptr bin=0000此時,FIFO滿。
然后執行8次讀操作。Wr_ptr_bin=“1100,rd_ptr_bin=21100.此時,FIFO空”。
最后執行8次寫操作。Wr_ptr_bin=0000,rd_ptr_bin=1100,此時,FIFO滿。
6.7 異步FIFO讀寫時鐘快慢對信號同步的影響
讀寫指針的兩級寄存器同步所帶來的延遲,對空滿信號的判斷有影響嗎
將寫指針同步到讀時鐘域再和讀指針比較進行FIFO空狀態判斷時,因為在同步寫指針時需要時間,而在這個同步的時間內有可能還會寫入新的數據,因此同步后的寫指針一定是小于或者等于當前實際的寫指針,所以此時如果FIFO為空”,則實際的寫指針可能仍然大于讀指針,FIFO并不是真的“空。這樣可能會影響FIFO的性能,但是并不會出錯。
將讀指針同步到寫時鐘域再和寫指針比較進行FIFO滿狀態判斷,同步后的讀指針一定是小于或者等于當前的讀指針所以此時判斷FIFO為滿不一定是真滿
總結來說異步邏輯轉到同步邏輯不可避免需要額外的時鐘開銷,這會導致滿空趨于保守,但是保守并不等于錯誤,這么寫會稍微有性能損失,但是不會出錯。
異步FFO讀寫時鐘頻率相差很大,對空滿信號的判斷有影響嗎
假設異步fifo,寫時鐘500M,讀時鐘100M,相差5倍。
滿信號的判斷是在寫時鐘域,比較同步過來的讀指針,由于寫時鐘500M大于讀時鐘100M,快時鐘采樣慢信號,滿的判斷不會有間題。
空”信號的判斷是在讀時鐘域,比較同步過來的寫指針,由于讀時鐘頻率低,采樣的寫指針可能是離散值(3,6,9).但是采樣到的寫指針,必定小于寫時鐘域的寫指針。所以判斷出來的空”信號,是一個保守的“空”信號。在實際應用中沒有問是題。
第七講 跨時鐘域設計——復位同步問題
7.1 同步復位和異步復位的特點
同步復位
復位信號只有在時鐘上升沿到來時,オ能有效。復位時間需要大于系統周期,否則,無法完成對系統
的復位工作。
同步復位可以濾除高于時鐘頻率的毛刺。是完整的同步設計,有利于時序分析。
同步復位會耗費較多的邏輯資源,并會產生組合邏輯路徑延時,復位延時等。
異步復位
只要綜合工藝庫有可異步復位的觸發器,那么該觸發器的數據輸入通道就不需要額外的組合邏輯
無論時鐘沿是否到來,只要復位信號有效,就對系統進行復位。
異步復位設計簡單,可以很方便的實現系統的全局復位。
7.2 異步復位的問題
異步復位的問題
最大的問題在于它屬于異步邏輯,間題出現在復位釋放時,如果復位釋放接近時鐘有效沿,則觸發器
的輸出可能進入亞穩態,從而使復位失敗
可能因為噪聲或者毛刺造成虛假復位信號
如何解決異步復位的問題
異步復位同步釋放
7.3 異步復位同步釋放
復位信號是異步有效的,即復位的發生與clk無關。后半句“同步釋放”是指復位信號的撤除的時侯收到時鐘信號的同步(同步釋放)。
rst_async_n異步復位后, rst_sync_n將拉低,即實現異步復位。當復位信號rst_async_n撤除時,由于雙緩沖電路(兩級蝕發器)的作用, rst_sync_n復位信號不會隨著 rst_async_n的撤除而撤除。
第八講 跨時鐘域設計——跨時鐘的代碼檢查
8.1 Spyglass功能
Spyglass
Lint
在RTL階段對代碼的語法,可綜合性,結構進行深入分析,并且對代碼的錯誤提供完整、可調試的修改方案
SDC
幫助設計人員在設計的整個流程中生成,驗證和管理他們的約東文件。
CDC
提供了業界最完整的多時鐘域解決方案,能自動識別各種同步手段(包括 Handshake,FIFO),能采用 Formal引擎驗證同步方法在功能上的正確性
DFT
提供了能的骭測ATPG的測試覆蓋率分析的能力,基于這個選項,用戶可以很容易地預計所作設計的可測試性并且利用工具提供的指導來提高設計的可測試性。
Power
能夠讓用戶能夠快速分析出設計中的功耗效率問題,從而在還沒有達到后端工序的情況下快速地進行功耗的優化,用戶甚至可以在不進行邏輯綜合和物理實現的情況下對功耗進行量化的計算。
Spyglass優勢
Spyglass的檢查驗證處在設計的前段RTL階段,枏比較于后端的時序分析和網表驗證, spyglass前能更早的發現問題并修正。
能夠讓用戶能夠快速分析出設計中的功耗效率問題,從而在還沒有達到后端工序的情況下快速地進行功耗的優化,用戶甚至可以在不進行邏輯綜合和物理實現的情況下對功耗進行量化的計算。
Spyglass CDC的特點
Spyglass CDC檢查可以發現仿真、FPGA測試中很難發現的潛在的跨時域處理問題。
可以檢查出復位、時鐘是否使用正確,對跨時域設計進行評估檢查。
8.2 Spyglass CDC使用流程
Spyglass CDC使用方式
TCL腳本的方式,TCL方便快捷省去了UI界面上的繁瑣操作。
軟件UI界面操作,跨時域設計一般設計到的層次較多,界面方式 debug較直觀。
通常我們會用腳本啟動 Spyglass,走流程,然后在UI界面里面 Debug
Spyglass CDC所需文件
Filelist.f:用戶RTL的文件列表。
spyglass. sgc: spyglass用的sgdc約東文件。
spyglass.tcl:如果是腳本方式啟動需要準備tcl腳本文件,并在腳本中對CDC的Goal做聲明。
Spyglass CDC界面方式
下面是界面方式的使用流程:
建立好文件夾,準備好們elst. spyglass. sgc文件。
打開 Terminal,輸入命令: spyglass&。啟動 spyglass。
點擊 Add File(s),添加filelist和 spyglass.sgdc文件。并點擊OK確認。
8.3 CDC rules check1
8.4 CDC rules check2
第九講 跨時鐘域設計——時鐘域的綜合處理
9.1時鐘的定義
9.2.同步時鐘的約束
9.3.異步時鐘的約束
9.4.DC的綜合處理
9.5. DC timing分析
9.6.FPGA的綜合處理
后記
文章中未展開說明的部分,不是小編目前關注的點。供大家參考。
————————————————
? ? ? ? ? ? ? ? ? ? ? ? ? ? 版權聲明:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
? ? ? ? ? ? ? ? ? ? ? ??
原文鏈接:https://blog.csdn.net/haojie_duan/article/details/110304907