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

          關 閉

          新聞中心

          EEPW首頁 > 工控自動化 > 設計應用 > 用VHDL語言在CPLD上實現(xiàn)串行通信

          用VHDL語言在CPLD上實現(xiàn)串行通信

          ——
          作者:張鑫 時間:2006-11-13 來源:今日電子 收藏
          引言

          隨著EDA技術得發(fā)展,已經(jīng)在許多方面得到了廣泛應用,而是實現(xiàn)遠程測控的重要手段。本文利用語言在上實現(xiàn)了,完全可以脫離使用,克服了的許多缺點。

          串口結構及內(nèi)容

          本設計所采用的是異步通信方式,可以規(guī)定傳輸?shù)囊粋€數(shù)據(jù)是10位,其中最低位為啟動位(邏輯0低電平),最高位為停止位(邏輯1高電平),中間8位是數(shù)據(jù)位。為了方便對數(shù)據(jù)進行正確控制,選取發(fā)送(接受)每位數(shù)據(jù)用4個時鐘周期。為了能夠達到的波特率,例如4800B/s,則需把時鐘頻率設為 19.2kHz。系統(tǒng)結構如圖1所示:

          系統(tǒng)結構圖

          圖1

          系統(tǒng)原理

          首先介紹串行通信發(fā)送器的工作原理。6位計數(shù)器用于判斷發(fā)送的數(shù)據(jù)是否發(fā)送完畢及在發(fā)送完畢后裝入新的數(shù)據(jù),其語言程序如下:

             

          由于本設計中選取一位數(shù)據(jù)4個時鐘周期,因此當計數(shù)到“100111”時,表示10位數(shù)據(jù)發(fā)送完畢;此時將加載信號“l(fā)oad”置1,則向移位寄存器加載10位數(shù)據(jù)。此計數(shù)器的時鐘信號由3位計數(shù)器的進位信號提供,3位計數(shù)器程序為如下:

             

          當計數(shù)脈沖為3時,計數(shù)器清零并發(fā)出進位信號“carry”,“carry”既是6位計數(shù)器的時鐘信號,又是移位寄存器的移位脈沖,移位寄存器實際上在發(fā)送器中是一個并串轉換器,其程序為如下:

           

          當加載信號高有效時,10位數(shù)據(jù)從外部寄存器中并行載入REG10,載入后在“carry”有效時,即每4個CLK周期右移一位進入鎖存器,進而從TXD發(fā)出。發(fā)送器的仿真波形如圖2所示。

          發(fā)送器的仿真波形

          圖2

          接收器的結構與模塊的功能與發(fā)送器相似。通過判斷接收鎖存器中的起始位是否為零,來確定接收與否。若有效時,3位計數(shù)器開始計數(shù),將鎖存器中的數(shù)據(jù)逐位右移到移位寄存器中,6位計數(shù)器同樣計數(shù)到“100111”,此時表示已接收10位數(shù)據(jù),發(fā)出信號把移位寄存器中的數(shù)據(jù)并行讀出。接收器中的移位寄存器其實是一個串并轉換器。

          結論

          以上就是串行通信的基本結構和原理,在工程中可能對波特率的要求不同??梢岳?a class="contentlabel" href="http://www.ex-cimer.com/news/listbylabel/label/CPLD">CPLD的在線可編程功能,通過修改發(fā)送(接收)每一位的時間來控制波特率,比如把一位數(shù)據(jù)每4個CLK改為2個CLK,則在時鐘頻率19.2kHz時,波特率為9600bps。除此之外,還可以通過增加時鐘頻率來增大波特率。



          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁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); })();