一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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:52 ? 次閱讀

時(shí)鐘域采集從快時(shí)鐘域傳輸來的信號(hào)時(shí),需要根據(jù)信號(hào)的特點(diǎn)來進(jìn)行同步處理。 對(duì)于單 bit 信號(hào),一般可根據(jù)電平信號(hào)和脈沖信號(hào)來區(qū)分。

電平信號(hào)同步

同步邏輯設(shè)計(jì)中,電平信號(hào)是指長(zhǎng)時(shí)間保持不變的信號(hào)。 保持不變的時(shí)間限定,是相對(duì)于慢時(shí)鐘而言的。 只要快時(shí)鐘的信號(hào)保持高電平或低電平的時(shí)間足夠長(zhǎng),以至于能被慢時(shí)鐘在滿足時(shí)序約束的條件下采集到,就可以認(rèn)為該信號(hào)為電平信號(hào)。

既然電平信號(hào)能夠被安全的采集到,所以從快時(shí)鐘域到慢時(shí)鐘域的電平信號(hào)也采用延遲打拍的方法做同步。

脈沖信號(hào)同步

同步邏輯設(shè)計(jì)中,脈沖信號(hào)是指從快時(shí)鐘域輸出的有效寬度小于慢時(shí)鐘周期的信號(hào)。 如果慢時(shí)鐘域直接去采集這種窄脈沖信號(hào),有可能會(huì)采集不到。

假如這種脈沖信號(hào)脈寬都是一致的,在知道兩個(gè)時(shí)鐘頻率比的情況下,可以采用“快時(shí)鐘域脈寬擴(kuò)展+慢時(shí)鐘域延遲打拍”的方法進(jìn)行同步。

如果有時(shí)窄脈沖信號(hào)又表現(xiàn)出電平信號(hào)的特點(diǎn),即有時(shí)信號(hào)的有效寬度大于慢時(shí)鐘周期而能被慢時(shí)鐘采集到,那么對(duì)此類信號(hào)再進(jìn)行脈沖擴(kuò)展顯然是不經(jīng)濟(jì)的。 此時(shí),可通過“握手傳輸”的方法進(jìn)行同步。

假設(shè)脈沖信號(hào)的高電平期間為有效信號(hào)期間,其基本原理如下。

(1) 快時(shí)鐘域?qū)γ}沖信號(hào)進(jìn)行檢測(cè),檢測(cè)為高電平時(shí)輸出高電平信號(hào) pulse_fast_r。 或者快時(shí)鐘域輸出信號(hào)時(shí),不要急于將信號(hào)拉低,先保持輸出信號(hào)為高電平狀態(tài)。

(2) 慢時(shí)鐘域?qū)鞎r(shí)鐘域的信號(hào) pulse_fast_r 進(jìn)行延遲打拍采樣。 因?yàn)榇藭r(shí)的脈沖信號(hào)被快時(shí)鐘域保持拉高狀態(tài),延遲打拍肯定會(huì)采集到該信號(hào)。

(3) 慢時(shí)鐘域確認(rèn)采樣得到高電平信號(hào) pulse_fast2s_r 后,再反饋給快時(shí)鐘域。

(4) 快時(shí)鐘域?qū)Ψ答佇盘?hào) pulse_fast2s_r 進(jìn)行延遲打拍采樣。 如果檢測(cè)到反饋信號(hào)為高電平,證明慢時(shí)鐘域已經(jīng)接收到有效的高電平信號(hào)。 如果此時(shí)快時(shí)鐘域自身邏輯不再要求脈沖信號(hào)為高電平狀態(tài),拉低快時(shí)鐘域的脈沖信號(hào)即可。

此方法實(shí)質(zhì)是通過相互握手的方式對(duì)窄脈沖信號(hào)進(jìn)行脈寬擴(kuò)展。

利用握手信號(hào)進(jìn)行同步處理的 Verilog 模型描述如下。

//同步模塊工作時(shí)鐘大約為 25MHz 的模塊
//異步數(shù)據(jù)對(duì)來自工作時(shí)鐘為 100MHz 的模塊
module pulse_syn_fast2s
  #( parameter          PULSE_INIT = 1'b0
   )
  (
   input                rstn,
   input                clk_fast,
   input                pulse_fast,
   input                clk_slow,
   output               pulse_slow);


   wire                 clear_n ;
   reg                  pulse_fast_r ;
   /**************** fast clk ***************/
   //(1) 快時(shí)鐘域檢測(cè)到脈沖信號(hào)時(shí),不急于將脈沖信號(hào)拉低
   always@(posedge clk_fast or negedge rstn) begin
        if (!rstn)
           pulse_fast_r  <= PULSE_INIT ;
        else if (!clear_n)
           pulse_fast_r  <= 1'b0 ;
        else if (pulse_fast)
           pulse_fast_r  <= 1'b1 ;
   end


   reg  [1:0]           pulse_fast2s_r ;
   /************ slow clk *************/
   //(2) 慢時(shí)鐘域?qū)π盘?hào)進(jìn)行延遲打拍采樣
   always@(posedge clk_slow or negedge rstn) begin
      if (!rstn)
        pulse_fast2s_r     <= 3'b0 ;
      else
        pulse_fast2s_r     <= {pulse_fast2s_r[0], pulse_fast_r} ;
   end
   assign pulse_slow = pulse_fast2s_r[1] ;


   reg [1:0]            pulse_slow2f_r ;
   /********* feedback for slow clk to fast clk *******/
   //(3) 對(duì)反饋信號(hào)進(jìn)行延遲打拍采樣
   always@(posedge clk_fast or negedge rstn) begin
      if (!rstn)
        pulse_slow2f_r  <= 1'b0 ;
      else
        pulse_slow2f_r  <= {pulse_slow2f_r[0], pulse_slow} ;
   end
   //控制快時(shí)鐘域脈沖信號(hào)拉低
   assign clear_n = ~(!pulse_fast && pulse_slow2f_r[1]) ;


endmodule

testbench 描述如下。

`timescale 1ns/1ps


module test ;
   reg          clk_100mhz, clk_25mhz ;
   reg          rstn ;


   initial begin
      clk_100mhz = 0 ;
      clk_25mhz  = 0 ;
      rstn = 0 ;
      #11 rstn = 1 ;
   end
   always #(10/2)   clk_100mhz  = ~clk_100mhz ;
   always #(45/2)   clk_25mhz   = ~clk_25mhz ;


   reg [7:0]            cnt ;
   reg                  pulse_sig ;
   always @(posedge clk_100mhz or negedge rstn) begin
      if (!rstn) begin
         cnt     <= 'b0 ;
      end
      else begin
         cnt    <= cnt + 1'b1 ;
      end
   end


   //窄脈沖生成部分
   always @(posedge clk_100mhz or negedge rstn) begin
      if (!rstn) begin
         pulse_sig      <= 1'b0 ;
      end
      else if (cnt == 5 ||
               cnt == 40 || cnt == 42 ||
               cnt >= 75 && cnt <= 81 || cnt == 85 || cnt == 87 ) 
      begin
         pulse_sig      <= 1'b1 ;
      end
      else begin
         pulse_sig      <= 1'b0 ;
      end
   end


   pulse_syn_fast2s u_fast2s_pulse(
      .rstn             (rstn),
      .clk_fast         (clk_100mhz),
      .pulse_fast       (pulse_sig),
      .clk_slow         (clk_25mhz),
      .pulse_slow       ());


   initial begin
      forever begin
         #100;
         if ($time >= 10000)  $finish ;
      end
   end


endmodule // test

仿真結(jié)果如下,由圖可知:

(1) 快時(shí)鐘域單個(gè)窄脈沖信號(hào)被慢時(shí)鐘域采集到,但是同步后的信號(hào)延遲較長(zhǎng),脈沖寬度較大。 信號(hào)延遲是因?yàn)檠舆t打拍和反饋清零決定的,無法避免。 脈寬問題,可以通過對(duì)慢時(shí)鐘域的信號(hào)再進(jìn)行打拍邊沿檢測(cè)的方法進(jìn)行處理。

(2) 兩個(gè)窄脈沖信號(hào)同步后的信號(hào)脈寬與單個(gè)窄脈沖沒有差異,也就是說,同步電路漏掉了第二個(gè)窄脈沖的檢測(cè)。 這也屬于握手傳輸處理同步問題的特點(diǎn),當(dāng)快時(shí)鐘域的脈沖信號(hào)變化速率過快時(shí),該方法不能分辨相鄰的脈沖。

(3) 當(dāng)多個(gè)寬窄脈沖信號(hào)相鄰較近時(shí),雖然該同步方法不能分辨多個(gè)脈沖信號(hào),但同步后的信號(hào)脈寬可能會(huì)相對(duì)大一些。

圖片

多位寬數(shù)據(jù)同步

當(dāng)多位寬數(shù)據(jù)進(jìn)行同步時(shí),如果該數(shù)據(jù)各 bit 位都可以看作電平信號(hào),即相對(duì)一段時(shí)間內(nèi)各 bit 位數(shù)據(jù)均可以保持不變以至于能被慢時(shí)鐘采集到,可以消耗一些觸發(fā)器資源對(duì)多位寬數(shù)據(jù)進(jìn)行簡(jiǎn)單的延遲打拍同步。

但如果數(shù)據(jù)變化速率過快,就不能再使用延遲打拍采樣的方法。 因?yàn)榇藭r(shí)數(shù)據(jù)各 bit 位不再是電平信號(hào),變化的時(shí)間也參差不齊,用異步時(shí)鐘進(jìn)行打拍采樣,可能會(huì)采集到因路徑延遲不停而導(dǎo)致的錯(cuò)誤數(shù)據(jù),即時(shí)序上存在 violation。

解決此類異步問題常用的方法是采用異步 FIFO (First In First Out)。

聲明:本文內(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

    文章

    2834

    瀏覽量

    77762
  • 脈沖信號(hào)
    +關(guān)注

    關(guān)注

    6

    文章

    402

    瀏覽量

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

    關(guān)注

    0

    文章

    52

    瀏覽量

    9708
  • 異步時(shí)鐘
    +關(guān)注

    關(guān)注

    0

    文章

    17

    瀏覽量

    9473
  • 電平信號(hào)
    +關(guān)注

    關(guān)注

    3

    文章

    26

    瀏覽量

    9230
收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

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

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

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

    級(jí)寄存器的延拍,所以意義是不大的。02方法:異步雙口 RAM處理多 bit 數(shù)據(jù)的時(shí)鐘
    發(fā)表于 09-22 10:24

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

    級(jí)寄存器的延拍,所以意義是不大的。02方法:異步雙口 RAM處理多 bit 數(shù)據(jù)的時(shí)鐘
    發(fā)表于 10-20 09:27

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

    ,所以意義是不大的?! ?b class='flag-5'>方法:異步雙口RAM  處理多bit數(shù)據(jù)的時(shí)鐘,一般采用異步雙口R
    發(fā)表于 01-08 16:55

    FPGA初學(xué)者的必修課:FPGA時(shí)鐘處理3大方法

    第三級(jí)寄存器,由于第級(jí)寄存器對(duì)于亞穩(wěn)態(tài)的處理已經(jīng)起到了很大的改善作用,第三級(jí)寄存器在很大程度上可以說只是對(duì)于第級(jí)寄存器的延拍,所以意義是不大的。02方法
    發(fā)表于 03-04 09:22

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

    介紹3種時(shí)鐘處理方法,這3種方法可以說是FPGA界最常用也最實(shí)用的
    發(fā)表于 07-29 06:19

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

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

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

    介紹3種時(shí)鐘處理方法,這3種方法可以說是FPGA界最常用也最實(shí)用的
    發(fā)表于 11-15 20:08 ?1.4w次閱讀

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

    時(shí)鐘處理方法,這三種方法可以說是 FPGA 界最常用也最實(shí)用的
    的頭像 發(fā)表于 12-05 16:41 ?1850次閱讀

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

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

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

    介紹3種時(shí)鐘處理方法,這3種方法可以說是FPGA界最常用也最實(shí)用的
    的頭像 發(fā)表于 09-18 11:33 ?2.3w次閱讀
    介紹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里用于時(shí)鐘
    的頭像 發(fā)表于 07-11 10:51 ?2135次閱讀

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

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

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

    時(shí)鐘是FPGA設(shè)計(jì)中最容易出錯(cuò)的設(shè)計(jì)模塊,而且一旦時(shí)鐘出現(xiàn)問題,定位排查會(huì)非常困難,因?yàn)?/div>
    的頭像 發(fā)表于 05-25 15:06 ?2326次閱讀
    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>(一)

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

    上一篇文章已經(jīng)講過了單bit時(shí)鐘處理方法,這次解說一下多bit的
    的頭像 發(fā)表于 05-25 15:07 ?1211次閱讀
    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>)