《串行外围设备接口毕业.doc》由会员分享,可在线阅读,更多相关《串行外围设备接口毕业.doc(46页珍藏版)》请在三一文库上搜索。
1、目录i 摘摘 要要 SPI 是英语 Serial Peripheral interface 的缩写,顾名思义就是串行外围设备 接口。SPI 是一种高速的、全双工、同步的通信总线,并且在芯片的管脚上只 占用四根线,节约了芯片的管脚,同时为 PCB 的布局上节省空间。SPI Flash 主要用于代码存储或者其他非易失性存储应用。 本设计目的在于完成一个 SPI Flash Controller 的设计,相当于在上层的 Driver 和 Flash 器件之间建立起一座连接的桥梁。控制器接收上层配置的并 行数据和控制信号,经过控制器处理之后以串行的方式发送至 Flash 器件以完 成对 Flash 的
2、相应的读写等操作。本设计采用 Verilog HDL 语言,在 Vi 编辑 器中完成设计,并用 EDA tool 对设计进行了编译、模拟、仿真和调试。最后 又在 FPGA 上对结果进行了实践证明。完成上述全部工作之后,再从功能、面 积优化和成本缩减等方面对设计进行分析总结本次毕业设计中获得的宝贵经验。 关键词关键词: 闪存闪存 Verilog HDL 串行串行 并行并行 FPGA 目录ii ABSTRACT SPI (Serial Peripheral interface) is a serial periphery slave interface. SPI is a fast, duplex
3、 and synchronism communication 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 dri
4、ver 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 progr
5、am actualizes in Verilog HDL, designed in VI under linux. EDA tools are used to simulate, synthesize and debug such as Debussy. After the designs 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, th
6、is 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 毕业设计(论文)原创性声明和使用授权说明毕业设计(论文)原创性声明和使用授权说明 原创性声明原创性声明 本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师 的指导下进行的研究工作及取得的成果。尽我所知,除文中特别加以 标注和致谢的地方外,不包含其他
7、人或组织已经发表或公布过的研 究成果,也不包含我为获得 及其它教育机构的学位或学 历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集 体,均已在文中作了明确的说明并表示了谢意。 作 者 签 名: 日 期: 指导教师签名: 日 期: 使用授权说明使用授权说明 本人完全了解安阳工学院关于收集、保存、使用毕业设计(论文) 的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本; 学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索 与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存 论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内 容。 作者签名: 日
8、期: 目录iv 目目 录录 第一章第一章 引引 言言.1 第二章第二章 SPI FLASH CONTROLLER 简介简介.3 2.1 SPI 简介3 2.2 SPI FLASH简介5 第三章第三章 SPI FLASH CONTROLLER 设计环境设计环境.7 3.1 VERILOG HDL 语言简介7 3.2 LINUX系统下的设计开发环境简介8 3.3 数字电路设计方法 9 3.4 VERILOG HDL 的设计流程9 3.5 编译、模拟仿真 EDA TOOL简介10 3.6 ISE 软件简介 10 3.7 XILINX SPARTAN-3 系列器件介绍11 3.8 HE REGISTE
9、R BUS 协议简介12 第四章第四章 SPI FLASH CONTROLLER 设计与实现设计与实现13 4.1 SPI FLASH CONTROLLER的设计流程 13 4.2 设计规格 14 4.2.1 设计要求.14 4.2.2 I/O 端口.14 4.3 功能模块划分 16 4.4 功能模块设计 17 4.4.1 HE register 总线接口17 4.4.2 发送顺序控制逻辑.18 4.4.3 串并转换控制逻辑.21 4.4.4 并串转换控制逻辑.22 4.4.5 数据状态信息选择逻辑.24 4.4.6 分频模块.24 4.4.7 片选逻辑模块.25 4.4.8 中断信号产生模块
10、.25 第五章第五章 SPI FLASH CONTROLLER 测试与验证测试与验证27 5.1 测试环境 27 5.2 测试文件架构 28 5.3 测试功能点 28 5.4 测试流程 30 5.5 FPGA 验证31 5.5.1 C_CODE 的仿真31 5.5.2 FPGA 硬件测试 31 5.6 验证结果 32 第六章第六章 总总 结结.35 致致 谢谢.37 参考文献参考文献.39 第一章 引言1 第一章 引 言 SPI 是英语 Serial Peripheral Interface 的缩写,就是串行外围设备接口。SPI 接 口主要应用在 EEPROM,FLASH,实时时钟,AD 转换
11、器,还有数字信号处理器 和数字信号解码器之间。SPI 是一种高速的、全双工、同步的通信总线,并且在 芯片的管脚上只占用四根线,节约了芯片的管脚,同时为 PCB 的布局上节省空间, 提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信 协议。 闪速存储器(Flash Memory)是 Intel 公司于 1988 年推出的一种新型非易失性大 容量存储器。它因良好的性能而深受广大用户和半导体芯片制造商的青睐。Flash Memory 以其集成度高、成本低、使用方便等优点,在众多领域中获得了广泛应 用。在现代数字电路设计中经常需要保存大量数据,而 Flash 存储速度快、体积 小、
12、功耗低且价格低廉,可在线电擦写,信息在掉电后不会丢失,因此成为设计 人员的首选。在目前所有的非易失性存储器(PROM、EPROM、EEPROM 和 F lash)中唯有 Flash 存储器几乎拥有现今讲究个性化的用户所需的所有特点, 且成 本已低于 PROM/EPROM,因而已为新一代嵌入式应用(如数字相机和 MP3 播放 机)的首选存储器。 Flash 是一种具有电可擦除的可编程 ROM,可以分为两大类:并行 Flash 和 串行 Flash。并行 Flash 存储量大,速度快;而串行 Flash 存储量相对较小,但体 积小,连线简单,可减小电路面积,节约成本,二者各有其优缺点,可依据实际
13、需要选取。随着并行总线的数据传输率越来越高,传统的并行接口逐渐暴露出一 些设计上的缺陷,比如并行线路的信号干扰问题,而串行技术采有极少的数据线, 虽然传输速率受到限制,但在传输数据时几乎不会因为受到干扰而出错。SPI Flash 就是这样一种采用串行接口的 Flash 存储器件。 本课题通过对最基本的 Flash 器件和 SPI 总线协议的研究和实现,设计了 SPI Flash Controller, 以此来熟悉 IP 核的设计和验证。 SPI IP 接口设计2 第二章 SPI Flash Controller 简介3 第二章 SPI Flash Controller 简介 SPI Flash
14、 Controller 即为串行外设接口 flash 存储器控制器。SPI Flash 以其优 良的特性已被广泛应用于很多设计之中。本课题设计开发一款 SPI Flash 控制器。 2.1 SPI 简介 SPISerial Peripheral Interface(串行外围设备接口)是 Motorola 首先在其 MC68HCXX 系列处理器上定义的,正因为引言中所述的诸多优点,现在越来越 多的芯片集成了这种通信协议,比如 AT91RM9200. 处 理外 设 MOSI MISO SCLK I/O GND SI SO CLK CS GND 图 2.1 基本的 SPI 接口 SPI 总线系统是一
15、种同步串行外设接口,它可以使 MCU 与各种外围设备以 串行方式进行通信以交换信息。外围设置 FLASHRAM、网络控制器、LCD 显示 驱动器、A/D 转换器和 MCU 等。SPI 总线系统可直接与各个厂家生产的多种标 准外围器件直接接口,SPI 接口一般使用 4 条线:串行时钟线(SCK) 、主机输入/ 从机输出数据线 MISO、主机输出/从机输入数据线 MOST 和低电平有效的从机选 择线 SS(有的 SPI 接口芯片带有中断信号线 INT 或/INT、有的 SPI 接口芯片没有 主机输出/从机输入数据线 MOSI)。 SPI 的通信原理很简单,它以主从方式工作。这种模式通常有一个主设备
16、和 一个或多个从设备,需要至少 4 根线,事实上 3 根也可以(单向传输时或者使用 SPI IP 接口设计4 双工 I/O PIN ) 。所有基于 SPI 的设备共有的 PIN 脚,它们是 SDI(数据输入) , SDO(数据输出) ,SCLK(时钟) ,CS(片选) 。 (1)SDO 主设备数据输出,从设备数据输入 (2)SDI 主设备数据输入,从设备数据输出 (3)SCLK 时钟信号,由主设备产生 (4)CS 从设备使能信号,由主设备控制 其中 CS 是控制芯片是否工作,也就是说只有片选信号为预先规定的使能信 号时(高电位或低电位) ,对此芯片的操作才有效,否则会被忽略。这就允许在 同一主
17、机上连接多个 SPI 设备。 其余的 3 根线是负责通信的。通讯是通过数据交换完成的,SPI 是串行通讯 协议,也就是说数据是一位一位的传输的。这就是 SCLK 时钟线存在的原因,由 SCLK 提供时钟脉冲,SDI、SDO 则基于此脉冲完成数据传输。数据输出通过 SDO 线,数据在时钟下降沿时改变,在紧接着的上升沿被读取。完成一位数据传 输,输入也使用同样原理。这样,在至少 8 次时钟信号的改变(上沿和下沿为一 次) ,就可以完成 8 位数据的传输。 要注意的是,SCLK 信号线只由主设备控制,从设备不能控制信号线。同样, 在一个基于 SPI 的设备中,至少有一个主控设备。这样的传输方式有一个
18、优点: 与普通的串行通讯不同,普通的串行通讯一次连续传送至少 8 位数据,而 SPI 允 许数据一位一位的传送,甚至允许暂停,因为 SCLK 时钟线由主控设备控制,当 没有时钟跳变时从设备不采集或传送数据。也就是说主设备通过对 SCLK 时钟线 的控制可以完成对通讯的控制。SPI 还是一个数据交换协议:因为 SPI 的数据输 入和输出线独立,所以允许同时完成数据的输入和输出。不同的 SPI 设备的实现 方式不尽相同,主要是数据改变和采集的时间不同,在时钟信号上沿或下沿采集 有不同定义。应该注意的是 SPI 主模块和与之通信的外设备时钟相位和极性应 该一致。这句话有 2 层意思:其一,主设备 S
19、PI 时钟和极性的配置应该由外 设来决定;其二,二者的配置应该保持一致,即主设备的SDO 同从设备的 SDO 配置一致,主设备的 SDI 同从设备的 SDI 配置一致。因为主从设备是在 SCLK 的控制下同时发送和接收数据,并通过 2 个双向移位寄存器来交换数 据在点对点的通信中。SPI 接口不需要进行寻址操作且为全双工通信,显得简单 高效。在多个从设备的系统中,每个从设备需要独立的使能信号,硬件上比 I2C 第二章 SPI Flash Controller 简介5 系统要稍微复杂一些。 最后,SPI 接口的一个缺点:没有指定的流控制,没有应答机制确认是否接 收到数据。 2.2 SPI Fla
20、sh 简介 本次所设计控制器针对的是华邦公司的 W25X20(2Mbit) 、W25X40(4M-bit)、 W25X80(8M-bit)系列,该系列为只有有限的空间、pin 的串行存储器。 W25X20/40/80 的 SPI 接口主要由 4 个引脚构成: SL_SPI_CLK、SPI_DO、SL_SPI_DI 及 SPI_CS_B,其中 SL_SPI_CLK 是整个 SPI 总线的公用时钟,SPI_DO、SL_SPI_DI 作为主机,从机的输入输出的标志。 SPI_DO 是主机的输出,从机的输入,SL_SPI_DI 是主机的输入,从机的输出。 SPI_CS_B 是从机的标志管脚,在互相通信
21、的两个 SPI 总线的器件,SPI_CS_B 管 脚的电平低的是从机,相反 SPI_CS_B 管脚的电平高的是主机。在一个 SPI 通信 系统中必须有主机。SPI 总线可以配置成单主单从,单主多从,互为主从。 SPI IP 接口设计6 第三章 SPI Flash Controller 设计环境7 第三章 SPI Flash Controller 设计环境 3.1 Verilog HDL 语言简介 Verilog HDL 是在 1983 年由 Gateway Design Automation(GDA)公司的 Phil Moorby 首创的。1989 年 Cadence Design Syste
22、ms 公司收购了 GDA 公司,并 于 1990 年公开 Verilog HDL 语言, 极大地推动了 Verilog HDL 的发展。基于 Verilog HDL 的优越性 IEEE 于 1995 年制定了 Verilog HDL 的 IEEE 标准,即 Verilog HDL13641995。 Verilog HDL 具有以下特点:能形式化地抽象表示电路的结构和行为;借用 高级语言的结构和语句(如循环语言,赋值语言等) ,简化了电路行为的描述; 能在多个层次上对所设计的电路进行描述;内置了基本的逻辑门,更接近开关级 电路;可以使用用户自定义原语 UDP,使得设计更加灵活,等等。 与 VHD
23、L 语言相比,Verilog HDL 和 VHDL 作为描述硬件电路设计的语言, 其共同的特点在于:能形式化地抽象电路的行为和结构,支持逻辑设计中层次与 范围的描述,可借用高级语言的精巧结构来简化电路行为的描述,具有电路仿真 与验证机制以保证设计的正确性,支持电路描述由高层到底层的综合转换,硬件 描述与实现工艺无关(有关工艺参数可通过语言提供的属性包括进去) ,易于理 解和设计重用。 但是 Verilog HDL 和 VHDL 又各有其自己的特点。与 VHDL 相比 Verilog HDL 最大的特点在于它是一种非常容易掌握的硬件描述语言,而且和 C 语言有 许多相似之处,并继承和借鉴了 C
24、语言的多种操作符和语法结构,而且 Verilog HDL 在开关级电路的建模能力比 VHDL 要强。而与 Verilog HDL 相比,VHDL 则显得严谨的多,比较抽象,所以掌握起来比较困难,还有 VHDL 在系统级建模 方面要比 Verilog HDL 强一些。 这两种语言各有其特点,而且都在不断完善。2001 年公布的 Verilog IEEE 13642001 标准,使得 Verilog 语言在综合和仿真性能方面有了大幅度的提高。 学习掌握 Verilog HDL 建模、仿真和综合技术不仅可以对数字电路设计技术有更 SPI IP 接口设计8 进一步的了解,而且为以后学习高级的行为综合和
25、物理综合打下坚实的基础。 3.2 Linux 系统下的设计开发环境简介 Linux 是一套免费使用和自由传播的类 Unix 操作系统,它主要用于基于 Intel x86 系列 CPU 的计算机上。这个系统是由世界各地的成千上万的程序员 设计和实现的。其目的是建立不受任何商品化软件的版权制约的、全世界都能 自由使用的 Unix 兼容产品。 Linux 以它的高效性和灵活性著称。它能够在PC 计算机上实现全部的 Unix 特性,具有多任务、多用户的能力。 Linux 是在 GNU 公共许可权限下 免费获得的,是一个符合 POSIX 标准的操作系统。 Linux 操作系统软件包不 仅包括完整的 Li
26、nux 操作系统,而且还包括了文本编辑器、高级语言编译器等 应用软件。它还包括带有多个窗口管理器的X-Window 图形用户界面,如同 我们使用 Windows NT 一样,允许我们使用窗口、图标和菜单对系统进行操作。 VI 编辑器是 Linux 和 Unix 上最基本的文本编辑器,工作在字符模式下。由 于不需要图形界面,使它成了效率很高的文本编辑器。尽管在Linux 上也有 很多图形界面的编辑器可用,但 VI 在系统和服务器管理中的 功能是那些图 形编辑器所无法比拟的。 VI 编辑器是 Visual interface 的简称,通常称之为 VI。它在 Linux 上的 地位就像 Edit 程
27、序在 DOS 上一样。它可以执行输出、删除、查找、替换、块 操作等众多文本操作,而且用户可以根据自己的需要对其进行定制,这是其他 编辑程序所没有的。 VI 编辑器并不是一个排版程序,它不像Word 或 WPS 那样可以对字体、格式、段落 等其他属性进行编排,它只是一个文本编辑程 序。没有菜单,只有命令 而且命令繁多。 Vi 有 3 种基本工作模式:命令行模 式、文本输入模式和末行模式。 VIM 是 VI 的加强版,比 vi 更容易使用。 vi 的命令几乎全部都可以在 vim 上使用。要在 Linux 下编写文本或语言程序,您首先必须选择一种文本编 辑器。可以选择使用 vim 编辑器,使用它的好
28、处是几乎每一个版本的Linux 都会有它的存在。然而它是在文本模式下使用,需要记忆一些基本的命令操作 方式。 第三章 SPI Flash Controller 设计环境9 3.3 数字电路设计方法 数字电路设计中主要有两种基本的设计方法:自底向上和自顶向下设计方法。 在自顶向下的设计方法中,我们首先定义顶层模块,然后分析实现顶层模块 功能需要那些必要的子模块,然后按照相同的方法对子模块进行分解,知道无法 进一步细分的最底层模块为止。 在自底向上的设计方法中,我们首先对现有的功能模块进行分析,然后利用 这些模块去搭建较大的功能模块,如此继续直至顶层的功能模块。 在实际的设计中,通常是两种方法混合
29、使用的。设计者首先根据电路体系接 口定义顶层模块。逻辑设计者确定如何根据功能将整个设计划分为子模块;同时, 电路设计者对底层功能快进行优化设计,并进一步使用这些底层模块来搭建其高 层模块。两者的工作按相反的方向独立的进行,直至在某一中间点会合。这是, 电路设计者已经使用开关级原语创建了一个底层功能块库,而逻辑设计设也通过 使用自顶向下的方法将整个设计分解为由库单元构成的结构描述。 3.4 Verilog HDL 的设计流程 在用 Verilog HDL 进行硬件设计的过程中,开发人员通常是将设计分层三个 层次进行设计。 第一层次是行为描述。就是用数学模型对整个系统进行的描述。一般来说, 对系统
30、进行行为描述的目的是为了在系统设计的初始阶段,通过对系统行为的仿 真来发现设计中存在的问题。在行为描述阶段并不真正考虑实际的算法和操作用 什么方法来实现,注意力主要集中在系统的结构和工作过程能否达到设计要求方 面。在进行完行为描述之后,通常要把它转换为 RTL 级的描述,因为现有的 EDA 工具只能接受 RTL 级描述的 HDL 文件进行自动逻辑综合。 第二层次是 RTL 方式描述,又称为寄存器传输描述。用行为方式描述系统结 构的程序抽象程度很高,很难直接映射到具体逻辑元件的实现。要想得到硬件的 具体实现,必须将行为方式的 Verilog HDL 程序改为 RTL 方式的程序。在编写完 RTL
31、 方式的程序之后,就可以利用仿真工具对程序进行仿真了。如果仿真通过, 就可以利用逻辑综合工具进行综合了。 第三层次是逻辑综合。在这一阶段主要是利用逻辑综合工具,将 RTL 级的程 序转换成用基本逻辑元件表示的文件(门级网表) ,并且综合结果也可以以原理 SPI IP 接口设计10 图的方式输出。得到网表之后,还需要进行门级仿真和定时检查。 其设计过程如图 3.1 所示: 总体方案 行为级描述 行为级仿真 RTL级描述 RTL级仿真 逻辑综合、优化 门级仿真、定时检查 门级网表输出 图 3.1 Verilog HDL 设计流程 3.5 编译、模拟仿真 EDA tool 简介 Debussy 是
32、NOVAS Software Inc(思源科技)发展的 HDL Debug 2=2h10 1/16 system clock SPI_CON3:2=2h11 1/16 system clock 4.4.7 片选逻辑模块 上层配置指令、地址、数据之后,控制器接收到 Start 信号,首先会将指令放 入移位寄存器当中,当移位寄存器中需传输的指令准备好之后,会将 Flash 片选 信号 SPI_CS_B 拉低(有效) ,待整个指令传输完成之后,再将片选信号 SPI_CS_B 信号拉高。 4.4.8 中断信号产生模块 SPI Flash Controller 支持三种中断机制。即,数据缓存 FIFO
33、空中断、数据缓 存 FIFO 满中断和传输完成中断。当上述三种中断发生时,会首先将 Register File 中的中断状态寄存器(INT_FLAG)的相应中断状态位置 1(有效) 。 中断生成模块 中断状态寄 存器 中断使能信 号 SPI_INT 图 4.11 中断信号产生器 当传输完成中断发生时,如果传输完成中断屏蔽使能信号 SPI_CON8为 0 (enable),中断信号 SPI_INT 有效,否则无效。 SPI IP 接口设计26 第五章 SPI Flash Controller 测试与验证27 第五章 SPI Flash Controller 测试与验证 5.1 测试环境 整个 S
34、PI Flash Controller 的测试环境分为 7 个部分:测试情况,伪 CPU,设 计方案,SPI 闪存,存储器(期望值) ,存储器(测试输出数据)和监视器。 测试环境框图: 测试情况 存储器 (测试输出数据) 设计方案 监视器结果 SPI闪存行 为模拟程序 存储器(期 望值) 伪CPU 图 5.1 测试环境框图 在测试情况中,共有 19 个 pattern 为测试不同功能点提供全面测试的原始 激励。 在伪 CPU 中,定义了寄存器的读写任务,便于测试更有效的进行。 设计方案为 SPI Flash Controller 设计本身。 SPI 闪存 为模拟 Flash 全部行为的一个模型
35、程序。 存储器(期望值)用来存储与读出数据比对的原始数据。 存储器(测试输出数据)用来存储从 Flash 中读出的数据。 监视器用于实现原始数据与测试输出数据的自动比对功能,以判断设计 的正确性。 SPI IP 接口设计28 5.2 测试文件架构 SPI Flash Controller src macro sim output waveform model log golden tsk pattern sim.v simfiles.f makefile cov_work 文件 文件夹注释 管理文件 测试功能点 仿真记录文件 行为模拟程序 功能测试覆盖率分析文件 被编译文件列表 仿真波形 期望
36、值 测试中设计的输出 顶层仿真模块 空 图 5.2 测试文件架构图 一个好的文件架构能够方便我们的文件管理,在整个测试中由于要用到的以 及产生的文件较多,我们必须有一个规范的文件存放位置和管理架构,这样更有 利于我们的测试和改正错误,具体架构如图 5.2 所示。 5.3 测试功能点 表 5.1 仿真测试功能点 功能功能子功能子功能控制信号控制信号功能描述功能描述 开始硬件复位 硬件复位RST_B 进程中硬件复位 开始软件复位 复位 软件复位SW_RST 进程中软件复位 寄存器读写寄存器的正常读写 R_RGST_WE, R_RGST_RE, R_RGST_SPI_SEL, R_RGST_BUS
37、对每个寄存器进行写操 作,然后读取每个寄存 器的值 第五章 SPI Flash Controller 测试与验证29 续表续表 功能功能子功能子功能控制信号控制信号功能描述功能描述 写保护SPI_WP_B 保护 Flash 状态寄存器内容 不被改变 Write enable Write enable 必须在每一个 写操作前写入 Flash Write disable ADR_EN,DATA_RW, BYTE_CNT,WE_EN, STA_ID_FAST 将状态寄存器 WEL 位置 0 写状态寄存器写状态寄存器 写操作 数据写入 ADR_EN,DATA_RW, BYTE_CNT,WE_EN, S
38、TA_ID_FAST Write data into Flash memory 读状态寄存器 将 Flash 状态寄存器的值读 入 SPI 读数据 将 Falsh Memory 中的数据 读如 SPI_FIFO 快速读数据 为了数据准确,写入地址后 需要等待 8 个周期才能采集 数据 读操作 读厂商信息 ADR_EN,DATA_RW, BYTE_CNT,WE_EN, STA_ID_FAST 将 Falsh 厂商信息读入 SPI STATUS_ID 寄存器 片擦除将整个存储空间写为全 1 Sector 擦除 将写入地址的对应 Sector 写 为全 1 擦除 Block 擦除 ADR_EN,DA
39、TA_RW, BYTE_CNT,WE_EN, STA_ID_FAST 将写入地址的对应 Block 写 为全 1 中断传输完成中断BYTE_CNT,WE_EN SPI 操作执行完之后,发出 有效的中断信号 写入数据 SPI_TX_REQ, SPI_TX_CLR FIFO 为空,将数据写入 FIFO,写满后将 TX_REQ 清除DMA 模式 DMA 模式 读出数据 SPI_RX_REQ, SPI_RX_CLR FIFO 为满,从 FIFO 中将数 据读出,读空后将 RX_REQ 清除 SPI IP 接口设计30 续表续表 功能功能子功能子功能控制信号控制信号功能描述功能描述 读写STA_ID_F
40、AST正常的读写 空状态时的 TX_REQ CPU_DMA 检查能否在 FIFO 为空时 正常准确的发出 TX_REQ 信号 FIFO 满状态使得 RX_REQ CPU_DMA 检查能否在 FIFO 为满时 正常准确的发出 RX_REQ 信号 读操作 读操作,配置信息及指 令随机错误 非正常操作 写操作 ADR_EN,DATA_RW, BYTE_CNT,WE_EN, STA_ID_FAST 写操作,配置正确,指 令错误 5.4 测试流程 整个 SPI Flash Controller 支持对 Flash 的一些基本的读写操作,如果需要验 证读写操作的正确性,必须读写操作一起执行,才能得到测试输
41、出数据,以便和 原始数据做比对。 在测试写操作的正确性前,必须证明读操作的正确性。首先,修改测试用的 SPI 后端 Flash 的行为模拟程序的 Memory 默认值为不同的值(这里我设定成与 其地址相同) ,然后初始化整个 SPI Flash,这时 SPI Flash 中的初始数据可知,通 过 Register Bus 给 SPI Flash 控制器配置读操作所需指令、地址,然后发送读指令, 读出数据与 SPI Flash 中的初始化数值做对比,如果相同则证明读操作正确。 读操作测试正确后就可以开始写操作的正确性。 在读操作正确的前提下,再来证明写操作的正确性。同样通过 Register B
42、us 给 SPI Flash 控制器配置写操作指令、地址和激励数据,然后发送写指令,写入 Flash 中地址所指的相应区域,再通过 Register Bus 配置读指令、和同样的地址, 然后读出地址所指的相应区域,读出数据如果与先前写入数据相同,则证明写操 作正确。 第五章 SPI Flash Controller 测试与验证31 擦除操作在读写操作正确的前提下,再进行测试,先通过写操作给 Flash 中 的特定区域写入一些数据,然后通过 Register Bus 配置擦除指令,控制器再发送 擦除指令,对 Flash 中的特定区域进行擦除(写“1” ) ,然后再通过读指令读出相 应区域,以读出
43、数据是否为全“1” ,判断擦除指令是否正确。 下面以擦除指令为例说明具体的测试流程: 通过 所有数据为1? Yes No No 传输完成? Yes 开始 结束 向Flash某地址写入部分数据 失败 向Flash写擦除指令,擦除掉 刚刚写入的数据 Yes 读取擦除位置的数据 BUSY位为0? No 图 5.3 擦除指令测试流程 5.5 FPGA 验证 5.5.1 C_CODE 的仿真 当设计的功能仿真测试全部通过以后,就可以开始驱动的编写和仿真测试。 首先把设计代码接到平台的代码之中,然后把编写的 C 驱动通过 IDE 软件编译成 仿真需要的 hex 文件,然后像之前的仿真测试一样对设计进行全面测试。 此次仿真的主要目的在于测试设计与平台的连接是否正确,并且检验驱动程 序书写是否正确、合理、全面。 SPI IP 接口设计32 5.5.2 FPGA 硬件测试 所有仿真结束并通过以后,利用 IDE 把设计编译成 srec 文件,然后利用 ISE 生成 FPGA 平台下载所需的 MCS 文件。生成的 MCS 文件即可以通过计算机并 口下载到 FPGA 平台中。 将下载好的 FPGA 平台进行硬件测试,查看功能是否达到要求。若未达到要 求,则分析原因,找出错误,进行修改,最终达到最终 SPEC 所描述的功能 硬件验证原理图: SPI 总线桥 需要测试的设计 方案
链接地址:https://www.31doc.com/p-2048821.html