用VHDL語言在CPLD上實現(xiàn)串行通信
隨著EDA技術得發(fā)展,CPLD已經(jīng)在許多方面得到了廣泛應用,而串行通信是實現(xiàn)遠程測控的重要手段。本文利用VHDL語言在CPLD上實現(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所示:
圖1
系統(tǒng)原理
首先介紹串行通信發(fā)送器的工作原理。6位計數(shù)器用于判斷發(fā)送的數(shù)據(jù)是否發(fā)送完畢及在發(fā)送完畢后裝入新的數(shù)據(jù),其VHDL語言程序如下:
由于本設計中選取一位數(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所示。
圖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。除此之外,還可以通過增加時鐘頻率來增大波特率。
評論