摘 要:短波發(fā)射機(jī)自動(dòng)調(diào)諧系統(tǒng)采用FPGA與嵌入式計(jì)算機(jī)來實(shí)現(xiàn)各自的功能,其中他們之間的異步通信的設(shè)計(jì)是很重要的環(huán)節(jié),其實(shí)用性、可靠性是需要考慮的主要方面,文章介紹利用ISE設(shè)計(jì)平臺(tái)采用層次化設(shè)計(jì)方式實(shí)現(xiàn)二者之間的通信,取得了良好的效果。
關(guān)鍵詞:異步通信嵌入式主板;FPGA;RS232;HDLC;FIFO
1 概述
短波(3.9MHZ-26.1MHZ)發(fā)射機(jī)更換工作頻率時(shí)為了保證發(fā)射機(jī)能正常工作在所需的頻率值,必須使高頻回路各個(gè)調(diào)諧器件在步進(jìn)電機(jī)的帶動(dòng)下轉(zhuǎn)動(dòng)到相應(yīng)的頻率的位置上。TBH522型150KW短波發(fā)射機(jī)數(shù)字化自動(dòng)調(diào)諧系統(tǒng)采用XC2S200設(shè)計(jì)實(shí)現(xiàn)對(duì)8路步進(jìn)電機(jī)位置的采集、轉(zhuǎn)動(dòng)控制、及其他邏輯控制功能;使用臺(tái)灣生產(chǎn)的PCM-9575嵌入式主板實(shí)現(xiàn)與上位機(jī)通信、調(diào)諧頻率數(shù)據(jù)庫的存儲(chǔ)、發(fā)射機(jī)模擬量采集、人機(jī)對(duì)話界面等功能。由于該嵌入式主板有現(xiàn)成的RS232接口,我們對(duì)FPGA設(shè)計(jì)異步通信宏模塊,實(shí)現(xiàn)其與嵌入式主板通信,通信方式采用國(guó)際標(biāo)準(zhǔn)電子工業(yè)聯(lián)合會(huì)(EIA)定制的RS232標(biāo)準(zhǔn),通信協(xié)議采用的是高級(jí)數(shù)據(jù)鏈路控制協(xié)議(HDLC)協(xié)議,負(fù)責(zé)傳送步進(jìn)電機(jī)的預(yù)置位置、實(shí)際位置、鍵盤數(shù)據(jù)、頻率以及一些控制命令等數(shù)據(jù)。
2 FPGA異步通信總的設(shè)計(jì)思想
RRI和TRO為異步通信輸入輸出引腳,嵌入式計(jì)算機(jī)COM口設(shè)置為9600波特率、1位奇偶校驗(yàn)位、1位停止位。CLK為系統(tǒng)時(shí)鐘16MHz。
LOAD信號(hào)只在接收到實(shí)際位置的時(shí)候維持大約4us的高電平,在其他狀態(tài)為低電平,在高電平時(shí)將步進(jìn)電機(jī)實(shí)際位置計(jì)數(shù)器置數(shù),低電平時(shí)步進(jìn)電機(jī)實(shí)際位置計(jì)數(shù)器計(jì)數(shù)。
發(fā)送程序啟動(dòng)時(shí),不斷掃描8路地址的總線,從第1路到第8路連續(xù)發(fā)送8幀數(shù)據(jù),然后再重新掃描。
接收程序接收到數(shù)據(jù)后將數(shù)據(jù)鎖存到總線上,內(nèi)部設(shè)有差錯(cuò)處理功能,當(dāng)幀結(jié)構(gòu)不正確或一幀數(shù)據(jù)不完整將不會(huì)把數(shù)據(jù)送到總線上。
2.1 層次化設(shè)計(jì)
異步通信模塊涉及到的RS232通信標(biāo)準(zhǔn)和HDLC協(xié)議控制都比較復(fù)雜,從通信的層次來說,RS232數(shù)據(jù)底層的通信協(xié)議,HDLC協(xié)議控制數(shù)據(jù)高層協(xié)議控制,當(dāng)完成了底層的RS232通信的設(shè)計(jì)后,高層協(xié)議HDLC只需要按照其協(xié)議規(guī)定的數(shù)據(jù)格式調(diào)用底層的通信協(xié)議將一幀數(shù)據(jù)發(fā)送出去即可。在接收時(shí),接受完一幀數(shù)據(jù)后,在按照協(xié)議規(guī)定的數(shù)據(jù)格式將數(shù)據(jù)“剝離”開,在按照數(shù)據(jù)的地址分配到相應(yīng)的總線上即可。
2.2 數(shù)據(jù)處理的要求
從本設(shè)計(jì)的需求來說,異步通信模塊與嵌入式計(jì)算機(jī)通信的數(shù)據(jù)量并不是很高,與嵌入式計(jì)算機(jī)通信所定義的HDLC協(xié)議也十分簡(jiǎn)單,沒有規(guī)定過多的應(yīng)答數(shù)據(jù);硬件上也采用SPI的3根線,即接收、發(fā)送和地線,沒有其它的應(yīng)答信號(hào)。異步通信模塊與嵌入式計(jì)算機(jī)通信是一個(gè)被動(dòng)的過程,在這種情況下,可以想象,嵌入式計(jì)算機(jī)向FPGA發(fā)送數(shù)據(jù)在時(shí)間上具有一定的隨機(jī)性,可以發(fā)完一幀數(shù)據(jù)后馬上發(fā)送下一幀數(shù)據(jù),或者等待一段時(shí)間后再發(fā)送一幀數(shù)據(jù),而FPGA接收數(shù)據(jù)是以幀為單位進(jìn)行接受,即每次接受一幀數(shù)據(jù)送入緩存器中,然后將緩存器中的數(shù)據(jù)進(jìn)行處理,處理完畢后再接收下一幀數(shù)據(jù),而對(duì)于這種被動(dòng)的接收勢(shì)必對(duì)處理的速度有很高的要求,即接收到一幀數(shù)據(jù)后,迅速將數(shù)據(jù)讀出,清空緩沖區(qū),等待下一幀數(shù)據(jù)的到來。
在發(fā)送上也采取這種策略,將所要發(fā)送的數(shù)據(jù)迅速裝入緩沖區(qū),做到不影響發(fā)送數(shù)據(jù)的連貫性。
為了提高讀寫速度,緩沖區(qū)采用同步先入先出堆棧(fifo),不用送地址,只要將讀、寫信號(hào)有效,然后送時(shí)鐘信號(hào)即可進(jìn)行數(shù)據(jù)的高速度寫。
為了保持?jǐn)?shù)據(jù)的可靠性,在接收上要做一定的差錯(cuò)控制。
3 內(nèi)部模塊設(shè)計(jì)與實(shí)現(xiàn)
異步通信模塊主要由發(fā)送部分和接收部分組成,設(shè)計(jì)利用ISE平臺(tái)實(shí)現(xiàn),全部采用VHDL語言完成每個(gè)子模塊的設(shè)計(jì)。
3.1 發(fā)送部分
發(fā)送模塊功能是將8路步進(jìn)電機(jī)實(shí)際位置的總線上的數(shù)據(jù)按照HDLC協(xié)議通過串行通信發(fā)送到嵌入式計(jì)算機(jī)中。主要包括復(fù)位電路模塊(reset_core)、發(fā)送控制模塊(transtmit_ctrl)、波特率分頻模塊(fen)、HDLC協(xié)議控制時(shí)鐘分頻模塊(FEN_HDLC)、先入先出堆棧(FIFO_T)、HDLC協(xié)議控制模塊(TX_HDLC)、異步通信發(fā)送模塊(UART_T)等7個(gè)模塊。
3.1.1 reset_core模塊
該模塊負(fù)責(zé)在上電后維持1μs的高電平,將內(nèi)部工作的所有模塊中的狀態(tài)機(jī)復(fù)位,然后維持低電平,讓內(nèi)部模塊開始工作。
3.1.2 transtmit_ctrl模塊
此模塊的功能是將8路步進(jìn)電機(jī)的實(shí)際位置循環(huán)掃描寫入到FIFO_T堆棧中,特點(diǎn)是:(1)快速寫入數(shù)據(jù),采用系統(tǒng)時(shí)鐘16MHz,用5個(gè)周期完成一個(gè)數(shù)據(jù)的寫入。相對(duì)于9600波特率的異步通信來說,此速度能夠保持發(fā)送數(shù)據(jù)的連貫性,保證系統(tǒng)的實(shí)時(shí)性。(2)寫入FIFO_T中的數(shù)據(jù)格式按照先后為:地址位——數(shù)據(jù)位高字節(jié)——數(shù)據(jù)位低字節(jié)。(3)利用狀態(tài)機(jī)控制,并且在控制上采用控制信號(hào)和數(shù)據(jù)傳輸與處理分開,利用狀態(tài)機(jī)組合進(jìn)程產(chǎn)生控制信號(hào),在其它進(jìn)程利用前者產(chǎn)生的控制信號(hào)控制數(shù)據(jù)的傳輸與處理,確保數(shù)據(jù)傳送有足夠的建立時(shí)間和保持時(shí)間,保證數(shù)據(jù)的穩(wěn)定和可靠。此狀態(tài)機(jī)充分考慮了和其他模塊之間信號(hào)的通信,數(shù)據(jù)穩(wěn)定的建立、保持時(shí)間。完成后的狀態(tài)機(jī)將要發(fā)送的數(shù)據(jù)送到了深度為3個(gè)字節(jié)的FIFO模塊中,并且控制HDLC模塊將數(shù)據(jù)讀出發(fā)送出去。(4)狀態(tài)機(jī)組合邏輯進(jìn)程,該進(jìn)程在各個(gè)控制信號(hào)定義是盡量保持控制信號(hào)只在一個(gè)狀態(tài)有效,避免狀態(tài)轉(zhuǎn)換過程中出現(xiàn)毛刺。在此進(jìn)程中并沒有進(jìn)行數(shù)據(jù)的傳輸,只是通過狀態(tài)的轉(zhuǎn)換送出控制信號(hào)。(5)描述鍵盤狀態(tài)緩沖器信號(hào)進(jìn)程。在上一個(gè)進(jìn)程中可以看到,當(dāng)鍵盤狀態(tài)緩沖器為低電平時(shí),地址指向鍵盤地址,此時(shí)若模塊處于向堆棧數(shù)據(jù)過程中,很容易將先前的數(shù)據(jù)覆蓋,所以該信號(hào)應(yīng)該保證在寫堆棧到來期間無效,并且在完成后聯(lián)合調(diào)試過程中發(fā)現(xiàn),每次按鍵應(yīng)該保證只向嵌入式計(jì)算機(jī)發(fā)送一次數(shù)據(jù),多次發(fā)送將會(huì)引起嵌入式計(jì)算機(jī)的誤動(dòng)作。該進(jìn)程的功能就是使得每次按鍵后在等待發(fā)送數(shù)據(jù)過程中將鍵值捕獲,然后保證只發(fā)送一次。(6)鍵盤狀態(tài)寄存器描述進(jìn)程,該進(jìn)程是用鍵盤到來信號(hào)緩沖器來鎖存鍵盤狀態(tài)寄存器,使得數(shù)據(jù)能夠保持一個(gè)完整地寫周期。(7)數(shù)據(jù)選通進(jìn)程,由地址來控制,負(fù)責(zé)將各路數(shù)據(jù)送到緩沖器中。各個(gè)進(jìn)程之間利用信號(hào)來傳遞,互相協(xié)調(diào)工作,是一個(gè)完整的統(tǒng)一體,由寫信號(hào)作為預(yù)留,在需要時(shí)可以進(jìn)行擴(kuò)展和添加。
3.1.3 fifo_t模塊
此模塊是一個(gè)深度為3個(gè)字節(jié)的同步FIFO(先入先出堆棧),用來將地址、高字節(jié)數(shù)據(jù)、低字節(jié)數(shù)據(jù)寄存。
由于此模塊為一個(gè)同步FIFO,而本設(shè)計(jì)中的讀寫是分開的,讀寫的速度也不相同,寫的時(shí)候要求高速寫入,不影響通信的連貫性,讀的時(shí)候根據(jù)發(fā)送模塊的速度來讀取數(shù)據(jù),所以讀、寫時(shí)鐘用兩個(gè)模塊中的狀態(tài)機(jī)產(chǎn)生,為了不產(chǎn)生沖突,兩個(gè)模塊在空閑狀態(tài)將時(shí)鐘送出低電平,然后將兩個(gè)始終用一個(gè)或門連接,送入FIFO中進(jìn)行控制。
3.1.4 Tx_HDLC模塊
該模塊主要負(fù)責(zé)以下幾個(gè)功能:
(1)FIFO的讀操作。將FIFO中的地址、高位字節(jié)數(shù)據(jù)、低位字節(jié)數(shù)據(jù)讀出來。(2)HDLC協(xié)議的控制。包括產(chǎn)生幀頭、幀尾數(shù)據(jù)(7E)附到數(shù)據(jù)流上,產(chǎn)生CRC校驗(yàn)多項(xiàng)式,將多項(xiàng)式的結(jié)果附到數(shù)據(jù)的尾部。(3)發(fā)送數(shù)據(jù)控制。利用狀態(tài)機(jī)控制發(fā)送程序,將處理好的一幀數(shù)據(jù)發(fā)送到嵌入式計(jì)算機(jī)上。
模塊特點(diǎn):
(1)流水線作業(yè),將FIFO中的數(shù)據(jù)讀出來后進(jìn)行并-串轉(zhuǎn)換,將串行數(shù)據(jù)用流水線進(jìn)行CRC運(yùn)算,然后再進(jìn)行串-并轉(zhuǎn)換將數(shù)據(jù)發(fā)送出去。(2)利用程序計(jì)數(shù)器進(jìn)行時(shí)序控制,控制流水線的操作。(3)利用狀態(tài)機(jī)控制發(fā)送程序,并且控制和數(shù)據(jù)傳送分開,保證數(shù)據(jù)傳送有足夠的建立時(shí)間和保持時(shí)間。(4)增加數(shù)據(jù)鎖存語句,使得每次處理完的數(shù)據(jù)都能夠穩(wěn)定一段時(shí)間,增強(qiáng)數(shù)據(jù)的可靠性。
3.1.5 異步通信發(fā)送模塊
采用波特率為9600,數(shù)據(jù)為8位,偶校驗(yàn)方式發(fā)送數(shù)據(jù),發(fā)送時(shí)序?yàn)椋?/p>
(1)腳至為低電平,此時(shí)內(nèi)部狀態(tài)標(biāo)志復(fù)位,將TRBL置為高電平。(2)將數(shù)據(jù)送入端口準(zhǔn)備好,將TRBL信號(hào)置為低電平,此時(shí)TRE引腳邊為低電平,裝入數(shù)據(jù),開始傳送。(3)RBL置為高電平,等待數(shù)據(jù)發(fā)送完成后,輸出引腳TRE變?yōu)楦唠娖健?/p>
3.2 接收部分
接收部分實(shí)現(xiàn)的功能是將嵌入式計(jì)算機(jī)發(fā)送過來的步進(jìn)電機(jī)預(yù)制位置、實(shí)際位置等數(shù)據(jù)送入相應(yīng)的數(shù)據(jù)總線上。嵌入式計(jì)算機(jī)通過COM口發(fā)送數(shù)據(jù),通信協(xié)按照HDLC協(xié)議,根據(jù)發(fā)送數(shù)據(jù)的格式規(guī)定,該部分主要由接收數(shù)據(jù)模塊(UART_R),接收控制模塊(UART_CTRL),先入先出堆棧(FIFO)模塊,檢錯(cuò)控制模塊(MONITOR),數(shù)據(jù)控制模塊(MCU),裝載信號(hào)延時(shí)模塊(LOAD_DELAY)。
接收過程將一幀數(shù)據(jù)中的有效數(shù)據(jù)按照規(guī)定送到相應(yīng)的數(shù)據(jù)總線上。工作流程如下:
(1)UART_R負(fù)責(zé)接收上位及發(fā)送過來的數(shù)據(jù),每次接受一個(gè)字節(jié)。(2)接收過程受UART_CTRL控制,由UART_CTRL內(nèi)部的狀態(tài)機(jī)形成的時(shí)序來控制UART_R模塊,然后將接收到的1幀數(shù)據(jù)寫入FIFO。(3)MCU模塊負(fù)責(zé)協(xié)調(diào)整個(gè)系統(tǒng)的工作,包括所有模塊的初始化,數(shù)據(jù)控制,當(dāng)檢測(cè)到FIFO中的數(shù)據(jù)被寫滿,則將一幀數(shù)據(jù)從FIFO高速讀出,高速讀出是為了不影響數(shù)據(jù)的接收,然后按照地址將數(shù)據(jù)分配到相應(yīng)的總線上。(4)數(shù)據(jù)接收需要差錯(cuò)控制,幀數(shù)據(jù)不完整和不同步都視為錯(cuò)誤數(shù)據(jù),由內(nèi)部邏輯和MONITOR產(chǎn)生控制信號(hào)。
3.2.1 接收數(shù)據(jù)模塊(UART_R)
MR為高電平時(shí),將模塊內(nèi)部寄存器復(fù)位;MR為低電平時(shí),啟動(dòng)整個(gè)模塊,此時(shí)應(yīng)將DRR置成低電平,將輸出引腳DR置為低電平,然后再將DRR置為高電平,開始接收數(shù)據(jù)。接收數(shù)據(jù)按照9600的波特率,數(shù)據(jù)接收完畢后DR送出高電平,RBR[7..0]輸出接收到的數(shù)據(jù)。時(shí)序圖如圖2所示。
3.2.2 接收控制模塊(UART_CTRL)
接收控制模塊負(fù)責(zé)啟動(dòng)接收模塊接收嵌入式計(jì)算機(jī)發(fā)送過來的數(shù)據(jù),并將數(shù)據(jù)寫入FIFO堆棧中。該模塊受MCU模塊控制,并和器協(xié)調(diào)工作,主要操作即是對(duì)FIFO的讀寫。該模塊沒有任何的總線傳輸,只是靠狀態(tài)機(jī)控制一些輸入輸出信號(hào)控制接收模塊和先入先出堆棧之間的數(shù)據(jù)通信。
3.2.3 檢錯(cuò)控制模塊(MONITOR)
在接收模塊工作期間,MCU讀FIFO是采用16M時(shí)鐘控制,高速讀取是為了不影響數(shù)據(jù)的接收,每來一幀數(shù)據(jù),MCU模塊會(huì)迅速將FIFO中的數(shù)據(jù)讀空,使得FIFO的外部信號(hào)EMPTY,迅速處于高電平,也就是說,在接收到完整的一幀數(shù)據(jù)的情況下,EMPTY信號(hào)會(huì)形成一個(gè)短暫的高電平,當(dāng)通信出現(xiàn)問題,上位機(jī)還為發(fā)送完一幀數(shù)據(jù)就停止數(shù)據(jù)的發(fā)送,這時(shí)UARTR_CTRL將會(huì)繼續(xù)等待數(shù)據(jù)的到來,F(xiàn)IFO輸出的EMPTY信號(hào)也一直維持低電平,造成通信惡化,解決辦法即是加入了此模塊進(jìn)行控制。
此模塊相當(dāng)于一個(gè)看門狗定時(shí)器,外部信號(hào)只有3個(gè),EMPTY,CLK為輸入信號(hào)。CLK為計(jì)數(shù)時(shí)鐘,引自波特率時(shí)鐘分頻器,EMPTY每來一個(gè)高脈沖(喂狗)將內(nèi)部計(jì)數(shù)器清零,視為數(shù)據(jù)正確,ERROR送出低電平,當(dāng)EMPTY長(zhǎng)時(shí)間處于低電平,計(jì)數(shù)器計(jì)到2000后將ERROR自成一個(gè)高電平,將系統(tǒng)復(fù)位,再回到低電平。
3.2.4 數(shù)據(jù)控制模塊(MCU)
數(shù)據(jù)控制模塊負(fù)責(zé)將FIFO中的一幀數(shù)據(jù)讀出來,然后按照數(shù)據(jù)格式中規(guī)定的數(shù)據(jù)格式,將數(shù)據(jù)送入相應(yīng)的數(shù)據(jù)總線上。該模塊主要特點(diǎn):
(1)數(shù)據(jù)的高速讀取,采用16MHz時(shí)鐘控制,不影響通信的速度。(2)數(shù)據(jù)的鎖存,由內(nèi)部狀態(tài)機(jī)產(chǎn)生控制信號(hào),使得接收到的數(shù)據(jù)穩(wěn)定的鎖存到數(shù)據(jù)總線上。(3)差錯(cuò)控制,配有簡(jiǎn)單的差錯(cuò)控制,當(dāng)幀數(shù)據(jù)不同步將總模塊重新復(fù)位,不會(huì)將錯(cuò)誤的數(shù)據(jù)送到總線上。(4)狀態(tài)機(jī)控制時(shí)序清晰,每一部數(shù)據(jù)的傳輸都有足夠的建立/保持時(shí)間。
4 異步通信模塊設(shè)計(jì)綜述
該異步通信模塊實(shí)現(xiàn)了預(yù)期的設(shè)計(jì)功能,數(shù)據(jù)傳送較為可靠,但由于起初對(duì)設(shè)計(jì)需求分析不夠,系統(tǒng)中很多高級(jí)功能未被采用,例如HDLC協(xié)議中的插零,CRC校驗(yàn)位沒有被采用,接收部分也沒有對(duì)接收到的CRC校驗(yàn)位作處理,但是對(duì)于短波發(fā)射機(jī)自動(dòng)調(diào)諧系統(tǒng)來說,由于通信數(shù)據(jù)量不大該設(shè)計(jì)已經(jīng)夠用,該通信模塊已經(jīng)使用8年,沒有出現(xiàn)任何問題,說明該設(shè)計(jì)是成功的,確保了我局安全傳輸發(fā)射工作。
參考文獻(xiàn)
[1]黃曉兵.TBH522型150KW短波發(fā)射機(jī)維護(hù)手冊(cè)[M].中國(guó)書籍出版社.
[2]湯永福.TBH522型150KW短波發(fā)射機(jī)自動(dòng)調(diào)諧控制系統(tǒng)[Z].內(nèi)部使用.
作者簡(jiǎn)介:林大橋(1973-),男,漢族,福建龍巖人,國(guó)家新聞出版廣電總局七三一臺(tái),工程碩士,本科,高級(jí)工程師。