【正文】
ERILOG HDL的設(shè)計流程 5 第三章 SPI FLASH CONTROLLER 設(shè)計環(huán)境 .................................................. 7 VERILOG HDL語言簡介 完成上述全部工作之后,再從功能、面積優(yōu)化和成本縮減等方面對設(shè)計進(jìn)行 分析 總結(jié)本次畢業(yè)設(shè)計中獲得的寶貴經(jīng)驗。 目錄 i 摘 要 SPI 是英語 Serial Peripheral interface 的縮寫,顧名思義就是串行外圍設(shè)備接口。 關(guān)鍵詞 : 閃存 Verilog HDL 串行 并行 FPGA 目錄 ii ABSTRACT SPI (Serial Peripheral interface) is a serial periphery slave interface. SPI is a fast, duplex and synchronism munication bus. And there are only 4 pins on the chip of SPI. It is so convenient for wire layings of PCB. SPI Flash is ideal for code download as well as storing nonvolatile voice, text and data. In this design, I have finished a SPI Flash Controller IP Core. It connects top driver and flash device just like a bridge. The controller receive the parallel data and control signal configured by top, and then the parallel data will be processed, and transmitted to the flash by SPI interface as serial signal in order to execute the read or write operation to the flash. The program actualizes in Verilog HDL, designed in VI under linux. EDA tools are used to simulate, synthesize and debug such as Debussy. After the design’s RTL code and simulation, this design made up a system with other IP on a FPGA platform in order to check the design. After all the work above finished, this paper analyze the function, area and cost of the SPI flash controller, summarize the experience of the graduation design. Keywords: Flash Verilog SERIAL COLLATERAL FPGA 畢業(yè)設(shè)計(論文)原創(chuàng)性聲明和使用授權(quán)說明 原創(chuàng)性聲明 本人鄭重承諾:所呈交的畢業(yè)設(shè)計(論文),是我個人在指導(dǎo)教師的指導(dǎo)下進(jìn)行的研究工作及取得的成果。 SPI 接口主要應(yīng)用在 EEPROM, FLASH,實時時鐘, AD 轉(zhuǎn)換器,還有數(shù)字信號 處理器和數(shù)字信號解碼器之間。并行 Flash 存儲量大,速度快;而串行 Flash 存儲量相 對較小,但體積小,連線簡單,可減小電路面積,節(jié)約成本,二者各有其優(yōu)缺點,可依據(jù)實際需要選取 。外圍設(shè)置 FLASHRAM、網(wǎng)絡(luò)控制器、 LCD 顯示驅(qū)動器、 A/D 轉(zhuǎn)換器和 MCU 等。通訊是通過數(shù)據(jù)交換完成的, SPI 是串行通訊協(xié)議,也就是說數(shù)據(jù)是一位一位的傳輸?shù)?。也就是說主設(shè)備通過對 SCLK 時鐘線的控制可以完成對通訊的控制。 第二章 SPI Flash Controller 簡介 5 最后, SPI 接口的一個缺點:沒有指定的流控制,沒有應(yīng)答機制確認(rèn)是否接收到數(shù)據(jù)。 1989 年 Cadence Design Systems 公司收購了 GDA 公司,并于 1990年公開 Verilog HDL語言, 極大地推動了 Verilog HDL 的發(fā)展。 20xx 年公布的 Verilog IEEE 1364— 20xx 標(biāo)準(zhǔn),使得 Verilog 語言在綜合和仿真性能方面有了大幅度的提高。 Linux 操作系統(tǒng)軟件包不僅包括完整的 Linux 操作系統(tǒng),而且還包括了文本編輯器、高級 語言編譯器等應(yīng)用軟件。 VI 編輯器并不是一個排版程序,它不像 Word 或 WPS那樣可以對字體、格式、段落 等其他屬性進(jìn)行編排,它只是一個文本編輯程序。 第三章 SPI Flash Controller 設(shè)計環(huán)境 9 數(shù)字電路設(shè)計方法 數(shù)字電路設(shè)計中主要有兩種基本的設(shè)計方法:自底向上和自頂向下設(shè)計方法。 Verilog HDL 的設(shè)計流程 在用 Verilog HDL 進(jìn)行硬件設(shè)計的過程中,開發(fā)人員通 常是將設(shè)計分層三個層次進(jìn)行設(shè)計。要想得到硬件的具體實現(xiàn),必須將行為方式的 Verilog HDL 程序改為 RTL 方式的程序。 在本次設(shè)計中使用的是經(jīng)過公司自己修改過的版本( verdi) ISE 軟件簡介 Xilinx 公司的 ISE 軟件是一套用以開發(fā) Xilinx 公司的 FPGAamp。為了優(yōu)化結(jié)構(gòu),降低成本, Xilinx 對 Spartan3 系列器件的內(nèi)部結(jié)構(gòu)做了部分簡化,器件的晶元大小比 m 工藝縮小了 50%。 據(jù)權(quán)威統(tǒng)計,到目前為止, Xilinx 的 Spartan3 系列 FPGA 是工藝最先進(jìn)、價格最低、單位成本最有效、 I/O 管腳最多的平臺級可編程邏輯器件,能夠滿足大部分的芯片設(shè)計驗證的需要。 SPI Flash Controller 的設(shè)計流程 設(shè)計流程如 圖 所示: 定 義 規(guī) 格 書代 碼 編 寫測 試 平 臺 編 寫仿 真綜 合軟 體 編 寫下 載軟 體 仿 真開 始 結(jié) 束對錯對錯對錯 圖 SPI 的設(shè)計流程 編寫設(shè)計代碼的前提,是搞清楚所要設(shè)計的 IP,要完成什么樣的功能。 在 SPI Flash Controller 設(shè)計中的 HE Register 總線接口模塊( Register File) ,定義了 6 個寄存器: 控制寄存器 ( SPI_CON) :存儲控制信號 中斷狀態(tài)寄存器 ( INT_FLAG) :存儲中斷狀態(tài)信息 指令寄存器 ( BYTE_CODE) : 指令 /數(shù)據(jù)個數(shù)寄存器 地址寄存器 ( SPI_ADR) :存儲高地址 數(shù)據(jù)存儲器 ( SPI_FIFO) :數(shù)據(jù)緩存 ID 寄存器 ( STATUS_ID) :存儲 Flash 狀態(tài)信息 及廠商信息 SPI IP 接口設(shè)計 18 主機控 制 寄 存 器R _ R G S T _ B U SS L _ R G S T _ B U SI D 寄 存 器數(shù) 據(jù) 存 儲 器地 址 寄 存 器指 令 寄 存 器中 斷 狀 態(tài) 寄 存 器A D R = 5 39。 發(fā)送順序控制邏輯 發(fā)送控制邏輯采用有限狀態(tài)機實現(xiàn),分為空閑狀態(tài)、傳輸 write enable 狀態(tài)( WRITE ENABLE) ,指令傳輸狀態(tài) (WRITE CODE)、地址傳輸狀態(tài) (WRITE ADR)、數(shù)據(jù)傳輸狀態(tài) (WRITE DATA)、數(shù)據(jù)接收狀態(tài) (READ DATA from Flash)、 讀狀態(tài)指第四章 SPI Flash Controller 設(shè)計與實現(xiàn) 19 令傳輸狀態(tài) ( WRITE 05h) 、 BUSY 查詢狀態(tài) (READ STATUS)和 4 個不同的 WAIT狀態(tài) (WAIT_14)。 SPI IP 接口設(shè)計 22 以下以 Read data 指令為例,給出了 SPI 模式的傳輸示意圖,如下: X X X2 3 2 2 2 1 0*I n s t r u c t i o n ( 0 3 h )0 1 23 4567892 9 3 03 12 4 B i t A d d r e s sM o d e 3M o d e 0S P I _ C S _ BS P I _ C L KS P I _ D OS L _ S P I _ D IH i g h I m p e d a n c e3 23 3 3 43 5 3 63 73 83 97 6 5 4 3 2 1 0 7 6 54 04 1X X X X X X X X X X X X X X X X XD a t a O u t 1**D a t a O u t 2 圖 SPI 傳輸 read data 指令 如圖 所示, Flash 和設(shè)計都是在 SPI_CLK 的下降沿送出數(shù)據(jù),在 SPI_CLK的上升沿采集數(shù)據(jù),這樣能夠完全滿足設(shè)備所要求的 Timing 關(guān)系,因此可以保證數(shù)據(jù)的準(zhǔn)確性。 用于數(shù)據(jù)存儲的 FIFO 在這里作單獨介紹: F I F O..W PR P 圖 數(shù)據(jù)緩存器示意圖 本設(shè)計采用深度 8 寬度 32 的 FIFO 作為數(shù)據(jù)緩沖存儲器。2]=2’h10 1/16 system clock SPI_CON[3:2]=2’h11 1/16 system clock 片選邏輯模塊 上層配置指令、地址、數(shù)據(jù)之后,控制器接收到 Start 信號,首先會將指令放入移位寄存器當(dāng)中,當(dāng)移位寄存器中需傳輸?shù)闹噶顪?zhǔn)備好之后,會將 Flash 片選信號 SPI_CS_B 拉低(有效),待整個指令傳輸完成之后,再將片選信號 SPI_CS_B信號拉高。 ? 設(shè)計方案 為 SPI Flash Controller 設(shè)計本身。首先, 修改測試用的SPI 后端 Flash 的行為模擬程序的 Memory 默認(rèn)值為不同的值(這里我設(shè)定成與其地址相同),然后 初始化整個 SPI Flash,這時 SPI Flash 中的初始數(shù)據(jù)可知,通過Register Bus 給 SPI Flash 控制器配置讀操作所需指令、地址,然后發(fā)送讀指令,讀出數(shù)據(jù) 與 SPI Flash 中的初始 化數(shù)值做對比 , 如果相同 則證明讀操作正確。 FPGA 硬件測試 所有 仿真結(jié)束 并通過以 后,利用 IDE 把設(shè)計編譯成 srec 文件,然后利用 ISE生成 FPGA 平臺下載所需的 MCS 文件。首先把設(shè)計代碼接到平臺的代碼之中,然后把編寫的 C 驅(qū)動通過 IDE 軟件編譯成仿真需要的 hex 文件,然后像之前 的仿真 測試一樣對設(shè)計進(jìn)行全面測試。 測試 功能 點 表 仿真 測試功能點 功能 子功能 控制信號 功能描述 復(fù)位 硬件復(fù)位 RST_B 開始硬件復(fù)位 進(jìn)程中硬件復(fù)位 軟件復(fù)位 SW_RST 開始軟件復(fù)位 進(jìn)程中軟件復(fù)位 寄存器讀寫 寄存器的正常讀寫 R_RGST_WE, R_RGST_RE, R_RGST_SPI_SEL, R_RGST_BUS 對每個寄存器進(jìn)行寫操作,然后讀取每個寄存器的值 第五章 SPI Flash Controller 測試與驗證 29 續(xù)表 功能 子功能 控制信號 功能描述 寫操作 寫保護 SPI_WP_B 保護 Flash 狀態(tài)寄存器內(nèi)容不被改變 Write enable ADR_EN,DATA_RW, BYTE_CNT,WE_EN, STA_ID_FAST Write enable 必須在每一個寫操作前寫入 Flash Write disable 將狀態(tài)寄存器 WEL 位置 0 寫狀態(tài)寄存器 ADR_EN,DATA_RW, BYTE_CNT,WE_EN, STA_ID_FAST 寫狀態(tài)寄存器 數(shù)據(jù)寫入 Write data into Flash memory 讀操作 讀狀態(tài)寄存器 ADR_EN,DATA_RW, BYTE_CNT,WE_