吴忠躺衫网络科技有限公司

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

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

3天內不再提示

聊一聊無毛刺時鐘切換的問題

冬至子 ? 來源:IC加油站 ? 作者:硅谷老李 ? 2023-06-27 17:00 ? 次閱讀

先說為什么要做clock switching,在現代的SoC設計中,很多時候我們設計的模塊并不是要跑在一個固定的頻率下,而是根據性能和功耗的要求要跑在不同的時鐘頻率下,當需要降低功耗以及不需要很高性能的時候,我們可以降低時鐘頻率,將驅動這個模塊的時鐘換成一個慢速時鐘。通常時鐘控制模塊會產生不同頻率的時鐘,可能來自不同的PLL,也可能是來自不同的時鐘分頻器,然后有選擇邏輯來選擇讓哪一個時鐘驅動電路

那么針對這個,面試官可能直接問你如何做時鐘切換。如果你對于時鐘切換完全沒有概念,你腦子里可能想到的是一個MUX結構,如下圖所示

圖片

看起來解決了問題,當SEL為0的時候,CLK0被上面的AND門給block住,當SEL為1的時候,CLK1被下面的AND門給block住。但是問題會出在SEL變化的時候,AND的門變化是立刻的,當SEL恰好在CLK0為高的時候從1變為0,或者恰好在CLK1為高的時候從0變為1,那么輸出的CLK_OUT就會產生一個毛刺glitch。

圖片

(電路中產生了glitch為什么有害?)

那么接下來我們就要思考如何避免毛刺的產生。一個思路就是,我們要先把當前正選中的時鐘完全停下來,然后再切換成我們想要的目標時鐘。

然后問題就變成了,我們在什么時候可以把當前時鐘停下來且無毛刺,以及我們在什么時候可以讓目標時鐘通過且無毛刺。

關于什么時候讓時鐘停下來且無毛刺,我們回想一下我們在設計clock gating里也遇到過類似的問題,解決的辦法是利用一個負沿觸發的latch,使得真正的gating發生在clock為低的時候。這里我們也要利用這個想法,即在clock為低的時候停住clock。相應的,對于目標clock,我們也在它為低的時候打開,這樣下一個正沿就可以完整的輸出。

利用clock gating的設計,這樣我們就可以得到下面一個電路:

圖片

上面的兩個flop注意都是負沿觸發的,也就是說它們的Q會在CLK1和CLK2的下降沿到來之后才發生變化,這樣就可以保證CLK1/2為高的半個周期完整的輸出,同時,切換為另外一路的時候由于Flop之前的AND門,也保證了即使SELECT立刻變化,AND門的輸出也是在另外一路停下來之后才能發生變化,這樣就保證了先停一路,再切另外一路。

看起來問題解決了,但是上面的電路有什么問題呢?如果你看過老李之前的跨時鐘域系列文章,應該很迅速地發現,這里面有個CDC的問題。請問,SELECT信號到底是同步于CLK1還是CLK2呢?甚至有沒有可能SELECT信號是異步于CLK1和CLK2呢?我們說,如果CLK1和CLK2為兩個異步的CLK,那么SELECT至多和其中之一同步,和另外一路必然異步。既然是一個異步信號,那么直接去寄存器的D端就會產生CDC的問題,flop可能會產生亞穩態!當flop出現亞穩態的時候,輸出CLK_OUT當然也不是干凈穩定的,造成的惡果不亞于毛刺!

好,那么要怎么解決問題亞穩態的問題?很簡單加synchronizer,也就是要在flop前面再加一級flop,來達到利用2flop synchronizer來synchronize SELECT的目的。電路變成下面

圖片

這樣我們就解決了metastable的問題。一般來說,面試的時候你能把上面這個電路圖畫出來,并且解釋清楚里面每一個門的作用,以及這樣設計的思路,基本就達到了面試官的考察要求。

當然老李給大家分析面試題通常都不會止步于此,上面的這個電路結構大家在任何地方一搜索就可以得到。老李下面帶來時鐘切換中更加進階的干貨內容。

我們再來仔細思考上面的電路,有幾個點需要注意

  1. 因為synchronizer的引入,當SEL變化到en0發生變化需要2個CLK0周期,之后才能把CLK0停下來。也就是說,當前CLK不是立刻停下來的,這一點大家在設計模塊的時候要留心一下,不能想當然認為SEL一變化CLK立刻就會停。
  2. 而由于另外一路的synchronizer的延時,當之前的CLK停下之后,目標clock也不是立刻開始反轉,所以兩個clock切換中間會有一段時間CLK_OUT沒有clock,這個gap對你的系統是否有影響要仔細考慮。
  3. 我們說是利用1個clock周期去使得metastable來穩定下來。但就上面這個設計而言,我們在負沿觸發的flop之前只加了一級正沿觸發的flop,這樣留給flop輸出穩定下來的時間只有 半個周期 。可能會使得MTBF達不到我們需要的值,所以這其實是一個trade off,你可以在前面再加一級正沿觸發的flop,這樣變成真正的2flop synchronizer。但是代價就是需要更多一個周期來停下clock,以及中間沒有clock的gap時間更長。
  4. 在綜合以及PNR的時候,對于后面的兩個AND門和OR門要設為dont touch,避免綜合工具給替換成別的cell。

下面老李可能會問,如果我不希望你用負沿觸發的flop,因為我的工藝庫里面沒有,那么你要怎么設計?

思路就是用一個clock gating cell來替換掉上面的negedge flop和AND 門,clock gating我們說過打開時鐘和關閉時鐘都是無毛刺的。所以你可能會想到下面的電路

圖片

但是很不幸,上面的電路看起來完美無缺,但是其實并不能達到無毛刺的時鐘切換。往下看老李的提示之前,請你自己思考一下為什么?和上面的negedge flop + AND有什么區別呢?

其實原因就是en0變為0的時候CLK_OUT并不是立刻停住的!這是clock gating cell的特征。那么當你把en0b傳給下一路,下面CLK1可能會在CLK0沒有完全停下的時候就打開了,還是會產生glitch。你可能會說,en0b到en1不還得經過一段時間嗎?en1變為1到ICG打開不也得要時間嗎?你期望CLK0利用這段時間完全關斷。但是這并不一定,因為你并不知道CLK0和CLK1的頻率關系,如果CLK1比CLK0快很多,下面的synchronizer delay可能并不夠。我們要設計的是一個能夠在clk0和clk1在任意頻率下都可以工作的電路。

所以改進的設計是要在en0之后再加一級flop,將延一拍之后的en0b_dly反饋給另外一路,這樣才能保證在當前路完全關斷的情況下切換。

圖片

再擴展問一個問題,上面我們設計的都是兩路clock之間進行切換,如果要求你設計一個多路時鐘切換的電路,甚至要求時鐘的路數是參數化的,你要怎么設計呢?

關于多路時鐘切換,第一個要考慮的問題是,如何設計SEL?是用binary來編碼SEL還是別的方式?這里推薦用獨熱碼onehot來編碼SEL,因為任意時刻只會選中其中一路,天然就和onehot的編碼性質相同,也就是N路clock,那么SEL就是N位,每一位對應一路。利用onehot encoding的還有一個好處是參數化方便,如果利用binary,那么可能會遇到不合法的輸入,比如只有3路clock,但是SEL=2‘b11。

另外一個要考慮的問題是最后的那個OR門的實現,當我們只有2路,3路clock需要切換的時候,庫里面有2輸入的普通OR門,但是并不推薦大家直接用。原因在于,由于最終我們輸出的是一個時鐘信號,那么我們通常要求時鐘信號的transition是非常干凈的,而且上升沿和下降沿是平衡的,即tr(rising delay)和tf(falling delay)是幾乎差不多的,而普通的2輸入OR門并不保證它們tr和tf相等,而且是與2輸入中連哪一個輸入pin有關。為了解決這個問題,工藝庫廠家一般會提供一些特殊的CELL,進行了專門的設計,可以使得tr和tf幾乎相等,并且兩個輸入pin的延時也是一樣的,并不區分,所以我們要例化那些特殊的專門給clock path上用的cell。但是當輸入變成了多路clock,比如4路,5路,甚至更多路比如8路,16路的時候,廠家也不會提供balanced 多輸入clock OR cell。這個時候我們就要專門利用NAND tree來實現最后的OR邏輯,并且要保證每一路所需要的NAND cell delay是一樣的(思考題:為什么要balance每一路?)舉個例子一個利用NAND tree來達到2input OR的結構如下

圖片

最后再提一個很多人都會忽視的問題,請問大家,在上面設計的無毛刺時鐘切換電路,對于其中synchronizer flop,以及clock gating cell,你有沒有考慮reset信號的影響? 如果你的reset信號是異步reset,那么當你reset active的時候,clock會立刻被切斷,那么是不是也會產生glitch?

這個問題的解決思路有兩個,一是假設你在reset狀態下選中的是clock0,那么需要你在assert reset之前要先切換到clock0;如果不是,比如reset assert的時候是clock3,那么你需要保證所有被clock3驅動的下游邏輯也都會被這個reset信號給復位。

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

    關注

    43

    文章

    447

    瀏覽量

    50075
  • SoC設計
    +關注

    關注

    1

    文章

    148

    瀏覽量

    18818
  • CDC技術
    +關注

    關注

    0

    文章

    9

    瀏覽量

    6891
  • PLL電路
    +關注

    關注

    0

    文章

    92

    瀏覽量

    6475
收藏 人收藏

    評論

    相關推薦

    從焊接角度,設計PCB的5個建議

    完成個電路板,需要PCB工程師、焊接工藝、焊接工人等諸多環節的把控。今天通過定位孔、MARK點、留邊、焊盤過孔、輔助工具這五個方面從畫板的角度跟大家PCB設計。
    的頭像 發表于 02-06 10:31 ?2042次閱讀
    從焊接角度<b class='flag-5'>聊</b><b class='flag-5'>一</b><b class='flag-5'>聊</b>,設計PCB的5個建議

    如何僅使用邏輯門和寄存器產生毛刺輸出的時鐘切換

    大部分開發者使用 BUFGCTRL 或 BUFGMUX進行時鐘切換,它們在時鐘切換上可以提供毛刺
    的頭像 發表于 08-16 09:05 ?1300次閱讀
    如何僅使用邏輯門和寄存器產生<b class='flag-5'>無</b><b class='flag-5'>毛刺</b>輸出的<b class='flag-5'>時鐘</b><b class='flag-5'>切換</b>?

    消息隊列技術選型的7種消息場景

    我們在做消息隊列的技術選型時,往往會結合業務場景進行考慮。今天來消息隊列可能會用到的 7 種消息場景。
    的頭像 發表于 12-09 17:50 ?1433次閱讀
    <b class='flag-5'>聊</b><b class='flag-5'>一</b><b class='flag-5'>聊</b>消息隊列技術選型的7種消息場景

    【皮特派硬件設計_1】時鐘毛刺切換

    行業芯事智慧辦公經驗分享
    皮特派
    發布于 :2022年03月21日 14:09:28

    Altium中Fill,Polygon Pour,Plane的區別和用法

    Fill會造成短路,為什么還用它呢?來Altium中Fill,Polygon Pour,Plane的區別和用法
    發表于 04-25 06:29

    stm32的低功耗調試

    前言:物聯網的大部分設備都是電池供電的,設備本身低功耗對延長設備使用至關重要,今天就實際調試總結stm32的低功耗調試。1、stm32在運行狀態下的功耗上圖截圖自stm32l15x手冊
    發表于 08-11 08:18

    平衡小車代碼的實現

    前言今天代碼,只有直立功能的代碼。代碼總體思路給定個目標值,單片機通過IIC和mpu6050通信,得知數據后,根據角度環計算出個P
    發表于 01-14 08:29

    FPGA的片內資源相關知識

    大家好,到了每日學習的時間了。今天我們來FPGA的片內資源相關知識。 主流的FPGA仍是基于查找表技術的,已經遠遠超出了先前版本的基本性能,并且整合了常用功能(如RAM、DCM和DSP)的硬核
    的頭像 發表于 05-25 14:11 ?8981次閱讀
    <b class='flag-5'>聊</b><b class='flag-5'>一</b><b class='flag-5'>聊</b>FPGA的片內資源相關知識

    IIC總線設計

    大家好,又到了每日學習的時間了,今天咱們來 IIC 總線設計。 、概述: IIC 是Inter-Integrated Circuit的縮寫,發音為eye-squared cee
    的頭像 發表于 06-22 10:32 ?9356次閱讀

    小米米2月19日停止服務 米宣布關閉服務器

    v8.8.70 及以上版本支持批量導出。 2010年12月10日,反應迅速的小米僅僅用了不到2個月的時間,發布了中國第款模仿kik的產品——米。Kik是款基于手機通信錄的社交軟件,用戶可以免費短信聊天。 2012年5月,
    的頭像 發表于 01-20 05:43 ?6699次閱讀

    FPGA中的彩色轉灰度的算法

    大家好,又到了每日學習的時間了,今天我們來FPGA學習中可以遇到的些算法,今天就
    的頭像 發表于 04-15 15:47 ?1999次閱讀

    時鐘毛刺注入攻擊的研究分析綜述

    時鐘毛刺注入是現實環境中有效且常用的故障注入方法。時鐘毛刺注入是通過在正常時鐘周期中引入
    發表于 04-26 14:20 ?9次下載
    <b class='flag-5'>時鐘</b><b class='flag-5'>毛刺</b>注入攻擊的研究分析綜述

    【職場雜談】與嵌入式物聯網架構師幾個話題

    【職場雜談】與嵌入式物聯網架構師幾個話題
    的頭像 發表于 08-23 09:19 ?1396次閱讀
    【職場雜談】與嵌入式物聯網架構師<b class='flag-5'>聊</b><b class='flag-5'>一</b><b class='flag-5'>聊</b>幾個話題

    簡單DPT技術-double pattern technology

    今天想來簡單DPT技術-double pattern technology,也就是雙層掩模版技術,在目前先進工藝下,這項技術已經應用的很普遍了。
    的頭像 發表于 12-05 14:26 ?2183次閱讀

    芯片設計的NDR是什么?

    今天突然想route相關的問題,講講NDR是什么,我也梳理總結下我對NDR的認識。
    的頭像 發表于 12-06 15:14 ?2312次閱讀
    百家乐改单| 澳门百家乐经历| 篮球比分直播| 立即博百家乐现金网| 百家乐官网最好的玩法| 新利百家乐的玩法技巧和规则| 百家乐官网平台凯发| 德州扑克3d豪华版| 百家乐官网网上最好网站| 永利百家乐的玩法技巧和规则 | 谈谈百家乐赢钱技巧| 金百家乐官网博彩公司| 百家乐真人现场| 在线百家乐官网作弊| 界首市| 百家乐玩法| 百家乐官网桌布无纺布| 北票市| 威尼斯人娱乐官网| 澳门百家乐出千| 澳门百家乐官网下注最低| 大发888娱乐城账号| 百家乐园百利宫娱乐城怎么样百家乐园百利宫娱乐城如何 | 百家乐官网平玩法几副牌| 百家乐官网压分规律| 大发888吧| 网络百家乐网站| 首席百家乐官网的玩法技巧和规则| 朝阳县| 顶级赌场直营| 真人百家乐视频| 百家乐网站加盟| 百家乐官网路单| 百家乐官网数据程序| 大发888 yule| 利都百家乐国际娱乐平台| 风水24山那个排第一| 网络百家乐官网输了很多钱| 百家乐网络娱乐场开户注册| 百家乐官网科学打| 皇冠足球现金网|