?

FPGA的多路串口數據快速采集與傳輸系統設計*

2019-01-17 03:11,
單片機與嵌入式系統應用 2018年12期
關鍵詞:進入狀態狀態機字節

,

(北京工業大學 應用數理學院,北京 100124)

引 言

目前多路串口數據采集與傳輸對于工業控制現場多個設備串口的工作狀態進行現場監控有很大幫助[1],其硬件實現簡單,各路串口不存在互相干擾,出現問題易于排查,硬件成本低。然而一般微控制器芯片串口資源有限,很難滿足現實需求,如果為了擴展更多的串口資源采用多路串口芯片,但每個芯片容納的通道數不超過4個[2],這樣在工業控制中會大大提高成本。

但是FPGA解決了上述所有問題。由于FPGA引腳多,容易實現單片機串口I/O有限的問題,同時可以方便連接多個外設[3-4]。而且FPGA內部程序是并行運行的,可以同時處理不同任務,這就導致FPGA工作更有效率[5]。因此本文利用FPGA這些特點,設計了適用于多串口裝置在低速、小數據量通信條件,以FPGA為核心電路來控制各通道數據采集,同時采用RS232總線實現在高波特率下,將各路串口數據完整地上傳到上位機,完成上位機與FPGA控制模塊之間的數據傳輸。

1 總體設計方案

基于FPGA多通道串口數據采集與傳輸系統的設計,在硬件層面上,本系統利用單輸入通道數字式智能儀表與壓力傳感器連接,將物體壓力模擬量轉換為數字量發送給FPGA。同時,通過對整體實現8路壓力傳感器數據采集與傳輸所占用的存儲資源以及邏輯資源進行了初步評估之后,選擇采用Cyclone IV系列 EP4CE6E22C8型號FPGA,因為該型號具有30個M9K存儲模塊,足夠用來緩存8路并行數據傳輸,不會使數據因存儲空間不夠而出現數據堆疊的現象。

在軟件層面上,本系統包括多通道數據采集模塊(串轉并模塊、FIFO數據緩存模塊、PC控制器模塊)以及RS232串口接口輸出模塊兩大部分,其系統整體構架圖如圖1所示。8路并行的RS232數據為輸入數據,通過8個串轉并模塊將串行數據轉為并行數據保存到8個獨立FIFO中。利用FPGA中的同步有限狀態機,在RS232串口接口模塊建模與設計,將8路數據以查詢方式上傳到PC機上,對數據進行分析。

圖1 多路串口快速數據采集與傳輸系統框架圖

2 FPGA功能設計模塊

2.1 多通道數據采集模塊

由于FPGA屬于并行邏輯結構,各個串口通信模塊可以同時進行數據收發而不會互相影響[6],因此系統設計了8路壓力傳感器數據同時接收,并將其數據保存到各自的FIFO中。系統設計了一路串口模塊實現數據的采集與保存,通過在FPGA內部復用功能模塊方式[7],利用硬件描述語言Verilog中generate for進行復制,設計出8路串口數據采集模塊,如圖2所示。其中CLK為系統同步時鐘,PRE_RXD是經接口電平轉換后FPGA能夠采樣的串口接收信號,將此數據打包為字節保存到FIFO中,當一幀數據寫完或者讀完之后,會有FULL或者EMPTY狀態來表示各路串口FIFO狀態,同時RS232串口接口模塊會通過對FIFO的狀態進行查詢,當FULL[7:0]信號不為0時,給出一個SELECT信號,代表讀取哪一路數據上傳到PC機上。

圖2 8路數據采集模塊

利用Modelsim仿真軟件測試此系統多通道數據采集模塊,其仿真結果如圖3所示。其中通過在測試文件中模擬8路壓力傳感器通道數據,同時輸入一串十六進制數據為fa e0 5f 00 01 32 0a,通過觀察各通道寫入到FIFO中的數據wdata與輸入數據一致,說明此系統能夠實現多通道數據同時采集,驗證了此模塊設計的正確性。

圖3 8路FIFO寫數據

2.2 RS232串口接口模塊

RS232串口接口模塊是此系統最主要的部分,該部分利用數字邏輯中的有限狀態機(FSM)將8路串口數據通過查詢方式不斷輸出給PC機[8],其FSM與數據采集模塊結構框圖如圖4所示。

圖4 FSM與數據采集模塊結構框圖

狀態機在狀態轉移過程中不斷查詢各路FIFO狀態,選擇總線地址碼用來表示讀取第幾路FIFO數據,同時產生讀數據控制時序,讀取此路FIFO數據,通過RS232串口通信將該路FIFO中數據發送給PC機,并且每路數據在發送之前,都會把此幀數據的地址放到幀頭前,代表第幾路數據發送給上位機。

此模塊利用狀態機對8個通道數據進行循環查詢來發送每個通道數據,狀態機狀態位說明如表1所列。

表1 狀態機狀態位說明

圖5為狀態機轉移圖,狀態機的具體邏輯為:先檢查各通道數據儲存FIFO是否為滿,如果有滿狀態,進入狀態1,然后從第一通道開始判斷哪路數據為滿狀態,將此通道數據地址輸出給SELECT,選擇第n路數據輸出,進入狀態2,將讀信號標志READ置為1,開始讀取第n通道FIFO,進入狀態3,將READ信號置為0,等待一個字節發送完成給上位機,當PC發送數據時,TBUSY信號為1,字節發送完成之后,TBUSY信號為0,此時進入狀態4,檢查第n路中一幀數據是否讀完,如果EMPTY[n]信號為1,代表此路數據讀完,進入到狀態5,否則返回到狀態3。如果進入到狀態5,則將通道地址左移一位,如果地址n=8,則進入到狀態7,結束一次循環,否則進入狀態6,檢查第(n+1)路FIFO滿狀態FULL[n+1],如果為1,進入狀態2,否則進入狀態7,返回到初始狀態。通過上述狀態轉移,最終8路數據傳輸完成。

圖5 RS232串口接口FSM狀態轉移圖

3 資源配置與優化

在軟件設計時,為了節省FPGA芯片內部資源消耗,便于將此系統移植到更多需要此功能的工業生產設計中,同時減少工業成本輸出,可以選擇一些低成本FPGA芯片,在軟件設計時進行了資源優化設計。

首先,FIFO緩沖模塊主要實現對通信數據的緩存,提高各路串口傳輸速率,從而簡單有效地完成各路串口數據緩存功能。但通常設計串口通信時,在每個串口模塊前端,為發送和接收端分別配置一個FIFO模塊[9-10],用于串口數據的緩存。然而本設計為了減少使用芯片存儲資源,在設計FPGA功能時,采用了自己編寫的FIFO緩沖器,在實際操作過程中使用更加靈活。由于壓力傳感器最長的一幀數據是300個字節長度,所以為每路設計一個FIFO緩沖模塊,儲存空間為600個字節。在串口發送末端沒有設計FIFO緩沖器,直接從緩存的FIFO中讀取數據,為系統節省了300×8字節空間。

其次,在設計各個通道串口波特率時,因為每個通道的串口接收傳輸速率是相同的,所以此系統在頂層模塊中設計了一個各通道共用的波特率模塊,以減少占用存儲單元。

系統通過資源優化后,對優化前后FPGA代碼進行編譯后,優化前后編譯報告資源對比如圖6所示。通過對比發現,優化設計后,寄存器資源利用率比優化前減少了10%,說明資源配置實現了一定的優化效果。

圖6 資源優化前和優化后的資源對比

4 驗證與分析

為了驗證此系統的正確性,將8路壓力傳感器+FPGA+RS232串口通信的多路串口系統硬件平臺搭建起來進行測驗。此平臺中,每路壓力傳感儀表數據傳輸速率為9 600 bps,當各路數據接收完成后,通過查詢方式以256 000 bps發送速率發送每一幀數據,發送速率為每10 ms發送150字節,每幀數據幀頭都是通道地址,代表此幀數據為哪路數據。此系統中通過數字儀表顯示的數據與PC機上串口助手顯示的數據進行對比,觀察各路數據的正確性。經多次測試,此系統設計可以實現要求,并且數據完整不丟幀。圖7所示為部分測試結果。

圖7 各通道部分幀數據

結 語

猜你喜歡
進入狀態狀態機字節
No.8 字節跳動將推出獨立出口電商APP
基于有限狀態機的交會對接飛行任務規劃方法
No.10 “字節跳動手機”要來了?
任務型教學在初中數學中的應用探討
簡談MC7字節碼
國企黨員領導干部應當進入狀態
FPGA設計中狀態機安全性研究
基于反熔絲FPGA的有限狀態機加固設計
人類進入“澤它時代”
基于VHDL的一個簡單Mealy狀態機
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合