引言
隨著FPGA在電子產(chǎn)品中的廣泛應(yīng)用,多片F(xiàn)P- GA芯片中的數(shù)據(jù)傳輸也應(yīng)用的非常廣泛。就傳輸數(shù)據(jù)而言,串口通信是通信系統(tǒng)和控制系統(tǒng)應(yīng)用中較為廣泛的一種。串口通信分為異步和同步兩種方式。本文釆用RS 232異步通信協(xié)議來設(shè)計兩片F(xiàn)PGA的之間的數(shù)據(jù)傳輸電路,同時,為了保證傳輸?shù)臏蚀_性,還在數(shù)據(jù)的收發(fā)端加入了CRC校驗。
1 專用異步串口通信接口電路設(shè)計
本設(shè)計的目的是實現(xiàn)兩塊基帶板之間的數(shù)據(jù)傳輸,其通信電路的結(jié)構(gòu)框圖如圖1所示。在每塊基帶板上均有一片Xilinx公司的XC4VSX55型FPGA芯片,兩塊基帶板之間通過柔板相連接。為了節(jié)約兩片F(xiàn)PGA相互通信的I/O 口,設(shè)計采用RS 232異步串行通信協(xié)議和RS 422接口電平,其傳輸速率為115 200 bps。異步串行通信協(xié)議是基于FPGA來實現(xiàn)的,并選用MAX3077作為RS 422電平轉(zhuǎn)換芯片。兩片F(xiàn)PGA的全局時鐘GLOBAL _ CLK均由100 MHz的晶振產(chǎn)生。
本設(shè)計將整個電路分為接收基帶板與發(fā)送基帶板兩部分接口電路。其中接收基帶板接口電路包括數(shù)據(jù)乒乓讀取模塊、數(shù)據(jù)組幀模塊、CRC編碼模塊、串口發(fā)送模塊;而發(fā)送基帶板接口電路則包括串口接 收模塊、CRC校驗?zāi)K。在接收基帶板上,先將無線接收下來的數(shù)據(jù)進行乒乓存儲與讀取,再組成發(fā)送端 所需的幀結(jié)構(gòu),并在組幀的同時進行CRC編碼,最后將組成幀的數(shù)據(jù)進行串行發(fā)送。在發(fā)送基帶板上,也可通過串口接收數(shù)據(jù),并進行CRC校驗。當CRC校驗通過后,可直接送給后級的數(shù)據(jù)調(diào)制模塊進行數(shù)據(jù) 的調(diào)制與發(fā)送。
1.1 數(shù)據(jù)乒乓讀取模塊
本模塊是前端程序與接口電路的隔離模塊。前端基帶解調(diào)模塊先將接收到的基帶數(shù)據(jù)按一定的速率寫入RAM,接下來被組幀模塊按一定的速率讀出并送到串口發(fā)送模塊發(fā)送。因此,兩者有著各自的數(shù)據(jù)線、地址線和控制線。介于此,雙端□RAM可以很好的滿足要求,為了保證數(shù)據(jù)讀取速率與讀取的準 確性,將雙端口 RAM設(shè)計成為乒乓模式,這樣,讀取RAM的速率就不受寫入RAM速率的約束,只要檢測到寫滿標志為1,就可以以較快的速率讀取,而無需擔(dān)心讀空。設(shè)計時,可將雙端口RAM的大小設(shè)置為2塊128X8 b。
1.2 串口發(fā)送模塊
串口發(fā)送模塊的主要目的是將需要發(fā)送的數(shù)據(jù)按字節(jié)發(fā)送到FPGA芯片外的串口電平轉(zhuǎn)換芯片MAX3077上,由其轉(zhuǎn)換成差分RS 422電平后,再將數(shù)據(jù)送到柔板上進行傳輸。本接口電路采用的是異步傳輸方式。為了每個字節(jié)的同步需要,在每個發(fā)送字節(jié)前先發(fā)一個0比特作為字節(jié)同步。
該模塊中主要有分頻計數(shù)器、發(fā)送計數(shù)器和移位寄存器。分頻計數(shù)器可將系統(tǒng)時鐘分成所需的波特率,當分頻計數(shù)器計到一個特定值(將該特定值設(shè)為 參數(shù))時將釆樣使能置1,其余時刻均保持0狀態(tài)。當該模塊的發(fā)送數(shù)據(jù)請求管腳收到一個高脈沖的時候,即可將需要發(fā)送的字節(jié)讀取進來送入移位寄存器,同時按照采樣使能的頻率發(fā)送一個同步比特0, 然后比特輸出計數(shù)器加1,當使能的下一個上升沿到來時,將移位寄存器中待發(fā)送數(shù)據(jù)的最高位發(fā)送出去,同時將移位寄存器循環(huán)右移一位,發(fā)送計數(shù)器加1,當發(fā)送計數(shù)器加到8時,表明一個字節(jié)已經(jīng)發(fā)送完畢,此時將發(fā)送完畢的信號送一個高脈沖出去,并通 知前級可以再填入需要發(fā)送的字節(jié)數(shù)據(jù)。
1.3 CRC編碼與校驗?zāi)K
釆用CRC編碼模塊是因為其不僅能夠加強傳輸過程中檢測錯誤的能力,而且其實現(xiàn)電路比較簡單。本項目中的CRC不僅能夠檢測收發(fā)基帶板之間串口傳輸時出現(xiàn)的錯誤,而且能夠檢測基帶發(fā)送板與接收發(fā)射信號的終端之間無線鏈路傳輸過程中出現(xiàn)的錯誤。
最基本的CRC校驗碼編碼方法是用待發(fā)送的二進制數(shù)據(jù)M(工)除以生成多項式g(z),然后將最后的余數(shù)作為CRC校驗碼。從CRC的編碼規(guī)則可以看出,CRC編碼實際上是將待發(fā)送的"位二進制多項式M(Q轉(zhuǎn)換成可以被g(x)除盡的兒+艮位二進制 多項式T(z),所以,解碼時可以用接收到的數(shù)據(jù)去除g(x),如果余數(shù)為零,則表示傳輸過程沒有錯誤,否則表示存在錯誤。
本項目中需要對124個字節(jié)進行校驗,故釆用CRC16的編碼方式,生成的多項式采用g(a:) = rclf,+劉'+ / + 1。由于CRC編碼的過程本質(zhì)上是一個循環(huán)移位的模2運算。故可設(shè)置一個2字節(jié)移位寄存器(CRC),在需要做CRC校驗的每一幀數(shù)據(jù)到來前將該移位寄存器全部設(shè)置為1。需要校驗的數(shù)據(jù)按字節(jié)送入該CRC校驗?zāi)K,當數(shù)據(jù)到來時把數(shù)據(jù)的最高位和移位寄存器的最高位進行異或并作為反饋值,然后將其存入移位寄存器中的第0b位。移位寄存器的第5 b、15 b分別存儲反饋值與移位寄存器的第4 b、第14 b的異或值,其余移位寄存器的每一位都存儲低一位的值,然后參與校驗的每一位數(shù)據(jù)在時鐘的驅(qū)動下,再在移位寄存器中右移存儲,移完一個 字節(jié)后,移位寄存器中的兩個字節(jié)就是CRC的校驗結(jié)果。在CRC的編碼端將所需要進行CRC校驗的數(shù)據(jù)依次送入該模塊進行CRC編碼,并將編碼結(jié)果緊跟編碼數(shù)據(jù)一起通過串口發(fā)送。在CRC的校驗端,可將CRC編碼端參與編碼的數(shù)據(jù)以及收到的編碼結(jié)果依次送入同一個CRC校驗?zāi)K進行校驗,如果校驗結(jié)果為0,證明傳輸過程中沒有錯誤,反之則表示傳輸存在錯誤,數(shù)據(jù)不能用。
1.4 組幀模塊設(shè)計
本模塊是基帶接收板接口電路的核心模塊,該模塊控制數(shù)據(jù)乒乓讀取模塊、CRC編碼模塊以及串口發(fā)送模塊。組幀模塊所組的幀為每幀127 B的定長幀,該模塊包含一個幀頭和幀尾數(shù)據(jù)發(fā)送計數(shù)器、讀RAM地址計數(shù)器、CRC編碼數(shù)據(jù)發(fā)送計數(shù)器。當檢測到數(shù)據(jù)存儲乒乓RAM的一塊寫滿信號為1時,即啟動幀頭幀尾發(fā)送計數(shù)器,將幀頭EB91按字節(jié)送入串口發(fā)送模塊,同時將EB91送入CRC編碼模塊編碼。發(fā)送完EB91,可將讀RAM的使能信號置高,以進入讀RAM狀態(tài)。如果讀RAM的讀地址計數(shù)器小于121,同時檢測到串口發(fā)送模塊字節(jié)發(fā)送完畢信號為1時,地址計數(shù)器加1,這樣就可以不斷將RAM 中的數(shù)據(jù)按字節(jié)送入串口發(fā)送模塊,同時將從RAM 中讀出的數(shù)據(jù)送入CRC編碼模塊編碼。當讀地址計數(shù)器加到121時,若檢測到第121個字節(jié)發(fā)送完畢信號為1,則將讀RAM的讀使能信號拉低,同時將CRC的輸出信號送入串口發(fā)送模塊,當檢測到串口發(fā)送模塊發(fā)送完CRC編碼的第二個字節(jié)發(fā)送完畢時,即可將狀態(tài)跳回幀頭幀尾發(fā)送狀態(tài),以將幀尾4E送入串口發(fā)送模塊,同時將幀頭幀尾數(shù)據(jù)發(fā)送計數(shù)器加1。當該字節(jié)發(fā)送完畢后,再將所有寄存器清零,同時將狀態(tài)機置為初始狀態(tài)。
1. 5 串口接收模塊
串口接收模塊可將基帶接收板上發(fā)出的異步串行數(shù)據(jù)接收下來存在雙口RAM中,在接收數(shù)據(jù)的同時將數(shù)據(jù)按字節(jié)送入CRC校驗?zāi)K,再校驗接收下來的幀是否為有效幀。通過CRC校驗時則將數(shù)據(jù)整幀讀走進行調(diào)制發(fā)送,否則丟棄。
為了能夠準確地從串口線上接收數(shù)據(jù),解決兩個基帶板上的全局時鐘同頻不同相的問題,避免釆樣時鐘采集到串行數(shù)據(jù)的跳變邊沿,通常需要在數(shù)據(jù)的中 間進行采樣,以保證采到的數(shù)據(jù)值是唯一的。
通過本模塊分頻計數(shù)器可將時鐘分成傳輸波特率的八倍,并給出相應(yīng)的采樣使能,再用該采樣使能去檢測傳輸數(shù)據(jù)的邊沿。因為每個字節(jié)前都加入了同步比特0,所以,當采樣使能檢測到下降沿時,立即起動一個采樣計數(shù)器。當采樣使能為1時,采樣計數(shù)器加1。當釆樣計數(shù)器計到3時,正好是同步0比特的中間,此時可將釆樣計數(shù)器清零,此后,在沒有接收 完一個字節(jié)時,采樣計數(shù)器都是計到7再清零。而每次串行數(shù)據(jù)都是在采樣計數(shù)器計到7時循環(huán)移入一個8 b移位寄存器。
這樣,每次移入的串行數(shù)據(jù)都是在數(shù)據(jù)的中間采 樣的,從而保證了數(shù)據(jù)傳輸?shù)臏蚀_。此外,還需要設(shè) 置一個比特接收計數(shù)器對接收到的每比特數(shù)據(jù)進行 計數(shù),每次采樣計數(shù)器計到7時,比特接收計數(shù)器加1,當比特接收計數(shù)器加到7時,表示一個字節(jié)的數(shù)據(jù) 已經(jīng)接收完畢,此時便可以將數(shù)據(jù)存到雙端口 RAM中了。數(shù)據(jù)的存儲過程也是采用乒乓存儲的方式,這里不再贅述。
2 接口電路的仿真驗證
將串口發(fā)送端口和串口接收端口連接在一起進行時序模擬仿真的仿真結(jié)果如圖2所示。該仿真結(jié)果表明,本設(shè)計電路能夠?qū)崿F(xiàn)基帶接收板雙端口RAM中數(shù)據(jù)的乒乓讀取,之后可再進行組幀、CRC 編碼、串口發(fā)送接收、CRC校驗及乒乓存儲等功能。同時還可以將程序下載到FPGA中運行。此外,運行結(jié)果還表明,該電路工作穩(wěn)定,而且具有較高的實用價值。
3 結(jié)語
本設(shè)計電路采用FPGA芯片較好的實現(xiàn)了兩片F(xiàn)PGA中數(shù)據(jù)互相傳輸?shù)膯栴},并可對所傳輸?shù)臄?shù)據(jù) 進行一定的數(shù)據(jù)處理,(如CRC校驗以及數(shù)據(jù)組幀), 因而從一定程度上簡化了兩塊基帶板之間的數(shù)據(jù)傳輸問題。另外,由于FPGA的可編程特性及程序的可移植性,因此,采用參數(shù)化的程序設(shè)計,還可以對本設(shè)計電路進行功能擴展,以滿足更高的要求。





