色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

跨時鐘域處理方法(一)

CHANBAEK ? 來源:數字IC與好好生活的兩居室 ? 作者:除夕之夜啊 ? 2023-03-28 13:50 ? 次閱讀

理論上講,快時鐘域的信號總會采集到慢時鐘域傳輸來的信號,如果存在異步可能會導致出現時序問題,所以需要進行同步處理。 此類同步處理相對簡單,一般采用為延遲打拍法,或延遲采樣法。

延遲打拍法

最常用的同步方法是雙級觸發器緩存法,俗稱延遲打拍法。 即,異步信號從一個時鐘域進入另一個時鐘域之前,將該信號用兩級觸發器連續緩存兩次,可有效降低因為時序不滿足而導致的亞穩態問題。 電路示意圖如下。

圖片

一般設計中使用兩級觸發器進行緩存即可滿足設計時序需求。 大量實驗研究表明,三級觸發器緩存可解決 99% 以上的此類異步時序問題。

兩級觸發器延遲打拍并檢測信號上升沿的 Verilog 描述如下:

module delay_clap(
    input       clk1,  //異步慢時鐘
    input       sig1,  //異步信號


    input       rstn,  //復位信號
    input       clk2,  //目的快時鐘域時鐘
    output      sig2); //快時鐘域同步后的信號


   reg [2:0]    sig2_r ;   //3級緩存,前兩級用于同步,后兩節用于邊沿檢測
   always @(posedge clk2 or negedge rstn) begin
     if (!rstn) sig2_r  <= 3'b0 ;
     else       sig2_r  <= {sig2_r[1:0], sig1} ;  //緩存
   end
   assign sig2 = sig2_r[1] && !sig2_r[2] ; //上升沿檢測

延遲采樣法

此方法主要針對多位寬的數據傳輸。

例如當兩個異步時鐘頻率比為 5 時,可以先用延遲打拍的方法對數據使能信號進行 2 級打拍緩存,然后再在快時鐘域對慢時鐘域的數據信號進行采集。

該方法主要思想是保證安全采集的時刻,而不用同步多位寬的數據信號,可節省部分硬件資源。

利用打拍的方法進行延遲采樣的 Verilog 模型描述如下。

//同步模塊工作時鐘為 100MHz 的模塊
//異步數據對來自工作時鐘為 20MHz 的模塊
module delay_sample(
    input               rstn,
    input               clk1,
    input [31:0]        din,
    input               din_en,


    input               clk2,
    output [31:0]       dout,
    output              dout_en);


   //sync din_en
   reg [2:0]    din_en_r ;
   always @(posedge clk2 or negedge rstn) begin
     if (!rstn) din_en_r  <= 3'b0 ;
     else       din_en_r  <= {din_en_r[1:0], din_en} ;
   end
   wire din_en_pos = din_en_r[1] && !din_en_r[2] ;


   //sync data
   reg [31:0]           dout_r ;
   reg                  dout_en_r ;
   always @(posedge clk2 or negedge rstn) begin
      if (!rstn)
        dout_r         <= 'b0 ;
      else if (din_en_pos)
        dout_r         <= din ;
   end
   //dout_en delay
   always @(posedge clk2 or negedge rstn) begin
      if (!rstn)        dout_en_r      <= 1'b0 ;
      else              dout_en_r      <= din_en_pos ;
   end
   assign       dout    = dout_r ;
   assign       dout_en = dout_en_r ;


endmodule

該方法時序結果圖如下所示。

顯然,在 clk2 時鐘域,t2 時刻對數據進行采樣緩存比 t1 時刻要安全的多。

圖片

但如果慢時鐘域沒有數據使能信號 din_en, 或數據使能信號一直有效,此時在快時鐘域對數據使能信號上升沿進行檢測的方法將會失效。 因為數據使能信號一直有效,除了第一個數據,快時鐘域將無法檢測到后繼數據的傳輸時刻。

解決方法就是,在快時鐘域對慢時鐘信號的邊沿進行檢測。

如果兩個時鐘的頻率相差較小,可能還需要對數據進行延遲緩存,以保證采集到的是當拍時鐘的數據; 如果兩個時鐘的頻率相差較大,數據采樣時刻可以通過計數的方法獲得,而不用對數據進行緩存。

利用計數延遲采樣的方法對慢時鐘邊沿進行檢測的 Verilog 模型描述如下。

//同步模塊工作時鐘為 100MHz 的模塊
//異步數據對來自工作時鐘為 999KHz 的模塊
module delay_cnt_sample(
    input               rstn,
    input               clk1,
    input [31:0]        din,
    input               din_en,


    input               clk2,
    output [31:0]       dout,
    output              dout_en);


   //4級緩存:3級用于打拍同步,一級用于邊沿檢測
   reg [3:0]    edge_r ;
   always @(posedge clk2 or negedge rstn) begin
     if (!rstn) edge_r  <= 3'b0 ;
     else       edge_r  <= {edge_r[3:0], clk1} ;
   end
   wire edge_pos = edge_r[2] && !edge_r[3] ;


   //延遲計數器,檢測到慢時鐘上升沿時開始計數
   reg [5:0] cnt ;
   always @(posedge clk2 or negedge rstn) begin
      if (!rstn)                cnt <= 6'h3f ;
      else if (edge_pos && din_en)
                                cnt <= 6'h0 ;
      else if (cnt != 6'h3f)    cnt <= cnt + 1'b1 ;
   end


   //數據同步
   reg [31:0]           dout_r ;
   reg                  dout_en_r ;
   always @(posedge clk2 or negedge rstn) begin
      if (!rstn)
        dout_r         <= 'b0 ;
      else if (din_en && cnt == 47) //大約在慢時鐘周期中間時刻采樣
        dout_r         <= din ;
   end
   //數據使能信號較數據采樣時刻延遲一個周期輸出
   always @(posedge clk2 or negedge rstn) begin
      if (!rstn)        dout_en_r      <= 1'b0 ;
      else if (din_en && cnt==48)
                        dout_en_r      <= 1'b1 ;
      else              dout_en_r      <= 1'b0 ;
   end
   assign       dout    = dout_r ;
   assign       dout_en = dout_en_r ;


endmodule

頻率相差較大的數據同步采樣結果圖如下。

由圖可知,快時鐘采樣時刻在慢時鐘周期中央時刻左右,此時是非常安全的。

圖片

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

    關注

    11

    文章

    2794

    瀏覽量

    76887
  • 觸發器
    +關注

    關注

    14

    文章

    2000

    瀏覽量

    61221
  • 時鐘域
    +關注

    關注

    0

    文章

    52

    瀏覽量

    9542
  • 異步信號
    +關注

    關注

    0

    文章

    9

    瀏覽量

    7024
  • 時鐘采樣
    +關注

    關注

    0

    文章

    4

    瀏覽量

    3372
收藏 人收藏

    評論

    相關推薦

    關于時鐘信號的處理方法

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

    如何處理好FPGA設計中時鐘問題?

    以手到擒來。這里介紹的三種方法時鐘處理方法如下:打兩拍;異步雙口 RAM;格雷碼轉換。01
    發表于 09-22 10:24

    探尋FPGA中三種時鐘處理方法

    以手到擒來。這里介紹的三種方法時鐘處理方法如下:打兩拍;異步雙口 RAM;格雷碼轉換。01
    發表于 10-20 09:27

    三種時鐘處理方法

    的三種方法時鐘處理方法如下:  1. 打兩拍;  2. 異步雙口RAM;  3. 格雷碼轉換
    發表于 01-08 16:55

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

    時鐘處理是FPGA設計中經常遇到的問題,而如何處理
    發表于 07-29 06:19

    如何處理時鐘間的數據呢

    時鐘處理是什么意思?如何處理時鐘
    發表于 11-01 07:44

    FPGA界最常用也最實用的3種時鐘處理方法

    時鐘處理是FPGA設計中經常遇到的問題,而如何處理
    發表于 11-15 20:08 ?1.4w次閱讀

    cdc路徑方案幫您解決時鐘難題

    章介紹下CDC也就是時鐘可能存在的些問題以及基本的
    的頭像 發表于 11-30 06:29 ?7224次閱讀
    cdc路徑方案幫您解決<b class='flag-5'>跨</b><b class='flag-5'>時鐘</b><b class='flag-5'>域</b>難題

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

    時鐘處理是 FPGA 設計中經常遇到的問題,而如何處理
    的頭像 發表于 12-05 16:41 ?1667次閱讀

    關于時鐘的詳細解答

    個做數字邏輯的都繞不開時鐘處理,談談SpinalHDL里用于
    的頭像 發表于 04-27 10:52 ?4293次閱讀
    關于<b class='flag-5'>跨</b><b class='flag-5'>時鐘</b><b class='flag-5'>域</b>的詳細解答

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

    時鐘處理是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><b class='flag-5'>方法</b>

    SpinalHDL里用于時鐘處理些手段方法

    個做數字邏輯的都繞不開時鐘處理,談談SpinalHDL里用于
    的頭像 發表于 07-11 10:51 ?1918次閱讀

    三種時鐘處理方法

    時鐘處理是FPGA設計中經常遇到的問題,而如何處理
    的頭像 發表于 10-18 09:12 ?7887次閱讀

    FPGA時鐘處理方法()

    時鐘是FPGA設計中最容易出錯的設計模塊,而且時鐘
    的頭像 發表于 05-25 15:06 ?2027次閱讀
    FPGA<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時鐘處理方法(二)

    篇文章已經講過了單bit時鐘處理方法,這次解說
    的頭像 發表于 05-25 15:07 ?1051次閱讀
    FPGA<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>(二)
    主站蜘蛛池模板: 在线精品视频成人网| 鸥美一级黄色片| 1000视频在线播放| 手机看片成人| 美女拔萝卜| 国产亚洲精品久久7777777| 97亚洲狠狠色综合久久位| 亚洲 成人网| 色色色999| 欧美亚洲日韩欧洲不卡| 久久伊人在| 黑人干亚洲人| 国产高清精品国语特黄A片| 99热这里只有是精品| 曰批国产精品视频免费观看| 羞羞影院午夜男女爽爽免费| 日本无码人妻丰满熟妇5G影院 | china chinese中国人玩| 亚洲日韩乱码人人爽人人澡人| 四虎成人影院| 日韩成人性视频| 女教师二十三岁| 久久综合久久鬼色| 久久国产亚洲电影天堂| 国产在线精品一区二区网站免费| 4484在线观看视频| 亚洲熟伦熟女专区| 亚洲国产成人爱AV在线播放丿| 色播成人影院| 欧美精品AV无码一区二区| 蜜芽tv在线观看免费网站| 九九热在线观看视频| 护士的下面又湿又紧10P| 国产欧美一区二区三区视频| 国产精品96久久久久久AV不卡| 国产 欧美 亚洲 日韩视频| 岛国电影网址| 高清国语自产拍在线| 国产成人精品免费视频大| 福利一区国产| 国产成人精品123区免费视频|