基于FPGA的測量數據存儲交換技術(shù)
現場(chǎng)可編程門(mén)陣列(FPGA)采用基于芯片的設計方法,具有穩定可靠、抗干擾能力強、可以反復編程、易于修改等特點(diǎn),極大地增強了設計的靈活性,提高了設計的實(shí)現速度;大容量串行flash存儲芯片價(jià)格低,管腳少,結構簡(jiǎn)單,使用SPI對數據進(jìn)行訪(fǎng)問(wèn),方便了硬件規劃,增強了系統可靠性,減少了轉換噪聲,縮小了封裝尺寸,也節省了大量的FPGA的I/O口。兩者的有效結合可以使得大量數據的存儲交換更加高效穩定可靠。
1 設計背景
在筆者的多通道工頻場(chǎng)強環(huán)境監測儀項目中,需要在無(wú)人監控的情況下,長(cháng)期定時(shí)采集高壓架空線(xiàn)和變電站周?chē)碾姶艌?chǎng)強度及溫濕度數據,并及時(shí)進(jìn)行存儲處理,隨時(shí)供上位機通過(guò)UART訪(fǎng)問(wèn)分析。這必然涉及到大量測量數據的存儲交換。本設計選用ALTRERA公司的Cyclone系列芯片EP1C3T144C8作為主控芯片,實(shí)現對數據的采集和交換,選用ATMEL公司的串行flash—AT45DB041B,用以對測量數據的存儲。本文以實(shí)際項目為例,闡述利用FPGA和大容量串行flash存儲芯片的優(yōu)點(diǎn),有效解決大量測量數據存儲交換問(wèn)題的方法。
2 芯片介紹
2.1 EP1C3T144C8
EP1C3T144C8采用了基于全層銅SRAM工藝,支持多種I/O標準,2 910個(gè)LEs,1個(gè)內部PLL,13個(gè)M4K RAM塊,59 904個(gè)RAM位,104個(gè)可供使用的I/O。
2.2 AT45DB041B
2.2.1 基本原理
該存儲器主要由主存儲器和兩個(gè)264B的緩存構成,主存儲器容量約為4Mbit,分為2 048頁(yè),每頁(yè)也為264B。
AT45DB041B具有多種封裝形式,圖1是SOIC-8封裝下的管腳圖。其各管腳的定義與功能如下:
1腳:SI,串行數據輸入端;
2腳:SCK,串行時(shí)鐘信號。數據在SCK上升沿輸入,下降沿輸出;
3腳:復位信號,低電平有效。由于芯片內部有上電復位電路,不用時(shí)此管腳可直接接高電平;
4腳:片選信號,低電平有效;
5腳:寫(xiě)保護信號,低電平有效。若此腳為低,則主存儲區前256頁(yè)不能被擦寫(xiě)編程,如果不用此功能,可直接接高電平;
6腳:VCC,電源輸入端;
7腳:GND,電源地;
8腳:SO,串行數據輸出端。
2.2.2 器件操作
AT45DB041B的操作命令分為讀命令、編程和擦寫(xiě)命令以及附加命令,其具體的指令和讀寫(xiě)操作方式很多文章和資料已有介紹,限于篇幅,本文只將要用到的命令作簡(jiǎn)要的介紹。
(1)讀主存儲區
不經(jīng)過(guò)緩沖區讀主存儲區任一頁(yè),緩沖區內容不會(huì )改變。指令格式后續的SCK信號將使數據依次從SO端輸出。如果讀到了指定頁(yè)的最后字節,將自動(dòng)跳回到頁(yè)首起始位置,循環(huán)讀取。整個(gè)過(guò)程中,/CS必須保持為低電平,/CS從低到高的跳變將中止讀操作,并三態(tài)SO引腳。
(2)連續讀主存儲區
不經(jīng)過(guò)緩沖區直接讀任意存儲單元的內容,緩沖區內容也不會(huì )改變。指令格式后續的SCK時(shí)鐘信號將使數據依次從SO端輸出。如果讀到了整個(gè)主存儲區的最后字節,將自動(dòng)跳回主存儲區起始位置,循環(huán)讀取,頁(yè)與頁(yè)之間及主存儲區首尾之間沒(méi)有延時(shí)。整個(gè)過(guò)程中,/CS必須保持為低電平,/CS從低到高的跳變將中止讀操作,并三態(tài)SO引腳。
(3)寫(xiě)緩沖區
數據能夠通過(guò)SI端被寫(xiě)入任意一個(gè)緩沖區。當寫(xiě)到緩沖區結尾后仍有數據寫(xiě)入時(shí),數據將從緩沖區起始字節依次寫(xiě)入。只要/CS保持為低,在SCK時(shí)鐘信號配合下,數據將一直循環(huán)寫(xiě)入,/CS從低到高的跳變將中止寫(xiě)操作。
(4)緩沖區寫(xiě)入主存儲頁(yè)(帶擦除)
事先寫(xiě)入緩沖區的數據可通過(guò)編程寫(xiě)到主存儲頁(yè)中。當指令寫(xiě)完后,/CS由0變?yōu)?時(shí),芯片首先擦除待寫(xiě)入頁(yè),然后再將指定緩沖區內的數據寫(xiě)入主存儲頁(yè)。頁(yè)擦除和寫(xiě)入操作由內置時(shí)鐘控制,最長(cháng)時(shí)間為tEP。
2.2.3 時(shí)序
AT45DB041B的命令、地址、附加位和數據都是通過(guò)SI、SO引腳以位的形式輸入和輸出的,因此要采用FPGA產(chǎn)生讀寫(xiě)時(shí)序時(shí)除正確理解其操作過(guò)程外,另一個(gè)關(guān)鍵點(diǎn)在于正確理解位的發(fā)送和接收時(shí)序,也就是數據如何按位移入或移出AT45DB041B。工作于SPI的inactive clock polarity high模式的時(shí)序如圖2所示。
3 實(shí)際應用
3.1 硬件接線(xiàn)
硬件電路如圖3所示。EP1C3T144C8的I/O和AT45DB041B的SI、SO、SCK、/RST、/CS引腳相連,/WP接高電平,實(shí)現對串行flash的讀寫(xiě)操作;再由TXD、RXD通過(guò)MAX232和9芯串口與上位機實(shí)現UART通信,完成數據的交換工作。
3.2 軟件設計
一般的串行flash存儲芯片提供了許多操作命令,可以根據不同的設計目的選擇不同的操作命令組合,實(shí)現對串行flash存儲芯片的不同操作,滿(mǎn)足不同的設計要求。
在本設計中,要定時(shí)地采集高壓架空線(xiàn)和變電站周?chē)碾姶艌?chǎng)強度及溫濕度數據,每次12個(gè)字節,并進(jìn)行及時(shí)的存儲處理,隨時(shí)供上位機通過(guò)UART讀取。
在Quartus II中用VHDL編寫(xiě)FPGA與AT45DB041B的接口程序,其程序框圖如圖4所示。
寫(xiě)操作使用了寫(xiě)緩沖區和緩沖區寫(xiě)入主存儲頁(yè)(帶擦除)兩個(gè)命令。寫(xiě)信號到時(shí)將規定寫(xiě)入的數據寫(xiě)入緩沖區后,立即將緩沖區寫(xiě)入主存儲頁(yè);寫(xiě)完之后,再將當前的位置信息(主存儲區頁(yè)地址和頁(yè)內行地址)通過(guò)緩沖區寫(xiě)到主存儲區的最后一頁(yè),供每次程序啟動(dòng)時(shí)讀取來(lái)恢復存儲器的狀態(tài),之后就進(jìn)入idle狀態(tài)。
讀操作使用了讀主存儲區和連續讀主存儲區命令。讀存儲區是為了恢復每次寫(xiě)入的位置信息,以便在程序復位后繼續接著(zhù)寫(xiě)入數據或讀取數據;讀信號到即發(fā)送連續讀主存儲區命令,每讀完一個(gè)字節便通過(guò)串口發(fā)送到上位機,接到串口發(fā)送完當前字節信號后,再繼續讀下一字節。當讀完寫(xiě)操作時(shí)記錄的主存儲區當前頁(yè)或上位機給出發(fā)送出錯信號時(shí),結束讀操作。
程序的實(shí)現采用了VHDL中的狀態(tài)機(state machine),它是描述一系列狀態(tài)轉換的時(shí)序電路,它能夠很好地完成本設計中各狀態(tài)的條件的判斷和轉換。在程序設計過(guò)程中要特別注意幾個(gè)問(wèn)題:
(1)程序剛啟動(dòng)時(shí)的延時(shí):這是為了使芯片工作在inactive clock polarity high模式,保證芯片的正常運行;
(2)讀過(guò)程中的延時(shí):由于對flash訪(fǎng)問(wèn)的時(shí)鐘(AT45DB041B可達20MHz)和用于UART發(fā)送的波特率(本設計中為9 600b/s)速度不匹配,而如果不作延時(shí)處理,直接給一個(gè)周期的UART發(fā)送使能,發(fā)送模塊就可能在自身時(shí)鐘的邊沿捕捉不到發(fā)送使能信號,為了保證正常發(fā)送,必須對發(fā)送使能信號進(jìn)行延時(shí);
(3)寫(xiě)過(guò)程中的延時(shí):由于擦除主存儲區并將緩沖區寫(xiě)入所需的最長(cháng)時(shí)間為tEP,為了確保每次都將數據成功寫(xiě)入,必須延時(shí)一段時(shí)間tEP再轉入其他狀態(tài)。
VHDL實(shí)現的基于RS232標準的UART簡(jiǎn)單穩定可靠,有很多文獻資料可供參考,這里不再贅述。
本文采用FPGA結合VHDL編程來(lái)模擬SPI接口時(shí)序的方法實(shí)現了對大容量串行存儲器的訪(fǎng)問(wèn),在UART的配合下完成了對大量測量數據的存儲交換工作,并在筆者設計的儀表中成功地應用,運行穩定可靠高效。這里雖然是以ATMEL公司的AT45DB041B為例,但使用相同的方法,對一系列其他類(lèi)型的串行存儲芯片如Megawin公司的flash存儲器MM36SBO10等,也可以進(jìn)行類(lèi)似的操作,對以后解決此類(lèi)問(wèn)題具有一定的參考價(jià)值。
評論