<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          關(guān) 閉

          新聞中心

          EEPW首頁 > 工控自動化 > 設(shè)計應用 > 基于現(xiàn)場可編程門陣列的數(shù)控延時器的設(shè)計

          基于現(xiàn)場可編程門陣列的數(shù)控延時器的設(shè)計

          作者: 時間:2008-03-18 來源: 收藏

            l 引言

          本文引用地址:http://www.ex-cimer.com/article/80236.htm

            利用硬件描述語言結(jié)合可編程邏輯器件(PLD)可以極大地方便數(shù)字集成電路的設(shè)計,本文介紹一種利用VHDL硬件描述語言結(jié)合現(xiàn)場可編程門陣列(FPGA)設(shè)計的數(shù)控延時器,延時器在時鐘clk的作用下,從8位數(shù)據(jù)線輸入延時量,到LATCH高電平時鎖存數(shù)據(jù),可以實現(xiàn)對觸發(fā)脈沖TRIG的任意量的延時。由于延時范圍不同,設(shè)計所用到的FPGA的資源也不同,本文詳細介紹最大延時量小于觸發(fā)脈沖周期的情況。該延時器的軟件編程和調(diào)試均在MuxplusⅡ環(huán)境下完成,系統(tǒng)設(shè)計選用Altera公司的EPFl0K30AQC208-3,EPCI44l型專用電路,與DSP相結(jié)合,應用于雷達目標模擬器的控制部分,實現(xiàn)對目標距離的模擬。

            2 設(shè)計原理

            筆者設(shè)計的數(shù)控延時器采用3個串聯(lián)計數(shù)器來實現(xiàn)。由于在觸發(fā)脈沖TRIG的上升沿開始延時,使用時鐘的上升沿計數(shù),考慮到VHDL對時鐘描述的限制,設(shè)計采用計數(shù)器l產(chǎn)生同步脈沖SYNC,寬度為Tclk,利用SYNC的高電平觸發(fā)cflag,并在延時結(jié)束后cflag清零;計數(shù)器2計算延時的長度;計數(shù)器3計算所要產(chǎn)生的輸出脈沖OUTPUT的脈寬,并在計數(shù)結(jié)束時對計數(shù)器2和計數(shù)器3清零。延時器的外部接口電路如圖1所示,原理框圖如圖2所示。整個電路的設(shè)計采用同步時鐘計數(shù)以盡量減少因局部時鐘不穩(wěn)定所產(chǎn)生的毛刺和競爭冒險。

            

          延時器的外部接口電路圖

           

            

          原理框圖

            該數(shù)控延時器低電平時鎖存數(shù)據(jù),高電平時改變內(nèi)部寄存器的數(shù)值(與AD9501型數(shù)控延時器的數(shù)據(jù)鎖存端電平相反)。一般情況下,觸發(fā)脈沖與時鐘的上升沿是一致的,如果輸入的觸發(fā)脈沖與時鐘不一致,則整個電路的延時將產(chǎn)生一定的誤差。時序仿真如圖3所示,延時量由dlyLH為高電平時數(shù)據(jù)總線dATA8上的數(shù)據(jù)決定。

            該數(shù)控延時器的VHDL硬件描述語言程序如下:

            

          數(shù)控延時器的VHDL硬件描述語言程序

            

          數(shù)控延時器的VHDL硬件描述語言程序

            在該程序中,cntl為延時量,cnt2為輸出脈沖的寬度,cflag為開始計數(shù)的標志,該段程序在觸發(fā)脈沖的周期大于256xTclk時,最大延時量為256×Tclk,如果觸發(fā)脈沖周期小于256xTclk,則最大延時量為Tclk-Toutput(Toutput為輸出脈沖的寬度)。

            

          時序仿真圖

           

            事實上,在實際應用中,延時后的輸出脈沖與輸入的觸發(fā)脈沖的頻率并不相同,譬如在設(shè)計雷達目標模擬器時要求延時后產(chǎn)生一連串的7分頻時鐘,時序如圖4所示(延時后產(chǎn)生11個7分頻的脈沖,占空比為2:5)。

            

          7分頻時鐘時序圖

           

            要產(chǎn)生上述觸發(fā)脈沖,只需改變計數(shù)器2的長度,并在程序中加入case判斷語句即可。

            

          程序

            3 延時范圍討論

            3.1 延時范圍小于觸發(fā)脈沖周期

            這種情況只需增加數(shù)據(jù)輸入端的位數(shù),不過一般情況下,數(shù)據(jù)輸入端位數(shù)是固定的,這時可以在FPGA的內(nèi)部定義多位的數(shù)據(jù)寄存器。以延時范圍為224xTclk為例,在FPGA內(nèi)部定義24位的數(shù)據(jù)寄存器,并定義3條地址線dlyLHl、dlyLH2和dlyLH3,通過8位數(shù)據(jù)總線分3次向數(shù)據(jù)寄存器送數(shù),送數(shù)時間應在前一脈沖延時結(jié)束之后與下一脈沖到來之前。數(shù)據(jù)送入寄存器的程序如下:

            

          程序

           

            點擊看原圖

            

          程序

            3.2 延時范圍大于觸發(fā)脈沖周期

            這種情況在實際應用中比較廣泛,譬如在雷達模擬器的設(shè)計中,所模擬的目標的距離范圍一般都很大,因而輸出延時脈沖的延時量將大于1個觸發(fā)脈沖周期,這時在考慮到FPGA資源的前提下,可以采用多路延時合并的處理方法。以延時范圍小于4個周期為例,具體時序如圖5所示。

            

          體時序圖

            利用SYNC信號4分頻并產(chǎn)生4路分頻后的信號。在FPGA內(nèi)部設(shè)計4個延時電路,SYNCl、SYNC2、SYNC3、SYNCA分別作為4個延時電路的觸發(fā)信號,每個延時電路仿照第一種延時范圍的設(shè)計方法,輸出觸發(fā)脈沖通過4個或門送到輸出端OUTPUT。值得注意的是每個延時電路內(nèi)部都要定義1個與DATAREG位數(shù)相同的數(shù)據(jù)寄存器,延時數(shù)據(jù)在延時開始時送入內(nèi)部寄存器。使用多路延時合并方法最關(guān)鍵的是要產(chǎn)生準確的分頻脈沖,如果產(chǎn)生的脈沖有毛刺,或者電路在設(shè)計的時候存在冒險,整個延時系統(tǒng)有可能都不能正常工作。

            4 延時誤差分析

            以延時范圍小于觸發(fā)脈沖周期為例,分析固定延時及延時誤差。

            該延時器在Muxplus Ⅱ環(huán)境下從輸入時鐘Tclk到dlytrig的延時為8.2 ns;產(chǎn)生SYNC的寬度為Tclk。因此在觸發(fā)脈沖上升沿與時鐘信號上升沿對時,該延時電路的固有延時為8.2 ns+2Tclk。但一般情況下,觸發(fā)脈沖的上升沿與時鐘的上升沿并不是一致的,根據(jù)二者之間的關(guān)系可知,最大延時誤差T滿足:O

            由于該數(shù)控延時器使用時鐘來計數(shù),因此延時量只能為Tclk的整數(shù)倍。如果設(shè)計者希望有更精確的延時,可以在設(shè)計的基礎(chǔ)上外加一片AD9501,該器件的延時可以精確到(Ttotal+Td)×1/28,其中Ttotal是AD9501的總延時,Td是AD9501的固有延時。

            5 結(jié)束語

            本文詳細介紹了利用VHDL硬件描述語言結(jié)合FPGA設(shè)計一種數(shù)控延時器的方法,討論了延時范圍,分析了延時誤差,該延時器的設(shè)計旨在和DSP相結(jié)合實現(xiàn)對延時信號的處理。隨著EDA技術(shù)的飛速發(fā)展,使用硬件描述語言設(shè)計FPGA是電子設(shè)計人員應該掌握的一門技術(shù)。同時,將DSP和FPGA技術(shù)相結(jié)合是進行數(shù)字信號處理的一種趨勢。

          脈沖點火器相關(guān)文章:脈沖點火器原理


          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();