学士学位论文spi接口的仿真及验证.docx
《学士学位论文spi接口的仿真及验证.docx》由会员分享,可在线阅读,更多相关《学士学位论文spi接口的仿真及验证.docx(34页珍藏版)》请在冰豆网上搜索。
学士学位论文spi接口的仿真及验证
编号
毕业设计(论文)
题目:
SPI接口的仿真及验证
物联网工程学院电子信息工程专业
学号0703090121
学生姓名胥翔
指导教师虞致国副教授
二〇一三年六月
摘要
在专用集成电路(ASIC)设计技术以及超大规模集成电路(VLSI)工艺技术的飞速发展的今天,FPGA编程的硬件电路被越来越多的应用于实现诸如SPI接口等方面。
相对于软件实现,硬件具有更多的优点。
SPI接口技术是一种高速高效率的串行接口技术,主要用于扩展外设及其数据交换,已经作为一种配置标准。
作为一个标准的接口,SPI具有简单方便和节省系统资源的优点,使得大多数芯片都支持该接口。
SPI接口主要应用在EEPROM、FLASH、实时时钟、AD转换器,还有数字信号处理器和数字信号解码器之间。
SPI接口的全称是"SerialPeripheralInterface",串行外围接口,是由Motorola公司首先在其MC68HCXX系列处理器上定义的。
现在大部分厂家都是参照Motorola的定义来设计的。
因为没有确切的版本协议,所以不同厂家的SPI接口在技术上存在一定程度上的差别,甚至会引起歧义。
本文是利用Verilog硬件描述语言编写出SPI总线的主机模块,经过XilinxISE仿真得出相应的仿真波形。
根据仿真波形分析,所设计的SPI主机模块的功能是正确的,并且在XilinxISE中对该模块进行综合与实现。
更多还原
关键词:
FPGA;SPI接口;Verilog;XilinxISE
Abstract
Inapplication-specificintegratedcircuit(ASIC)designtechnologyandverylargescaleintegratedcircuit(VLSI)technologyrapiddevelopmenttoday,theFPGAprogrammingofthehardwarecircuitismoreandmoreusedinimplementationsuchasSPIinterface.Relativetothesoftware,hardwarehasmoreadvantages.Asastandardinterface,SPIhasadvantagesofsimpleandconvenientandsavingsystemresources,makesthemostofthechipissupportedbytheinterface.SPIinterfaceblockismainlyusedinEEPROM,FLASH,real-timeclock,ADconverter,andbetweenthedigitalsignalprocessoranddigitalsignaldecoder.
SPIInterfaceisthefullnameof"SerialPeripheralInterface",SerialPeripheralInterface,MotorolaisfirstdefinedonitsMC68HCXXseriesprocessors,mostmanufacturersarenowbasedonthedefinitionofMotorolatodesign.ThispaperistousetheVeriloghardwaredescriptionlanguagetowritetheSPIbushostmodule,thesimulationoftheModelSimsimulationwaveform.Accordingtothesimulationwaveformanalysis,thedesignofSPIhostmodulefunctionisright.FinallyinXilinxISEincomprehensiveandtheimplementationofthemodule,andcompletedverifyontheFPGA.
Keywords:
FPGA;SPIinterface;Verilog;XilinxISE
目录
摘要I
AbstractII
目录i
第1章绪论1
1.1研究背景1
1.1.1系统芯片的发展1
1.1.2IP核1
1.1.3数据传送2
1.2SPI研究的目的及意义3
1.3本文的主要工作及构架3
1.3.1研究的基本内容3
1.3.2技术方案3
第2章SPI原理分析5
2.1SPI通信总线5
2.2SPI简介5
2.3SPI的工作模式6
2.3.1主模式6
2.3.2从模式7
2.4SPI的传输模式7
2.5SPI协议8
第3章方案论证11
3.1用FPGA来设计SPI11
3.2用51系列单片机实现SPI11
第4章SPI的电路设计13
4.1管脚说明13
4.2SPI系统中所用的寄存器13
4.3SPI速率控制14
4.4SPI控制状态机15
4.5SPI程序设计流程图16
第5章仿真及验证19
5.1仿真分析19
第6章结论与展望21
6.1结论21
6.2不足之处及未来展望21
参考文献22
致谢23
附录A24
第1章绪论
1.1研究背景
1.1.1系统芯片的发展
系统芯片(SoC:
System-on-a-chip)指的是在单个芯片上集成一个完整的系统,对所有或部分必要的电子电路进行包分组的技术。
所谓完整的系统一般包括中央处理器、存储器、以及外围电路等。
SoC是与其它技术并行发展的,如绝缘硅(SOI),它可以提供增强的时钟频率,从而降低微芯片的功耗。
随着电子技术开发应用对集成电路IC需求量的扩大和半导体工艺水平的不断进步,超大规模集成电路VLSI技术迅猛发展。
当前的半导体工艺水平己经达到了亚微米水平并正在向50nm以下发展,器件特征尺寸越来越小,芯片集成规模越来越大,数百万门级电路可以集成在一个芯片上,芯片尺寸已从逻辑限制变为焊盘限制,我们必须找到与常规集成电路设计思想不同的设计方式,它就是新世纪IC设计的主流技术。
SOC是微电子设计领域的一场革命,从整个系统的角度出发,把智能核、信息处理机制、模型算法、芯片结构、各层次电路直至器件的设计紧密结合起来,在单个或少数几个芯片上完成整个系统的功能,既我们可以把越来越多的电路设计在同一个芯片中,这里面可能包含有中央处理器(CPU),嵌入式内存(Embeddedmemory)、数字信号处理器(DSP)、数字功能模块(Digitalfunction)、模拟功能模块(Analogfunction)、模拟数字转换器(ADC)以及各种外围配置(USB,MPEG)等等,这是新发展的SOC技术。
SOC技术的研究、应用和发展是微电子技术发展的一个新的里程碑。
SOC能提供更好的性能、更低的功耗、更小的印制板.空间和更低的成本,带来了电子系统设计与应用的革命性新变革,可广泛应用于移动电话、硬盘驱动器、个人数字助理和手持电子产品、消费性电子产品等。
SOC是21世纪电子系统开发应用的新平台[1]。
1.1.2IP核
IP(IntelligenceProperty)是在FPGA设计中不可缺少的组成部分,也是自底向上设计方法学的理论基础。
随着数字系统设计越来越复杂,从头开始设计系统中的每一个模块是一件十分困难的事,而且会打打延长设计周期,甚至增加系统的不稳定因素。
IP的出现使得设计过程变得十分简单,用户甚至只需要将不同的模块连接起来,就可以实现一个完整的系统。
这样对减少产品的上市时间、赚取早起的利润十分有利。
IP核是指用于产品应用专用的集成电路(ASIC)或可编程逻辑器件(FPGA)的逻辑块或数据块。
将一些数字电路中常用但比较复杂的功能模块,如FIR滤波器,SDRAM控制器,PCI接口等设计成可修改参数的模块,让其他用户可以直接调用,这样就大大减轻了工程师的负担,避免重复劳动。
随着CPDL/FPGA的规模越来越大,设计越来越负杂,使用IP核是一个发展趋势。
随着HDL的发展和标准化,世界上出现了一批利用HDL进行各种集成电路功能模块专业设计的公司。
其具体任务是按常用或专用功能,用HDL来描述集成电路的功能和结构,并经过不同级别的验证形成不同级别的IP核模块,供芯片设计人员来装配或集成选用。
(1)软IP核通常使用HDL文本形式提交给用户,它已经过行为级设计优化和功能验证,但其中不含有任何具体的物理信息。
据此,用户可以综合出正确的门电路级网表,并可以进行后续结构设计,具有强大的灵活性,可以很容易的借助EDA综合工具将其与其他外部逻辑电路结合成一体,更具不同的半导体工艺,将其设计为具有不同性能的器件。
可以商品化的软IP内核的电路结构总门数一般都在5000门以上。
软IP核又被称为虚拟器件。
(2)硬IP核是基于某种半导体工艺的物理设计,,已有固定的拓扑布局和具体工艺,并已经过工艺验证,具有保证的性能。
其共给用户的形式是电路物理结构掩模板图全套工艺文件,是可以拿来就用的圈套技术。
(3)固IP核的设计深度介于软IP内核和硬IP内核之间,除了完成硬IP内核所具有的设计外,还完成门电路级综合和时序仿真设计环节,一般以门电路级网表形式提交用户使用。
常用的IP内核模块有各种不同的CPU(32/64位结构CISC/RISC结构的CPU或8/16位微控制器/单片机,如8051等)、32/64位DSP(如320C30)、DRAM、SRAM、EEPROM、FLASH内存、A/D、D/A、MPEG/JPEG、USB、PCI、标准接口、网络单元、编译器、编码/解码器和模拟器件模块等。
丰富的IP内核模块库为快速地设计专用集成电路和单片系统以尽快占领市场提供了保证[2]。
1.1.3数据传送
数据传送有串行传送和并行传送两种方法。
并行传输是构成字符的二进制代码在并行信道上同时传输的方式。
例如,8单位代码字符要用8条信道并行同时传输,一次传一个字符,收、发双方不存在同步问题,速度快,但信道多、投资大,数据传输中很少采用[3]。
串行传输是构成二进制代码在一条信道上以位(码元)为单位,按时间顺序逐位传输的方式。
按位发送,逐位接收,同时还要确认字符,所以要采取同步措施。
速度虽慢,但只需一条传输信道,投资小,易于实现。
为此,串行传输已经成为当今外设接口的主流传输方式,为此,摩托罗拉公司开发出了同步外设接口(SPI),并随着时间不断改进,由于其占用线的资源少,且稳定可靠,该总线大量用在与EEPROM、ADC、FLASH和显示驱动器之类的慢速外设器件通信,现在很多单片机等都有SPI模块来连接外围设备,从而使主机与外设传输数据更加方便[5]。
1.2SPI研究的目的及意义
SPI总线,是一个同步串行接口的数据总线,它具有全双工、信号线少、协议简单、传输速度快等优点。
由于串行总线的信号线比并行总线更少、简单,越来越多的系统放弃使用并行总线而采用串行总线。
在众多串行总线中,SPI总线相比于I2C总线、CAN总线、USB等其他常用总线相比有很大优势,如SPI线的数据传输速度可达若干Mbps,比I2C总线快很多。
SPI总线最典型的应用就是主机与外围设备(如EEPROM、FlashRAM、A/D转换器、LED显示器、实时时钟等)之间的通信[4]。
SPI接口的扩展有硬件和软件两种方法,软件模拟SPI接口方法虽然简单方便,但是速度受到限制,在高速且日益复杂的数字系统中,这种方法显然无法满足系统要求,所以采用硬件的方法实现最为切实可行。
这使得与SPI有关的软件就相当简单,使CPU有更多的时间处理其他事务。
FPGA(现场可编程门阵列)是在PAL、GAL、PLD等可编程器件的基础上进一步发展的产物,具有设计周期短、可重复编程、灵活性强等特点。
用FPGA设计的SPI总线具有可扩展性强、便于修改等优点。
只要对设计做简单的改动,即可对SPI总线的数据位数、工作模式等进行扩展,充分发挥了FPGA的优势。
并FPGA是可编程并可重复擦写的,从而具有更大的灵活性,在协议不标准的情况下,可根据外围设备的不同而灵活的改动SPI设计,使设计周期大大降低,并与外围设备连接更加方便。
1.3本文的主要工作及构架
1.3.1研究的基本内容
(1)熟悉通信及通信接口相关方面的知识,学习并掌握SPI通信接口的结构,协议及原理。
(2)熟悉VERILOG语言及其开发环境ISE,使用该语言进行数字电路(FPGA)设计,慢慢深入VERILOG语言。
(3)设计流程图,状态图。
(4)实现仿真。
1.3.2技术方案
SPI接口作为主机与从机的通讯接口,其主要完成工作为下:
①SPI将从主机接收到的8位的并行数据,转换为从机所能接收的串行数据,并将该数据根据SPI协议送给从机。
②主机产生从机所需的时钟信号SCLK以及片选信号CS。
③接收从从机传回的读信号和串行数据,并将其转换为并行数据。
此方案采用了状态机来进行设计,本项目的研究主要采用理论分析、逻辑推理、试验调试等方法。
状态机的特点如下:
(1)有限状态机相对于纯硬件数字系统顺序方式控制来说更为灵活。
(2)状态机的结构模式简单。
(3)状态机构成的同步时序逻辑模块更为优良。
(4)状态机在高速运算和控制方面更有其巨大的优势。
(5)状态机更为可靠。
基于以上特点,用状态机的方法描述SPI通信过程简单方便并可靠。
SPI接口的状态大致转移描述如下:
首先是SPI接口处于等待状态,一旦检测到发送指令时触发信号进入发送状态,在系统指令下检测到写信号时进入发送数据状态,然后一位发送数据,当检测到读信号时,进入读状态,当检测到发送接收都完毕时,进入发送接收完毕状态,再转向等待状态。
关键技术的实现:
(1)时序问题
将总线控制信号封装成指令,使用者只需通过发送指令的方式操作,避免了复杂的时序逻辑设计问题。
(2)全双工传输方式的设计
如果全部使用状态机的方式完成设计,则可发现其很难完成全双工即收发独立模式,则在此过程中可以采用流水线设计方式,使之收与发之间独立进行,便可完成全双工传输方式的设计。
第2章SPI原理分析
SPI原理主要介绍SPI的基本机构,工作模式,传输模式以及SPI的典型协议,通过对于这些SPI的要点介绍,对其工作过程有一个通透了解,从而可以能设计达到原理目的的功能设计以及程序的设计。
2.1SPI通信总线
SPI顾名思义就是串行外围设备接口。
是Motorola首先在其MC68HCXX系列处理器上定义的。
SPI接口主要应用在EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。
SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议,比如AT91RM9200。
SPI总线系统是一种同步串行外设接口,它可以使MCU与各种外围设备以串行方式进行通信以交换信息。
外围设置FLASHRAM、网络控制器、LCD显示驱动器、A/D转换器和MCU等。
SPI总线系统可直接与各个厂家生产的多种标准外围器件直接接口,该接口一般使用4条线:
串行时钟线(SCLK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线MOSI和低电平有效的从机选择线SS(有的SPI接口芯片带有中断信号线INT、有的SPI接口芯片没有主机输出/从机输入数据线MOSI)[7]。
2.2SPI简介
SPI(SerialPeripheralInterface)接口是工业标准的同步串行接口,是一种全双工、三线通信的系统。
由于串行总线的信号线比并行总线更少、更简单,越来越多的系统放弃使用并行总线而采用串行总线。
在众多串行总线中,SPI总线与I2C总线、CAN总线、USB等其他常用总线相比有很大优势。
SPI总线最典型的应用就是主机与外围设备(如EEPROM、FlashRAM、A/D转换器、LED显示器、实时时钟等)之间的通信[6]。
SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线(单向传输时只需要3根)。
也是所有基于SPI的设备共有的,它们是SDI(数据输入),SD(数据输出),SCK(时钟),CS(片选)。
它们的定义如下:
SCK:
同步时钟信号,用来同步主机和从机的数据传输,由主机控制输出,从机在SCK的边沿接收和发送数据;
MOSI:
主机输出、从机输入信号,主机在上升沿(或下降沿)通过该信号线发送数据给从机,从机在下降沿(或上升沿)通过该信号线接收该数据;
MISO:
主机输入、从机输出信号,从机在上升沿(或下降沿)通过该信号线发送数据给主机,主机在下降沿(或上升沿)通过该信号线接收该数据;
CS:
从机片选信号,由主机控制输出。
其中CS是控制芯片是否被选中的,也就是说只有片选信号为预先规定的使能信号时(高电位或低电位),对此芯片的操作才有效。
这就允许在同一总线上连接多个SPI设备成为可能。
接下来就负责通讯的3根线了。
通讯是通过数据交换完成的,这里先要知道SPI是串行通讯协议,也就是说数据是一位一位的传输的。
这就是SCLK时钟线存在的原因,由SCK提供时钟脉冲,SDI,SDO则基于此脉冲完成数据传输。
数据输出通过SDO线,数据在时钟上升沿或下降沿时改变,在紧接着的下降沿或上升沿被读取。
完成一位数据传输,输入也使用同样原理。
这样,在至少8次时钟信号的改变(上沿和下沿为一次),就可以完成8位数据的传输。
要注意的是,SCLK信号线只由主设备控制,从设备不能控制信号线。
同样,在一个基于SPI的设备中,至少有一个主控设备。
这样传输的特点:
这样的传输方式有一个优点,与普通的串行通讯不同,普通的串行通讯一次连续传送至少8位数据,而SPI允许数据一位一位的传送,甚至允许暂停,因为SCLK时钟线由主控设备控制,当没有时钟跳变时,从设备不采集或传送数据。
也就是说,主设备通过对SCLK时钟线的控制可以完成对通讯的控制。
SPI还是一个数据交换协议:
因为SPI的数据输入和输出线独立,所以允许同时完成数据的输入和输出。
不同的SPI设备的实现方式不尽相同,主要是数据改变和采集的时间不同,在时钟信号上沿或下沿采集有不同定义。
SPI接口的一个缺点:
没有指定的流控制,没有应答机制确认是否接收到数据[11]。
2.3SPI的工作模式
SPI有两种工作模式,分别为主模式和从模式。
2.3.1主模式
将Master的数据传送给Slave,8位数据传送,传送完毕,申请中断,如图2.1所示:
图2.1SPI工作主模式
2.3.2从模式
在从模式下,每一位数据都是接收到时钟信号SCLK和CS信号之后才发送/接收。
此时,SCLK信号又主机产生,接收的数据在三岔路口信号作用下依次由MOSI引脚写入移位寄存器,发送的数据在SCLK信号作用下由移位寄存器发送到MISO引脚。
图2.2SPI工作从模式
2.4SPI的传输模式
SPI总线是Motorola公司推出的三线同步接口,同步串行3线方式进行通信:
一条时钟线SCK,一条数据输入线MOSI,一条数据输出线MISO;用于CPU与各种外围器件进行全双工、同步串行通讯。
SPI主要特点有:
可以同时发出和接收串行数据;可以当作主机或从机工作;提供频率可编程时钟;发送结束中断标志;写冲突保护;总线竞争保护等。
下图2.3示出SPI总线工作的四种方式,其中使用的最为广泛的是SPI0和SPI3方式(实线表示):
图2.3
SPI模块为了和外设进行数据交换,根据外设工作要求,其输出串行同步时钟极性和相位可以进行配置,时钟极性(CPOL)对传输协议没有重大的影响。
如果CPOL=0,串行同步时钟的空闲状态为低电平;如果CPOL=1,串行同步时钟的空闲状态为高电平。
时钟相位(CPHA)能够配置用于选择两种不同的传输协议之一进行数据传输。
如果CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;如果CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。
SPI主模块和与之通信的外设备时钟相位和极性应该一致。
SPI总线包括1根串行同步时钟信号线以及2根数据线。
SPI模块为了和外设进行数据交换,根据外设工作要求,其输出串行同步时钟极性和相位可以进行配置,时钟极性(CPOL)对传输协议没有重大的影响。
如果CPOL=0,串行同步时钟的空闲状态为低电平;如果CPOL=1,串行同步时钟的空闲状态为高电平。
时钟相位(CPHA)能够配置用于选择两种不同的传输协议之一进行数据传输。
如果CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;如果CPHA=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上升沿采样数据[8]。
2.5SPI协议
SPI是一个环形总线结构,由SS(CS)、SCK、SDI、SDO构成,其时序其实很简单,主要是在SCK的控制下,两个双向移位寄存器进行数据交换。
假设下面的8位寄存器装的是待发送的数据10101010,上升沿发送、下降沿接收、高位先发送。
那么第一个上升沿来的时候数据将会是SDO=1;寄存器=0101010X。
下降沿到来的时候,SDI上的电平将所存到寄存器中去,那么这时寄存器=0101010SDI,这样在8个时钟脉冲以后,两个寄存器的内容互相交换一次。
这样就完成里一个SPI时序。
举例:
假设主机和从机初始化就绪:
并且主机的SBUFF=0xaa,从机的SBUFF=0x55,下面将分步对SPI的8个时钟周期的数据情况演示一遍:
假设上升沿发送数据。
这样就完成了两个寄存器8位