基于FPGA的外部存儲(chǔ)器設(shè)計(jì)
2.2 FLASH讀/寫控制設(shè)計(jì)
讀/寫控制的主要功能是將數(shù)據(jù)寫入FLASH;在模塊正常工作時(shí),為系統(tǒng)提供數(shù)據(jù)。而FPGA這種大規(guī)模的可編程器件十分適合邏輯電路的設(shè)計(jì),能方便地控制和產(chǎn)生FLASH編程操作中的各種控制命令,實(shí)現(xiàn)編程器的功能。該模塊中,選擇的FLASH芯片的讀取時(shí)鐘周期為70ns。
在對(duì)FLASH進(jìn)行編程操作前,必須保證存儲(chǔ)單元為空。如果不為空,就必須先對(duì)FLASH芯片進(jìn)行擦除操作。由于FLASH采用了模塊分區(qū)的陣列結(jié)構(gòu),支持扇區(qū)、塊和整個(gè)芯片一齊被擦除,扇區(qū)和塊擦除的時(shí)間周期為18 ms,整個(gè)芯片擦除時(shí)間為40 ms。而實(shí)現(xiàn)擦除操作只需在地址和數(shù)據(jù)端寫入不同的操作命令即可實(shí)現(xiàn)不同的擦除操作。
FLASH的編程操作分三步驟:第一步是連續(xù)載入3 B命令的軟件數(shù)據(jù)保護(hù)操作;第二步是寫入字地址和字?jǐn)?shù)據(jù),在編程操作過(guò)程中,地址是在的下降沿時(shí)有效,而數(shù)據(jù)則是在的上升沿時(shí)有效;第三步是芯片內(nèi)部的編程操作,該操作在的第四個(gè)上升沿有效,隨后該內(nèi)部編程操作在10 μs內(nèi)即可完成。FLASH編程是基于字為基礎(chǔ)的,編程時(shí)要特別注意編程時(shí)間參數(shù)和使用的命令集,編程和擦除時(shí)的時(shí)鐘參數(shù)見FLASH手冊(cè)。
下面敘述FLASH的擦除操作,擦除分為扇區(qū)擦除、塊擦除和整個(gè)芯片擦除,擦除的時(shí)序基本一致,過(guò)程如下:第一個(gè)時(shí)鐘周期在地址5555H寫入XXAAH數(shù)據(jù),接著第二個(gè)時(shí)鐘周期在地址2AAAH寫入XX55H數(shù)據(jù),第三個(gè)時(shí)鐘周期在地址5555H寫入XX8OH數(shù)據(jù),第四個(gè)時(shí)鐘周期在地址5555H寫入XXAAH數(shù)據(jù),接著第五個(gè)時(shí)鐘周期在地址2AAAH寫入XX55H數(shù)據(jù),第六個(gè)時(shí)鐘周期在地址5555H寫入XX10H數(shù)據(jù),然后芯片內(nèi)部完成擦除工作。FLASH擦除完成后,內(nèi)部所有的數(shù)據(jù)位全部置1。扇區(qū)擦除、塊擦除和芯片擦除的區(qū)別只是在第六個(gè)時(shí)鐘周期傳送的數(shù)據(jù)不同。擦除的時(shí)序圖如圖5所示。本文引用地址:http://www.ex-cimer.com/article/191065.htm
在寫數(shù)據(jù)時(shí)僅能使對(duì)應(yīng)單元的數(shù)據(jù)位由“1”變?yōu)?ldquo;0”,而從“0”變?yōu)?ldquo;1”只有擦除命令才能完成。擦除操作可以按扇區(qū)擦除也可以對(duì)整個(gè)芯片擦除。因此在設(shè)計(jì)時(shí)可將程序代碼和常量表等固定數(shù)據(jù)和系統(tǒng)動(dòng)態(tài)更新數(shù)據(jù)分開存放。每次向更新數(shù)據(jù)區(qū)寫數(shù)據(jù)前對(duì)該區(qū)數(shù)據(jù)進(jìn)行擦除操作即可。
在擦除和寫操作之后,就可以讀數(shù)據(jù)了,讀數(shù)據(jù)的操作非常簡(jiǎn)單,由0E#,CE#控制,當(dāng)這兩個(gè)信號(hào)為低電平時(shí),在地址線上輸入地址,數(shù)據(jù)線上就可以讀出數(shù)據(jù)了。
當(dāng)按照規(guī)定的命令序列向FLASH存儲(chǔ)器發(fā)出命令時(shí),其內(nèi)嵌的算法狀態(tài)機(jī)會(huì)自動(dòng)地完成相應(yīng)的操作。但用戶還應(yīng)了解其內(nèi)部的操作檢測(cè)機(jī)制,以便知道操作是否完成,以及操作是否正確。該芯片的狀態(tài)檢測(cè)位有:數(shù)據(jù)查詢位DQ7,TOGOLE位DQ6和DQ2。通過(guò)查詢它們對(duì)應(yīng)的狀態(tài),即可知道芯片的工作狀態(tài)。
在編程實(shí)現(xiàn)時(shí),用狀態(tài)機(jī)實(shí)現(xiàn)FLASH的接口控制,要確保數(shù)據(jù)線和地址線的建立和保持時(shí)間滿足需求,嚴(yán)格確保實(shí)際提供的時(shí)序和硬件要求一致。圖6為在ModelSIM仿真下的FLASH的擦除時(shí)序圖。
整個(gè)程序的編程實(shí)現(xiàn)是用有限狀態(tài)機(jī)來(lái)實(shí)現(xiàn)的。以擦除為例,介紹有限狀態(tài)機(jī)的設(shè)計(jì)方法。狀態(tài)控制借助系統(tǒng)時(shí)鐘進(jìn)行,通過(guò)多個(gè)狀態(tài)來(lái)完成ERASE操作。狀態(tài)0初始化各輸出信號(hào),狀態(tài)1~5完成第一個(gè)命令輸入,狀態(tài)7~10完成第二個(gè)命令的輸入,狀態(tài)12~15完成第三個(gè)命令的輸入,狀態(tài)17~20完成第四個(gè)命令的輸入,狀態(tài)22~25完成第五個(gè)控制命令輸入,狀態(tài)27~30完成第六個(gè)控制命令,接下來(lái)狀態(tài)是保持控制信號(hào)用來(lái)完成ERASE。在編程過(guò)程中,要完成進(jìn)程控制:進(jìn)程控制就是根據(jù)現(xiàn)態(tài)決定次態(tài)的控制并完成其他的信號(hào)賦值。在本設(shè)計(jì)中,狀態(tài)機(jī)根據(jù)不同的狀態(tài)對(duì)CE、OE#、WE#、地址、數(shù)據(jù)等FLASH控制信號(hào)進(jìn)行賦值,從而完成對(duì)Flash的控制。
但是每執(zhí)行1次寫操作,只能寫入1個(gè)地址單元里的字?jǐn)?shù)據(jù),如果按照這個(gè)方法,完成整個(gè)FLASH芯片2 MWord的數(shù)據(jù)寫入就需要重復(fù)執(zhí)行寫操作2兆次,這樣既麻煩又浪費(fèi)時(shí)間。在實(shí)際操作中,通常通過(guò)計(jì)算機(jī)上的圖形界面來(lái)完成FLASH的燒寫工作,通過(guò)圖形界面使單片機(jī)把計(jì)算機(jī)存儲(chǔ)的數(shù)據(jù)暫存在SDRAM,然后通過(guò)一個(gè)判斷語(yǔ)句檢測(cè)SDRAM是否存滿,沒有存滿則繼續(xù)存儲(chǔ),如果存滿則通過(guò)FPGA控制把SDRAM上的數(shù)據(jù)存儲(chǔ)在FLASH上,這樣通過(guò)一次操作即可存滿。
3 結(jié)語(yǔ)
本文介紹了FPGA外部存儲(chǔ)器的設(shè)計(jì)方法,可以有效地解決雷達(dá)實(shí)時(shí)信號(hào)處理過(guò)程中海量數(shù)據(jù)的存儲(chǔ)問題,同時(shí)也可以充分利用FPGA去控制SDRAM和FLASH,不僅保證了資源的充分利用,也可以有效地滿足信號(hào)處理過(guò)程中的高速實(shí)時(shí)的要求。另外,可以根據(jù)FPGA型號(hào)的不同,適當(dāng)?shù)馗?a class="contentlabel" href="http://www.ex-cimer.com/news/listbylabel/label/外部存儲(chǔ)器">外部存儲(chǔ)器,以滿足不同的應(yīng)用場(chǎng)合。
評(píng)論