用VHDL語(yǔ)言在CPLD上實(shí)現串行通信
隨著(zhù)EDA技術(shù)得發(fā)展,CPLD已經(jīng)在許多方面得到了廣泛應用,而串行通信是實(shí)現遠程測控的重要手段。本文利用VHDL語(yǔ)言在CPLD上實(shí)現了串行通信,完全可以脫離單片機使用,克服了單片機的許多缺點(diǎn)。
串口結構及內容
本設計所采用的是異步通信方式,可以規定傳輸的一個(gè)數據是10位,其中最低位為啟動(dòng)位(邏輯0低電平),最高位為停止位(邏輯1高電平),中間8位是數據位。為了方便對數據進(jìn)行正確控制,選取發(fā)送(接受)每位數據用4個(gè)時(shí)鐘周期。為了能夠達到串行通信的波特率,例如4800B/s,則需把時(shí)鐘頻率設為 19.2kHz。系統結構如圖1所示:
圖1
系統原理
首先介紹串行通信發(fā)送器的工作原理。6位計數器用于判斷發(fā)送的數據是否發(fā)送完畢及在發(fā)送完畢后裝入新的數據,其VHDL語(yǔ)言程序如下:
由于本設計中選取一位數據4個(gè)時(shí)鐘周期,因此當計數到“100111”時(shí),表示10位數據發(fā)送完畢;此時(shí)將加載信號“l(fā)oad”置1,則向移位寄存器加載10位數據。此計數器的時(shí)鐘信號由3位計數器的進(jìn)位信號提供,3位計數器程序為如下:
當計數脈沖為3時(shí),計數器清零并發(fā)出進(jìn)位信號“carry”,“carry”既是6位計數器的時(shí)鐘信號,又是移位寄存器的移位脈沖,移位寄存器實(shí)際上在發(fā)送器中是一個(gè)并串轉換器,其程序為如下:
當加載信號高有效時(shí),10位數據從外部寄存器中并行載入REG10,載入后在“carry”有效時(shí),即每4個(gè)CLK周期右移一位進(jìn)入鎖存器,進(jìn)而從TXD發(fā)出。發(fā)送器的仿真波形如圖2所示。
圖2
接收器的結構與模塊的功能與發(fā)送器相似。通過(guò)判斷接收鎖存器中的起始位是否為零,來(lái)確定接收與否。若有效時(shí),3位計數器開(kāi)始計數,將鎖存器中的數據逐位右移到移位寄存器中,6位計數器同樣計數到“100111”,此時(shí)表示已接收10位數據,發(fā)出信號把移位寄存器中的數據并行讀出。接收器中的移位寄存器其實(shí)是一個(gè)串并轉換器。
結論
以上就是串行通信的基本結構和原理,在工程中可能對波特率的要求不同??梢岳?a class="contentlabel" href="http://dyxdggzs.com/news/listbylabel/label/CPLD">CPLD的在線(xiàn)可編程功能,通過(guò)修改發(fā)送(接收)每一位的時(shí)間來(lái)控制波特率,比如把一位數據每4個(gè)CLK改為2個(gè)CLK,則在時(shí)鐘頻率19.2kHz時(shí),波特率為9600bps。除此之外,還可以通過(guò)增加時(shí)鐘頻率來(lái)增大波特率。
評論