首页 毕业设计(论文)-基于FPGA的SPI串行外围接口接口设计

毕业设计(论文)-基于FPGA的SPI串行外围接口接口设计

举报
开通vip

毕业设计(论文)-基于FPGA的SPI串行外围接口接口设计毕业设计(论文)-基于FPGA的SPI串行外围接口接口设计 武汉理工大学本科学生毕业设计 (论文)开题报告 基于FPGA的SPI串行外围接口接口设计 1、目的和意义及发展现状 SPI是英文Serial Peripheral Interface的缩写,中文意思是串行外围设备接口,SPI是Motorola公司推出的一种同步串行通讯方式,是一种三线同步总线,它是一种常用的标准接口,由于其使用简单方便且节省系统资源,很多芯片都支持该接口,SPI接口主要应用在EEPROM,FLASH,实时时钟,AD转换器,还有数字信...

毕业设计(论文)-基于FPGA的SPI串行外围接口接口设计
毕业 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 (论文)-基于FPGA的SPI串行外围接口接口设计 武汉理工大学本科学生毕业设计 (论文)开题报告 基于FPGA的SPI串行外围接口接口设计 1、目的和意义及发展现状 SPI是英文Serial Peripheral Interface的缩写,中文意思是串行外围设备接口,SPI是Motorola公司推出的一种同步串行通讯方式,是一种三线同步总线,它是一种常用的 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 接口,由于其使用简单方便且节省系统资源,很多芯片都支持该接口,SPI接口主要应用在EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间等等。当然,串口通信还有其他的接口方式,SPI接口和UART相比,多了一条同步时钟线,上面UART的缺点也就是它的优点了,对通信双方的时序要求不严格不同设备之间可以很容易结合,而且通信速度非常快。一般用在产品内部元件之间的高速数据通信上面,如大容量存储器等。这就凸现SPI的好处。 SPI接口的扩展有硬件和软件两种 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 ,软件模拟SPI接口方法虽然简单方便,但是速度受到限制,在高速且日益复杂的数字系统中,这种方法显然无法满足系统要求,所以采用硬件的方法实现最为切实可行。这使得与SPI有关的软件就相当简单,使CPU有更多的时间处理其他事务。当前,基于主从处理器结构的系统架构已经成为一种主流(如 DSP+FPGA,MCU+FPGA等),FPGA是在ASIC的基础发展出来的,它克服了专用 ASIC不够灵活的缺点。与其他中小规模集成电路相比,其优点主要在于它有很强的灵活性,即其内部的具体逻辑功能可以根据需要配置,对电路的修改和维护很方便。目前,FPGA的容量已经跨过了百万门级,使得 FPGA成为解决系统级设计的重要选择 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 之一。在这种架构下,应用FPGA来构建SPI通信接口是切实可行的。 参考文献: [1] 孙丰军,余春暄. S P I 串行总线接口的V e r i l o g 实现. 北京工业大学 电子信息与控制工程学院 北京 10002. [2] 刘福奇,刘波. Verilog HDL应用程序. 电子工业出版社,2009.10 [3] 顾卫刚. 串行外围接口. 陕西:西安交通大学,2004. [4] 徐洋等.基于Verilog HDL的FPGA设计与工程应用.人民邮电出版社.2009 [5] K.Babulu, K.Soundara Rajan. FPGA IMPLEMENT ATION OF SPI TRANSCEIVER MACROCELL INTERFACE WITH SPI SPECIFICATIONS. JNTU Colleage off Engineering,2008. 2、基本内容和技术方案 2.1、研究的基本内容 (1)熟悉通信及通信接口相关方面的知识,学习并掌握SPI通信接口的结构,协议及原理。 (2)熟悉VERILOG语言及其开发环境ISE,使用该语言进行数字电路(FPGA)设计,慢慢深入VERILOG语言。 (3)设计流程图,状态图,并一步步用Verilog语言实现仿真验证I接口串口通信。 (4)采用实验板或自行设计电路进行调试,并采用相关仪器验证。 (5)系统整体调试、优化,或就某一部分进行优化并做深入的研究与扩展。 2.2、 技术方案 (1)硬件设计模型 硬件实现主要是基于PLD的CPLD,FPGA中实现。如FPGA是在ASIC的基础发展出来的,它克服了专用 ASIC不够灵活的缺点。与其他中小规模集成电路相比,其优点主要在于它有很强的灵活性,即其内部的具体逻辑功能可以根据需要配置,对电路的修改和维护很方便。目前,FPGA的容量已经跨过了百万门级,使得 FPGA成为解决系统级设计的重要选择方案之一。在这种架构下,应用FPGA来构建SPI通信接口是切实可行的。 下图模式一种主从模式: adr_i[1:0] sck_o dat_i[7:0] mosi_o 微处理器SPI总线dat_o[7:0] 微处理器 接口 接口 miso_i int_o we_i cs_o rst_i SPI 接口作为主机与从机的通讯接口,主要完成以下工作: ?SPI将从主机接收到的8位的并行数据,转换为从机所能接收的串行数据,并将该数据根据SPI协议送给从机。 ?主机产生从机所需的时钟信号SCLK,片选信号CS。 ?接收从从机传回的读信号和串行数据,并将其转换为并行数据。 (2)系统实现方案 用FPGA实现SPI串行外围接口是一个比较复杂的系统较大的系统没有科学的设计方法就很难保证不出错,并很难言简意赅的清晰思路完成方案。此方案采用了状态机来设计,本项目的研究主要采用理论分析、逻辑推理、试验调试等方法。 针对状态机,其主要有以下特点: 1)有限状态机克服了纯硬件数字系统顺序方式控制不灵活的缺点。 2)状态机的结构模式相对简单。 3)状态机容易构成性能良好的同步时序逻辑模块。 4)状态机的Verilog HDL表述丰富多样。 5)在高速运算和控制方面,状态机更有其巨大的优势。 6)就可靠性而言,状态机的优势也是十分明显的。 基于以上特点,用状态机的方法描述SPI通信过程简单方便并可靠,基于状态机,SPI通信接口的状态大致转移图如下所示: 首先是SPI接口在等待状态,当检测到发送指令时触发信号进入发送状态,在系统指令下检测到写信号时进入发送数据状态,然后一位位发送数据,当检测到读信号时,进入读状态,当检测到发送接收都完毕时,进入发送接收完毕状态,再转向等待状态。 (3)关键技术的实现 ?时序问题 将总线控制信号封装成指令,使用者只需通过发送指令的方式操作,避免了复杂的时序逻辑设计问题。 ?全双工传输方式的设计 如果全部使用状态机的方式完成设计,则可发现其很难完成全双工即收发独立模式,则在此过程中可以采用流水线设计方式,使之收与发之间独立进行,便可完成全双工传输方式的设计。 3、进度安排 第1,2周:查阅相关SPI文献资料,对其相关研究内容进行大体了解,并明确其原理和基本实现方案,完成开题报告,熟悉ISE操作和在线调试,了解Verilog HDL语言的基本语法。 第3,4周:详细理解和研究SPI的原理,对Verilog HDL语言有一定的理解。 第5,12周:对于Verilog HDL语言有深入理解,并具备一定的编程能力,能设计基本 单元 初级会计实务单元训练题天津单元检测卷六年级下册数学单元教学设计框架单元教学设计的基本步骤主题单元教学设计 器件,并能读懂大型程序,熟练状态机的设计方法,对SPI有着工作过程有着细致的了解 第13-16周:完成并修改毕业论文。 第17周: 准备论文答辩。 4、指导教师意见 指导教师签名: 年 月 日 武汉理工大学学士学位论文 目录 摘要 .................................................................................. I Abstract ............................................................................. II 1 绪论 ................................................................................ 3 1.1课题研究背景 ................................................................... 3 1.2 SPI研究目的及意义 ............................................................. 4 1.3 本章小结 ...................................................................... 4 2 SPI原理分析 ......................................................................... 5 2.1 SPI介绍 ....................................................................... 5 2.2 SPI工作模式 ................................................................... 6 2.3 SPI传输模式 ................................................................... 6 2.4 SPI协议 ....................................................................... 7 2.5 本章小结 ...................................................................... 8 3 方案论证 ........................................................................... 10 3.1在51系列单片机系统中实现 ..................................................... 10 3.2 用可编程逻辑器件设计SPI ...................................................... 11 3.3 本章小结 ..................................................................... 11 4 SPI的电路设计 ...................................................................... 12 4.1 SPI设计系统的功能 ............................................................ 12 4.2 SPI各部分具体实现 ............................................................ 12 4.2.2 SPI系统中所用的寄存器 .................................................. 13 4.2.3 SPI速率控制 ............................................................ 14 4.2.4 SPI控制状态机 .......................................................... 14 4.2.5 SPI程序设计流程图 ...................................................... 15 4.3 SPI仿真及开发板上调试验证分析 ................................................ 16 4.3.1 仿真分析 ............................................................... 16 4.3.2开发板上调试 ............................................................ 18 4.4 本章小结 ..................................................................... 20 5 论文总结 ........................................................................... 21 致谢 ................................................................................. 22 参考文献 ............................................................................. 23 附录1 ................................................................................ 24 附录2 ................................................................................ 28 武汉理工大学学士学位论文 摘要 随着专用集成电路(ASIC)设计技术的进步以及超大规模集成电路(VLSI)工艺技术的飞速发展,以及其价格的日益降低,采用FPGA编程的硬件电路来实现诸如SPI接口也日益切实可行,相对软件实现具有更好的优点。SPI接口是一种常用的标准接口,由于其使用简单方便且节省系统资源,很多芯片都支持该接口,SPI接口主要应用在EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间等等。 由于SPI接口是一种事实标准,并没有标准协议,大部分厂家都是参照Motorola的SPI接口定义来设计的,但正因为没有确切的版本协议,不同厂家产品的SPI接口在技术上存在一定的差别,容易引起歧义,有的甚至无法互联(需要用软件进行必要的修改)。本文基于一种使用较为普遍的协议来进行设计,并参照Motorola公司的MC68HC11A8单片机中的SPI模块定义来设计的简化的SPI接口,用Verilog语言进行编写设计,并在ISE软件上进行设计仿真,并在基于Xlinx公司的Spartan-3E芯片的Digilent公司出品的Nexys2开发板上用在线逻辑分析仪chipscope进行板上调试验证观察结果,并完成实现功能,并具有一些独创性的设计。 关键词:FPGA Verilog SPI协议 chipscope ISE 武汉理工大学学士学位论文 Abstract With the advances in design technology of ASIC and VLSI’s rapid development, and its price is lower, the hardware circuit based on FPGA programming interface to achieve such as SPI is feasible, and it realizes better than software. SPI interface is a common standard interface, due to its simple and convenient use and save system resource , a lot of chips support this interface. SPI interface is extensively applied in EEPROM, FLASH, real-time clock, AD converter, and digital signal processor and digital signals decoder, etc. Due to the interface is a fact SPI standard, and it has no standard protocol, most manufacturers design the SPI refer to the interface definition of Motorola's reference.Because of no definite agreement, there is a lot of different versions of the products in the technology exists on SPI interface, easy cause of ambiguity, some even cannot interconnect (need to do some modification). Based on a common protocols for design, and the company MC68HC11A8 microcontroller of Motorola module definition to design the SPI simplified SPI interface, with Verilog language writing, and in the design of the software design ISE simulation, and based on the Xlinx company Digilent chip Spartan 3E - the Nexys2 development board with online logic analyzers chipscope on board, and debugging validation observations, and complete functionality has some distinctive design. Keywords:FPGA Verilog SPI protocol chipscope ISE 武汉理工大学学士学位论文 1 绪论 在研究SPI串行外围接口之前,我们首先要对其背景及其研究的目的要有所了解。 1.1课题研究背景 数据传送有串行传送和并行传送两种方。并行传送以其高速度占领了数据传送领域很 、RAM/ROM到打长一段时间,采用并行传送的集成电路、外围设备可谓不计其数,从CPU印机。 从原理上讲,串行传输是按位传输方式,只利用一条信号线进行传输,例如:要传送一个字节(8位)数据,是按照该字节中从最高位逐位传输,直至最低位。 而并行传输是一次将所有一字节中8位信号一并传送出去。自然最少需要8根信号线。 如果按每次传送的数据流量来看,并行传输要远快于串口,在电脑发展初期,由于数据传输速率不是很高,并行传输还是很快的。 但并行传输也有它的缺点: (1)干扰问题上面的人已经提到。 其根本原因是由于传输速率太快,一般达到100M以上,信号线上传递的频率将超过100MHz,想想看,调频收音机的频率也不过88~108MHz,也就是说,若用并行传输的话,是8根天线放在一起来传输信号,易发生干扰。但如果加强屏蔽,减小信号线间的耦合电容,是可以继续增大传输速率的,不过这将变得不现实,因为这必然导致信号线将耗用更多金属,截面积更大。但这并不是不能解决的问题。 (2)并行传输速率提升困难的最主要原因是同步问题 并行传输时,发送器是同时将8位信号电平加在信号线上,电信号虽然是以光速传输的,但仍有延迟,因此8位信号不是严格同时到达接受端,速率小时,由于每一字节在信号线上的持续时间较长,这种到达时间上的不同步并不严重,随着传输速率的增加,与8位信号到达时间的差异相比,每一字节的持续时间显得越来越短,最终导致前一字节的某几位与后一字节的几位同时到达接受端,这就造成了传输失败,而且随着信号线的加长这种现象还会越发严重,直至无法使用。——这是并口传输的致命缺点。 串行传输由于只有一位信号在信号线上,没有位同步问题,因此传送频率可以继续提高,当前传输速率已经达到1Gb/s(1000M)以上,而且还在提高,而并行传输在100Mb/s左右就停滞不前了,可以预见,串行传输将会比并行传输越来越快。 为此,串行传输已经成为当今外设接口的主流传输方式,为此,摩托罗拉公司开发出了同步外设接口(SPI),并随着时间不断改进,由于其占用线的资源少,且稳定可靠, 该总线大量用在与EEPROM、ADC、FLASH和显示驱动器之类的慢速外设器件通信,现在很多单片机等都有SPI模块来连接外围设备,从而使主机与外设传输数据更加方便。 武汉理工大学学士学位论文 1.2 SPI研究目的及意义 SPI是一种同步串行通讯方式,是一种三线同步总线,它是一种常用的标准接口,由于其使用简单方便且节省系统资源,很多芯片都支持该接口,SPI接口主要应用在EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间等等。当然,串口通信还有其他的接口方式,SPI接口和UART相比,多了一条同步时钟线,对通信双方的时序要求不严格不同设备之间可以很容易结合,而且通信速度非常快。一般用在产品内部元件之间的高速数据通信上面,如大容量存储器等。这就凸现SPI的好处。为此,研究SPI接口,可以更容易了解并外围器件传输过程,并对其已定义的进行改进,并使之更加可靠,功能强化。 SPI接口的扩展有硬件和软件两种方法,软件模拟SPI接口方法虽然简单方便,但是速度受到限制,在高速且日益复杂的数字系统中,这种方法显然无法满足系统要求,所以采用硬件的方法实现最为切实可行。这使得与SPI有关的软件就相当简单,使CPU有更多的时间处理其他事务。 SPI接口是一种事实标准,并没有标准协议,大部分厂家都是参照Motorola的SPI接口定义来设计的,但正因为没有确切的版本协议,不同厂家产品的SPI接口在技术上存在一定的差别,容易引起歧义,有的甚至无法互联(需要用软件进行必要的额修改)。 当前,基于主从处理器结构的系统架构已经成为一种主流(如 DSP+FPGA,MCU+FPGA 等),FPGA是在ASIC的基础发展出来的,它克服了专用 ASIC不够灵活的缺点。与其他中小规模集成电路相比,其优点主要在于它有很强的灵活性,即其内部的具体逻辑功能可以根据需要配置,对电路的修改和维护很方便。目前,FPGA的容量已经跨过了百万门级,使得 FPGA成为解决系统级设计的重要选择方案之一。在这种架构下,应用FPGA来构建SPI通信接口是切实可行的。并FPGA是可编程并可重复擦写的,从而具有更大的灵活性,在协议不标准的情况下,可根据外围设备的不同而灵活的改动SPI设计,使设计周期大大降低,并与外围设备连接更加方便。 1.3 本章小结 本章主要介绍了SPI的背景,及研究的目的与意义,进而可以知道SPI提出的目的以及其现阶段的发展状况,从而可以对SPI的这些理解达到举一反三的目的。 武汉理工大学学士学位论文 2 SPI原理分析 SPI原理主要介绍SPI的基本机构,工作模式,传输模式以及SPI的典型协议,通过此院里的介绍,对于SPI的要点介绍,以及其工作过程有一个通透了解,从而可以能设计达到原理目的的功能设计以及程序的设计。 2.1 SPI介绍 SPI总线系统是一种同步串行外设接口,它可以使MCU与各种外围设备以串行方式进行通信以交换信息。外围设置FLASHRAM、网络控制器、LCD显示驱动器、A/D转换器和MCU等。SPI总线系统可直接与各个厂家生产的多种标准外围器件直接接口,该接口一般使用4条线:串行时钟线(SCK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线MOST和低电平有效的从机选择线SS(有的SPI接口芯片带有中断信号线INT或INT、有的SPI接口芯片没有主机输出/从机输入数据线MOSI)。 SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(单向传输时)。也是所有基于SPI的设备共有的,它们是SDI(数据输入),SDO(数据输出),SCK(时钟),CS(片选)。 (1)MOSI – 主设备数据输出,从设备数据输入 (2)MISO – 主设备数据输入,从设备数据输出 (3)SCLK – 时钟信号,由主设备产生 (4)CS – 从设备使能信号,由主设备控制 其中CS是控制芯片是否被选中的,也就是说只有片选信号为预先规定的使能信号时(高电位或低电位),对此芯片的操作才有效。这就允许在同一总线上连接多个SPI设备成为可能。 接下来就负责通讯的3根线了。通讯是通过数据交换完成的,这里先要知道SPI是串行通讯协议,也就是说数据是一位一位的传输的。这就是SCK时钟线存在的原因,由SCK SDO则基于此脉冲完成数据传输。数据输出通过 SDO线,数据在提供时钟脉冲,SDI, 时钟上升沿或下降沿时改变,在紧接着的下降沿或上升沿被读取。完成一位数据传输,输入也使用同样原理。这样,在至少8次时钟信号的改变(上沿和下沿为一次),就可以完成8位数据的传输。 要注意的是,SCK信号线只由主设备控制,从设备不能控制信号线。同样,在一个基于SPI的设备中,至少有一个主控设备。这样传输的特点:这样的传输方式有一个优点,与普通的串行通讯不同,普通的串行通讯一次连续传送至少8位数据,而SPI允许数据一位一位的传送,甚至允许暂停,因为SCK时钟线由主控设备控制,当没有时钟跳变时,从设备不采集或传送数据。也就是说,主设备通过对SCK时钟线的控制可以完成对通讯 武汉理工大学学士学位论文 的控制。SPI还是一个数据交换协议:因为SPI的数据输入和输出线独立,所以允许同时完成数据的输入和输出。不同的SPI设备的实现方式不尽相同,主要是数据改变和采集的时间不同,在时钟信号上沿或下沿采集有不同定义,具体请参考相关器件的文档。 在点对点的通信中,SPI接口不需要进行寻址操作,且为全双工通信,显得简单高效。在多个从设备的系统中,每个从设备需要独立的使能信号,硬件上比I2C系统要稍微复杂一些。 最后,SPI接口的一个缺点:没有指定的流控制,没有应答机制确认是否接收到数据。 2.2 SPI工作模式 SPI由工作方式的不同,可分为两种模式:主模式和从模式 (1) 主模式 将Master的数据传送给Slave,8位数据传送,传送完毕,申请中断,如图2.2.1 MOSI MOSI SCLK SCLK 2.2.1 SPI工作主模式 图 (2) 从模式 此时,从控制器从SIMO引脚接收串行数据并把数据移入自身移位寄存器的最低位或最高位。要注意的是,其是在主控制器输出时钟SCLK的控制下,在SCLK的上升沿或者下降沿读出一个数据输出给主设备。其传播模型如下图所示: MISO MISO CS CS SCLK SCLK 图 2.2.2 SPI工作从模式 须注意的是,主设备可以再在任意时刻起动数据发送,因为它控制着SCLK信号,而在从模式下,从控制器要发送数据,必须要用先设置片选信号以确保使能端CS输入允许。 2.3 SPI传输模式 SPI 的工作模式分为主模式和从模式,二者都需要在 SCK 的作用下才能工作;但主模式不需要 CS 信号,而从模式必须在 CS 信号有效的情况下才能完成。不论是在主模式下还是在从模式下,都要在时钟极性(CPOL)和时钟相位(CPHA)的配合下才能有效地完 武汉理工大学学士学位论文 成一次数据传输。其中,时钟极性表示时钟信号在空闲时的电平;时钟相位决定数据是在 SCK的上升沿采样还是下降沿采样。根据时钟极性和时钟相位的不同组合,可以得到 SPI 总线的4 种工作模式,入图所示: 图2.3.1 SPI四种传输模式 (1)SPI0 模式下的 CPOL 为 0,SCK的空闲电平为低;CPHA 为 0,数据在串行同步时钟的第一个跳变沿(由于 CPOL 为低,因此第 1 个跳变沿只能为上升沿)时数据被采样。 (2)SPI1 模式下的 CPOL 也为 0,SCK的空闲电平为低;但是 CPHA 为 1,数据在串行同步时钟的第二个跳变沿(由于 CPOL 为低,因此第 2 个跳变沿只能为下降沿)时数据被采样。 (3)SPI2 模式下的 CPOL 为 1,SCK的空闲电平为高;CPHA 为 0,数据在串行同步时钟的第1个跳变沿(由于 CPOL 为高,因此第 1 个跳变沿只能为下降沿)时数据被采样。 (4)SPI3 模式下的 CPOL 为 1,SCK的空闲电平为高;CPHA 为 1,数据在串行同步时钟的第 2 个跳变沿(由于 CPOL 为高,因此第 1 个跳变沿只能为上升沿)时数据被采样。 在上述 4 种模式中,使用的最为广泛的是 SPI0 和 SPI3 方式。由于每一种模式都与其他三种不兼容,因此为了完成主、从设备间的通讯,主、从设备的 CPOL 和 CPHA 必须有相同的设置。读者需要注意的是:如果主设备/从设备在 SCK上升沿发送数据,则从设备/主设备最好在下降沿采样数据;如果主设备/从设备在SCK下降沿发送数据,则从设备/主设备最好在 SCK上升沿采样数据。 2.4 SPI协议 SPI接口是一种事实标准,并没有标准协议,大部分厂家都是参照Motorola的SPI接口定义来设计的,但正因为没有确切的版本协议,不同厂家产品的SPI接口在技术上存在一定的差别,容易引起歧义,有的甚至无法互联(需要用软件进行必要的额修改)。本次设计基于一种使用较为普遍的协议来进行设计,通过简单协议来理解并设计SPI接口功能。 SPI 协议是一个环形总线结构,其时序其实比较简单,主要是在时钟脉冲 SCK 的控 武汉理工大学学士学位论文 制下,两个双向移位寄存器 SPI数据寄存器数据 进行数据交换。我们假设主机的 8 位寄存器 SPIDATA1 内的数据是10101010,而从机的 8 位寄存器 SPIDATA2 内的数据是 01010101,在上升沿的时候发送数据,在下降沿的时候接收数据,最高位的数据先发送,主机和从机之间全双工通信,也就是说两个 SPI接口同时发送和接收数据,如图 所示。从图中我们也可以看到,SPIDATA 移位寄存器总是将最高位的数据移出,接着将剩余的数据分别左移一位,然后将接收到得数据移入其最低位。 SCLK SCLK 1 0 1 0 1 0 1 0 MOSI MISO MSB SPIDATA1 LSB MOSI MISO CS CS 0 1 0 1 0 1 0 1 MSB SPIDATA2 LSB 图2.4.1 SPI的环形总线结构 如图 所示,当第一个上升沿来的时候,SPIDATA1 将最高位 1 移除,并将所有数据左移1位, 这时 MOSI 线为高电平,而 SPIDATA2 将最高位 0 移出, 并将所有数据左移 1 位, 这样 MISO线为低电平。然后当下降沿到来的时候,SPIDATA1 将锁存 MISO 线上的电平,并将其移入其最低位,同样的,SPIDATA2 将锁存 MOSI 线上的电平,并将其移入最低位。经过 8 个脉冲后,两个移位寄存器就实现了数据的交换,也就是完成了一次 SPI 的时序。 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 第一个上升00 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 沿 第一个下降1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 沿 图2.4.2数据传输示例 2.5 本章小结 本章通过对SPI的原理分析,介绍其首发原理及基本结构,再介绍其工作模式,再介绍其传输模式和协议距离。通过以上分析,便可以知道本次设计的SPI所必须具备的功能有哪些,哪些是需要注意的功能。从而可以确定本次设计的工作模式,以及设计所的传输模式,并且通过介绍的协议举例来通过此协议来设计SPI系统结构。通过本章的分析,本次设计确定为主模式,及主控模式的设计,并且四种传输模式均需要实现,并且遵循SPI 武汉理工大学学士学位论文 协议,按照此协议来设计SPI结构。以此,变可以进行SPI结构设计了。 武汉理工大学学士学位论文 3 方案论证 对于SPI接口设计主要分为两大类,利用单片机如51系列单片机实现和利用FPGA等可编程逻辑器件编程实现,下面将分别介绍两种方法的方法。 3.1在51系列单片机系统中实现 对于不带SPI串行总线接口的MCS51系列单片机来说,可以使用软件来模拟SPI的操作,包括串行时钟、数据输入和数据输出。对于不同的串行接口外围芯片,它们的时钟时序是不同的。对于在SCK的上升沿输入(接收)数据和在下降沿输出(发送)数据的器件,一般应将其串行时钟输出口P1.1的初始状态设置为1,而在允许接口后再置P1.1为0。这样,MCU在输出1位SCK时钟的同时,将使接口芯片串行左移,从而输出1位数据至MCS51单片机的P1.3口(模拟MCU的MISO线),此后再置P1.1为1,使MCS51系列单片机从P1.0(模拟MCU的MOSI线)输出1位数据(先为高位)至串行接口芯片。至此,模拟1位数据输入输出便宣告完成。此后再置P1.1为0,模拟下1位数据的输入输出……,依此循环8次,即可完成1次通过SPI总线传输8位数据的操作。对于在SCK的下降沿输入数据和上升沿输出数据的器件,则应取串行时钟输出的初始状态为0,即在接口芯片允许时,先置P1.1为1,以便外围接口芯片输出1位数据(MCU接收1位数据),之后再置时钟为0,使外围接口芯片接收1位数据(MCU发送1位数据),从而完成1位数据的传送。 ,,,, ,1.0 ,,, ,1.1 ,,,, ,1.2 MCS 51 外围设备 ,1.3 ;, 图3.1.1 基于MCS51单片机的SPI设计模型 图3.1.1所示为MCS51系列单片机与存储器X25F008(E2PROM)的硬件连接图,图2中,P1.0模拟MCU的数据输出端(MOSI),P1.1模拟SPI的SCK输出端,P1.2模拟SPI的从机选择端,P1.3模拟SPI的数据输入端(MISO)。下面介绍用MCS51单片机的汇编语言模拟SPI串行输入、串行输出和串行输入/输出的3个子程序,实际上,这些子程序也适用于在串行时钟的上升沿输入和下降沿输出的其它各种串行外围接口芯片(如A/D转换芯片、网络控制器芯片、LED显示驱动芯片等)。对于下降沿输入、上升沿输出的各种串行外围接口芯片,只要改变P1.1的输出电平顺序,即先置P1.1为低电平,之后再次置P1.1为高电平,再置P1.1为低电平……,则这些子程序也同样适用。 武汉理工大学学士学位论文 3.2 用可编程逻辑器件设计SPI 除了编程方法,还可以用FPGA设计SPI,及用可编程逻辑的方法设计硬件来用单片机直接用简单的程序来应用外围硬件来实现SPI传输。通过对SPI的结构的了解可以设计一个系统框架,按照框架完成输入输出的功能。 一般一个典型的SPI系统如下图所示,其主要包括MPU和一个或几个外围器件,SPI一端与MPU接口相连,另一端便是负责传输的四条线了。当此单片机处于主机模式时,就能与从机进行通信,当此单片机处于从机模式时,就能与另一主机通信。总之,一个系统中只有一个主机,否则无法工作。用FPGA设计的系统框架如下图3.2.1所示: adr_i[1:0] sck_o dat_i[7:0] mosi_o 微处理器SPI总线dat_o[7:0] 微处理器 接口 接口 miso_i int_o we_i cs_o rst_i 图3.2.1 介于SPI的FPGA设计系统框架 以上两种便是两种实现SPI的方法,在实际应用中,许多单片机已经包括了SPI接口,可见SPI接口应用很广泛,只要高级点的单片机,都自带SPI接口,并且如DSP等也集成了SPI接口,可见大多芯片都趋向于用硬件实现而非软件实现。这是因为软件模拟SPI接口方法虽然简单方便,但是速度受到限制,在高速且日益复杂的数字系统中,这种方法显然无法满足系统要求,所以采用硬件的方法实现最为切实可行。这使得与SPI有关的软件就相当简单,使CPU有更多的时间处理其他事务。在可编程逻辑器件不断地完善改善完美并且功能强大且日益便宜,用硬件实现已经成为可能,在大型系统用硬件实现更加稳定。同时可编程逻辑也有自身的优点。在外围器件有改变时,由于可编程逻辑可以重复擦鞋的优点,从而在外围器件有些许改变之时,可以同时稍微改变可编程的程序,因而可编程又有灵活性大的特点。因此,本次设计便采用可编程逻辑的方案。 3.3 本章小结 本次设计介绍了软件硬件两种方法设计SPI,通过此分析,可以知道SPI的设计方法有哪些方法,通过比较可以得出每种设计的优劣。软件设计简单,但有其缺点,硬件设计相比复杂些,但是其灵活性强,可以让微处理器省出资源。 武汉理工大学学士学位论文 4 SPI的电路设计 电路设计主要是对系统设计的功能,各部分功能具体实现方案比如管脚说明,寄存器的说明即设计,以及状态机的动态描述,由各个功能的说明便可设计出本次SPI设计的流程图,由流程图便可以写出我们所需要的程序。 4.1 SPI设计系统的功能 本次设计具有一定的独创性,有着MC68HC11A8单片机SPI接口的全部功能,并在其四种传输速率中扩展了另外八种速率,使速率选择更加灵活。其主要功能如下: ?本次设计为主控模式 ?与摩托拉罗说明规格部分一致 ?并增强了MC68HC11A8单片机SPI接口功能 ?添加中断,当每完成一个数据产生中断信号,确保微处理器读完数据后再发送接收数据 ?提供了12种速率选择 ?提供极性相位选择,支撑四种传输模式 ?充分综合 4.2 SPI各部分具体实现 如总系系统框架所示,其管脚都列其上,其管脚功能见下表4.2.1所示: 表4.2.1 SPI设计管脚 端口名称 数据位宽 信号流向 功能描述 int_o 1 Output 中断输出,确保已传数据被读取 rst_i 1 Input 异步复位 we_i 1 Input 写使能端,写数据 dat_i 8 Input 输入数据或指令 adr_i 2 Input 写指令数据选择 sck_o 1 Output SPI时钟输出 mosi_o 1 Output 数据串行输出 miso_i 1 Input 数据串行输入 cs_o 1 Output 选片 dat_o 8 Output 输入数据并行给微处理器 其中,需要强掉的是,adr_i端输入不同,便使系统处于写数据状态还是写指令状态,指令是写给SPI设计的控制寄存器,以使SPI具有不同的功能。 武汉理工大学学士学位论文 4.2.2 SPI系统中所用的寄存器 本次设计中SPI用到四种寄存器,包括SPCR(SPI控制寄存器)、SPER(SPI扩展寄存器)、treg(SPI数据传输/接收寄存器)其功能如下所示: (1)控制寄存器 本次设计时参照MC68HC11A8单片机的SPI结构进行设计,并进行了一些改进,所以本次设计的控制寄存器的控制位与MC68HC11A8单片机的控制位大致相似,同时进行了一些扩展和不同的功能,扩展在扩展寄存器中再做介绍,其控制寄存器的控制位如下表4.2.2所示: 表4.2.2 SPI设计的控制寄存器 spe msb mstr cpol cpha spr1 spr0 spie 其各功能如下: ?spie :当此为被置位为1时,则中断允许,即允许中断,当为0时,禁止中断。 ‘0’:禁止中断 ‘1’:允许中断 ?spe :当此位被置位为1时,则系统运行,当置位为0时,系统不运行。 ‘0’:系统运行允许 ‘1’:系统允许禁止 ?msb:此为为在传输时是最高位线发送还是最低位先发送。当为1时,是最高位先发送,当为1时,是最低位先发送。 ‘0’:先发送最低位 ‘1’:先发送最高位 ?mstr:此为主从模式选择位,在本次设计中,本次设计只是工作于主控设备,故此为始终置1即可。 ?cpol:此为系统在空闲时的极性,当为0时,其为低电平为空闲时的极性,当为1时,其为高电平为空闲时的极性。 ‘0’:空闲时为低电平 ‘1’:空闲时为高电平 ?spr:此为速率选择为,其与扩展寄存器组合成速率选择,其可为00,01,10,11,与扩展此寄存器组合成一组数列来选择数据传输速率。此刻在速率控制中详细介绍。 (2)扩展寄存器 扩展寄存器的八位只用了两位,其用于与控制寄存器的spr组合成一列数据控制数据传输速率,其组合方式为espr = {spre, espr},四位此而控制16种传输速率,此在速率控制中详细介绍。 (3)状态寄存器 状态寄存器本次设计中只去了一位spi_i中断位,其与spie允许情况下允许中断, 武汉理工大学学士学位论文 中断位传给int_o从而保证单片机完成读取数据后在重新传输数据,从而保证每位数据传输完毕,保证数据读取后才能传送下一位数据。 4.2.3 SPI速率控制 速率控制为控制寄存器的低两位和扩展寄存器的低两位共同控制的,本次设计通过此四位的控制一共支持12种速率,其为系统时钟的N次分频。 本次将每一个控制赋值给clkcnt寄存器,并起每一个时钟减一,当为0是从而影响控制位状态机ena = ~|clkcnt,当ena为1是则执行状态机,从而达到分频目的 其详细控制如表4.2.3下: 表4.2.3 SPI的速率控制 spre espr clkcnt 分频 00 00 0 2分频 00 01 1 4分频 00 10 2 8分频 00 11 3 16分频 01 00 4 32分频 01 01 5 64分频 01 10 6 128分频 01 11 7 256分频 10 00 8 512分频 10 01 9 1024分频 10 10 a 2048分频 10 11 b 4096分频 由于每一个时钟上升沿执行一次,从而每个完整时钟sck_o执行一次跳变,顾其为2的n此分频,如上表所示。 4.2.4 SPI控制状态机 SPI控制状态机是本次设计的核心部分,其实整个设计的可以说是大脑,控制着整个程序的执行过程和完成设计实现功能。控制状态机主要用于片选信号cs的选择,和输出时钟sck的产生,以及数据载入和输出等。它控制各个模块的状态,然后根据相应的状态做出相应的操作。 在状态机运行之前,及数据传输之前,所作的工作便是初始化工作,即必须先确定允许中断,允许系统运行,设置先发送的数据位,设置极性相位和速率,即设置控制寄存器使之系统进入正常运行状态,首先必须设置spe位为1,即只有其为1时系统才运行,当达到adr[1:0]=10时,便是发送接收数据的命令。此时进入状态机的空闲状态2’b00,在空闲状态,所作的工作是设置空闲的时的极性和相位,完成后便进入发送准备载入发送数 武汉理工大学学士学位论文 据阶段2’01。此时为达到控制速率,使用一ena =~|clkcnt允许位,只有其为1时,才执行此状态的程序,否则保持,在此状态中,所作的工作是反向sck信号,载入数据,选中信号片选信号cs端,变开始发送接收数据,同时此时的第一位发送,便进入2’b10状态。此状态时为配置sck信号,使sck信号输出脉冲与发送数据脉冲匹配,从而可在sck的上升沿或下降沿锁存数据并发送数据。完成后进入到接受数据状态2’b11,此时为发送数据的核心状态,其数据接收传输寄存器移位完成数据的接收,在接收的同时也发送了一位数据,当发送完八次后变进入产生一个中断位,当单片机读取后变从新设置spe为0并清除中断标志位并清零后再次置1变开始下一个八位传输接收。少于八次则保留到当前状态。其状态图如下图4.2.1所示: 00 ena=1&bcnt=0 11 01 ena=1 ena=1 10 图4.2.1 传输数据所用过的状态机 4.2.5 SPI程序设计流程图 由上分析,可知,首先是设置控制寄存器,设置系统允许,spe为1时系统运行,当adr_i为收发命令时,在满足条件是便开始传送数据,在传送数据最重要的是sck信号产生以及收发信号的完成,以及收发信信号与sck信号的匹配。考虑到这些,其流程图如下图4.2.2所示: 武汉理工大学学士学位论文 开始 判断系统允许 位spe=1 否 否 adr_i==2'b10&!spe & (|clkcnt & |state)=0 spi_i&we_i&rst _i 是 是 空闲状态 否 接收发送数据,sck反向, 发送八位完毕产生中断 spe & (|clkcnt & |state)=0 是 输入数据,sck反向,选片信号成立 否 spe & (|clkcnt & |state)=0 是 sck反向,匹配sck信号 图4.2.2 SPI设计流程图 4.3 SPI仿真及开发板上调试验证分析 4.3.1 仿真分析 综上可以编写出SPI程序,其程序见附录1 (1)二分频时发送接收数据 当设置为开始时adr_i为写指令,即adr_i=00时,写指令到控制寄存器,adr_i=11时, 写指令到扩展寄存器,以下设置为中断允许,系统允许,为主模式,极性为0,即初始状 态空闲状态为低电平,相位为1,即为第一个跳变即第一个上升沿采样数据,设置速率控 武汉理工大学学士学位论文 制位为00,并设置扩展寄存器也为0,及为二分频,则控制寄存器设置为8’hF0,扩展寄存器设置为8’h00。 图 4.3.1 SPI testbench设置 如上图4.3.1所示,其设置如上所述,即在adr_i=00时,输入控制寄存器F0,当为adr_i=11,输入扩展寄存器为00.如上所示。其仿真波形如下图4.3.2所示: 图4.3.2 SPI的仿真波形 由其结果可知在mosi_o在一个sck_o时钟时输出一位数据,与实际相符,且sck_o时钟刚好为二分频,输入数据位8’hB5,二进制为10110101,看mosi_o在每个sck_o时钟为单位看数据输出为10110101,与输入数据一致,在第一个数据开始发送或接收时,可以看到选片信号为1成立,inta_o在第八个时钟为1,产生中断输出,由结果与实际设计预计一致。 (2)四分频时发送接收数据 上只是一个功能测试,先测试是否能选择频率,现选择频率为四分频,看结果是否一致,于是设置控制寄存器为8’hF1,扩展寄存器为8’h00,其仿真结果如图 所示: 图 4.3.3 SPI testbench设置 武汉理工大学学士学位论文 图4.3.2 SPI的仿真波形 可以看到其结果与预期一致,sck_o为系统时钟的四分频,且输出信号也是随着一个sck_o时钟变化而变化,其mosi_o与sck_o变化一致。 4.3.2开发板上调试 Chipscope是XILINX推出的一款在线调试软件,价格便宜,通过它完全可以脱离传统逻辑分析仪(太贵)来调时序,观察FPGA内部的任何信号,触发条件、数据宽度和深度等的设置也非常方便,但是肯定也存在不足,比如速度和数据量方面。Chipscope本身是一个逻辑分析仪,主要用于在上板测试过程中采集并观察芯片内部信号,以便于调试。在本次观察中添加了VIO核和ILA核,看到两个窗口的观察结果,此时需要将源程序进行例化,例化后的程序见附录4所示。 (1) miso_i等于1 以下是用chipscope观察的波形情况: 如图一所示,其与仿真波形基本一致,其输入信号为10110101,初始条件设置为控制寄存器设置为8’b11110000,扩展寄存器设置为0,则其波形如下所示: 图4.3.3 板上调试波形图 如图 所示,此为lLA波形窗口,可以看到由其结果可知在mosi_o在一个sck_o时钟时输出一位数据,与实际相符,且sck_o时钟刚好为二分频,输入数据位8’hB5,二进制为10110101,看mosi_o在每个sck_o时钟为单位看数据输出为10110101,与输入数据一 武汉理工大学学士学位论文 致,在第一个数据开始发送或接收时,可以看到选片信号为1成立,inta_o在第八个时钟为1,产生中断输出,由结果与实际设计预计一致。 由于在此时无法每一个时钟去输入miso_i的值,因为在系统运行时一旦达到仿真条件便运行完毕,故在此仿真中无法随意设置miso_i,只能设置初始为0或1,而不能在任意一个时钟设置,顾在此时始终设置为1,顾在八个周期完毕后,dat_o输出数据为FF,且产生中断信号,与实际预计一致。 图4.3.4 板上调试VIO窗口结果 如上图 所示,此为VIO窗口,在此设置控制寄存器,扩展寄存器初值,在达到触发条件便能观察ILA波形,波形结果与VIO中显示一致,顾客验证本设计成功。 (2) miso_i等于0 此作为一参照,证明本设计正确,由于无法再每一个时钟都设置miso_i值,故在此设置其为0,初始条件设置为控制寄存器设置为8’b11110001,扩展寄存器设置为0,以验证正确,其如下所示, 图4.3.5 板上调试波形图 可以看到起波形如上图 所示,输入为11110010,则输出结果如mosi_o所示 其VIO窗口看到结果如下图 武汉理工大学学士学位论文 图4.3.6 板上调试VIO窗口结果 可以看到起结果dat_o为0,inta_o为1,片选信号cs_o为1,输出结果为0,与设计情况吻合。 综上仿真,从软件仿真与硬件调试与理想结果一致,从而说明本次设计时成功的。同时也有不太好的地方,比如本次设计系统在传送完一个八位后必须将控制寄存器清零后在输入控制寄存器设置才能传送下一位数据,有点繁琐,但也可以进行进一步改进。还有就是可以再本次设计中加入FIFO,由FIFO的深度可以同时传送n个数据,可以在满后中断等待读出,也可以在空时等待数据传送在读取数据,从而在读取数据更加自由。而本次是没接收完一个数据必须读取数据后才能再进行读取。显然不够灵活。限于毕业设计的时间问题没有进一步深入研究。顾到此为止,能实现SPI结构,这便是本次设计的成功之处。 4.4 本章小结 本章是结构设计,功能模块描述,到状态机说明到流程图设计这一流程,通过一个个模块的分析,便能得出总体设计框架,由设计的框架思路便可以设计出本次设计所需要的程序了。程序仿真与调试,可以看到起结果一致,并且完成了SPI所需要的功能,通过此结果分析,可知,本次设计成功,并且具有一定的独创性。 武汉理工大学学士学位论文 5 论文总结 本次设计的是一个SPI主控设备,从而可以参考很多单片机或其他处理器的定义,从而根据其提供的控制寄存器,扩展寄存器,状态寄存器的定义,通过其中的位功能,来设计实现SPI小系统。 本次设计是一个稍微简化的SPI主控设备,因而并不需要很多的模块。在此设计中,不仅对ISE软件使用已经非常熟悉,并且对Verilog语言设计也更加熟悉了,从而对以后的学习打下了非常好的基础。同时对于SPI已经有着非常通透的了解,并且对I2C和UART等串口也有一定的了解,对于板上调试,仿真分析也掌握了一定的技巧。不仅掌握了FPGA设计SPI设计,而且对单片机实现有一个大致的了解。 并且,在今后的设计中,在参考别人设计的同时,不能完全照搬别人的东西,同时要结合自己的思考,用简单有效的方法来实现设计,并结合原理来思考别人是不是正确。在本次发送接收数据的有一个程序不仅繁琐,而且发送接收不能同时进行,显然是错误的程序,并且本次设计另外一个程序在一些端口完全没什么用,也输入进去,显然是抄袭在抄袭的结果。所以,无论在做任何设计,一定要紧跟定义,功能实现与否设计,而不是紧紧看懂硬搬硬套。 本次毕业设计所做的工作虽然简单,但也体会到不少东西。比如,我理解到在平时做单片机实验室那些初始化程序所做的目的。我所做的控制寄存器的东西便是那些初始化程序执行命令。控制寄存器的每一位用来控制整个系统的运行以及系统特性,通过命令指令便将命令写到系统中去。以前的留在脑中的疑问,那些初始化驱动程序便迎刃而解。同时在本次设计,也领略到一些设计方面的步骤。即应该先了解哪些方面,再进行哪些方面的理解,再进行哪些方面的分析,再进行哪些方面的重点理解。在编写特定模块时,可以先看厂家所规定的定义来实现所需设计的系统。 总之,通过本次FPGA设计,为今后的学习工作打下了一个很好的基础,为今后积累了非常宝贵的经验。 武汉理工大学学士学位论文 致谢 在我学士论文完成之际,谨向我攻读学士学位的过程中曾经教育过我的老师,关心过我的亲人,关心过我的朋友,和所有帮助过我的人们致以最崇高的敬意和深深的感谢~ 衷心感谢我的指导老师陈适老师。他丰富的知识和渊博的学识是我设计时所有理论知识的源泉,他为我的毕业设计进行了详细的讲解,为我提出的问题进行了耐心的解答,并指导我如何入手项目和查找资料,为我提供正确的导向。除此之外,他还为我的毕业设计提供了优越的环境以及毕业设计所需的硬件开发板,通过在开发板上进行调试和验证,我很快的理解和掌握了调试工具。 衷心感谢同一小组的进行毕业设计的同学们,在设计进行和测试的时候给我的无私的帮助和支持,通过与他们的交流,我不仅了解了关于调试方面的知识,还熟悉了误码仪各个部分的工作,使我能够在较短的时间内学到更多的东西,能够将FPGA的调试与误码仪联系起来。 衷心感谢陈适老师的学生,在我刚入手的时候通过他们的报告来逐渐熟悉此项目,在后面的学习过程中,他们也给予了很多软件方面的帮助,对我提出的问题也很耐心的回答,在这里表示感谢。 感谢武汉理工大学的所有领导,老师和为我们学习生活环境创造一切的人们,正是你们的辛勤工作,才把我培育成了一名合格的大学生。 再次衷心感谢我的导师陈适老师~ 武汉理工大学学士学位论文 参考文献 [1] 樊昌信,徐炳祥,吴成柯等.通信原理(第5版)[M]. 北京:国防工业出版社,2001. [2] 薛小刚,葛毅敏.Xilinx ISE 9 X FPGA/CPLD设计指南[M].北京:人民邮电出版社,2007. [3] 夏宇闻.Verilog数字系统教程(第2版)[M].北京航天航空大学出版社.2008. [4] SPI Block Guide V03.06. Original Release Date: 21 JAN 2000Revised: 04 FEB 2003. Motorola, Inc. [5] Xilinx . chipscope pro software and cores user guide. www.xilinx.com,2007. [6] 陈小忠. JTAG边界扫描技术的研究. 西安邮电学院,2003. [7] 黄志强,潘天保,俞一鸣等. Xilix可编程逻辑器件的应用与设计[M]. 北京:人民邮电出版社, 2007. [8] 朱明程,董尔令. 可编程逻辑器件原理及应用[M]. 西安:西安电子科技大学出版社,2004. [9] Xilinx. RocketIO Tranceiver User Guide. www.xilinx.com,2007. [10] 孙航. Xilinx可编程逻辑器件的高级应用与设计技巧[M]. 北京:电子工业出版社,2004. [11] 黄智伟,王彦,陈琼. FPGA系统设计与实践[M]. 北京:电子工业出版社, 2005. [12] 段吉海,黄智伟. 基于CPLD/FPGA的数字系统建模与设计[M]. 北京:电子工业出版社,2004. [13] 刘明章. 基于FPGA的嵌入式系统设计[M]. 北京:国防工业出版社,2007. [14] 徐欣,于红旗,易凡,卢启中等. 基于FPGA的嵌入式系统设计[M]. 北京:机械工业出版社,2004. [15] 王冠,黄熙,王鹰等. Verilog HDL与数字电路设计[M].北京:机械工业出版社,2005. [16] Lee Hansen and Brent Przybus. Debug your design with the chipscope pro system.[J]. Xcell Journal,2005. [17] Xilinx. Virtex-II Pro and Virtex-II Pro X Platform FPGAs: Complete Data Sheet. www.xilinx.com, 2007. [18] 徐洋等.基于Verilog HDL的FPGA设计与工程应用.人民邮电出版社.2009 [19] 串行接口SPI接口应用设计. 作者:马潮老师:armok / 2005-01-17/ www.OurAVR.com [20] 串行外围接口.作者:顾卫刚老师. [21] 基与FPGA的SPI端口设计. 梁东莺. 深圳信息职业技术学院信息中心,广东,深圳518029 武汉理工大学学士学位论文 附录1 SPI设计程序如下: module simple_spi_top( input wire clk_i, //时钟 input wire rst_i, //异步复位 input wire [1:0] adr_i, // 地址 input wire [7:0] dat_i, // 数据输入 input wire we_i, output reg [7:0] dat_o, // 数据输出 output wire inta_o, // i中断输出 output reg sck_o, // 串行时钟输出 output wire mosi_o, // input wire miso_i , // output reg cs_o ); reg [7:0] spcr; // 控制寄存器 reg [7:0] sper; // 扩展寄存器 reg [7:0] treg; // 传输/接收寄存器 reg [1:0] state; reg [7:0] bcnt; //***********输入数据给控制寄存器和状态寄存器************* always @(posedge clk_i or negedge rst_i) if (~rst_i) begin spcr <= 8'h10; sper <= 8'h00; end else if (we_i) begin if (adr_i == 2'b00) spcr <= dat_i; if (adr_i == 2'b11) sper <= dat_i; 武汉理工大学学士学位论文 end //***************设置控制寄存器************************* wire spie = spcr[7]; // 中断使能,该位为1允许SPI中断 wire spe = spcr[6]; // SPI系统允许位。该位为1打开SPI系统,为0关 闭SPI系统。 wire msb = spcr[5]; // 口D线或方式选择位。该位为1使口D输出选择 为漏极开路驱动器,为0则是推挽式输出。 wire mstr = spcr[4]; // 该位为1,SPI设为主设备;该位为0,SPI设为从 设备 wire cpol = spcr[3]; // 时钟极性 // 始终相位 wire cpha = spcr[2]; wire [1:0] spr = spcr[1:0]; // 速率控制 // *************设置扩展寄存器***************************** wire [1:0] spre = sper[1:0]; // 扩展时钟速率控制选择 wire [3:0] espr = {spre, spr}; //速率控制 reg spi_i; //SPI传输一个八位数据完成标志 assign inta_o = spi_i&spie; //生成中断信号 // *********产生时钟分频,及完成速率控制******************** reg [11:0] clkcnt; always @(posedge clk_i) if(spe & (|clkcnt & |state)) clkcnt <= clkcnt - 11'h1; else case (espr) //速率选择 4'b0000: clkcnt <= 12'h0; // 2 4'b0001: clkcnt <= 12'h1; // 4 4'b0010: clkcnt <= 12'h3; // 16 4'b0011: clkcnt <= 12'hf; // 32 4'b0100: clkcnt <= 12'h1f; // 8 4'b0101: clkcnt <= 12'h7; // 64 4'b0110: clkcnt <= 12'h3f; // 128 4'b0111: clkcnt <= 12'h7f; // 256 4'b1000: clkcnt <= 12'hff; // 512 4'b1001: clkcnt <= 12'h1ff; // 1024 4'b1010: clkcnt <= 12'h3ff; // 2048 4'b1011: clkcnt <= 12'h7ff; // 4096 武汉理工大学学士学位论文 endcase wire ena = ~|clkcnt; // 生成时钟允许信号,及在此时clkcnt产生使能 信号完成信号传输 //************** 传输数据的状态机**************************** always @(posedge clk_i) if (~spe) begin state <= 2'b00; // 空闲状态 bcnt <= 3'h0; treg <= 8'h00; sck_o <= 1'b0; spi_i<=0; end else if(adr_i==2'b10&!spi_i&we_i&rst_i) begin case (state) //传输状态机 2'b00: // 空闲状态 begin sck_o <= cpol; // 设置 sck 极性 state <= 2'b01; bcnt <= 3'h7; if (cpha) sck_o <= ~sck_o; //设置相位 end 2'b01: if (ena) //ena由clkcnt决定,clkcnt为0时执 行,及达到分频的效果 begin sck_o <= ~sck_o; treg<= dat_i; state<= 2'b10; cs_o<= 1'b1; end 2'b10: if (ena) begin sck_o <= ~sck_o; 武汉理工大学学士学位论文 state <= 2'b11; end 2'b11: // if (ena) begin treg <= {treg[6:0], miso_i}; bcnt <= bcnt -3'h1; if (~|bcnt) //运行八次 ,传完一个数据 begin state <= 2'b00; sck_o <= cpol; //空闲极性状态 dat_o <= treg; //接收数据 spi_i<=1; //中断标志位,此时输出给微处理接口 保证接收到数据后 end //再重新置spe位再发送一个数? else begin state <= 2'b10; sck_o <= ~sck_o; end end default state<= 2'b00; endcase end assign mosi_o = treg[7]; //发送数据 endmodule 武汉理工大学学士学位论文 附录2 SPI例化后的程序: module simple_spi_top( clk_i, dat_o, // 数据输出 inta_o, // 中断输出 sck_o, // 串口时钟输出 mosi_o, // 主输出从输入 cs_o //片选信号 ); input clk_i; // 时钟输入 wire rst_i; //异步复位 wire [1:0] adr_i; //指令设置 wire [7:0] dat_i; // 发送数据输入 wire we_i; output reg [7:0] dat_o; output wire inta_o; // SPI port output reg sck_o; output wire mosi_o; wire miso_i; output reg cs_o; reg [7:0] spcr; //控制寄存器 reg [7:0] sper; // 扩展寄存器 reg [7:0] treg; // 传输/接收寄存器 reg [2:0] bcnt; reg [1:0] state; wire [35 : 0] CONTROL_VIO; wire [35 : 0] CONTROL_ILA; wire clk_i; wire [12 : 0] ASYNC_OUT; wire [11 : 0] ASYNC_IN; wire [24 : 0] TRIG0 ICON I_ICON ( 武汉理工大学学士学位论文 .CONTROL0(CONTROL_ILA), .CONTROL1(CONTROL_VIO) ); ILA I_ILA( .CONTROL(CONTROL_ILA), .TRIG0(TRIG0), .CLK(clk_i) ); assignTRIG0={dat_o[7:0],inta_o,sck_o,mosi_o,cs_o,dat_i[7:0],miso_i,adr_i[1],adr_i[0] ,rst_i,we_i}; VIO I_VIO ( .CONTROL(CONTROL_VIO), .ASYNC_IN(ASYNC_IN), .ASYNC_OUT(ASYNC_OUT) ); assign rst_i=ASYNC_OUT[0]; assign we_i=ASYNC_OUT[1]; assign miso_i=ASYNC_OUT[2]; assign adr_i=ASYNC_OUT[4:3]; assign dat_i=ASYNC_OUT[12:5]; assign ASYNC_IN[0]=cs_o; assign ASYNC_IN[1]=inta_o; assign ASYNC_IN[2]=sck_o; assign ASYNC_IN[3]=mosi_o; assign ASYNC_IN[11:4]=dat_o; //********输入数据给控制寄存器和状态寄存器,及设备初始化******* always @(posedge clk_i or negedge rst_i) if (~rst_i) begin spcr <= 8'h10; sper <= 8'h00; end else if (we_i) begin if (adr_i == 2'b00) spcr <= dat_i; 武汉理工大学学士学位论文 if (adr_i == 2'b11) sper <= dat_i; end //***************设置控制寄存器******************************** wire spie = spcr[7]; // 中断使能,该位为1允许SPI中断 wire spe = spcr[6]; // SPI系统允许位。该位为1打开SPI系统,为0关闭SPI 系统。 wire dwom = spcr[5]; // 口D线或方式选择位。该位为1使口D输出选择为漏极 开路驱动器,为0则是推挽式输出。 wire mstr = spcr[4]; // 该位为1,SPI设为主设备;该位为0,SPI设为从设备 wire cpol = spcr[3]; // 时钟极性 wire cpha = spcr[2]; //相位 wire [1:0] spr = spcr[1:0]; // 设置控制寄存器 wire [1:0] spre = sper[1:0]; // 扩展时铀守制? wire [3:0] espr = {spre, espr}; //速率控制 //***************************************************************** reg spi_i; //SPI传输一个八位数据完成标志 assign inta_o = spi_i&spie; // 生成中断信号 // *********产生时钟分频,及完成速率控制**************************** reg [11:0] clkcnt; always @(posedge clk_i) if(spe & (|clkcnt & |state)) clkcnt <= clkcnt - 11'h1; else case (espr) //速率选择 4'b0000: clkcnt <= 12'h0; // 2 4'b0001: clkcnt <= 12'h1; // 4 4'b0010: clkcnt <= 12'h3; // 16 4'b0011: clkcnt <= 12'hf; // 32 4'b0100: clkcnt <= 12'h1f; // 8 4'b0101: clkcnt <= 12'h7; // 64 4'b0110: clkcnt <= 12'h3f; // 128 4'b0111: clkcnt <= 12'h7f; // 256 4'b1000: clkcnt <= 12'hff; // 512 4'b1001: clkcnt <= 12'h1ff; // 1024 4'b1010: clkcnt <= 12'h3ff; // 2048 武汉理工大学学士学位论文 4'b1011: clkcnt <= 12'h7ff; // 4096 endcase wire ena = ~|clkcnt; // 生成时钟允许信号 //************************* 传输数据的状态机************************ always @(posedge clk_i) if (~spe) begin state <= 2'b00; // 空闲状态 bcnt <= 3'h0; treg <= 8'h00; sck_o <= 1'b0; spi_i<=0; cs_o<=0; end else if(adr_i==2'b10&!spi_i&we_i&rst_i) begin case (state) //传输状态机 2'b00: // 空闲状态 begin sck_o <= cpol; // 设置 sck 极性 state <= 2'b01; bcnt <= 3'h7; if (cpha) sck_o <= ~sck_o;//设置相位 end 2'b01: if (ena) //ena由clkcnt决定,clkcnt为0时执行,及 达到分频的效果,控制器时钟分频 begin sck_o <= ~sck_o; treg<= dat_i; state<= 2'b10; cs_o<= 1'b1; end 2'b10: if (ena) begin 武汉理工大学学士学位论文 sck_o <= ~sck_o; state <= 2'b11; end 2'b11: if (ena) begin treg <= {treg[6:0], miso_i}; bcnt <= bcnt -3'h1; if (~|bcnt) //运行完毕,传完一个数据 begin state <= 2'b00; sck_o <= cpol; //空闲极性状态 dat_o <= treg; //接收数据 spi_i<=1; //中断标志位,此时输出给微处理接口保 证接收到数据后 end //再设置spe位再发送下一个数据 else begin state <= 2'b10; sck_o <= ~sck_o; end end default state<= 2'b00; endcase end assign mosi_o = treg[7]; //发送数据 endmodule
本文档为【毕业设计(论文)-基于FPGA的SPI串行外围接口接口设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_682974
暂无简介~
格式:doc
大小:188KB
软件:Word
页数:48
分类:
上传时间:2018-03-15
浏览量:14