《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 可編程邏輯 > 設(shè)計(jì)應(yīng)用 > 基于FPGA的K9F4G08 Flash控制器設(shè)計(jì)
基于FPGA的K9F4G08 Flash控制器設(shè)計(jì)
來(lái)源:電子技術(shù)應(yīng)用2010年第5期
唐 磊,周 旋,吳 瑤,李金城
北京交通大學(xué) 電子信息工程學(xué)院,北京100044
摘要: 設(shè)計(jì)了一種能使FPGA的主狀態(tài)機(jī)直接管理Flash的控制器,該控制器具有自己的指令集和中斷管理方式。用戶可以根據(jù)FPGA的系統(tǒng)時(shí)鐘對(duì)控制器進(jìn)行操作,無(wú)需關(guān)心Flash對(duì)指令和數(shù)據(jù)的時(shí)序要求。控制器建立了自己的壞塊管理機(jī)制,合并了一些Flash的常用關(guān)聯(lián)指令,方便了用戶對(duì)FPGA主狀態(tài)機(jī)的設(shè)計(jì)。
中圖分類號(hào): TN431.2
文獻(xiàn)標(biāo)識(shí)碼: A
Design of K9F4G08 Flash controller based on FPGA
TANG Lei,ZHOU Xuan,WU Yao,LI Jin Cheng
School of Electronic and Information Engineering, Beijing Jiaotong University, Beijing 100044,China
Abstract: This paper designs a Flash controller, which enables the FPGA main state-machine to manage a Flash memory chip efficiently. The controller builds its own instruction set derived from the construction set of Flash, as well as a simple interrupt mechanism. User operates the controller with the system clock of FPGA without caring about the timing sequences required by the Flash. The proposed Flash controller develops its own method for the reorganization and mapping of invalid blocks in a Flash chip. Some of the constructions in the original construction set of the Flash are combined and enhanced to help the users coding their HDL with a more compact style.
Key words : FPGA;Flash;state-machine;mapping;instruction set

    K9F4G08是三星公司的512 MB NAND Flash,具有8 bit輸入輸出總線。存儲(chǔ)空間共分成4 096個(gè)塊,每個(gè)塊有64個(gè)頁(yè),每個(gè)頁(yè)容量為2 KB,外加64 B的備用空間,組成256 K行×(2 K+64)列的存儲(chǔ)陣列,其地址用5個(gè)字節(jié)表示[1]。
    K9F4G08具有自己的指令集,可以完成對(duì)Flash一個(gè)頁(yè)的讀、寫以及對(duì)一個(gè)塊的擦除等操作。有嚴(yán)格的時(shí)序要求以保證芯片正確地執(zhí)行相應(yīng)的指令。Flash在出廠時(shí)會(huì)有壞塊[1],壞塊是無(wú)法操作的,這對(duì)于連續(xù)大批量的數(shù)據(jù)存儲(chǔ)來(lái)說(shuō)有一定的難度,需要建立一套Flash空間管理方案以保證壞塊不被讀寫,提高數(shù)據(jù)讀寫的可靠性。
    用FPGA直接管理Flash不僅是一種可行的方案,而且還能精簡(jiǎn)硬件結(jié)構(gòu)。但與具有專用Flash接口的MCU或ARM等高檔嵌入式微處理器不同,F(xiàn)PGA不能通過簡(jiǎn)單的讀寫指令編程管理Flash,而必須按照時(shí)序要求對(duì)Flash的端口進(jìn)行指令和參數(shù)的具體操作。若FPGA的主狀態(tài)機(jī)直接管理Flash,將會(huì)使?fàn)顟B(tài)機(jī)的狀態(tài)數(shù)量大量增加,代碼將異常復(fù)雜,甚至無(wú)法完成設(shè)計(jì)[2][3]。
    為解決上述問題,本文設(shè)計(jì)了一個(gè)Flash控制器controller_4G08,它建立了自己的指令集,可以方便地實(shí)現(xiàn)FPGA對(duì)Flash的控制和讀寫操作。FPGA主狀態(tài)機(jī)可以在系統(tǒng)時(shí)鐘頻率下對(duì)controller_4G08發(fā)送指令,然后等待controller_4G08返回的中斷,中斷返回即表示操作完成,無(wú)需關(guān)心Flash要求的操作時(shí)序。采用這個(gè)控制器將大大簡(jiǎn)化FPGA主狀態(tài)機(jī)的狀態(tài)數(shù)量,方便設(shè)計(jì)和調(diào)試,同時(shí)代碼具有很強(qiáng)的可移植性。
1 controller_4G08的設(shè)計(jì)方案
    理論上講FPGA可以直接對(duì)Flash操作,但這樣會(huì)使主狀態(tài)機(jī)狀態(tài)很多,程序繁瑣,當(dāng)需要大批量數(shù)據(jù)反復(fù)讀寫時(shí)很不方便。本文設(shè)計(jì)了一個(gè)控制器controller_4G08,用這個(gè)控制器完成數(shù)據(jù)指令讀寫的時(shí)序操作。
    用controller_4G08管理Flash的系統(tǒng)框圖如圖1所示。FPGA部分有2個(gè)模塊:主狀態(tài)機(jī)和controller_4G08,它們之間的端口連接包括4 bit指令端口cmd_code_4G08、8 bit數(shù)據(jù)輸入輸出端口data_in_4G08與 data_out_4G08、中斷信號(hào)int_ctl_4G08;FPGA對(duì)K9F4G08芯片接口包括8 bit雙向數(shù)據(jù)端口data_4G08、忙標(biāo)志rb、讀使能we、寫使能re等端口。FPGA主狀態(tài)機(jī)若想對(duì)Flash進(jìn)行操作,只需要通過cmd_code_4G08向controller_4G08發(fā)指令,按照系統(tǒng)時(shí)鐘通過data_in_4G08與 data_out_4G08收發(fā)數(shù)據(jù),然后controller_4G08會(huì)對(duì)K9F4G08執(zhí)行相應(yīng)的操作,指令執(zhí)行完之后會(huì)通過int_ctl_4G08給主狀態(tài)機(jī)一個(gè)中斷信號(hào),告訴主狀態(tài)機(jī)執(zhí)行完畢。FPGA主狀態(tài)機(jī)不必關(guān)注Flash指令操作的時(shí)序問題,從而使設(shè)計(jì)簡(jiǎn)化。

2 controller_4G08的指令集
    K9F4G08具有自己的指令集,以讀操作為例,其操作過程是:首先發(fā)送命令00h,再發(fā)5個(gè)周期地址,最后發(fā)送命令30h。Flash開始讀相應(yīng)的頁(yè),此時(shí)rb信號(hào)為低(表示Flash處于busy狀態(tài)),等到rb信號(hào)為高,再按照時(shí)序改變讀使能信號(hào),便可將1個(gè)頁(yè)的數(shù)據(jù)依次讀出[1]。
    controller_4G08根據(jù)K9F4G08的指令集建立了自己的指令集,新增了全擦、部分擦指令,并且在讀寫指令前加入了壞塊匹配功能,如表1所示。

2.1 匹配表
    Flash出廠后可能存在壞塊,使用中也有可能會(huì)再出現(xiàn)新的壞塊。制造商保證每個(gè)芯片中的壞塊不多于80個(gè),同時(shí)保證第0個(gè)塊肯定是好的,且保證擦寫1 000次不壞[1]。當(dāng)進(jìn)行連續(xù)地址的數(shù)據(jù)讀寫時(shí)有可能遇到壞塊,壞塊無(wú)法進(jìn)行操作,會(huì)導(dǎo)致數(shù)據(jù)的丟失。因此必須建立一個(gè)匹配表,當(dāng)遇到壞塊時(shí),將其匹配到好塊的地址上。
    實(shí)際的數(shù)據(jù)讀寫中只使用4 000個(gè)塊,根據(jù)這些要求設(shè)計(jì)了這樣的匹配表:長(zhǎng)度512 B,存放在第0個(gè)塊的第0個(gè)頁(yè)(B0P0)。具體內(nèi)容見表2。

    一個(gè)塊的地址用2 B的16進(jìn)制數(shù)表示。256 B可以存儲(chǔ)128個(gè)塊地址。0~255與256~512中存儲(chǔ)的塊地址是一一對(duì)應(yīng)的,當(dāng)使用到0~255中的塊地址時(shí),需要從256~511中尋找對(duì)應(yīng)的塊地址進(jìn)行替換。
    在FPGA中生成一個(gè)512 B的ram:ram_512,專門用于存放匹配表,當(dāng)系統(tǒng)上電復(fù)位后,狀態(tài)機(jī)會(huì)自動(dòng)將B0P0的數(shù)據(jù)讀出,并將前512 B的數(shù)據(jù)存入該ram_512中,以便后面匹配時(shí)使用[4]。
2.2 全擦與部分擦指令
    該指令用于擦除所有的塊,建立新的匹配表。由于壞塊會(huì)導(dǎo)致擦除不成功,狀態(tài)機(jī)在擦除過程中會(huì)記錄下1~4 000個(gè)塊中擦除失敗的壞塊的地址、4 000~4 095個(gè)塊中好塊的地址,先按照匹配表規(guī)定的順序?qū)懭雛am_512,全部擦除完成后將ram_512中的數(shù)據(jù)寫入B0P0。由于數(shù)據(jù)量不足2 KB,因此后面補(bǔ)零。其流程圖如圖2所示。

    部分擦除與全擦類似,執(zhí)行這條指令需要給定起始與結(jié)尾的塊地址,controller_4G08可以完成對(duì)2個(gè)塊地址之間所有塊的擦除。當(dāng)擦除過程中擦到壞塊時(shí),狀態(tài)機(jī)會(huì)從匹配表中尋找該壞塊對(duì)應(yīng)的好塊,并擦除。若沒有尋找到該壞塊的匹配塊,則出現(xiàn)了新的壞塊,會(huì)產(chǎn)生一個(gè)報(bào)錯(cuò)的標(biāo)志位,提示主狀態(tài)機(jī)需要進(jìn)行全擦,以便建立新的匹配表。
2.3 讀寫匹配
    如果遇到壞塊,會(huì)造成讀寫失敗,為了滿足大批量數(shù)據(jù)讀寫的連續(xù)性,在讀寫數(shù)據(jù)之前必須對(duì)當(dāng)前塊地址進(jìn)行匹配,這些工作由controller_4G08完成,當(dāng)主狀態(tài)機(jī)給controller_4G08發(fā)送塊地址后就會(huì)執(zhí)行。
    Flash讀寫是對(duì)頁(yè)操作的,一次2 KB。FPGA中有一個(gè)4 KB的ram:ram_4096,用來(lái)作為緩沖區(qū)存放數(shù)據(jù)。當(dāng)需要向Flash中寫入數(shù)據(jù)時(shí),主狀態(tài)機(jī)向controller_4G08發(fā)Page_program指令,發(fā)送5 B地址,controller_4G08會(huì)自動(dòng)進(jìn)行塊地址匹配,匹配完之后會(huì)給主狀態(tài)機(jī)一個(gè)中斷信號(hào),主狀態(tài)機(jī)收到這個(gè)信號(hào)便開始將ram_4096中的數(shù)據(jù)發(fā)給controller_4G08,之后等待中斷,收到中斷說(shuō)明寫指令執(zhí)行成功。
    當(dāng)需要讀取數(shù)據(jù)時(shí),主狀態(tài)機(jī)向controller_4G08發(fā)Page_read指令,發(fā)送5字節(jié)地址,controller_4G08會(huì)自動(dòng)進(jìn)行塊地址匹配及Flash的頁(yè)讀操作,等中斷一到便開始接收來(lái)自controller_4G08的數(shù)據(jù)并存至ram_4096中。
    controller_4G08中有一個(gè)存放上次塊地址的寄存器,每次進(jìn)行讀寫操作時(shí),會(huì)將當(dāng)前塊地址與上次的塊地址進(jìn)行比較,若相同則說(shuō)明是好塊,可以讀寫;若不同則需要進(jìn)行匹配。狀態(tài)機(jī)會(huì)從ram_512中尋找該塊是否為壞塊,進(jìn)行一系列處理。與擦除指令一樣,當(dāng)讀寫操作遇到新的壞塊時(shí),也會(huì)向系統(tǒng)報(bào)錯(cuò)。匹配流程圖如圖3所示。

3 controller_4G08主狀態(tài)機(jī)
    圖4是主狀態(tài)機(jī)的狀態(tài)轉(zhuǎn)換圖,系統(tǒng)上電復(fù)位后,主狀態(tài)機(jī)將進(jìn)入等待使能信號(hào)狀態(tài)。收到使能信號(hào)后,主狀態(tài)機(jī)會(huì)從cmd_code_4G08中讀取操作碼,然后啟動(dòng)對(duì)應(yīng)的子狀態(tài)機(jī),執(zhí)行對(duì)應(yīng)的操作。子狀態(tài)機(jī)執(zhí)行完畢以后就會(huì)通過int_ctl_4G08發(fā)送給主狀態(tài)機(jī)一個(gè)中斷信號(hào),同時(shí)將執(zhí)行結(jié)果返回。主狀態(tài)機(jī)收到中斷信號(hào)后,又進(jìn)入空閑狀態(tài)等待下一個(gè)使能信號(hào)。這樣設(shè)計(jì)的主狀態(tài)機(jī)隨時(shí)都可以添加新的指令,可擴(kuò)展性強(qiáng)[4-5]。

4 FPGA下裝驗(yàn)證結(jié)果
    采用FPGA開發(fā)板進(jìn)行驗(yàn)證。此開發(fā)板的硬件資源包括Cyclone的FPGA:EP1C12Q240C、3片F(xiàn)lash:K9F4G08、1片USB總線控制芯片:CH372。利用FPGA控制CH372,可以完成FPGA與PC通過USB進(jìn)行數(shù)據(jù)收發(fā)[6]。
    在PC上用VB軟件編寫了調(diào)試軟件[7],利用該軟件可以通過USB口向FPGA發(fā)送指令,從而完成對(duì)任意Flash頁(yè)的讀、寫及全擦。
    首先進(jìn)行Flash全擦,讀取B0P0即可看到匹配表。從匹配表中找到一個(gè)壞塊的地址對(duì)其寫入2 KB的數(shù)據(jù),然后斷電再上電,讀取該壞塊地址,比較寫入與讀出的數(shù)據(jù)發(fā)現(xiàn)完全一致,從而驗(yàn)證了本設(shè)計(jì)的壞塊管理和壞塊匹配方法的正確性。通過軟件操作,對(duì)普通好塊的讀寫也是正確的,這里就不再說(shuō)明了。
    本文用FPGA主狀態(tài)機(jī)直接管理controller_4G08、controller_4G08控制芯片的設(shè)計(jì)方案可以減少主狀態(tài)機(jī)的狀態(tài)數(shù)量,使FPGA很方便地實(shí)現(xiàn)Flash控制功能,設(shè)計(jì)更加容易實(shí)現(xiàn),具有較強(qiáng)的可復(fù)用性與移植性。同時(shí)建立了一套完善的Flash文件管理機(jī)制。目前該控制器模塊已經(jīng)應(yīng)用于數(shù)據(jù)采集回放系統(tǒng)中[8-9]。
參考文獻(xiàn)
[1] Samsung.K9F4G08手冊(cè).2006.
[2] 王崇劍,李玉山.基于FPGA的K9F2G08U0M Nand FLASH控制器設(shè)計(jì)[J].電子元器件應(yīng)用,2008,10(3):4-7.
[3] 陳明義,連帥軍,周建國(guó).基于FPGA的FLASH控制器系統(tǒng)設(shè)計(jì)及實(shí)現(xiàn)[J].電子科技,2008,21(7):11-13.
[4] 王誠(chéng),吳繼華.Altera FPGA/CPLD設(shè)計(jì)[M].北京:人民郵電出版社,2005.
[5] 夏雨聞.Verilog數(shù)字系統(tǒng)設(shè)計(jì)教程[M].北京:北京航天航空大學(xué)出版社,2003.
[6] 南京沁恒電子有限公司.CH372中文手冊(cè)(一).2007.
[7] 劉彬彬,高春艷,孫秀梅.VB從入門到精通[M].北京:清華大學(xué)出版社,2008.
[8] 李蘭,寧永海,基于CH372的USB數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].微計(jì)算機(jī)信息,2007,23(12):76-77.
[9] 周治良,劉俊,張斌珍.基于FPGA及FLASH的數(shù)據(jù)采集存儲(chǔ)系統(tǒng)設(shè)計(jì)[J].微計(jì)算機(jī)信息,2007,23(31):91-92.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
欧美在线观看一区二区| 欧美电影免费观看| 亚洲国产日韩一级| 国产精品乱码| 欧美日韩高清在线| 欧美一区二区| 亚洲亚洲精品三区日韩精品在线视频| 亚洲在线黄色| 洋洋av久久久久久久一区| 亚洲激情六月丁香| 亚洲大胆人体视频| 亚洲国产高清自拍| 亚洲国产导航| 亚洲黄色影片| 99riav1国产精品视频| 亚洲免费高清| 国产视频一区在线| 欧美亚洲第一区| 国产精品成人免费视频| 国产精品高潮呻吟久久| 老司机一区二区三区| 在线亚洲欧美| 亚洲一区二区三区久久| 久久精品夜色噜噜亚洲a∨ | 国产精品中文字幕欧美| 国产精品久久久久9999高清| 国产精品免费aⅴ片在线观看| 欧美成人一区二区在线| 欧美成人日本| 欧美日产国产成人免费图片| 欧美日韩在线大尺度| 久久免费99精品久久久久久| 久久嫩草精品久久久久| 亚洲在线中文字幕| 亚洲免费视频网站| 久久精品国产一区二区电影| 久久久欧美精品| 欧美激情在线| 国产精品国产自产拍高清av王其| 欧美久久久久久久| 欧美日韩国产精品成人| 国产精品久久久久久久久免费桃花 | 日韩亚洲欧美精品| 中文一区字幕| 久久爱www久久做| 欧美11—12娇小xxxx| 欧美日韩小视频| 国产一区二区日韩| 亚洲国产精品久久久久婷婷老年| 国产午夜精品久久久| 国内精品久久久| 91久久中文字幕| 亚洲桃花岛网站| 一区二区三区成人精品| 亚洲欧美在线免费| 亚洲欧美日韩一区二区| 亚洲一区二区网站| 欧美专区福利在线| 日韩亚洲欧美一区二区三区| 欧美亚洲在线播放| 欧美二区在线| 国产精品永久入口久久久| 在线成人中文字幕| 亚洲七七久久综合桃花剧情介绍| 亚洲国产另类精品专区| 亚洲福利视频一区二区| 中日韩午夜理伦电影免费| 久久精品盗摄| 亚洲国产日韩综合一区| 亚洲一二三四区| 美女网站在线免费欧美精品| 国产精品高精视频免费| 亚洲国产精品第一区二区三区| 亚洲国产精品久久人人爱蜜臀| 亚洲电影观看| 亚洲激情国产| 午夜在线观看欧美| 一本大道av伊人久久综合| 久久久久一区| 国产精品婷婷午夜在线观看| 亚洲精品一区二区三区99| 亚洲精品影视在线观看| 久久大香伊蕉在人线观看热2| 亚洲激情二区| 欧美一区免费视频| 久久亚洲综合网| 欧美成在线观看| 国产日韩欧美在线观看| 99精品国产99久久久久久福利| 亚洲午夜女主播在线直播| 亚洲欧洲综合另类| 久久久久9999亚洲精品| 欧美国产日韩亚洲一区| 国产综合色精品一区二区三区| 亚洲第一在线视频| 欧美一进一出视频| 亚洲欧美影音先锋| 欧美日韩岛国| 亚洲人成毛片在线播放| 91久久在线| 久久综合五月| 国内欧美视频一区二区| 午夜免费电影一区在线观看| 亚洲三级视频| 亚洲欧美国产精品桃花| 久久久久99精品国产片| 国产精品色一区二区三区| 日韩一区二区久久| 99这里只有精品| 欧美在线一级视频| 亚洲一区二区成人| 久久精品国产一区二区三区| 亚洲一区二区精品视频| 欧美精品偷拍| 亚洲黄色在线视频| 亚洲日本欧美| 欧美激情国产日韩| 91久久国产精品91久久性色| 亚洲精品欧美日韩专区| 小黄鸭精品aⅴ导航网站入口| 嫩草伊人久久精品少妇av杨幂| 国产精品高精视频免费| aa成人免费视频| 一区二区国产精品| 欧美日韩高清在线一区| 亚洲精品一区在线观看| 欧美亚洲视频| 中文精品视频| 欧美日韩精品综合在线| 一本一道久久综合狠狠老精东影业| 亚洲丰满在线| 麻豆av一区二区三区| 国产模特精品视频久久久久| 亚洲免费一级电影| 欧美怡红院视频| 国产一区二区精品丝袜| 亚洲第一区中文99精品| 欧美88av| 日韩视频在线观看免费| 亚洲一区网站| 国产喷白浆一区二区三区| 欧美有码视频| 欧美电影免费| 一本色道久久综合亚洲精品小说 | 亚洲欧洲99久久| 国产乱码精品一区二区三区五月婷| 亚洲精品资源| 亚洲一区二区四区| 国产伦精品一区二区三区免费| 99亚洲一区二区| 亚洲中无吗在线| 久久国产精彩视频| 玖玖综合伊人| 在线免费观看一区二区三区| 日韩视频精品| 国产精品久久久久9999| 欧美伊人精品成人久久综合97 | 久久视频精品在线| 亚洲第一色在线| 亚洲国产第一| 欧美日韩免费观看一区=区三区| 亚洲经典在线| 亚洲欧美日韩精品在线| 国产一区二区三区在线观看视频| 亚洲免费在线视频一区 二区| 亚洲视频在线观看视频| 国产精品视频免费观看www| 亚洲国产精品久久久久秋霞不卡| 久久全球大尺度高清视频| 亚洲国产小视频在线观看| 亚洲人成亚洲人成在线观看| 欧美色区777第一页| 久久www成人_看片免费不卡| 欧美精品一区在线观看| 亚洲女人天堂av| 欧美福利影院| 午夜精品视频一区| 欧美高清影院| 午夜视频在线观看一区| 欧美精品一区二区三区久久久竹菊 | 国产精品久久久久久久一区探花| 亚洲美女淫视频| 99re热这里只有精品视频| 国产精品欧美日韩一区二区| 亚洲激情成人在线| 国产精品人人做人人爽人人添| 亚洲欧美一区二区激情| 欧美成人亚洲成人| 亚洲精品影院| 久久亚洲精品中文字幕冲田杏梨| 一区二区在线观看av| 亚洲一区欧美一区| 亚洲大片免费看| 99视频一区二区三区| 国产区在线观看成人精品| 一本一道久久综合狠狠老精东影业 | 久久精品成人| 亚洲精品极品| 卡一卡二国产精品| 亚洲一区二区久久|