王善斌 任魯涌



摘要:該文對比利用MSP430單片機實驗完成的串口通信和利用FPGA完成的串口通信實驗原理、過程、方法及實驗結果,能夠讓學生不但能深刻理解硬件底層邏輯,還能讓學生對比實驗中學習串行語言和并行語言的優缺點,讓學生真正做到知其然也知所以然。能有效提升學生的學習知識運用知識的實踐能力。
關鍵詞:實驗教學;FPGA;單片機;UART
學習通信工程的過程中離不開大量的實驗和動手練習,就如同開車一樣,學習理論數載,如果從來沒有打幾把方向盤,踩幾腳油門然后再被教練緊急剎車幾次,仍然不會開車。正所謂,看別人做一百次,不如自己練一次。單片機和FPGA為學生學習實踐提供了大顯身手的平臺。學習單片機如同開車,學習FPGA則如同造車,更能讓學生理解硬件的底層原理。
1 單片機實現串口通信
以MSP430單片機為例來闡述單片機實現串口通信的過程。MSP430單片機的USART模塊可以配置成SPI或UART模式。在UART模式下,其功能結構如圖1所示。在單片機串口實驗中,對串口的操作實質上是對其寄存器的操作。具體做法是:在UxCTL寄存器中對串口模式設置相關的控制位進行設置;在UxCTL寄存器中對接收相關的控制位進行設置;在UxBR0、UxBR1、UxMCT寄存器中設置波特率控制位;在IE1/2寄存器設置中斷允許控制位;在IFG1/2寄存器中設置中斷標志位。
MSP430單片機實現串口通信需要按照以下思路來設置和配置各個寄存器:第一,要選擇合適的時鐘源。MSP430單片機具有多時鐘源,可以根據設計的任務和功耗模式來選擇不同的時鐘源。第二,設置合適的波特率。MSP430單片機的串口特色之一就是小數分頻器,一般單片機的數字邏輯無法實現小數分頻。分頻系數計算公式如式(1):
其中f_BRCLK是波特率發生器的時鐘源頻率,Baud是所需的波特率,[]表示取整操作。計算結果的高8位用于設UxBR1置寄存器,低8位用于設置UxBR0寄存器。第三,配置收發寄存器。由于MSP430單片機具有獨立的串口接收與發送中斷,這可以使用前后臺的程序架構,在發送與接收中斷中讀寫收發緩沖區,讓CPU從等待收發完成中解放出來,從而編寫出不阻塞CPU運行的串口收發程序。
把編譯后的工程代碼下載到MSP430單片機中運行,在PC端利用從“串口調試助手”上發送AA兩位數的字符,這些字符經過FPGA串口接收,然后傳回到串口助手顯示區域顯示出來,串口調試助手可以。
2 FPGA實現串口通信
在數字電路中,門電路是最基本的構成單位,可以說任何復雜的數字電路系統都可以通過我們耳熟能詳的與門、非門、或門、與非門、異或門等等組合實現。FPGA 是一個通過路由網絡(routing network)連接的查找表 2D 網格,以及一些算術單元和內存。其實,FPGA的運算處理方式就類似于我們的大腦。它擁有一個可以儲存大量數據的查找表,只要我們通過程序定義出輸入與輸出之間的邏輯關系,FPGA就可以按照該邏輯關系自行對其內部結構進行重新定義,直白地說,我們采用簡單通俗的Verilog語言可以隨時給FPGA進行清洗,而后者可以永遠不計回報,心甘情愿地被清洗。它就像一個納米級面包板,你可以把它們連接(wire up)起來做出任何你想要的電路。
UART的數據傳輸格式:
UART以字符所構成的幀為單位來進行傳輸幀,而幀的字符位包括:起始位、數據位、奇偶檢驗位和停止位,其幀結構如圖2所示。
串口接收時序圖如圖3所示,從圖中可以看出高電平是串口通信的空閑默認狀態,當一幀數據開始傳輸時必須先拉低電平讓接收端識別到發送端有數據要發送,完成串口的握手協議,這是第0位的作用。0位后面是8個是數據位,也是數據傳輸中最有意義的數據位,最后兩位是校驗位和停止位。在串口接收時根據波特率的不同按圖3串口接收時序所示對各位進行定時數據采集。在第0位數據忽略,后面的8位數據被采集,最后兩位是校驗位和停止位采用忽略操作。在串口發送時根據波特率的不同對各位進行定時數據發送。
從串口接收時序圖3中可以看出串口接收是一個“采樣”的過程;該過程主要由電平檢測模塊(detect_module.v )、波特率產生模塊( bps_module.v)和數據接收控制模塊(rx_control_module.v)三部分模塊來實現。串口接收系統運用Verilog HDL硬件描述語言在QuartusⅡ11.0軟件上編譯設計,該系統RTL仿真如圖4所示。
工程編譯后下載到開發板中,在PC端利用串口調試助手在發送區發送 0A ,用串口接收到數據控制開發板上的LED,可以看到開發板上只有第二位和第四位的LED燈亮,如圖5所示,說明接收數據為0A完全正確。
3 實驗對比分析
本文對比利用MSP430單片機實驗完成的串口通信和利用FPGA完成的串口通信實驗原理、過程、方法及實驗結果,可以發現:在傳統的單片機串口實驗中,對串口的操作本質上是對串口相關的寄存器進行設置。實際上串口在傳輸過程中底層數據到底是如何傳輸的,這些底層深層的東西在傳統的單片機串口實驗中是不清楚的。就像開車一樣,只要掛上擋,踩上油門車就開走了,至于為什么能開走就不知道了。學生也只能對串口通信知其然不知所以然。反之使用FPGA對串口建模,就如同制造了一個汽車,重新構造了一個串口,就會讓學生從底層窺探到串口通信原理,增強和加深學生對串口通信的理解與應用。單片機采用串行C語言進行編程,FPGA則用并行語言Verilog控制。C 語言所消耗的時鐘數是不可見的,然而 Verilog HDL 語言的時鐘消耗數是可見又可自定義。這就是 Verilog HDL 其中之一的強大之處。在對比實驗中學生可以發現一個有趣的現象:并行語言Verilog極力“仿順序”操作,模仿串行語言。串行語言C極力“仿并行”操作,如“中斷”,“狀態編程”等模仿并行。通過對比實驗學生不但能深刻理解硬件底層邏輯,還能讓學生對比實驗中學習串行語言和并行語言的優缺點,讓學生真正做到知其然也知所以然。能有效提升學生的學習知識運用知識的實踐能力。
4 結束語
FPGA的應用越來越重要,尤其是在一切領域都走向人工智能和高速數據交換的時代,FPGA作為數字領域的萬能積木,被研發企業越來越重視,FPGA人才需求的缺口也越來越大。而FPGA的入門學習其實并不難,只要設計得當,FPGA是非常適合在學校里做教學使用的。所以,高校的數字電路、單片機、微機原理、數字信號處理乃至通信原理等基礎課程及其實驗,都可以通過FPGA來實現并能夠達到更好的效果。通過FPGA平臺體驗課程理論會讓學生的學習事半功倍,也節省了老師大量的實驗準備工作。而從基礎課程延展到電子設計競賽,FPGA也是能派上大用場。每屆的全國大學生電子設計競賽有超過一半的題目可以用FPGA輕松完成,且不會出現由于現場演示不穩定而前功盡棄的遺憾結果。
參考文獻:
[1] 王敬美,楊春玲.基于FPGA和UART的數據采集器設計[J].電子器件,2009,32(2):386-389,393.
[2] 方喜波.基于FPGA串口通訊的開發[J].計算機與信息技術,2009(Z2):27-29.
[3] 楊開陵,徐巧玉,王志慧.FPGA那些事兒:Verilog HDL建模設計[M].北京:北京航空航天大學出版社,2013.
【通聯編輯:代影】