《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 測(cè)試測(cè)量 > 業(yè)界動(dòng)態(tài) > 基于FPGA的測(cè)量數(shù)據(jù)存儲(chǔ)交換技術(shù)

基于FPGA的測(cè)量數(shù)據(jù)存儲(chǔ)交換技術(shù)

2008-07-24
作者:徐義忠,, 孫苓生

??? 摘 要: 以AT45DB041B為例,,將FPGA和大容量" title="大容量">大容量串行flash存儲(chǔ)芯片" title="存儲(chǔ)芯片">存儲(chǔ)芯片的優(yōu)點(diǎn)有效地結(jié)合起來,,實(shí)現(xiàn)了FPGA對(duì)串行存儲(chǔ)芯片的高效讀寫操作,完成了對(duì)大量測(cè)量數(shù)據(jù)的存儲(chǔ)處理和與上位機(jī)" title="上位機(jī)">上位機(jī)的交換,,并在某電力局項(xiàng)目工頻場(chǎng)強(qiáng)環(huán)境監(jiān)測(cè)儀中成功應(yīng)用。
??? 關(guān)鍵詞: FPGA; 串行flash; 存儲(chǔ)交換" title="存儲(chǔ)交換">存儲(chǔ)交換; UART; VHDL

?

??? 現(xiàn)場(chǎng)可編程門陣列(FPGA)采用基于芯片的設(shè)計(jì)方法,,具有穩(wěn)定可靠,、抗干擾能力強(qiáng),、可以反復(fù)編程、易于修改等特點(diǎn),,極大地增強(qiáng)了設(shè)計(jì)的靈活性,,提高了設(shè)計(jì)的實(shí)現(xiàn)速度;大容量串行flash存儲(chǔ)芯片價(jià)格低,,管腳少,,結(jié)構(gòu)簡(jiǎn)單,使用SPI對(duì)數(shù)據(jù)進(jìn)行訪問,,方便了硬件規(guī)劃,,增強(qiáng)了系統(tǒng)可靠性,減少了轉(zhuǎn)換噪聲,,縮小了封裝尺寸,,也節(jié)省了大量的FPGA的I/O口。兩者的有效結(jié)合可以使得大量數(shù)據(jù)的存儲(chǔ)交換更加高效穩(wěn)定可靠,。
1 設(shè)計(jì)背景
??? 在筆者的多通道工頻場(chǎng)強(qiáng)環(huán)境監(jiān)測(cè)儀項(xiàng)目中,,需要在無人監(jiān)控的情況下,長(zhǎng)期定時(shí)采集高壓架空線和變電站周圍的電磁場(chǎng)強(qiáng)度及溫濕度數(shù)據(jù),,并及時(shí)進(jìn)行存儲(chǔ)處理,,隨時(shí)供上位機(jī)通過UART訪問分析。這必然涉及到大量測(cè)量數(shù)據(jù)的存儲(chǔ)交換,。本設(shè)計(jì)選用ALTRERA公司的Cyclone系列芯片EP1C3T144C8作為主控芯片,,實(shí)現(xiàn)對(duì)數(shù)據(jù)的采集和交換,選用ATMEL公司的串行flash—AT45DB041B,,用以對(duì)測(cè)量數(shù)據(jù)的存儲(chǔ),。本文以實(shí)際項(xiàng)目為例,闡述利用FPGA和大容量串行flash存儲(chǔ)芯片的優(yōu)點(diǎn),,有效解決大量測(cè)量數(shù)據(jù)存儲(chǔ)交換問題的方法,。
2 芯片介紹
2.1 EP1C3T144C8

??? EP1C3T144C8采用了基于全層銅SRAM工藝,支持多種I/O標(biāo)準(zhǔn),,2 910個(gè)LEs,,1個(gè)內(nèi)部PLL,13個(gè)M4K RAM塊,,59 904個(gè)RAM位,,104個(gè)可供使用的I/O。
2.2 AT45DB041B
2.2.1 基本原理

??? 該存儲(chǔ)器主要由主存儲(chǔ)器和兩個(gè)264B的緩存構(gòu)成,,主存儲(chǔ)器容量約為4Mbit,,分為2 048頁(yè),每頁(yè)也為264B,。
??? AT45DB041B具有多種封裝形式,,圖1是SOIC-8封裝下的管腳圖,。其各管腳的定義與功能如下:
??? 1腳:SI,串行數(shù)據(jù)輸入端,;
??? 2腳:SCK,,串行時(shí)鐘信號(hào)。數(shù)據(jù)在SCK上升沿輸入,,下降沿輸出,;
??? 3腳:復(fù)位信號(hào),低電平有效,。由于芯片內(nèi)部有上電復(fù)位電路,,不用時(shí)此管腳可直接接高電平;
??? 4腳:片選信號(hào),,低電平有效,;
??? 5腳:寫保護(hù)信號(hào),低電平有效,。若此腳為低,,則主存儲(chǔ)區(qū)前256頁(yè)不能被擦寫編程,如果不用此功能,,可直接接高電平;
??? 6腳:VCC,,電源輸入端,;
??? 7腳:GND,電源地,;
??? 8腳:SO,,串行數(shù)據(jù)輸出端。

?


2.2.2 器件操作
??? AT45DB041B的操作命令分為讀命令,、編程和擦寫命令以及附加命令,,其具體的指令和讀寫操作方式很多文章和資料已有介紹,限于篇幅,,本文只將要用到的命令作簡(jiǎn)要的介紹,。
??? (1)讀主存儲(chǔ)區(qū)
??? 不經(jīng)過緩沖區(qū)讀主存儲(chǔ)區(qū)任一頁(yè),緩沖區(qū)內(nèi)容不會(huì)改變,。指令格式后續(xù)的SCK信號(hào)將使數(shù)據(jù)依次從SO端輸出,。如果讀到了指定頁(yè)的最后字節(jié),將自動(dòng)跳回到頁(yè)首起始位置,,循環(huán)讀取,。整個(gè)過程中,/CS必須保持為低電平,,/CS從低到高的跳變將中止讀操作,,并三態(tài)SO引腳,。
??? (2)連續(xù)讀主存儲(chǔ)區(qū)
??? 不經(jīng)過緩沖區(qū)直接讀任意存儲(chǔ)單元的內(nèi)容,緩沖區(qū)內(nèi)容也不會(huì)改變,。指令格式后續(xù)的SCK時(shí)鐘信號(hào)將使數(shù)據(jù)依次從SO端輸出,。如果讀到了整個(gè)主存儲(chǔ)區(qū)的最后字節(jié),將自動(dòng)跳回主存儲(chǔ)區(qū)起始位置,,循環(huán)讀取,,頁(yè)與頁(yè)之間及主存儲(chǔ)區(qū)首尾之間沒有延時(shí)。整個(gè)過程中,,/CS必須保持為低電平,,/CS從低到高的跳變將中止讀操作,并三態(tài)SO引腳,。
??? (3)寫緩沖區(qū)
??? 數(shù)據(jù)能夠通過SI端被寫入任意一個(gè)緩沖區(qū),。當(dāng)寫到緩沖區(qū)結(jié)尾后仍有數(shù)據(jù)寫入時(shí),數(shù)據(jù)將從緩沖區(qū)起始字節(jié)依次寫入,。只要/CS保持為低,,在SCK時(shí)鐘信號(hào)配合下,數(shù)據(jù)將一直循環(huán)寫入,,/CS從低到高的跳變將中止寫操作,。
??? (4)緩沖區(qū)寫入主存儲(chǔ)頁(yè)(帶擦除)
??? 事先寫入緩沖區(qū)的數(shù)據(jù)可通過編程寫到主存儲(chǔ)頁(yè)中。當(dāng)指令寫完后,,/CS由0變?yōu)?時(shí),,芯片首先擦除待寫入頁(yè),然后再將指定緩沖區(qū)內(nèi)的數(shù)據(jù)寫入主存儲(chǔ)頁(yè),。頁(yè)擦除和寫入操作由內(nèi)置時(shí)鐘控制,,最長(zhǎng)時(shí)間為tEP
2.2.3 時(shí)序
??? AT45DB041B的命令,、地址,、附加位和數(shù)據(jù)都是通過SI、SO引腳以位的形式輸入和輸出的,,因此要采用FPGA產(chǎn)生讀寫時(shí)序時(shí)除正確理解其操作過程外,,另一個(gè)關(guān)鍵點(diǎn)在于正確理解位的發(fā)送和接收時(shí)序,也就是數(shù)據(jù)如何按位移入或移出AT45DB041B,。工作于SPI的inactive clock polarity high模式的時(shí)序如圖2所示,。

?


3 實(shí)際應(yīng)用
3.1 硬件接線

??? 硬件電路如圖3所示。EP1C3T144C8的I/O和AT45DB041B的SI,、SO,、SCK、/RST,、/CS引腳相連,,/WP接高電平,,實(shí)現(xiàn)對(duì)串行flash的讀寫操作;再由TXD,、RXD通過MAX232和9芯串口" title="串口">串口與上位機(jī)實(shí)現(xiàn)UART通信,,完成數(shù)據(jù)的交換工作。

?


3.2 軟件設(shè)計(jì)
??? 一般的串行flash存儲(chǔ)芯片提供了許多操作命令,,可以根據(jù)不同的設(shè)計(jì)目的選擇不同的操作命令組合,,實(shí)現(xiàn)對(duì)串行flash存儲(chǔ)芯片的不同操作,滿足不同的設(shè)計(jì)要求,。
??? 在本設(shè)計(jì)中,,要定時(shí)地采集高壓架空線和變電站周圍的電磁場(chǎng)強(qiáng)度及溫濕度數(shù)據(jù),每次12個(gè)字節(jié),,并進(jìn)行及時(shí)的存儲(chǔ)處理,,隨時(shí)供上位機(jī)通過UART讀取。
??? 在Quartus II中用VHDL編寫FPGA與AT45DB041B的接口程序,,其程序框圖如圖4所示,。

?


??? 寫操作使用了寫緩沖區(qū)和緩沖區(qū)寫入主存儲(chǔ)頁(yè)(帶擦除)兩個(gè)命令。寫信號(hào)到時(shí)將規(guī)定寫入的數(shù)據(jù)寫入緩沖區(qū)后,,立即將緩沖區(qū)寫入主存儲(chǔ)頁(yè),;寫完之后,再將當(dāng)前的位置信息(主存儲(chǔ)區(qū)頁(yè)地址和頁(yè)內(nèi)行地址)通過緩沖區(qū)寫到主存儲(chǔ)區(qū)的最后一頁(yè),,供每次程序啟動(dòng)時(shí)讀取來恢復(fù)存儲(chǔ)器的狀態(tài),,之后就進(jìn)入idle狀態(tài)。
??? 讀操作使用了讀主存儲(chǔ)區(qū)和連續(xù)讀主存儲(chǔ)區(qū)命令,。讀存儲(chǔ)區(qū)是為了恢復(fù)每次寫入的位置信息,以便在程序復(fù)位后繼續(xù)接著寫入數(shù)據(jù)或讀取數(shù)據(jù),;讀信號(hào)到即發(fā)送連續(xù)讀主存儲(chǔ)區(qū)命令,,每讀完一個(gè)字節(jié)便通過串口發(fā)送到上位機(jī),接到串口發(fā)送完當(dāng)前字節(jié)信號(hào)后,,再繼續(xù)讀下一字節(jié),。當(dāng)讀完寫操作時(shí)記錄的主存儲(chǔ)區(qū)當(dāng)前頁(yè)或上位機(jī)給出發(fā)送出錯(cuò)信號(hào)時(shí),結(jié)束讀操作,。
??? 程序的實(shí)現(xiàn)采用了VHDL中的狀態(tài)機(jī)(state machine),,它是描述一系列狀態(tài)轉(zhuǎn)換的時(shí)序電路,它能夠很好地完成本設(shè)計(jì)中各狀態(tài)的條件的判斷和轉(zhuǎn)換,。在程序設(shè)計(jì)過程中要特別注意幾個(gè)問題:
??? (1)程序剛啟動(dòng)時(shí)的延時(shí):這是為了使芯片工作在inactive clock polarity high模式,,保證芯片的正常運(yùn)行;
??? (2)讀過程中的延時(shí):由于對(duì)flash訪問的時(shí)鐘(AT45DB041B可達(dá)20MHz)和用于UART發(fā)送的波特率(本設(shè)計(jì)中為9 600b/s)速度不匹配,,而如果不作延時(shí)處理,,直接給一個(gè)周期的UART發(fā)送使能,,發(fā)送模塊就可能在自身時(shí)鐘的邊沿捕捉不到發(fā)送使能信號(hào),為了保證正常發(fā)送,,必須對(duì)發(fā)送使能信號(hào)進(jìn)行延時(shí),;
??? (3)寫過程中的延時(shí):由于擦除主存儲(chǔ)區(qū)并將緩沖區(qū)寫入所需的最長(zhǎng)時(shí)間為tEP,為了確保每次都將數(shù)據(jù)成功寫入,,必須延時(shí)一段時(shí)間tEP再轉(zhuǎn)入其他狀態(tài),。
??? VHDL實(shí)現(xiàn)的基于RS232標(biāo)準(zhǔn)的UART簡(jiǎn)單穩(wěn)定可靠,有很多文獻(xiàn)資料可供參考,,這里不再贅述,。
??? 本文采用FPGA結(jié)合VHDL編程來模擬SPI接口時(shí)序的方法實(shí)現(xiàn)了對(duì)大容量串行存儲(chǔ)器的訪問,在UART的配合下完成了對(duì)大量測(cè)量數(shù)據(jù)的存儲(chǔ)交換工作,,并在筆者設(shè)計(jì)的儀表中成功地應(yīng)用,,運(yùn)行穩(wěn)定可靠高效。這里雖然是以ATMEL公司的AT45DB041B為例,,但使用相同的方法,,對(duì)一系列其他類型的串行存儲(chǔ)芯片如Megawin公司的flash存儲(chǔ)器MM36SBO10等,也可以進(jìn)行類似的操作,,對(duì)以后解決此類問題具有一定的參考價(jià)值,。
參考文獻(xiàn)
[1]?http://www.altera.com Cyclone Device Hand book, Volume 1
[2]?http://www.atmel.com AT45DB041B-SC datasheet
[3]?王勝輝,律方成,,張正平,,等.串行FLASH存儲(chǔ)器AT45DB041與單片機(jī)的接口設(shè)計(jì)及應(yīng)用.電測(cè)與儀表,2007,44(1):65-68.
[4]?孫鵬. 大容量串行flash存儲(chǔ)器AT45DB041的原理與應(yīng)用[J]. 電子制作,,2007,,(1):42-44.
[5]?黃智偉. FPGA系統(tǒng)設(shè)計(jì)與實(shí)踐.北京: 電子工業(yè)出版社,2005.
[6]?李現(xiàn)勇. Visual C++串口通信技術(shù)與工程實(shí)踐(第二版).北京:人民郵電出版社,2002.

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章,、圖片,、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者,。如涉及作品內(nèi)容,、版權(quán)和其它問題,請(qǐng)及時(shí)通過電子郵件或電話通知我們,,以便迅速采取適當(dāng)措施,,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:[email protected],。