基于FPGA的微型數(shù)字存儲(chǔ)系統(tǒng)設(shè)計(jì)方案
3 系統(tǒng)軟件設(shè)計(jì)
3.1 FPGA對(duì)Flash的讀、寫(xiě)、擦除操作
FPGA執(zhí)行對(duì)Flash的讀、寫(xiě)、擦除操作是利用VHDL語(yǔ)言的狀態(tài)機(jī)實(shí)現(xiàn)的。狀態(tài)機(jī)控制Flash的時(shí)序電路簡(jiǎn)單易行,邏輯關(guān)系一目了然。XC2S50接收到CY7C68013傳來(lái)的擦除控制命令,立即執(zhí)行擦除操作。按照時(shí)序,首先寫(xiě)入自動(dòng)塊擦除設(shè)置命令60H,之后依次寫(xiě)入2個(gè)行地址和1個(gè)列地址進(jìn)行尋址,而后寫(xiě)入擦除命令D0H開(kāi)始執(zhí)行擦除操作。
讀操作較為復(fù)雜,需要XC2S50和CY7C68013協(xié)同工作。這里只給出讀信號(hào)的操作過(guò)程。先寫(xiě)人讀設(shè)置命令00H,因?yàn)樽x一次執(zhí)行一頁(yè),所以地址的寫(xiě)入是2個(gè)行地址和3個(gè)列地址,之后寫(xiě)入讀命令,在等待rb變高后就可發(fā)送re信號(hào)將數(shù)據(jù)從Flash讀出。寫(xiě)操作過(guò)程與讀操作類(lèi)似,但寫(xiě)操作完全由 XC2S50控制,寫(xiě)完命令、地址后,開(kāi)始寫(xiě)入數(shù)據(jù),直到寫(xiě)滿2 KB數(shù)據(jù),最后輸入頁(yè)編程命令。需要注意每寫(xiě)完2 KB數(shù)據(jù),F(xiàn)lash返回的狀態(tài)信號(hào)rb所等待的時(shí)間較長(zhǎng),大約是140μs。圖2為頁(yè)編程的流程。
3.2 CY7C68013控制邏輯及固件程序設(shè)計(jì)
CY7C68013主要完成兩部分工作,一是實(shí)現(xiàn)對(duì)擦除的控制開(kāi)關(guān)命令,即上位機(jī)通過(guò)USB接口發(fā)送擦除命令,CY7C68013接收到這個(gè)命令后,會(huì)發(fā)送一個(gè)約為200 ms低脈沖通知FPGA啟動(dòng)擦除操作;二是通過(guò)與FPGA配合,完成從Flash通過(guò)CY7C68013的GPIF接口讀入上位機(jī)的任務(wù)。 CY7C68013所用到的I/O包括控制線USBCTR1,狀態(tài)線US-BS0,讀信號(hào)線USBRD及8條數(shù)據(jù)線。
讀數(shù)時(shí),首先由單片機(jī)發(fā)出讀數(shù)開(kāi)始命令USBCTR1,F(xiàn)PGA接收到該命令后開(kāi)始初始化,包括寫(xiě)入讀數(shù)設(shè)置命令、地址及讀數(shù)命令,等待rb變高, USBS0置低,當(dāng)單片機(jī)檢測(cè)到USBS0變低后,開(kāi)始給出一系列脈沖GPIF(USBRD),將2 KB數(shù)據(jù)依次讀出。與此同時(shí),F(xiàn)PGA在等待幾百納秒后將USBS0置高,單片機(jī)在判斷USBS0變高后也將USBCTR1拉高,為下一頁(yè)讀數(shù)做準(zhǔn)備。讀數(shù)時(shí)序如圖3所示。
評(píng)論