基于FPGA的SPI总线接口的实现
- 格式:doc
- 大小:22.00 KB
- 文档页数:5
基于FPGA的SPI总线接口的实现作者:王珏文,金伟信,蔡一兵,颜莉萍来源:《现代电子技术》2010年第14期摘要:在现代EDA外围电子器件的接口中存在多种标准,已知的一些接口协议存在速度慢、协议复杂等问题。
SPI总线是能够克服上述缺点的一种外围串行总线,其能很好地满足要求。
通过使用Lattice公司的FPGA芯片以及工程开发软件,特别是在线逻辑分析仪这一先进的EDA工具,实现了基于FPGA的SPI接口的连接。
将FPGA编程的灵活性和SPI总线的易用性结合,实现了FLASH的存取功能。
同时也为同类型接口的芯片应用提供了一个原型,为进一步的工程设计提供了支持。
关键词: FPGA; FLASH; SPI; 在线逻辑分析中图分类号:TN710; TP336 文献标识码:A文章编号:1004-373X(2010)14-0102-03Implementation of SPI Bus Interface Based on FPGAWANG Jue-- CAI Yi--(1. PLA University of Science and Technology, Nanjing 210007, China; 2. CEDSEC, Beijing 100141, China)Abstract: There are many standards in the scope of interfaces for peripheral electronic devices in the field of modern EDA. Some known interface protocols perform an unsatisfactory role with their low speed or complexity. SPI bus is a popular peripheral serial bus which can satisfy the practical demand. By using Lattice FPGA and its EDA software, especially the on-line logic analyzer which is an advanced EDA tool, the connection of SPI bus interface based on FPGA was implemented. Theprogramming and the adaptability of SPI bus. At the same time, it can be taken as a prototype, which can be used in a further profound exploitation in EDA projection.Keywords: FPGA; FLASH; SPI; on-line logic analysis0 引言串行接口已成为当前传输接口的发展趋势,原因在于串行的高速率传输性能和较简单的线路连接。
在已知的外围器件连接端口中,有USB,wishbone和并行端口。
其中SPI接口总线基于串行传输的思想,已经制定成为标准,成为常用的外围器件连接方式。
针对FLASH这种常用的外围存储器件,有多种接口可供选择,然而具有SPI接口的FLASH芯片硬件连接方便,通过FPGA 编程可以便捷地实现FLASH的存取功能。
因此基于FPGA的具有SPI总线接口的FLASH功能实现为工程设计提供了一种原型,为进一步的工程开发奠定了基础。
1 SPI总线介绍1.1 SPI总线简介同步外设接口(serial peripheral interface,SPI)是由摩托罗拉公司开发的全双工同步串行总线。
SPI是一种串行同步通信协议,由1个主设备和1个或多个从设备组成,主设备启动一个与从设备的同步通信,从而完成数据的交换。
1.2 SPI总线接口及时序SPI接口由SDI(串行数据输入),SDO(串行数据输出),SCK(串行移位时钟),CS(从使能信号)四种信号构成,CS决定了惟一的与主设备通信的从设备,如没有CS信号,则只能存在一个从设备,主设备通过产生移位时钟来发起通信。
通信时,数据由SDO输出,SDI 输入,数据在时钟的上升沿或下降沿从SDO输出,在紧接着的下降沿或上升沿由SDI读入,这样经过8/16次时钟改变,完成8/16位数据的传输。
在SPI传输中,数据是同步进行发送和接收的。
数据传输的时钟基于来自主处理器的时钟脉冲,摩托罗拉没有定义任何通用SPI时钟规范。
然而,最常用的时钟设置基于时钟极性(CPOL)和时钟相位两个参数。
CPOL定义SPI串行时钟的活动状态,而CPHA定义相对于数据位的时钟相位。
CPOL和CPHA的设置决定了数据取样的时钟沿。
SPI模块为了与外设进行数据交换,根据外设工作要求,其输出串行同步时钟极性和相位可以进行配置,时钟极性(CPOL)对传输协议没有大的影响。
如果CPOL=0,串行同步时钟的空闲状态为低电平;如果CPOL=1,串行同步时钟的空闲状态为高电平。
时钟相位(CPHA)能够配置用于选择两种不同的传输协议之一进行数据传输。
如果CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;如果CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。
SPI主模块和与之通信的外设时钟相位与极性应该一致。
SPI接口时序如图1所示。
图1 SPI接口时序图2 基于FPGA的SPI接口设计SPI接口适用于主芯片与从芯片的连接,在一个系统中,充当主芯片的为FPGA可编程芯片,而FLASH芯片作为外围从芯片通过SPI接口连接至芯片。
该系统选用Lattice公司的FPGA芯片,该公司的产品线齐全,其中ECP2M系列芯片功能全面,开发成本低廉。
ECP2M系列芯片支持SPI接口,通过硬件电路的简单设计即可完成SPI接口的物理连接,进一步利用Lattice的工程开发EDA软件进行编程,实现SPI接口控制。
对接口的设计采用RAM作为读/写缓冲,完成主程序和FLASH之间的数据交换,各模块结构示意图如图2所示。
图2 模块结构示意图图2中ram wr写端口数据宽度设置为32位,地址深度设为128位;读端口为1位位宽,这是由SPI端口的串行性决定的;ram rd读端口与ram wr写端口相对应。
RAM模块如图3所示。
3 SPI接口实现及FLASH功能验证3.1 M25P64串行FLASH芯片介绍M25P64串行芯片由STMicro公司生产,它具有64 Mb容量,最高时钟频率可达50 MHz同时采用SPI总线接口。
该FLASH芯片的存储空间划分为区每区为65 536 B[1]。
在芯片中,其中D为数据串行输入端;C为时钟输入为低电平有效片选信号和分别为写保护和暂停保持输入,Q为串行输出端。
该芯片的指令丰富,功能完备,常用的指令如读/写使能、读/写状态寄存器、读数据、页编程以及区块擦除等。
图3 RAM模块示意图该芯片由一个微控制器控制,SPI接口有种工作模式分别为CPOL=0,CPHA=0和两者区别为在SPI主端不传数据时,时钟的电平前者为0,后者为1。
在这里采用CPOL=0,CPHA=0模式。
3.2 工程环境设置及SPI接口设计Lattice公司的FPGA工程开发EDA软件名为其7.2版本为较新版本。
该版本集合了IPExpress,Reveal Logic Analyzer等实用工具,可用于添加Lattice公司开发的IP核以及在线逻辑仿真等。
ispLEVER 7.2的默认仿真工具为Active-HDL仿真器,由于需要采用ModelSim仿真器,因此安装ModleSim 6.2b版本。
对仿真软件成功安装后,加入和pmi work四个仿真库并进行编译。
编译完成后启动ispLEVER 7.2,在“options”菜单中修改环境变量和默认仿真工具,使得ModelSim连接图标出现在工具栏中成为工程的仿真工具。
进入ispLEVER 7.2的编辑界面,开始建立工程,首先选择器件型号,这里采用LatticeECP2M 系列中的LFE2M50E型号芯片,并选择封装类型为FPGABGA672,速度级别为-5。
器件选定后,建立FLASH control工程文件和testbench测试文件,同时用IP Express生成读/写RAM模块。
在主程序中编写RAM控制段和SPI接口控制程序段,用状态机完成对RAM的控制,状态机在idle,read,write和config之间跳转。
在向FLASH写数据时,应先写入写使能指令,完成后写入页编程指令,随后写入地址,最后写入数据;从FLASH读数据的过程大致相同,但应首先写入读使能指令,然后写入读数据指令。
应当注意的是读指令的时钟频率低于写指令,具体频率要求可参照芯片说明手册。
3.3 SPI接口功能验证在线逻辑分析仪(reveal logic analyzer)是较为先进的EDA工具,它能提类似于功能仿真的波形示意图,这些波形是通过在FPGA芯片运行过程中实时抓取出来的。
它真实地再现了FPGA 芯片内部的动态信号状况,使工程开发人员能直观的发现问题,修正逻辑。
仿真综合通过后,将程序下载至FPGA芯片中,用Reveal Inserter插入在线逻辑分析信号,采样点数设定为2 048个点,分析信号会在工程目录中生成一个相关文件,综合后将数据文件下载至Lattice芯片中,采用人工触发后,即可在在线逻辑分析仪中观察信号波形。
截取的波形如图4所示。
图4 在线逻辑分析仪截图(一)从图4可看出,在时钟C的8个有效周期写入写使能指令,写使能指令通过D信号线串行进入FLASH芯片,指令的写入过程应保证S信号低电平,8个周期的指令输入完毕后S回复为高电平。
在SPI总线主端的RAM控制信号由状态机控制,instructions为8位的寄存器,用于存储指令;RAM1 dout对应ram wr的输出端口。
图5为数据指令后读出数据的波形图,数据从Q信号线读出并进入ram rd。
在读数据周期S 保持低电平,数据的输出在时钟的下降沿发生,在读指令完成后,state状态寄存器回复至空闲状态。
图5 在线逻辑分析仪截图(二)4 结语SPI总线是当前流行的串行接口的一种,它满足工程设计的要求,使开发人员能够简单迅速的完成设计工作,实现功能要求。
将它与FPGA编程结合,利用的灵活性,使电子设计能够在很短的周期内完成,符合当今电子设计的要求。
本文通过实现带有SPI总线接口的FLASH芯片功能,验证了基于FPGA设计的SPI接口的正确,实现了FLASH芯片的读/写功能。