<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 網(wǎng)絡(luò )與存儲 > 設計應用 > 基于FPGA的串行Flash擴展實(shí)現

基于FPGA的串行Flash擴展實(shí)現

——
作者: 時(shí)間:2007-11-30 來(lái)源:國外電子元器件 收藏

  1 引言

  憑借其方便靈活、可重復編程等優(yōu)點(diǎn)而日益被廣泛應用;閃速( Memory)以其集成度高、成本低、使用方便等優(yōu)點(diǎn),在眾多領(lǐng)域中也獲得了廣泛應用。在現代數字電路設計中。經(jīng)常需要保存大量數據,而存儲速度快、體積小、功耗低且價(jià)格低廉,可在線(xiàn)電擦寫(xiě),信息在掉電后不會(huì )丟失,因此成為設計人員的首選。

  2 M25P80的介紹

  是一種具有電可擦除的可編程ROM,可以分為兩大類(lèi):并行Flash和串行Flash。并行Flash存儲量大,速度快;而串行Flash存儲量相對較小,但體積小,連線(xiàn)簡(jiǎn)單,可減小電路面積,節約成本,二者各有其優(yōu)缺點(diǎn),可依據實(shí)際需要選取。本文開(kāi)發(fā)的系統對速度的要求不是很高,而對電路板的面積要求則較為苛刻,因此系統設計選用了串行FlashM25P80。

  M25P80是意法半導體推出的一款高速8 Mbit串行Flash,共由16部分組成,每一部分有256頁(yè),每頁(yè)有256個(gè)字節。M25P80具有先進(jìn)的寫(xiě)保護機制,讀取數據的最大時(shí)鐘速率為40 MHz。M25P80的工作電壓范圍為2.7 V~3.6 V,具有整體擦除和扇區擦除、靈活的頁(yè)編程指令和寫(xiě)保護功能,數據保存至少20年,每個(gè)扇區可承受100 000次擦寫(xiě)循環(huán)。并行Flash封裝通常需要28個(gè)以上的引腳,因此,額外支出大,而M25P80采用SO8封裝,需要的引腳數較少,從而節省了電路板空間,功率、系統噪聲和整體成本等都會(huì )大幅度降低,既經(jīng)濟又實(shí)用。

  圖1為M25P80的引腳排列,其中Vcc和Vss分別為電源和地,其他6個(gè)引腳均可直接與的I/O引腳相連;寫(xiě)保護引腳W和HOLD掛起引腳,用于數據保護和空閑模式的低功耗運行,若不用可將其置為高電平;S為片選信號,為低電平時(shí)表示器件被選中,否則工作在待機狀態(tài);Q為串行數據輸出,數據在時(shí)鐘的下降沿輸出Flash器件;D為串行數據輸入,包括傳輸指令、地址和輸人數據,輸入信號在時(shí)鐘的上升沿鎖存Flash器件中。C為串行時(shí)鐘,由提供時(shí)鐘。由于時(shí)鐘信號速率較高,所以在PCB布線(xiàn)時(shí)要特別注意減少干擾,最好采用地線(xiàn)屏蔽。

  

  3 M25P80的指令操作

  M25P80共有12條操作指令,所有指令都是8位,操作時(shí)先將片選信號(S)拉低選中器件,然后輸入8位操作指令字節,串行數據在片選信號S拉低后的第一個(gè)時(shí)鐘的上升沿被采樣,M25P80啟動(dòng)內部控制邏輯,自行完成相應操作。指令后有時(shí)需輸入地址字節,必要時(shí)還要加入啞讀字節,最后操作完畢后再將片選信號拉高。下面簡(jiǎn)單介紹幾條最常用的指令操作。

  3.1 寫(xiě)使能指令

  頁(yè)面編程時(shí),在寫(xiě)寄存器或者擦除之前,必須先使用寫(xiě)使能指令設置寄存器的寫(xiě)使能位。在上電或寫(xiě)使能無(wú)效指令操作,以及頁(yè)面編程、寫(xiě)寄存器及擦除指令完成時(shí),該寫(xiě)使能位復位。寫(xiě)使能指令的時(shí)序比較簡(jiǎn)單,指令0000 0110(06h)在片選信號拉低后的第一個(gè)時(shí)鐘的上升沿送入Flash,先輸入高位,指令輸入完成后立即拉高片選信號,否則Flash的保護機制則認為是干擾信號而不執行該指令。寫(xiě)無(wú)效指令與寫(xiě)使能指令類(lèi)似,只是輸入的指令代碼為0000 0100(04h)。

  3.2 讀/寫(xiě)狀態(tài)寄存器

  狀態(tài)寄存器在任何時(shí)候都可讀,即使在頁(yè)面編程、擦除或者寫(xiě)寄存器時(shí)也可讀取寄存器,可被連續讀取狀態(tài)寄存器。片選信號拉低后立即送人8位的讀寄存器指令,接下來(lái)Flash將內部寄存器的數值串行輸出,8位寄存器內容反復輸出。

  寫(xiě)狀態(tài)寄存器的操作步驟:寫(xiě)使能指令輸入完成后,拉高片選信號,Flash執行讀使能指令設置寄存器。然后拉低片選信號,輸入寫(xiě)寄存器指令和數據,隨后必須馬上拉高片選信號。

  3.3 讀數據指令

  片選信號拉低后,首先輸入8位讀數據指令,再輸入所要讀取內容的24位首地址,地址指向的數據在時(shí)鐘的下降沿輸出。數據輸出后,地址自動(dòng)遞增,并指向下一個(gè)地址。傳輸下一個(gè)地址指向的數據,當地址達到最高位后自動(dòng)轉向首地址000000h,如此循環(huán),讀出Flash中的全部?jì)热?,直到片選信號拉高。讀數據指令時(shí)序如圖2所示。

  

  3.4 頁(yè)面編程指令

  在頁(yè)面編程之前,首先要輸入寫(xiě)使能指令,Flash完成寄存器設置后片選信號拉低,輸入頁(yè)面編程指令,緊接著(zhù)輸入編程地址和輸入數據。一次最多可輸入256字節數據,如果超出則只保留最后輸入的256字節。如果輸入的地址低8位不全為零,則從輸入的地址開(kāi)始編程,編程至該頁(yè)最后,再從該頁(yè)的起始位置開(kāi)始編寫(xiě)。數據輸人完畢后片選信號必須置高。否則不執行頁(yè)面編程指令。頁(yè)面編程指令時(shí)序圖如圖3所示。

  

  3.5 擦除指令

  擦除指令將Flash中的0置為1,分為部分擦除和整體擦除兩種指令。整體擦除指令和寫(xiě)使能指令類(lèi)似。只是輸入的指令代碼不同,而部分擦除指令只需要在指令代碼后輸入需要擦除的地址即可,一次可擦除一塊。執行這兩條指令之前,需要先執行寫(xiě)使能指令。

  4 硬件實(shí)現

  Flash正常工作時(shí)必須嚴格按照Flash的時(shí)序控制信號。首次使用Flash時(shí)一定要先進(jìn)行擦除操作,編程指令可以將1變?yōu)?。往Flash中寫(xiě)入數據時(shí),先將數據寫(xiě)入FPGA的ROM中,然后在FPGA內部根據Flash的頁(yè)面編程時(shí)序將數據寫(xiě)入Flash中。選用Altera公司的FPGA,所需的ROM模塊可以直接調用QuartusII中的宏功能模塊,編寫(xiě)一個(gè)控制模塊控制讀取ROM的時(shí)間及地址,并將數據按照Flash的時(shí)序送入Flash中.頁(yè)面編程的模塊圖如圖4所示。選用的Flash容量較大,一般FPGA沒(méi)有這么大的存儲空間,所以數據可分多次寫(xiě)入。FPGA的ROM中的數據保存在.mif文件中,.mif由Matlab直接生成.mif文件,也可在QuartusII軟件中生成。

  

  Flash中的數據只要按照讀時(shí)序要求就可以順利讀入FPGA中進(jìn)行運算。在調試中,為了驗證程序的正確性,可將從Flash中讀出的數據通過(guò)串口送到計算機,模塊圖如圖5所示。圖中的txmit為串口的發(fā)送端模塊圖,它負責將接收到的數據按照RS232C的時(shí)序格式輸出至計算機。flash_read模塊按照Flash的讀數據格式發(fā)出控制信號,并將從Flash讀出的數據按照字節打包送到txmit模塊。讀時(shí)序驗證無(wú)誤后,去除txmit模塊,將由Flash讀出的數據送到其他模塊參與運算。

  

  需要注意的是,一些指令在操作完成后,需要留出一段時(shí)間Flash進(jìn)行數據處理,如寫(xiě)寄存器周期(tw)為5 ms~15 ms,頁(yè)面編程周期(tpp)為1.4 ms~5 ms,部分擦除周期(tse)為1 s~3 s,而整體擦除周期(tBE)為10 s~20 s。這些指令輸入結束后拉高片選信號足夠長(cháng)的時(shí)間,也可以在執行這些指令操作的同時(shí)讀取內部寄存器值,以監控上述周期是否結束。一旦檢測到指令執行完畢則執行后續操作,這樣可節省時(shí)間。如果忽略了Flash的處理時(shí)間則會(huì )發(fā)生錯誤,導致Flash無(wú)法正確執行指令。

  5 結束語(yǔ)

  數字電路設計中經(jīng)常需要使用大容量,串行Flash體積小、占用系統資源少、連線(xiàn)簡(jiǎn)單。隨著(zhù)微電子技術(shù)的迅猛發(fā)展,FPGA在數字電路設計中所發(fā)揮的作用越來(lái)越大,廣泛應用于系統實(shí)現及功能驗證。利用FPGA直接控制flash接口時(shí)序,不僅節約了專(zhuān)用編程器的開(kāi)支,而且方便靈活、便于移植。使用硬件描述語(yǔ)言編寫(xiě)的接口時(shí)序,可重復利用,可移植性強。FPGA的靈活性和串行Flash的體積小的特點(diǎn)相結合,具有設計靈活、成本低廉、實(shí)用性強等優(yōu)勢,并具有重要的參考價(jià)值。



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>