• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 牛人業話 > 【從零開始走進FPGA】你想干嘛——邊沿檢測技術

    【從零開始走進FPGA】你想干嘛——邊沿檢測技術

    作者: 時間:2015-02-03 來源:網絡 收藏

      一、為什么要講

    本文引用地址:http://www.czjhyjcfj.com/article/269397.htm

      也許,沒有那么一本教科書,會說到這個重要的思想;也許,學了很久的你,有可能不知道這個重要的思想吧。很慚愧,我也是在當年學了1年后才領悟到這個思想的。

      說實話,我的成長很艱辛,沒有人能給我系統的指導,而我得撐起這一片藍天,于是乎無數個漏洞,我一直在修補我的不足。我沒能對自己滿足過,不是說我“貪得無厭”,而是,我不夠“完美”。人可以不完美,但不可以不追求完美;或許終點永遠達不到,但努力的過程,你一直在靠近完美;有方向感地奮斗,讓你永遠立于不敗之地。

      也許我看的書不夠多,但學校暑假那邊關于的的書,我都翻過一遍了;特權的《深入淺出玩轉》是我所看過的書中,唯一一本涉及到這個重要思想的書,也許這就是有過項目實戰的人出的書,和官方理論教材的區別吧。

      說起,還有過一個故事:

      話說七哥當年,去一家公司面試。考官給他一支筆,讓他用邏輯門畫出電路。話音剛落,七哥持筆揮霍,數秒鐘內畫出了邊沿檢測的電路圖,并且給出了完美的解釋。瞬間思維的展現與重要應用的說明,讓考官目瞪口呆。據說,七哥贏了,這之后,七哥便被那家公司錄用了,一路牛逼,到了今天,證明了自己,取得了很大的成績。

      二、什么是邊沿檢測

      所謂邊沿檢測,就是檢測輸入信號,或者FPGA內部邏輯信號的跳變,即上升沿或者下降沿的檢測。這在FPGA電路設計中相當的廣泛,幾乎我每一個稍微完善的工程都會應用到這個思想;后續章節的講解,也不少這個思維的應用。

      以下是七哥當年用決定自己工作的一張圖,Bingo在Quartus II Block中用邏輯門畫了出來:

      

    wps_clip_image-28203

     

      如上圖5個信號:

      

    image

     

      正常工作,沒有復位的情況下,工作流程如下:

      (1)D觸發器經過時鐘clk的觸發,輸出trigger信號,保存了t0時刻的信號。

      (2)同時由trigger通過非門輸出信號,保留了當前時刻t1的觸發信號

      (3)經過與門輸出信號pos_edge,neg_edge

      a) 只有t0時刻為高,且t1時候為低的時候,與門輸出高,此時為下降沿。

      b) 只有to時候為低,且t1時候為高的時候,與門輸出高,此時為上升沿。

      當然,在復位的時刻,DFF被復位,無法檢測觸發信號。

      三、實現邊沿檢測的最優化

      1. Block或Verilog實現

      一般為了防止觸發信號的波動,加幾級觸發器,消除抖動,使得信號更穩定。

      此例程中,相對于上圖多了觸發器。其用觸發器對信號打慢兩拍,使得觸發信號然后在進行相關的處理;再來檢測邊沿的上升沿,下降沿。

      (1)用Block畫圖實現

      

    wps_clip_image-4666

     

      (2)用verilog代碼實現

      edge_tech_design.v代碼如下所示:

      /*****************************************************

      * Module Name : edge_tech_design.v

      * Engineer : Crazy Bingo

      * Target Device : EP2C8Q208C8

      * Tool versions : Quartus II 11.0

      * Create Date : 2011-6-25

      * Revision : v1.0

      * Description :

      *****************************************************/

      module edge_tech_design

      (

      input clk,

      input rst_n,

      input trigger,

      output pos_edge,

      output neg_edge

      );

      //Capture the rising_endge & falling_edge

      reg trigger_r0,trigger_r1,trigger_r2;

      always@(posedge clk or negedge rst_n)

      begin

      if(!rst_n)

      begin

      trigger_r0 <= 1'b0;

      trigger_r1 <= 1'b0;

      trigger_r2 <= 1'b0;

      end

      else

      begin

      trigger_r0 <= trigger;

      trigger_r1 <= trigger_r0;

      trigger_r2 <= trigger_r1;

      end

      end

      assign pos_edge = trigger_r1 & ~trigger_r2;

      assign neg_edge = ~trigger_r1 & trigger_r2;

      endmodule

      編譯后,分析Quartus II RTL圖,如下所示,與Bingo在Block用邏輯門設計的一樣,說明了代碼的正確性。

      

    wps_clip_image-9451

     

      (3)Modelsim-Altera仿真圖如下所示,在上升沿(下降沿)到來的時候,時序能夠及時準確的檢測到。

      2. 邊沿檢測應用

      邊沿檢測技術在項目應用中,非常低廣泛。如要有效捕獲信號跳變沿,邊沿檢測技術的應用是必不可少的。Bingo大致歸納了一下,有如下幾個方面

      (1)將時鐘邊沿使能轉換為邊沿檢測使能,使時鐘同步化。

      (2)捕獲信號的突變(UART,SPI等信號使能突變)

      (3)邏輯分析儀中信號的邊沿檢測。

      3. 實現指標及存在缺陷

      沒有十全十美的東西,也沒有十全十美的電路、代碼;本章節中所介紹的邊沿檢測技術亦如此。有如下缺陷:

      (1)增大CLK信號可以增強邊沿檢測的效率,但不能濾去跳變的雜波。

      (2)減少CLK可以有效濾去跳變的雜波,但不能及時檢測到邊沿跳變。

      (3)增加DFF能更好的濾除雜波,寄存信號,但同時檢測延時大。

    fpga相關文章:fpga是什么


    電路圖符號相關文章:電路圖符號大全




    關鍵詞: FPGA 邊沿檢測

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 蓬莱市| 绍兴县| 河东区| 汝阳县| 罗定市| 广水市| 建平县| 兴仁县| 沈丘县| 兰溪市| 蛟河市| 石楼县| 南靖县| 仙游县| 蓬安县| 和静县| 吉隆县| 曲阜市| 黔西县| 浑源县| 河南省| 常熟市| 陵水| 潞城市| 阿合奇县| 乳源| 福安市| 东丽区| 龙口市| 清涧县| 德令哈市| 内江市| 周宁县| 唐河县| 建阳市| 平阳县| 惠东县| 天峨县| 米易县| 运城市| 临清市|