<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è) > 模擬技術(shù) > 設計應用 > 基于FPGA的SPI Flash控制器的設計方案

基于FPGA的SPI Flash控制器的設計方案

作者: 時(shí)間:2013-09-28 來(lái)源:網(wǎng)絡(luò ) 收藏
bit容量的GD25Q512.

基于FPGA的SPI Flash控制器的設計方案

   由VHDL編寫(xiě),主要為芯片提供串行時(shí)鐘,將從用戶(hù)端輸入的數據(包括指令字節、地址字節和數據字節)寄存起來(lái)并在串行時(shí)鐘的控制下通過(guò)spi_dout信號線(xiàn)逐位輸出到 芯片中,同樣將從SPI Flash芯片中讀出的串行數據轉換成并行數據送給用戶(hù)端。此外,SPI Flash還必須在用戶(hù)通過(guò)sel、addr以及wr組合發(fā)出的操作命令下產(chǎn)生一系列的控制信號,并在這些控制信號的作用下根據狀態(tài)機的轉換方向進(jìn)行動(dòng)作并且輸出相應的結果。

  3.2 SPI Flash控制狀態(tài)機

  由于SPI Flash操作命令較多,并且很多操作命令之間存在相同的操作步驟,所以利用狀態(tài)機進(jìn)行控制能夠準確有條理地完成對SPI Flash的操作。分析GDQ25系列SPI Flashdatasheet,可將SPI Flash控制器的工作狀態(tài)劃分為空閑狀態(tài)(IDLE)、傳輸指令狀態(tài)(TxCMD)、傳輸高字節地址狀態(tài)(TxADD_H)、傳輸中間字節地址狀態(tài)(TxADD_M)、傳輸低字節地址狀態(tài)(TxADD_L)、傳輸偽字節狀態(tài)(TxDummy)、傳輸數據狀態(tài)(TxDATA)和接收數據狀態(tài)(RxDATA)。除此以外,由于所有接收到的指令值都寄存在指令寄存器內,當一條指令執行完畢時(shí)需要將指令寄存器清空,以便接收下一條用戶(hù)指令,所以設定一個(gè)清除指令狀態(tài)(CLR_CMD)作為每一操作完成后的收尾狀態(tài)。當狀態(tài)機進(jìn)入CLR_CMD狀態(tài)后,表示當前操作已經(jīng)完成,正將指令寄存器指令值清空;當狀態(tài)機進(jìn)入IDLE狀態(tài)時(shí),用戶(hù)可輸入下一操作指令,對SPI Flash進(jìn)行下一操作??紤]到SPI Flash的響應時(shí)間,在以上工作狀態(tài)中間插入了一些等待狀態(tài)(WAIT)。

  4.SPI Flash控制器驗證

  SPI Flash控制器IP核在Modelsim 6.5g上能夠通過(guò)功能仿真,下面分析一下SPI Flash頁(yè)面編程操作及數據讀取操作的功能仿真。

  4.1 頁(yè)面編程操作

  頁(yè)面編程操作仿真波形如圖3所示,圖中截取輸入00H和01H數據的波形,最多可連續輸入一頁(yè) 256字節數據。當用戶(hù)輸入頁(yè)面編程指令02H,狀態(tài)機進(jìn)入txcmd狀態(tài),頁(yè)編程指令02H通過(guò)spi_dout傳輸給SPI Flash.當tx_bit_cnt計數到8時(shí),指令傳輸完畢,狀態(tài)機在等待后進(jìn)入txadd_h狀態(tài),同時(shí)tx_bit_cnt被清零,需寫(xiě)入數據的對應存儲空間的起始地址高字節值89H被傳輸。當tx_bit_cnt計數到8時(shí),高字節地址值89H被傳輸完畢,狀態(tài)機在等待后進(jìn)入txadd_m狀態(tài),同時(shí)tx_bit_cnt被清零,同上,地址中間字節67H和45H被傳輸。當add_h、add_m和add_l寄存器的值依次傳輸完畢,狀態(tài)機進(jìn)入 wait6狀態(tài),等待用戶(hù)輸入需寫(xiě)入SPI Flash的數據。當用戶(hù)設定{sel,addr,wr}為10001b,狀態(tài)機進(jìn)入txdata狀態(tài),同時(shí)tx_new_data被置高,表示要傳輸新寫(xiě)入的數據。在txdata狀態(tài)下,控制器將傳輸寫(xiě)入的第1字節數據00H,當tx_bit_cnt計數到8時(shí),第1字節數據00H被傳輸完畢,tx_new_data被拉低,tx_empty被拉高,表示當前沒(méi)有可傳輸的數據,狀態(tài)機進(jìn)入wait6狀態(tài),等待新數據寫(xiě)入。直到用戶(hù)再次設定 {sel,addr,wr}為10001b,狀態(tài)機再次進(jìn)入txdata狀態(tài),同時(shí)tx_new_data被置高,表示寫(xiě)入的第2字節數據01H將要傳輸。當tx_bit_cnt計數到8,第2字節數據傳輸完畢,tx_new_data被拉低,tx_empty被拉高,狀態(tài)機進(jìn)入wait6狀態(tài)。由于 GDQ25系列SPI Flash頁(yè)面編程一次最多可寫(xiě)入256字節數據,所以用戶(hù)在寫(xiě)入數據時(shí),應注意最多寫(xiě)入256次數據,否則超過(guò)的數據將覆蓋開(kāi)始的數據。當狀態(tài)機處于 wait6狀態(tài)而用戶(hù)想結束頁(yè)面編程時(shí),可向控制器輸入NOP指令強制結束當前頁(yè)面編程操作。狀態(tài)機在接收到NOP指令后將進(jìn)入clr_cmd狀態(tài)和 idle空閑態(tài),等待下一條指令的到來(lái)。當頁(yè)面編程操作還沒(méi)結束時(shí),busy將一直被置高。

基于FPGA的SPI Flash控制器的設計方案

  4.2 數據讀取操作

  讀數據指令仿真波形如圖4所示。當用戶(hù)輸入讀數據指令03H,狀態(tài)機進(jìn)入txcmd狀態(tài),讀數據指令通過(guò)spi_dout傳輸給SPI Flash。

基于FPGA的SPI Flash控制器的設計方案

  當tx_bit_cnt計數到8時(shí),指令傳輸完畢,狀態(tài)機等待后進(jìn)入txadd_h狀態(tài),傳輸要讀出數據所在存儲空間起始地址的高字節,同時(shí)tx_bit_cnt清零,以為下一個(gè)傳

fpga相關(guān)文章:fpga是什么




關(guān)鍵詞: FPGA SPI Flash 控制器

評論


相關(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>