那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

跨時(shí)鐘域處理方法(一)

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

理論上講,快時(shí)鐘域的信號(hào)總會(huì)采集到慢時(shí)鐘域傳輸來的信號(hào),如果存在異步可能會(huì)導(dǎo)致出現(xiàn)時(shí)序問題,所以需要進(jìn)行同步處理。 此類同步處理相對(duì)簡(jiǎn)單,一般采用為延遲打拍法,或延遲采樣法。

延遲打拍法

最常用的同步方法是雙級(jí)觸發(fā)器緩存法,俗稱延遲打拍法。 即,異步信號(hào)從一個(gè)時(shí)鐘域進(jìn)入另一個(gè)時(shí)鐘域之前,將該信號(hào)用兩級(jí)觸發(fā)器連續(xù)緩存兩次,可有效降低因?yàn)闀r(shí)序不滿足而導(dǎo)致的亞穩(wěn)態(tài)問題。 電路示意圖如下。

圖片

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

兩級(jí)觸發(fā)器延遲打拍并檢測(cè)信號(hào)上升沿的 Verilog 描述如下:

module delay_clap(
    input       clk1,  //異步慢時(shí)鐘
    input       sig1,  //異步信號(hào)


    input       rstn,  //復(fù)位信號(hào)
    input       clk2,  //目的快時(shí)鐘域時(shí)鐘
    output      sig2); //快時(shí)鐘域同步后的信號(hào)


   reg [2:0]    sig2_r ;   //3級(jí)緩存,前兩級(jí)用于同步,后兩節(jié)用于邊沿檢測(cè)
   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] ; //上升沿檢測(cè)

延遲采樣法

此方法主要針對(duì)多位寬的數(shù)據(jù)傳輸。

例如當(dāng)兩個(gè)異步時(shí)鐘頻率比為 5 時(shí),可以先用延遲打拍的方法對(duì)數(shù)據(jù)使能信號(hào)進(jìn)行 2 級(jí)打拍緩存,然后再在快時(shí)鐘域?qū)β龝r(shí)鐘域的數(shù)據(jù)信號(hào)進(jìn)行采集。

該方法主要思想是保證安全采集的時(shí)刻,而不用同步多位寬的數(shù)據(jù)信號(hào),可節(jié)省部分硬件資源。

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

//同步模塊工作時(shí)鐘為 100MHz 的模塊
//異步數(shù)據(jù)對(duì)來自工作時(shí)鐘為 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

該方法時(shí)序結(jié)果圖如下所示。

顯然,在 clk2 時(shí)鐘域,t2 時(shí)刻對(duì)數(shù)據(jù)進(jìn)行采樣緩存比 t1 時(shí)刻要安全的多。

圖片

但如果慢時(shí)鐘域沒有數(shù)據(jù)使能信號(hào) din_en, 或數(shù)據(jù)使能信號(hào)一直有效,此時(shí)在快時(shí)鐘域?qū)?shù)據(jù)使能信號(hào)上升沿進(jìn)行檢測(cè)的方法將會(huì)失效。 因?yàn)閿?shù)據(jù)使能信號(hào)一直有效,除了第一個(gè)數(shù)據(jù),快時(shí)鐘域?qū)o法檢測(cè)到后繼數(shù)據(jù)的傳輸時(shí)刻。

解決方法就是,在快時(shí)鐘域?qū)β龝r(shí)鐘信號(hào)的邊沿進(jìn)行檢測(cè)。

如果兩個(gè)時(shí)鐘的頻率相差較小,可能還需要對(duì)數(shù)據(jù)進(jìn)行延遲緩存,以保證采集到的是當(dāng)拍時(shí)鐘的數(shù)據(jù); 如果兩個(gè)時(shí)鐘的頻率相差較大,數(shù)據(jù)采樣時(shí)刻可以通過計(jì)數(shù)的方法獲得,而不用對(duì)數(shù)據(jù)進(jìn)行緩存。

利用計(jì)數(shù)延遲采樣的方法對(duì)慢時(shí)鐘邊沿進(jìn)行檢測(cè)的 Verilog 模型描述如下。

//同步模塊工作時(shí)鐘為 100MHz 的模塊
//異步數(shù)據(jù)對(duì)來自工作時(shí)鐘為 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級(jí)緩存:3級(jí)用于打拍同步,一級(jí)用于邊沿檢測(cè)
   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] ;


   //延遲計(jì)數(shù)器,檢測(cè)到慢時(shí)鐘上升沿時(shí)開始計(jì)數(shù)
   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


   //數(shù)據(jù)同步
   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) //大約在慢時(shí)鐘周期中間時(shí)刻采樣
        dout_r         <= din ;
   end
   //數(shù)據(jù)使能信號(hào)較數(shù)據(jù)采樣時(shí)刻延遲一個(gè)周期輸出
   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

頻率相差較大的數(shù)據(jù)同步采樣結(jié)果圖如下。

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

圖片

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 信號(hào)
    +關(guān)注

    關(guān)注

    11

    文章

    2804

    瀏覽量

    77100
  • 觸發(fā)器
    +關(guān)注

    關(guān)注

    14

    文章

    2003

    瀏覽量

    61347
  • 時(shí)鐘域
    +關(guān)注

    關(guān)注

    0

    文章

    52

    瀏覽量

    9573
  • 異步信號(hào)
    +關(guān)注

    關(guān)注

    0

    文章

    9

    瀏覽量

    7031
  • 時(shí)鐘采樣
    +關(guān)注

    關(guān)注

    0

    文章

    4

    瀏覽量

    3376
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    關(guān)于時(shí)鐘信號(hào)的處理方法

    我在知乎看到了多bit信號(hào)時(shí)鐘的問題,于是整理了下自己對(duì)于時(shí)鐘信號(hào)的
    的頭像 發(fā)表于 10-09 10:44 ?6384次閱讀

    如何處理好FPGA設(shè)計(jì)中時(shí)鐘問題?

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

    探尋FPGA中三種時(shí)鐘處理方法

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

    三種時(shí)鐘處理方法

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

    如何處理好FPGA設(shè)計(jì)中時(shí)鐘間的數(shù)據(jù)

    時(shí)鐘處理是FPGA設(shè)計(jì)中經(jīng)常遇到的問題,而如何處理時(shí)
    發(fā)表于 07-29 06:19

    如何處理時(shí)鐘間的數(shù)據(jù)呢

    時(shí)鐘處理是什么意思?如何處理時(shí)鐘
    發(fā)表于 11-01 07:44

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

    時(shí)鐘處理是FPGA設(shè)計(jì)中經(jīng)常遇到的問題,而如何處理時(shí)
    發(fā)表于 11-15 20:08 ?1.4w次閱讀

    cdc路徑方案幫您解決時(shí)鐘難題

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

    揭秘FPGA時(shí)鐘處理的三大方法

    時(shí)鐘處理是 FPGA 設(shè)計(jì)中經(jīng)常遇到的問題,而如何處理
    的頭像 發(fā)表于 12-05 16:41 ?1703次閱讀

    關(guān)于時(shí)鐘的詳細(xì)解答

    個(gè)做數(shù)字邏輯的都繞不開時(shí)鐘處理,談談SpinalHDL里用于
    的頭像 發(fā)表于 04-27 10:52 ?4336次閱讀
    關(guān)于<b class='flag-5'>跨</b><b class='flag-5'>時(shí)鐘</b><b class='flag-5'>域</b>的詳細(xì)解答

    介紹3種方法時(shí)鐘處理方法

    時(shí)鐘處理是FPGA設(shè)計(jì)中經(jīng)常遇到的問題,而如何處理時(shí)
    的頭像 發(fā)表于 09-18 11:33 ?2.2w次閱讀
    介紹3種<b class='flag-5'>方法</b><b class='flag-5'>跨</b><b class='flag-5'>時(shí)鐘</b><b class='flag-5'>域</b><b class='flag-5'>處理</b><b class='flag-5'>方法</b>

    SpinalHDL里用于時(shí)鐘處理些手段方法

    個(gè)做數(shù)字邏輯的都繞不開時(shí)鐘處理,談談SpinalHDL里用于
    的頭像 發(fā)表于 07-11 10:51 ?1963次閱讀

    三種時(shí)鐘處理方法

    時(shí)鐘處理是FPGA設(shè)計(jì)中經(jīng)常遇到的問題,而如何處理時(shí)
    的頭像 發(fā)表于 10-18 09:12 ?8000次閱讀

    FPGA時(shí)鐘處理方法()

    時(shí)鐘是FPGA設(shè)計(jì)中最容易出錯(cuò)的設(shè)計(jì)模塊,而且時(shí)鐘
    的頭像 發(fā)表于 05-25 15:06 ?2081次閱讀
    FPGA<b class='flag-5'>跨</b><b class='flag-5'>時(shí)鐘</b><b class='flag-5'>域</b><b class='flag-5'>處理</b><b class='flag-5'>方法</b>(<b class='flag-5'>一</b>)

    FPGA時(shí)鐘處理方法(二)

    篇文章已經(jīng)講過了單bit時(shí)鐘處理方法,這次解說
    的頭像 發(fā)表于 05-25 15:07 ?1082次閱讀
    FPGA<b class='flag-5'>跨</b><b class='flag-5'>時(shí)鐘</b><b class='flag-5'>域</b><b class='flag-5'>處理</b><b class='flag-5'>方法</b>(二)
    乌海市| 百家乐官网游戏平台架设| 大发888娱乐场下载客户端| 至尊百家乐20111110| 网上百家乐官网有哪些玩法 | 大发888玩的人多吗| 易胜博百家乐作弊| 三元玄空24山坐向开门| 百家乐官网注码技术打法| 囊谦县| 大发888登录器下载| 三亚百家乐的玩法技巧和规则| 百家乐视频游戏注册| 爱拼百家乐官网的玩法技巧和规则| 真人百家乐官网娱乐场| 光山县| 六合彩官方网| 大发888下载新澳博| 游戏百家乐押金| 百家乐路单破解方法| 闲和庄百家乐官网娱乐| 百家乐官网投注技巧公式| 百家乐官网棋牌公式| bet365官网| 大发888娱乐城3403| 百家乐专用| 百家乐平台注册| 线上百家乐赢钱| 同花顺百家乐官网娱乐城| 百家乐官网注码技术打法| 百家乐官网波音平台开户导航| 百家乐官网看点打法| 金尊国际娱乐城| 电子百家乐官网假在线哪| 足球系统出租| 威尼斯人娱乐城 线路畅通中心 | 百家乐官网游戏唯一官网站| 成安县| 六合彩开码结果| 威尼斯人娱乐城--老品牌值得您信赖| 百家乐做中介赚钱|