数字IC设计——跨时钟域篇1(时钟域)
數字IC設計——跨時鐘域篇1
一、時鐘域概要
1. CDC介紹
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秒)內所產生的脈沖個數稱為頻率。頻率的標準計量單位是Hz(赫)。
數字芯片中眾多的晶體管工作在開關狀態,它們的導通和關斷動作無不是按照時鐘信號的節奏進行的。
時鐘偏斜(Skew)
時鐘偏斜指的是同一個時鐘信號到達兩個不同寄存器之間的時間差值,skew的定義就是最長路徑與最短路徑差值。
時鐘抖動(jitter)
抖動,即指兩個時鐘周期之間存在的差值,這個誤差是在時鐘發生器內部產生的,和晶振或者PLL內部電路有關系
刻畫時鐘偏斜和時鐘抖動,即時鐘的不確定性:
其中,Tu即為時鐘偏斜和抖動的和值。通過后端工程師與PLL相關值來確定。
三、 時鐘源
數字電路里一般用晶振提供基本的時鐘信號。
從一塊二氧化硅晶體上按一定的方位角切下薄片(稱為“晶片”),在晶片的兩個表面上涂覆一層薄薄的銀層后接上一對金屬板,焊接引腳,并用金屬外殼封裝,就構成了石英晶體振蕩器(OSC)——基于壓電效應。
有些芯片的一部分時鐘來自于其他芯片。它的時鐘源就是外部芯片的輸出信號。如SPI,I2C接口就來自外部芯片。
一個時鐘源的例子:
電路中有存在其他模塊的時鐘源CLKA與振蕩器CLK_OSC兩個時鐘源。
四、 同步時鐘
同步時鐘:
a.同源,比如分頻電路
b.有固定的相位關系
不同步時鐘:
如果C1與C2來自不同的晶振,那么就是不同步的時鐘
ASIC中時鐘結構
MCU內部時鐘結構圖:
圖中一個8MHz的時鐘源OSC_IN經過PLL倍頻之后,由無毛刺的MUX選擇器選擇時鐘,在經由分頻器,分頻出一系列頻點的時鐘,最后經過ICG門控開關,由OCC(on chip controller)來控制選擇那一路時鐘,分配test模式和function模式。
CTS(clock tree synthesize)
ASIC設計時,時鐘分布是一個網狀結構,為了能夠達到時鐘到達每個寄存器的路徑誤差不大,可以利用CTS來確保源頭的時鐘到達各寄存器延遲差不多。
FPGA中的時鐘和ASIC時鐘結構基本相似。在ASIC中,定制化的通過后端的工具插入clock tree以及其他功能。但是在FPGA中,這些驅動和鏈接資源已經是做好的,只能利用這些,用這些功能來完成時鐘的分配。
以Xilinx 7系列的時鐘為例:
- MMCM(Mixed-Mode Clock Manager)混合模式時鐘管理器
- High-Performance Clock
- BUFG(全局時鐘緩沖器):驅動FPGA全局時鐘驅動
- BUFH(horizontal clock buffers橫向Bank時鐘緩沖器):局部時鐘區域驅動
- BUGR (縱向Bank時鐘緩沖器):局部區域時鐘驅動
- BUFMR (multi-clock region buffers):驅動多個時鐘域
- BUFIO (用于IO輸出緩沖):BUFH和BUFR也可以驅動BUFIO
MMCM結構圖:
在實際設計中,需要充分考慮有多少時鐘資源。來驅動相關的邏輯電路
對于ASIC設計,如何將其設計轉到FPGA中:
ASIC設計中有很多同源時鐘,但是很多均跨越多個時鐘域,但是考慮布局布線,我們將這些同源時鐘關系做一些異步處理。代價是增加面積來獲取快的開發時間。
或者直接利用MMCM產生ASIC設計中所需的時鐘,在通過添加BUFG。
五、 異步時鐘
異步時鐘
1.不同源
2.沒有固定的相位關系
CLKA與CLKA_div2是同步時鐘
CLKA與CLK_OSC是異步時鐘
考慮兩種情況:
六、時鐘域
時鐘域(Clock Domain) 以捕獲時鐘劃分時鐘域
單時鐘域:數據發送和接收是同一個時鐘
多時鐘域:數據發送和接收不是同一個時鐘
對于改電路,以FB捕獲C2時鐘為該電路時鐘。
注意capture時鐘和launch時鐘的相對定義
七、跨時鐘域問題
跨時鐘域
若一個電路launch時鐘和capture時鐘不是同一個時鐘,就是跨時鐘域電路
若兩個時鐘是同步時鐘就是同步時鐘域
若兩個時鐘是異步時鐘就是異步時鐘域
例子:
lanch時鐘為CLKA,capture時鐘為CLKB,該電路為典型的跨時鐘域的例子。
跨時鐘例子:
單個模塊:UART, USB等
跨時鐘域問題
CLK1與CLK2來自不同時鐘源,由于時鐘源不同,對于REG2和REG3來說,在同一時刻,一個認為REG1的輸出是1,另一個認為是0,這將會導致電路判斷出現錯誤,即亞穩態問題。
總結
以上是生活随笔為你收集整理的数字IC设计——跨时钟域篇1(时钟域)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 复习Java入门与基础语法生活【记录一个
- 下一篇: DNA编码约束