基于FPGA的K9F4G08 Flash控制器設計
2.3 讀寫(xiě)匹配
如果遇到壞塊,會(huì )造成讀寫(xiě)失敗,為了滿(mǎn)足大批量數據讀寫(xiě)的連續性,在讀寫(xiě)數據之前必須對當前塊地址進(jìn)行匹配,這些工作由controller_4G08完成,當主狀態(tài)機給controller_4G08發(fā)送塊地址后就會(huì )執行。
Flash讀寫(xiě)是對頁(yè)操作的,一次2 KB。FPGA中有一個(gè)4 KB的ram:ram_4096,用來(lái)作為緩沖區存放數據。當需要向Flash中寫(xiě)入數據時(shí),主狀態(tài)機向controller_4G08發(fā)Page_program指令,發(fā)送5 B地址,controller_4G08會(huì )自動(dòng)進(jìn)行塊地址匹配,匹配完之后會(huì )給主狀態(tài)機一個(gè)中斷信號,主狀態(tài)機收到這個(gè)信號便開(kāi)始將ram_4096中的數據發(fā)給controller_4G08,之后等待中斷,收到中斷說(shuō)明寫(xiě)指令執行成功。
當需要讀取數據時(shí),主狀態(tài)機向controller_4G08發(fā)Page_read指令,發(fā)送5字節地址,controller_4G08會(huì )自動(dòng)進(jìn)行塊地址匹配及Flash的頁(yè)讀操作,等中斷一到便開(kāi)始接收來(lái)自controller_4G08的數據并存至ram_4096中。
controller_4G08中有一個(gè)存放上次塊地址的寄存器,每次進(jìn)行讀寫(xiě)操作時(shí),會(huì )將當前塊地址與上次的塊地址進(jìn)行比較,若相同則說(shuō)明是好塊,可以讀寫(xiě);若不同則需要進(jìn)行匹配。狀態(tài)機會(huì )從ram_512中尋找該塊是否為壞塊,進(jìn)行一系列處理。與擦除指令一樣,當讀寫(xiě)操作遇到新的壞塊時(shí),也會(huì )向系統報錯。匹配流程圖如圖3所示。
3 controller_4G08主狀態(tài)機
圖4是主狀態(tài)機的狀態(tài)轉換圖,系統上電復位后,主狀態(tài)機將進(jìn)入等待使能信號狀態(tài)。收到使能信號后,主狀態(tài)機會(huì )從cmd_code_4G08中讀取操作碼,然后啟動(dòng)對應的子狀態(tài)機,執行對應的操作。子狀態(tài)機執行完畢以后就會(huì )通過(guò)int_ctl_4G08發(fā)送給主狀態(tài)機一個(gè)中斷信號,同時(shí)將執行結果返回。主狀態(tài)機收到中斷信號后,又進(jìn)入空閑狀態(tài)等待下一個(gè)使能信號。這樣設計的主狀態(tài)機隨時(shí)都可以添加新的指令,可擴展性強[4-5]。
評論