基于CPLD的異步串行通訊控制器的研究與設(shè)計(jì)
串行通信實(shí)際上就是兩臺(tái)電子設(shè)備之間一位一位地發(fā)送和接收數(shù)據(jù),它分為同步通信和異步通信兩類。異步串行通信無需數(shù)據(jù)時(shí)鐘、幀同步時(shí)鐘等時(shí)鐘信號(hào),數(shù)據(jù)的發(fā)送和接收是自同步的,完全依靠收發(fā)雙方約定的傳輸波特率和數(shù)據(jù)線自身的電平變化來正確地收發(fā)數(shù)據(jù)位流,而且又因?yàn)樗B線簡單,可以直接與PC機(jī)等帶異步串口的設(shè)備相連,同時(shí)它又采用RS 232電平,傳輸?shù)木嚯x要比同步通信的長。正因?yàn)橛猩鲜龅膬?yōu)點(diǎn),異步串行通信被廣泛應(yīng)用在要進(jìn)行遠(yuǎn)距離遙測遙控的航天電子工程中。
但是,一般的處理器芯片都帶有同步串行接口,只有少數(shù)韻處理器,如TMS320F2XX、TMS320F24XX帶有速度相對(duì)較低的異步串口。為了實(shí)現(xiàn)那些沒有帶有異步串行接口的處理器能夠與其他設(shè)備進(jìn)行異步串行通信,可以采用復(fù)雜可編程邏輯器件CPLD技術(shù),并結(jié)合異步串行通信的協(xié)議,對(duì)異步串行通信接口電路進(jìn)行設(shè)計(jì)與實(shí)現(xiàn),該方法開發(fā)周期短,并且CPLD的時(shí)序嚴(yán)格,速度較快,可編程性好,還可以用于完成電子系統(tǒng)的其他邏輯功能的設(shè)計(jì),如實(shí)現(xiàn)系統(tǒng)的譯碼和專門的緩沖電路。這樣一塊電路板上的外圍元器件數(shù)量就大大減少,系統(tǒng)的靈活性更好,調(diào)試也變得簡單的多了,同時(shí),系統(tǒng)的功能模塊完成后可以先通過計(jì)算機(jī)進(jìn)行仿真,再實(shí)際投入使用,降低了使用風(fēng)險(xiǎn)性。
2異步串行通信的原理
異步串行通信方式是把一個(gè)字符看作一個(gè)獨(dú)立的信息單元,并且字符出現(xiàn)在數(shù)據(jù)流中的相對(duì)時(shí)間是任意的,而每一個(gè)字符中的各位是以固定的時(shí)間傳送。因此這種方式在同一字符內(nèi)部是同步的,而字符間是異步的。
異步通信的主要特點(diǎn)是字符幀的傳輸格式,這樣就使得發(fā)送方可以在字符之間可根據(jù)實(shí)際的需要插入不同的時(shí)間問隔,即每一個(gè)字符的發(fā)送是隨機(jī)的。異步串行通信是以數(shù)據(jù)幀的格式傳送的,1個(gè)字符開始傳輸前,輸出線必須在邏輯上處于‘1’狀態(tài),這稱為標(biāo)識(shí)態(tài)。傳輸一開始,輸出線由標(biāo)識(shí)態(tài)變?yōu)椤?’狀態(tài),從而作為起始位。起始位后面為5~8個(gè)信息位,信息位由低到高排列,即第1位為字符的最低位,在同一傳輸系統(tǒng)中,信息位的數(shù)目是固定的。信息位后面為校驗(yàn)位,校驗(yàn)位可以按奇校驗(yàn)設(shè)置,也可以按偶校驗(yàn)設(shè)置,不過,校驗(yàn)位也可以不設(shè)置。最后的數(shù)位為‘1’,它作為停止位,停止位可為1位、1.5位或者2位。如果傳輸完1個(gè)字符以后,立即傳輸下一個(gè)字符,那么,后一個(gè)字符的起始位便緊挨著前一個(gè)字符的停止位了,否則,輸出線又會(huì)立即進(jìn)入標(biāo)識(shí)態(tài),即邏輯上處于‘1’。圖1是兩個(gè)字節(jié)0XA0和0X67被傳輸?shù)膸母袷健?br />
在通信中發(fā)送方和接收方之間允許沒有共同的時(shí)鐘,所以在異步通信中,收發(fā)雙方取得同步的方法是采用在字符格式中設(shè)置起始位和停止位的辦法。每一個(gè)字符傳輸前,信號(hào)線上始終為高電平,一旦開始傳送就要先傳送一個(gè)低電平的起始位,這樣接收方就開始接收數(shù)據(jù),從而與發(fā)送方保持同步(格式上的同步)。通信雙方可按使用需要隨時(shí)改變通信協(xié)議,即改變數(shù)據(jù)位、奇偶校驗(yàn)位和停止位長度和數(shù)據(jù)傳輸率。
3異步串行通訊控制器的結(jié)構(gòu)設(shè)計(jì)
異步串行通訊控制器的內(nèi)部結(jié)構(gòu)可分為控制邏輯電路和寄存器組兩大部分。在控制邏輯電路中,包括波特率控制電路、讀寫控制邏輯電路、發(fā)送控制電路、接收控制電路、調(diào)制解調(diào)器控制邏輯電路、中斷控制邏輯電路和內(nèi)部總線控制邏輯電路。寄存器組分為模式寄存器、控制寄存器和狀態(tài)寄存器。結(jié)構(gòu)框圖如圖2所示。
該異步串行通訊控制器提供的模式寄存器和控制寄存器,用來設(shè)定奇偶校驗(yàn)、傳輸速率、握手機(jī)制以及中斷。在這個(gè)設(shè)計(jì)中,提供了3種奇偶校驗(yàn)選擇:不采用、奇校驗(yàn)或偶校驗(yàn)。傳輸速率的設(shè)定是通過向模式寄存器中設(shè)置特定的數(shù)值,來選擇波特率因子,再結(jié)合外部連入的時(shí)鐘信號(hào)就可以得出傳輸?shù)牟ㄌ芈柿?。它們之間的關(guān)系是:時(shí)鐘頻率=波特率因子×波特率。
3.1發(fā)送數(shù)據(jù)模塊
串行異步通信的發(fā)送器的實(shí)現(xiàn)要比接收器簡單很多。沒有數(shù)據(jù)要發(fā)送時(shí),發(fā)送數(shù)據(jù)寄存器為空,發(fā)送器處于空閑狀態(tài);當(dāng)檢測到發(fā)送數(shù)據(jù)寄存器滿信號(hào)后,發(fā)送器開始發(fā)送起始位,同時(shí)8個(gè)數(shù)據(jù)位被并行裝入發(fā)送移位寄存器,停止位緊接著數(shù)據(jù)位指示數(shù)據(jù)幀結(jié)束。只有發(fā)送數(shù)據(jù)寄存器為空時(shí),待發(fā)送的數(shù)據(jù)才能被裝入,在設(shè)計(jì)中用一個(gè)TxE信號(hào)來告訴CPU此時(shí)控制器的發(fā)送寄存器為空。程序中使用計(jì)數(shù)器來保證發(fā)送數(shù)據(jù)時(shí)時(shí)鐘的正確。這里使用一個(gè)狀態(tài)機(jī)描述發(fā)送過程,圖3是發(fā)送器狀態(tài)機(jī)狀態(tài)轉(zhuǎn)換示意圖。
3.2接收數(shù)據(jù)模塊
串行數(shù)據(jù)幀與接收時(shí)鐘是異步的,所以接收器功能實(shí)現(xiàn)中的關(guān)鍵是接收器時(shí)鐘與每個(gè)接收字符的同步。一個(gè)有效的方法是接收器采用高速率時(shí)鐘對(duì)串行數(shù)據(jù)進(jìn)行采樣,通常采樣頻率是位時(shí)鐘頻率的整數(shù)倍,也就是選擇比較高的波特率因子。理論上倍數(shù)越高接收數(shù)據(jù)各位的分辨率越高,實(shí)際中一般最大選擇16倍。
接收器應(yīng)該盡可能地在靠近每個(gè)數(shù)據(jù)位周期的中心處進(jìn)行采樣。如果接收器能很好地預(yù)測起始位的開始,那么它可在起始位的下降沿到來之后,等待半個(gè)位周期再采樣數(shù)據(jù)位。此后,接收器每等待一個(gè)位周期采樣一個(gè)數(shù)據(jù)位,直至收到最后一位為止。
接收過程主要由一個(gè)3位狀態(tài)機(jī)實(shí)現(xiàn),其狀態(tài)有空閑狀態(tài)、接收起始位、接收數(shù)據(jù)位、接收奇偶校驗(yàn)位以及接收停止位。每一個(gè)狀態(tài)表明了當(dāng)前正在接收到數(shù)據(jù)屬于哪一種字符,并且根據(jù)當(dāng)前接收字符的狀態(tài)驅(qū)動(dòng)其他部件進(jìn)行合適的操作。狀態(tài)轉(zhuǎn)換機(jī)的轉(zhuǎn)換圖如圖4所示。
4基于CPLD的實(shí)現(xiàn)和仿真
可編程邏輯器件(PLD)是在20世紀(jì)80年代迅速發(fā)展起來的一種新型集成電路,隨著大規(guī)模集成電路的進(jìn)一步發(fā)展,出現(xiàn)了PAL和GAL邏輯器件,而復(fù)雜可編程邏輯器件CPLD是在此邏輯器件基礎(chǔ)上發(fā)展起來的,它是由大量邏輯宏單元構(gòu)成的。通過配置,可以將這些邏輯宏單元形成不同的硬件結(jié)構(gòu),從而構(gòu)成不同的電子系統(tǒng),完成不同的功能。正是CPLD的這種硬件重構(gòu)的靈活性,使得設(shè)計(jì)者能夠?qū)⒂糜布枋稣Z言(如VHDL或者Veritog HDL)描述的電路在CPLD中實(shí)現(xiàn)。這樣一來,同一塊CPLD能實(shí)現(xiàn)許多完全不同的電路結(jié)構(gòu)和功能。同時(shí)也大大簡化了系統(tǒng)的調(diào)試,從而能極大地縮短系統(tǒng)的研發(fā)周期。
于是我們在驗(yàn)證這一環(huán)節(jié)中,采用Xilinx公司的XC9500系列的XC95108 CPLD來驗(yàn)證該方案的合理性。在用VHDL語言實(shí)現(xiàn)圖2的功能時(shí),采用自頂向下的設(shè)計(jì)方法,先設(shè)計(jì)一個(gè)TOP頂層模塊,它里面包括了接口控制電路模塊,調(diào)制解調(diào)模塊,發(fā)送模塊和接收模塊。其中接口控制電路模塊包含了圖2中的波特率控制邏輯電路,數(shù)據(jù)總線緩沖器和讀寫控制邏輯電路。設(shè)計(jì)實(shí)現(xiàn)中比較復(fù)雜的部分就是接口控制電路的實(shí)現(xiàn)。在接口控制電路模塊中,設(shè)計(jì)了接收緩沖寄存器(RBR),發(fā)送保持寄存器(THR),中斷使能寄存器(IER),中斷標(biāo)識(shí)寄存器(IIR),模式選擇控制寄存器(LCR),調(diào)制解調(diào)控制寄存器(MCR),接收發(fā)送狀態(tài)寄存器(LSR),調(diào)制解調(diào)狀態(tài)寄存器(MSR),它們的存儲(chǔ)器映射地址分別設(shè)置為000~110,因?yàn)樵撛O(shè)計(jì)中把控制器設(shè)計(jì)為不能同時(shí)接收和發(fā)送,所以接收緩沖寄存器(RBR)和發(fā)送保持寄存器(THR)共用一個(gè)地址。其中,模式選擇控制寄存器(LCR)用來設(shè)置,要發(fā)送數(shù)據(jù)的位數(shù)(從低到高發(fā)送),奇偶校驗(yàn)位的位數(shù)和停止位的位數(shù)。
采用Xilinx公司的ISE工具發(fā)送和對(duì)接收這兩個(gè)關(guān)鍵模塊分別進(jìn)行仿真,發(fā)送模塊的時(shí)序波形圖如圖5所示,接收數(shù)據(jù)模塊的時(shí)序波形圖如圖6所示。
在發(fā)送模塊的仿真測試程序中,讓CPU的數(shù)據(jù)總線連續(xù)發(fā)送55H,AAH,5AH,A5H,并在控制器的模式控制寄存器中設(shè)置發(fā)送的數(shù)據(jù)位5位,1個(gè)奇偶校驗(yàn)位(偶校驗(yàn)),1個(gè)停止位。在TxRDYn信號(hào)變低的時(shí)候,開始發(fā)送一幀新的數(shù)據(jù)。根據(jù)圖5中數(shù)據(jù)輸出信號(hào)Sout上信號(hào)變化的情況可以驗(yàn)證該模塊設(shè)計(jì)是正確的。
在接收模塊仿真波形圖中,Sin信號(hào)是負(fù)責(zé)接收串行數(shù)據(jù)的信號(hào)線,RBR是該控制器內(nèi)部的緩沖寄存器,負(fù)責(zé)存儲(chǔ)經(jīng)過串并轉(zhuǎn)換后的數(shù)據(jù),RxRDYn是控制器的外部信號(hào),用來告訴CPU,控制器已經(jīng)轉(zhuǎn)換完一幀數(shù)據(jù),CPU可以把數(shù)據(jù)從緩沖寄存器中取出。中斷信號(hào)INTR會(huì)在數(shù)據(jù)傳輸完后,產(chǎn)生一個(gè)正脈沖。在測試接收數(shù)據(jù)模塊的文件中,使產(chǎn)生一個(gè)連續(xù)的AAH和56H的串行數(shù)據(jù),在圖6中可以看到在Sin信號(hào)每接收完一個(gè)數(shù)據(jù)幀后,數(shù)據(jù)便存入RBR寄存器,RBR寄存器的數(shù)據(jù)位AAH和56H,并且在AAH傳完后,RxRDYn立即變?yōu)榈碗娖健?br />
5 結(jié)語
本文在對(duì)異步串行通信協(xié)議進(jìn)行分析的基礎(chǔ)上,根據(jù)實(shí)際工程的需要,對(duì)異步串行通信控制器進(jìn)行了詳細(xì)設(shè)計(jì),并結(jié)合CPLD器件,采用VHDL語言,對(duì)設(shè)計(jì)方案進(jìn)行了實(shí)現(xiàn)和驗(yàn)證,通過最后時(shí)序仿真的波形圖得出了設(shè)計(jì)方案的正確,而且加載了該設(shè)計(jì)程序的CPLD在實(shí)際工程中能夠很好地與處理器進(jìn)行連接來收發(fā)數(shù)據(jù),從而為那些沒有串行異步接口的處理器提供一個(gè)比較理想的設(shè)計(jì)方案。