簡化UART功能的FPGA實現
1 引 言
本文引用地址:http://cqxgywz.com/article/189974.htm在ARM+FPGA系統結構中,實現基于ARM的嵌入式處理器和FPGA之間通信最簡單的方法就是通過異步串行接口EIARS232C。考慮選用集成有UART(Universal Asynchronous Receiver / TraNSmitter )控制器的嵌入式處理器(例如,EP7312),那么嵌入式處理器一側就具有了利用異步串行接口收、發通信的能力。然而,FPGA內部并不擁有CPU控制單元,無法處理由UART控制器產生的中斷,所以FPGA一側不能利用現成的UART控制器構成異步串行接口,必須將UART控制器的功能集成到FPGA內部。
同一個系統中的ARM與FPGA之間屬于短距離通信連接,他們之間的異步串行通信并不需要完整的UART功能,那些RS232標準中的聯絡控制信號線可以省略,僅僅保留收、發數據線和地線,這樣給UART功能的FPGA編程實現帶來了極大的省略。嵌入式處理器EP7312帶有2個支持異步串行通信RS232的16550類型的UART,UART1不僅有TX,RX,而且支持Modem控制信號,UART2只有標準的TX,RX以及地信號,剛好能夠利用UART2與FPGA實現通 信。圖1是簡化的異步串行通信連接示意圖。
2 簡化UART功能的FPGA實現
本文將詳細地討論簡化UART功能在FPGA中的實現方法。簡單回顧一下異步串行通信的數據格式。圖2表明在異步傳送中串行發送一個數據字節的位定時關系(圖中沒有包括奇偶校驗位)。發送一個完整的字節信息,首先是一個作為起始位的邏輯“0”位,接著是8個數據位,然后是1個、1+1/2個或2個停止位邏輯“1”位,數據線空閑時呈現為高或“1”狀態。在字符的8位數據部分,先發送數據的最低位,最后發送最高位。每位持續的時間是固定的,由發送器本地時鐘控制,每秒發送的數據位個數,即為“波特率”。起始位和停止位起著很重要的作用。顯然,他們標志每個字符的開始和結束,但更重要的是他們使接收器能把他的局部時鐘與每個新開始接收的字符再同步。異步通信沒有可參照的時鐘信號,發送器隨時都可能發送數據,任何時沿的出現時間,從而正確地采樣緊接著的10~11位(包括開始位、數據位和停止位)。接收器的時鐘與發送器的時鐘不是同一個,因此,接收器采樣點的間隔跟由發送器時鐘所確定的位間隔時間不同,接收器一定不能讓他的相對時鐘速度導致采樣錯誤。
比較而言,UART發送器部分發送串行數據過程的實現相對容易,只要對發送出去的數據電平做持續時間的定時即可。下面先對UART接收器部分的FPGA實現方法做詳細的描述。
2.1 UART接收器的FPGA實現
根據以上的敘述,由于串行數據幀與接收時鐘是異步的,所以接收器功能實現中的關鍵是接收器時鐘與每個接收字符的同步。一個有效的方法是接收器采用高速率時鐘對串行數據進行采樣,通常采樣頻率是位時鐘頻率的整數倍。理論上倍數越高接收數據各位的分辨率越高,實際中,一般最大選擇16倍。
接收器應該盡可能地在靠近位周期的中心處對每位采樣。如果接收器能很好地預測起始位的開始,那么他可在起始位的下降沿到來之后,等待半個位周期再采樣數據位。此后,接收器每等待一個位周期采樣一個數據位,直至收到最后一位為止。倘若接收時鐘的頻率足夠接近發送時鐘,使得最后位能在離該位的精確中心位置半個周期內對他采樣,以上方案就能正確地工作。這意味著接收時鐘相對于發送時鐘在10~11個時鐘周期內,其增加和減少應小于半個位的時間間隔。因此,要求收發雙方2個時鐘的誤差容限在5%以內。
本文中接收器的實現采取5倍速采樣法,也就是接收采樣頻率是串行數據位頻率的5倍。圖3是將圖2中的起始位和部分數據位放大,又把每個信息位分成5等份,每等份的時間寬度設為Ts。以5倍頻對信息位進行采樣時,每個信息位都將可能被采樣到5次。當處于空閑狀態并檢測起始位時,最早檢測到起始位低電平的時刻必將落在S0陰影區,每次具體的采樣點會在S0陰影區隨機變化。檢測到起始位低電平后,間隔7×Ts時間,正好是第1位數據位的中間1/5處(圖3中D2陰影區)。此后的數據位和停止位的采樣間隔都是5×Ts,所有采樣點均落在碼元的中間1/5處,采樣數據最可靠。采樣時鐘的產生由計數器控制,計數器時鐘為位時鐘5倍頻。
為了避免噪聲引起的起始位檢測錯誤,要對起始位采樣兩次。從空閑狀態,第1次采樣為低電平后,間隔2個Ts再采樣一次,如果仍為低電平,才認定為有效的起始位;如果為高電平,再回到空閑狀態等待重新同步。
另外,在采樣停止位的時候也可以加入保護機制: 當停止位采樣值為高電平時,認為同步和數據正確,裝人數據寄存器,否則認為同步或傳輸錯誤,此次采樣的字符作廢,將其舍棄。簡化的UART功能框圖如圖4所示。EP7312所帶的UART控制器16550中,FIFO的深度為16 B。實際FPGA實現時根據具體應用的不同,可以用RAM取代FIFO,本文只敘述圖4中接收器和發送器的實現方法。
在具體使用硬件描述語言VHDL編程實現時,接收器5倍速采樣法的關鍵部分使用了一個狀態機,狀態轉換圖如圖5所示。
2.2 UART發送器的FPGA實現
UART發送器的FPGA實現相對于接收器來說簡單了很多。沒有數據要發送時,發送數據寄存器為空,發送器處于空閑狀態;當檢測到發送數據寄存器滿信號后,發送器即發送起始位,同時8個數據位被并行裝入發送移位寄存器,停止位緊接著數據位指示數據幀結束。只有發送數據寄存器為空時,RAM或FIFO中的待發送數據才能被裝入。程序中使用計數器保證各位周期定時正確,仍使用一個狀態機描述發送過程,圖6是發送器狀態機狀態轉換示意圖。
3 仿真與結論
這里選用ACTEL公司的APA600系列的FPGA芯片,仿真工具使用MENTOR公司的ModelSim。圖7是接收器模塊的功能仿真時序圖,其中只截取了一個接收數據幀的時間長度。從圖7中可以看出一個假起始位被正確判斷,接收器與接收數據實現同步,串行數據被準確接收。狀態機狀態:i代表空閑;rx代表起始位確認;s代表數據采樣和停止狀態確認;g代表數據正確接收。
圖8是發送器模塊功能仿真時序圖,也是只截取了一個發送數據幀長。圖8中狀態機狀態:first代表空閑;second(時間太短,圖中未顯示相應文字)和third代表發送數據和停止位。
我們已經將上述實現簡化UART功能的編程方法應用到了ARM+FPGA結構系統的編/拆和發送/接收串行信息幀模塊中,工作穩定,有較高實用價值。
參考文獻
1]張明峰.PIC單片機軟件異步串行口實現技巧[J].單片機與嵌入式系統應用,2003,(4).
2]Lattice Reference Designs .Universal asy - nchron - ous receiver/ tuansmitter .
3]鄔寬明.單片機外圍器件實用手冊數據傳輸接口器件分冊[M].北京:北京航空航天大學出版社,1998.














評論