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