FPGA在多串口讀數(shù)系統(tǒng)中的應(yīng)用
摘要:主要討論了FPGA在多單片機(jī)串行讀數(shù)系統(tǒng)中的應(yīng)用,在該系統(tǒng)中單片機(jī)通過異步串行通信讀取外部設(shè)備中的數(shù)據(jù),經(jīng)FPGA緩沖后再送到USB單片機(jī),最終上傳到計算機(jī)。文中重點介紹了利用FPGA內(nèi)部雙口RAM構(gòu)建的FIFO在該系統(tǒng)中的具體應(yīng)用以及FPGA如何協(xié)調(diào)各單片機(jī)的工作。
關(guān)鍵詞:FPGA;RAM;FIF0
O 引言
本文所設(shè)計的讀數(shù)系統(tǒng)主要為解決上傳數(shù)據(jù)慢的問題,具體的背景如下:目前已設(shè)計一小型彈載記錄器,采用單片機(jī)+FLASH的結(jié)構(gòu),F(xiàn)LASH容量為lGB,為了最大限度地減少記錄器的外部接口數(shù)據(jù)線的數(shù)量,采用異步串行通信方式上報數(shù)據(jù)。單片機(jī)選用了Silabs公司混成集成芯片C8051F060,該單片機(jī)UARTl最高波特率可以達(dá)到系統(tǒng)時鐘的一半,也即如果晶體振蕩器采用14MHz,那么波特率理論值可以達(dá)到7Mbps,有效數(shù)據(jù)傳輸速率可達(dá)700kbps,但由于記錄器需要從FLASH讀取數(shù)據(jù),而每讀出一頁的數(shù)據(jù)需要等待約20us的時間,所以上傳數(shù)據(jù)為非連續(xù)性的傳輸,經(jīng)實際測試發(fā)現(xiàn),波特率為7Mbps時實際的數(shù)據(jù)上傳速率僅為300kbps左右,如果上傳1GB的數(shù)據(jù)就需要至少56分鐘的時間,如果需要上傳數(shù)套記錄器數(shù)據(jù)的時候,就顯得尤為浪費時間。為了解決這個問題,本文設(shè)計了一個讀數(shù)系統(tǒng),該系統(tǒng)通過增加每次上傳的記錄器的數(shù)量來提高讀數(shù)系統(tǒng)的資源利用率,以5套記錄器同時上傳來計算,56分鐘內(nèi)可以上傳5GB的數(shù)據(jù),平均每套的上傳時問僅為12分鐘,提高了數(shù)據(jù)上傳效率。系統(tǒng)框圖見圖l。
其中USB接口控制器選用CYPRESS公司的CY7C68013A,該芯片是Cypress公司推出的新一代高速EZ―USB FX2系列芯片;單片機(jī)部分選用C8051F060芯片;主控FPGA選用XILINX公司SPARTAN―IIE系列芯片XC2S100E一PQ208。
FPGA作為主控制中心,主要負(fù)責(zé)接收68013發(fā)送的狀態(tài)指令,并將狀態(tài)下發(fā)到各單片機(jī)及相應(yīng)的外部設(shè)備,五個單片機(jī)分別負(fù)責(zé)通過串口接收外部設(shè)備的串行數(shù)據(jù),并將其并行寫入FPGA,68013除了從FPGA中讀取數(shù)據(jù)外,還需要將計算機(jī)下發(fā)的控制命令發(fā)送到FPGA。
1 FPGA內(nèi)部FIF0設(shè)計
由于本項目所用FPGA芯片內(nèi)部RAM共有40Kbit,所以可構(gòu)成1KB×5的FIF0結(jié)構(gòu),即可構(gòu)成5個深度分別為1KB的FIFO,分別作為5個單片機(jī)上傳時的數(shù)據(jù)緩沖,具體邏輯框圖見圖2。CPU模塊主要負(fù)責(zé)五個FIF0之間的切換,5個FIFO采用相同的結(jié)構(gòu),限于篇幅,本文不詳細(xì)介紹FIF0的具體設(shè)計,只給出5個FIF0與CPU模塊之間的邏輯關(guān)系。5個FIFO分別給出兩個狀態(tài)信號,一個是OK,該信號表示FIFO已經(jīng)準(zhǔn)備好數(shù)據(jù),可以進(jìn)行讀取操作,另一個信號為Req,該信號通知單片機(jī)該FIFO已經(jīng)幾乎空,可以向該FIF0寫入數(shù)據(jù),其中幾個關(guān)鍵信號的具體用途如下表l所示:
2 FIF0切換
GPIF接口是EZ―USB FX2系列單片機(jī)提供的一個可由用戶編程的接口,具有高速、靈活等特點,可方便地實現(xiàn)與各種外設(shè)之間的無縫連接。GPIF的核心是一個可編程的狀態(tài)機(jī),通過對其進(jìn)行編程可以實現(xiàn)多種協(xié)議,功能非常強(qiáng)大。
本設(shè)計中68013與FPGA之間的接口即采用GPIF模式,基本的運行模式為:68013每啟動一次GPIF讀波形,便從FPGA中讀取512個字節(jié)的數(shù)據(jù),然后FPGA自動切換FIFO號。在程序設(shè)計時可以在GPIF中斷函數(shù)中設(shè)置一個標(biāo)志,這樣CPU模塊在檢測到這個標(biāo)志后表明對該FIF0的操作已完成,應(yīng)該切換FIF0了,該標(biāo)志信號使用PA4引腳來發(fā)出,具體說明見見表1。
5個FIFO的具體操作如下:系統(tǒng)上電后先復(fù)位各FIFO,并使各FIFO處于關(guān)閉狀態(tài),然后判斷是否為讀狀態(tài),如果不是則循環(huán)判斷,如果為讀狀態(tài),則使能各FIFO;由于默認(rèn)操作在FIF0l,所以判斷FIF01的0K信號是有效,如果有效,則判斷PA4引腳是否為‘0’,如果為‘0’則置RDYO為l,68013判斷到此信號后啟動一次GPIF波形讀取512字節(jié)的數(shù)據(jù),并在讀完后將PA4置1,表示數(shù)據(jù)已經(jīng)讀取完畢,CPU模塊在判斷到PA4為1后將RDYO置O,然后將操作對象切換至FIF02,接著判斷FIF02的OK信號是否有效,具體操作同F(xiàn)IF01,具體流程見圖3。
注意:為了保證數(shù)據(jù)讀取時的暢通無阻,在判斷四個FIF0的OK信號時,應(yīng)該采取輪循的判斷方式,即當(dāng)FIF01 的OK信號無效時應(yīng)該轉(zhuǎn)去判斷FIF02的0K信號,而不能死等FIF01的0K信號有效,這樣可以有效防止因某個單片機(jī)或某個外部設(shè)備的故障而出現(xiàn)的讀數(shù)停滯現(xiàn)象。
3 結(jié)束語
經(jīng)過長時間的工作表明,該讀數(shù)系統(tǒng)能穩(wěn)定地進(jìn)行數(shù)據(jù)的上傳,滿足實際需要。
評論