楊曉明,李永紅,晉玉劍,王恩懷
(中北大學(xué) 信息與通信工程學(xué)院,山西 太原 030051)
美國微芯(Microchip)公司推出的32位單片機(jī)PIC32具有256~512 kbyte的閃存和64~128 kbyte的SRAM存儲器。由于其端口數(shù)目、內(nèi)部定時器和中斷源數(shù)目有限,單獨(dú)使用PIC32作為存儲系統(tǒng)的主控部分,會占用較多芯片資源,所以要實(shí)現(xiàn)大容量數(shù)據(jù)實(shí)時存儲的目的,就需要進(jìn)行Flash存儲擴(kuò)展。系統(tǒng)選用CPLD作為Flash存儲擴(kuò)展部分的控制核心,利用CPLD控制電路時序邏輯,并由單片機(jī)發(fā)出讀、寫及擦除指令,這樣不僅可以使單片機(jī)和CPLD的功能得到充分發(fā)揮,還可以提高系統(tǒng)的穩(wěn)定性以及整體性能并簡化系統(tǒng)設(shè)計(jì)。試驗(yàn)結(jié)果表明,基于CPLD設(shè)計(jì)的PIC32單片機(jī)大容量存儲擴(kuò)展系統(tǒng)可以實(shí)現(xiàn)數(shù)據(jù)實(shí)時、準(zhǔn)確的存儲,具有傳輸速度快、使用方便的特點(diǎn),在數(shù)據(jù)存儲、采集、傳輸?shù)阮I(lǐng)域具有廣泛的應(yīng)用前景。
存儲系統(tǒng)由PIC32單片機(jī)、CPLD芯片和Flash閃存3部分組成。系統(tǒng)所要實(shí)現(xiàn)的功能是:數(shù)據(jù)采集部分將實(shí)時得到的數(shù)據(jù)信號傳輸?shù)絇IC32單片機(jī),單片機(jī)向CPLD發(fā)出數(shù)據(jù)存儲命令、地址和數(shù)據(jù),再由CPLD控制將地址、數(shù)據(jù)實(shí)時存儲于Flash閃存中。試驗(yàn)結(jié)束后,單片機(jī)發(fā)出讀取指令,再經(jīng)由CPLD控制部分從Flash中將數(shù)據(jù)讀出并傳輸?shù)絾纹瑱C(jī),通過計(jì)算機(jī)串口上傳至計(jì)算機(jī)作進(jìn)一步的分析處理。圖1所示為系統(tǒng)組成框圖。
CPLD內(nèi)部采用模塊化設(shè)計(jì)原則,分別建立PIC32接口模塊、FIFO模塊和Flash讀寫模塊。FIFO由CPLD片內(nèi)配置編寫,這樣既可以最大化地利用CPLD內(nèi)部資源以實(shí)現(xiàn)系統(tǒng)微型化,又可以節(jié)省使用外部FIFO芯片的成本。CPLD選用Altera公司MAXII器件系列中的EPM240T100C5芯片,MAXII系列是一種非易失性、即用性可編程邏輯系列,具有CPLD中單個I/O管腳最低成本及最小功耗。Flash存儲器選用三星公司的K9K8G08U0A。
Flash存儲器具有非易失性、體積小、重量輕、抗震動、低功耗、高性能等特點(diǎn)[1]。目前,F(xiàn)lash的生產(chǎn)廠商主要有三星,Hynix,Micron,ST,東芝等[2]。本文選用的是三星公司的K9K8G08U0A芯片,它采用2.7~3.6 V供電,容量為1 Gbyte,硬件接口比較簡單,命令、數(shù)據(jù)和地址經(jīng)統(tǒng)一的I/O端口傳輸,可在25 ns內(nèi)讀出其數(shù)據(jù)寄存器中的單字節(jié)數(shù)據(jù)。圖2為K9K8G08U0A陣列組織,存儲區(qū)被分為8 192個相對獨(dú)立的塊,每塊分為64頁,每頁2 112 byte,CPLD通過列地址和行地址對每一個字節(jié)進(jìn)行訪問。K9K8G08U0A內(nèi)有一個1頁(容量2 112 byte)的數(shù)據(jù)寄存器,向Flash寫入數(shù)據(jù)先是向數(shù)據(jù)寄存器寫入。K9K8G08U0A頁編程(寫)操作流程為:首先寫入命令80H和地址,再寫入數(shù)據(jù),頁編程結(jié)束需確認(rèn)10H命令后再將寄存器中的數(shù)據(jù)寫入存儲區(qū),待完成寫入后,需讀取寄存器以判斷寫入操作是否成功。若寫入失敗則為壞塊。讀操作流程:先寫入命令00H以及要讀取頁的地址,再寫命令30H,將行地址所指定的頁中的數(shù)據(jù)傳輸至數(shù)據(jù)寄存器,進(jìn)行ECC校驗(yàn),校驗(yàn)成功后,則在寫信號作用下從指定的列地址開始讀至此頁末尾,否則進(jìn)行錯誤檢查[3]。
存儲控制系統(tǒng)硬件接口設(shè)計(jì)如圖3所示。
各管腳功能如下:
1)MPMD[0...15]為數(shù)據(jù)、地址、命令輸入輸出總線;
2)MPMRD/WR為讀寫信號,讀寫選通合并為一根控制線;
3)MPMENB為讀寫控制線,負(fù)責(zé)決定何時執(zhí)行讀/寫操作;
4)MPMAL為地址鎖存使能,負(fù)責(zé)鎖存數(shù)據(jù)的地址;
5)MPMCS為片選信號線,高電平有效;
6)MPMINT為外部中斷源控制,在允許中斷的情況下,將在每完成一個讀或?qū)懼芷跁r產(chǎn)生中斷;
7)BUSY1和BUSY2為設(shè)備運(yùn)行“忙”狀態(tài)指示,在進(jìn)行任何讀或?qū)懖僮鲿r,除了操作的最后一個周期,BUSY位都被置高;
8)FLASHDT[0...15]為數(shù)據(jù)、地址和命令復(fù)用的8位輸入輸出總線;
9)WE為寫使能信號,將命令、地址、數(shù)據(jù)鎖存到芯片內(nèi)部;
10)ALE為地址鎖存使能信號,用于控制外部地址鎖存到芯片內(nèi)部;
11)CLE為命令鎖存使能信號,用于控制外部命令鎖存到芯片內(nèi)部;
12)CE為片選信號,若沒有檢測到CE信號,則芯片保持待機(jī)模式;
13)RdEnable為讀使能信號,允許輸出數(shù)據(jù)至緩沖器,下降沿有效;
14)BUSY指示芯片工作狀態(tài),如果芯片忙,則信號變低。
CPLD程序在QuartusII 9.0軟件環(huán)境下調(diào)試,使用VHDL語言編寫(由于篇幅限制,本文不給出程序部分,想?yún)⒖汲绦蛘呖上蜃髡咚魅。?。圖4所示為QuartusII 9.0編程的頂層模塊圖。fosc為系統(tǒng)時鐘,由片外時鐘產(chǎn)生電路提供,頻率為40 MHz,負(fù)責(zé)提供系統(tǒng)所需的時鐘發(fā)生信號;reset為重置信號;earse_en為擦寫使能信號,負(fù)責(zé)使能Flash的擦寫功能;earse_ok為擦寫完成信號;ad?dwr負(fù)責(zé)向Flash寫入地址,只有寫入地址成功后數(shù)據(jù)寫入才有效。
1)寫操作過程。PIC32單片機(jī)在接收到測試數(shù)據(jù)后,先通過wrfifo dc2向lpm fifo dc2發(fā)出寫地址信號,此寫地址信號由rdfifo dc2傳輸至Flash,寫入的地址信息由addwr傳輸。待地址寫入完成后,單片機(jī)再向fifo dc2發(fā)送寫數(shù)據(jù)命令,F(xiàn)lash收到命令后,數(shù)據(jù)由dataout輸出并在flashdatain口寫入Flash。
2)讀操作過程。PIC32單片機(jī)在發(fā)出讀取地址命令后,經(jīng)所要讀取的地址由addrd傳輸給Flash,具體地址上的數(shù)據(jù)在發(fā)出讀取命令后,由flashdataout口輸出并在da?tain輸入單片機(jī)。
在這里要注意,對FIFO的讀寫是在發(fā)出讀寫信號wrreq和rdreq后由時鐘信號wrclk和rdclk控制,并嚴(yán)格按照lpm fifo的讀寫時序進(jìn)行,圖5為FIFO讀寫時序圖。
由QuartusII 9.0軟件進(jìn)行仿真,得到Flash的讀、寫操作時序波形圖,如圖6和圖7所示。將得到的時序波形圖與三星公司K9K8G08U0A數(shù)據(jù)手冊上讀寫時序圖對照,可以看到讀寫仿真波形滿足設(shè)計(jì)要求,可以實(shí)現(xiàn)讀、寫邏輯功能,系統(tǒng)設(shè)計(jì)方案切實(shí)可行。
本文介紹了基于CPLD的PIC32單片機(jī)大容量存儲系統(tǒng)的設(shè)計(jì)方法,詳細(xì)闡述了CPLD模塊化系統(tǒng)設(shè)計(jì)方案,通過得到的讀寫時序仿真圖驗(yàn)證了系統(tǒng)設(shè)計(jì)的正確性與可行性。該系統(tǒng)在實(shí)踐中成功應(yīng)用在某項(xiàng)目的系統(tǒng)測試適配器設(shè)計(jì)中,并成功實(shí)現(xiàn)數(shù)據(jù)的存儲與讀取。試驗(yàn)結(jié)果證明,合理應(yīng)用CPLD技術(shù)和Flash大容量存儲器,可以大大提高系統(tǒng)設(shè)計(jì)的靈活性與可靠性,并很好解決大容量測量數(shù)據(jù)存儲容量的問題。
[1]鄭文靜,李明強(qiáng),舒繼武.Flash存儲技術(shù)[J].計(jì)算機(jī)研究與發(fā)展,2010(4):716-726.
[2]鐘頤華,王興東,余松煜.基于NAND Flash的超高速視頻存儲技術(shù)研究[J].電視技術(shù),2007,31(7):33-36.
[3]于文峰.大容量存儲器K9K8G08U0A在海洋內(nèi)波測量系統(tǒng)中的應(yīng)用[J].水雷戰(zhàn)與艦船防護(hù),2009(4):26-29.