基于APB总线接口的SPI协议IP核的设计与验证

来源 :无线互联科技 | 被引量 : 0次 | 上传用户:davidcao2008
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘 要:基于APB总线接口,设计了一种可灵活配置为Master/Slave模式、设置传输速率、支持DMA功能并适用于4种时钟模式的SPI 协议IP核。首先介绍了SPI协议标准,然后详细说明了该IP核的系统结构、接口信号和子模块设计,并使用了Verilog HDL语言实现硬件设计。最后通过了FPGA时序仿真,验证了该设计的正确性。该IP核已成功用于一款通信芯片,证明了该IP核在实际工程中的可行性。
  关键词:SPI协议;IP核;Verilog HDL;FPGA
  1 引言
  随着集成电路工艺的不断发展,SOC的规模不断扩大,集成的IP模块不断增多,可复用IP核可以大幅减少设计的复杂度,缩短SOC的开发周期和提高流片成功率。SPI(Serial Peripheral Interface)串行通信总线具有配置灵活,结构简单等特有的优点,被广泛应用于各位处理器和嵌入式系统当中。因此,SPI协议IP核设计已经成为业界的设计热点之一,但现有的设计功能还不够完善。文献[1]设计了一种SPI协议总线,只具有Master功能,不具有Slave功能;文献[2]设计了一种基于FPGA的SPI协议总线,但是不支持四线工作模式,并且对总线本身的结构和特性叙述不多,缺乏通用性;文献[3]设计了一种多功能化的SPI协议IP核,但是不支持DMA功能,所设计的IP核 Master模块也没有作流水考虑,数据传输率受到限制。本文提出了一种基于APB总线的高速可复用的SPI协议IP核,解决了上述设计中存在的问题,并具有更高的可行性,方便灵活,并且已经得到了验证,成功应用于一款基带通信芯片。
  2 SPI协议及时序概述
  SPI是一种高速高效率的串行接口技术,由Motorola公司提出。通常由1个主模块和1个或多个从模块组成,主模块选择一个从模块进行同步通信,从而完成数据交换。
  SPI协议在芯片的管脚上通常只占用四根芯片管脚,分别对应于四种信号:MOSI:主模块数据输出,从模块数据输入;MISO:主模块数据输入,从模块数据输出;SCK:时钟信号,由主模块产生;CSn:片选信号,低电平有效,由主模块产生。该协议规定了SPI模块主从两种工作模式,主模块产生串行时钟SCK和对从模块的片选信号。
  SPI模块在和外设进行数据交换时,根据外设的工作要求,其时钟信号SCK的极性(CPOL)和相位(CPHA)可以进行配置。因此,SPI有四種传输时序:CPOL=0时,串行时钟的空闲状态为低电平;CPOL=1时,串行同步时钟的空闲状态位高电平;CPHA=1时,在SCK的第二个跳变沿数据被采样;CPHA=0时,SCK的第一个跳变沿数据被采样。SPI协议4种数据传输时序如图1所示。
  3 SPI IP核的设计
  3.1 SPI IP核系统结构及主要功能
  本IP核基于APB总线进行设计,可连接APB Host(例如ARM CPU等)。APB Host通过APB总线完成对SPI模块进行状态控制、数据读写和中断处理等操作。系统结构图如图2所示,设计的SPI电路主要包括以下模块:SPI控制寄存器SPCR、数据发送模块TRANSMITTER、数据接收模块RECEIVER、发送/接收同步FIFO、状态寄存器SPSR。
  由图2所示,所设计的SPI协议IP核实现了传统的4线结构,同时通过控制寄存器的CPOL和CPHA位来控制,满足了4种接口时序。此外,增加了两个8位深度、32位宽度的同步可选FIFO,用以提高传输速率。每次发送/接收的比特数可自由在8比特、16比特和32比特间选择,并且首尾比特位的发送/接收顺序也可选。基于实际应用中存在的半双工工作要求,本设计也可以只使用SDI数据线的三线工作方式,使IP核进行半双工工作,增强了本设计的通用性。
  3.2 主要模块的设计
  SPI核主要模块设计包括存储器模块、时钟分频模块、Master模块和Slave模块的设计。
  3.2.1 存储器模块
  存储器模块主要包括一个32位的控制寄存器、一个32位的状态寄存器和两个8X32的同步FIFO。控制寄存器实现Master/Slave功能的切换、中断模式/DMA模式的切换等;状态寄存器记录发送/接收中断、同步FIFO空满标志等状态;两个同步FIFO可选择是否使用。
  3.2.2 时钟分频模块
  主模块会根据控制寄存器SPI_DIV所设置的分频值来对APB总线时钟进行分频,产生从模块需要的时钟信号SCK。本设计默认分频值为二分频,最高可完成对APB总线时钟4096分频,分频公式为:
  3.2.3 SPI Master模块
  控制寄存器MSTR位可以将SPI协议IP核设定在Master工作模式。工作于此模式下,IP核将产生CSn片选信号和SCK时钟信号,同时完成SPI四种时钟时序的产生逻辑。相对于传统的SPI 协议Master,本IP核不再局限于每次8比特的传输量,增加了16比特、32比特可选配置。传统的SPI协议IP核没有数据流水线机制,相邻的数据传输需要间隔几个时钟来读取数据,影响传输速率。本IP协议核引入流水线机制,在数据传输到最后一比特时,查询FIFO是否为空。若飞空,则立即将下一组待发数据提前准备好,结束查询,这样实现了传输的连续性,提高了传输速率。SPI协议 Master模块的状态机如图3(a)所示。
  SPI在发送数据时,发送的数据要和模块产生的串行时钟信号SCK保持同步,因此要求在每次SCK后半周期的跳变沿时,发送数据才能更新为下一比特。这也使得两个状态机在逻辑上出现交叉控制,相互协同工作,保证在SCK一个时钟周期的第一个时钟沿采样接收数据,第二个时钟沿改变发送数据。
  TIDLE:空闲状态,每次传输结束或者复位后,状态机即处于这一状态。该状态克通过控制寄存器配置为Master模式并出现传输请求,则跳转为TRAMAS1状态。   TRMAS1:读指令状态,该状态保持一个APB总线周期,在此周期内向FIFO或者发送寄存器产生读指令,然后直接跳转到TRMAS2状态。
  TRMAS2:写寄存器状态,该状态也保持一个APB总线周期,在此周期内将待发送的一组数据寄存到传输移位寄存器中,在HOLDMAS状态下作移位发送。
  HOLDMAS:保持状态,该状态下Master向外设发送数据,直到发送最后一个比特位并且没有待发送的数据。为了提高传输速率,此期间要不断轮询SCK产生状态机和FIFO空满标志位。
  ENDMAS:结束状态,保持一个APB总线时钟,产生传输结束中断或者DMA请求信号。
  CLKPH1:根据配置的时钟分频数值,对应于一个同步串行时钟SCK周期的前半周期。
  CLKPH2:根据配置的时钟分频数值,对应于一个同步串行时钟SCK周期的后半周期。在传输到最后一比特且没有下一组待发数据时,跳回到IDLE状态。
  3.2.4 SPI Slave模块
  SPI作为Slave模块使用时,由外部输入SCK时钟信号。模块从空闲状态到传输状态的触发条件,也是来自于主设备的CSn片选信号。Slave模块的传输受到Master模块的控制,当Master模块没有同步串行时钟信号输入时,Slave模块需要重新返回到空闲状态,并产生相应的状态标志位。SLAVE模块状态机主要参考Master模式设计。此外,时钟信号SCK由Master产生输入到Slave,Slave本身还接受来自APB的总线时钟信号,当在SCK时钟域下,完成接收数据的串行转并行和发送数据的并行转串行后,需要将保存好的接收数据传输到APB时钟域下,和从APB时钟域读取下一组待发数据,因此需要在Slave内部作异步时钟处理操作,来避免亚稳态现象出现。异步时钟处理采取的方法如图4所示。
  在SCK时钟域和APB时钟域之间,每次交换的是多比特数据,因此不能采用传统的单比特同步方法。在本次设计中,采用的是类似于握手协议的处理方法[5],当一次数据传输完成后,SCK时钟域内会产生单比特的标志信号送到APB时钟域下,经过两级时钟采样后作为控制信号,再将SCK时钟域下接收的数据转移到APB时钟域下,同时将APB时钟域下准备好的下组待发数据转移到SCK时钟域下。通过此方法就可以避免异步信号的建立和保持时间冲突问题,避免亚稳态现象的产生。
  4 仿真验证和综合结果
  首先用Verilog HDL语言编写顶层的Testbench,在该顶层内编写测试变量,通过Synopsys公司的VCS仿真軟件进行功能仿真。然后通过Design Compile软件进行综合,得到网表文件再使用VCS软件进行时序仿真。最后,再在FPGA芯片搭建的验证平台上,配合通信芯片的其他模块,完成实测。经过验证测试,完全符合设计要求。
  4.1 软件仿真验证
  在顶层Testbench模块内[6][7],实例化两个SPI模块SPI_M和SPI_S,分别设置成主模块和从模块,相互连接进行数据传输,并把APB总线信号设为寄存器变量,向两个SPI模块发送命令和读写数据,完成数据的收发测试。图5所示为部分数据时序仿真图。图(a)对应着SPI Master模式下,相邻发送数据可以产生连续的同步串行时钟SCK;图(b)显示了SPI Master中发送的数据经过SPI Slave模块接收并存储后,通过APB总线进行读取能得到正确的验证。
  此外,图5(a)中可以看到,每次最高可以完成32比特的传输,并且当mas_cr_byte=0x01时,传输完最后一个比特后,会自动开始下一组数据的发送,不需要延迟APB时钟周期。内部设计的两个状态机继续保持在传输状态,大大提高了传输效率。图5(b)中,SPI Master中的数据tr_data_out,经过转串处理,从sdi端传输到SPI Slave模块。SPI Slave模块对串行数据进行采样并存储到接收FIFO后,APB总线读取到的接收数据prdata和发送的数据tr_data_out一致。
  4.2 综合结果
  使用Synopsys公司的Design Compile软件,在SMIC0.13μm工艺下,对SPI协议IP核进行综合,所得到的report_area如图6所示。模块的总面积为37566μm2,约合7500逻辑门。
  5 结束语
  本文设计一种应用于通信芯片中的可复用SPI协议IP核,它具有功能完善、使用方便灵活、速度快、可重用性高等特点,并通过了仿真验证、逻辑综合和FPGA平台测试,证明了其设计的可靠性和实用性,并具有作为IP核进行ASIC设计或者FPGA设计的工程价值。
  [参考文献]
  [1]李大江,崔建明.一种基于FPGA的可配置SPI Master接口设计实现[J].电子技术应用,2010.10(36):60-62.
  [2]汪永琳,丁一.一种3线半双工SPI接口设计[J].半导体技术, 2010.5(35):482-484.
  [3]郭林,刘文杰,李跃辉.基于FPGA的可复用SPI总线实现[J] .2012.4(155):34-37.
  [4]Jianlong Zhang,Chunyu Wu,Wenjing Zhang.The design and realization of a comprehensive SPI interface controller [J]. IEEE 2011.2:4529-4532.
  [5]谢修祥,王广生.异步多时钟系统的同步设计技术[J].电子工程师. 2005.5(31):36-38.
  [6]Bergeron Janick.Writing testbenches: functional verification of HDL models [M].[S.L]:Kluwer Academic Publishers.2003.
  [7]高谷刚,罗春.可复用SPI模块IP核的设计与验证[J].单片机与嵌入式系统应用,2004(11):5-8.
  作者简介:郭艾华(1979-),男,讲师、硕士、数据库系统工程师,长期从事软件技术专业的教学与研究,对编程技术、数据库系统理论及工程技术有较深的了解。
其他文献
基于薄膜全耗尽SOICMOS工艺,进行了建模分析,在300~600K温度范围内,利用ISETCAD软件对SOICMOS器件单管高温特性进行了模拟分析,同时利用Verilog软件对激光测距电路进行了整体仿真.
进行“复合渣+微珠绝热板”工艺替代原工艺的浇铸试验,阐述其化学属性及物理特性,取得令人满意的效果。该工艺适合于浇铸电炉生产的大多数管坯钢锭。
本文对退火工艺与马氏体型气阀钢的脆性断裂进行研究。在采用完全退火工艺后,其产品具有优异的机械性能。
提出了一种基于PSoC(可编程片上系统)的多参数无线传感器网络WSNs(wireless sensor net works)节点的设计方案,详细阐述了节点系统的硬件和软件实现。并将该无线传感器网络节点应
介绍了一种基于CAN总线电动车的制动系统的设计方法。系统中采用ARM7为中心控制器,采用P87C591为各个CAN检测节点的控制器,实时的采集车辆运行状态信号通过CAN总线送至各个控制
摘 要:本文基于软件工程的设计思想,分析了图书借阅系统中的需求,利用模块分析的方法设计系统的登陆、管理、维护、设置四个模块,在服务器-客户端的网络框架下,设计了整个图书借阅信息化系统。整个系统完善了借阅流程、减轻了工作量、增强了安全保密性、加强了图书借阅管理。  关键词:图书借阅;软件工程;网络框架  图书馆是传统获取信息资源的主要来源地,但随着信息化时代的到来,当今社会出现了“信息爆炸”现象,I
本文介绍新的电弧炉全程石灰石炼钢工艺(即DQSL工艺)流程、关键技术、特点和使用效果,具有良好的推广应用前景。
在中小学教学管理中,班级管理是班风建设中的一项重要环节。所以针对目前这种情况,如何加强中小学的教学管理,进一步提升教学质量就是一个紧迫的问题。尤其是在中小学中,由于
为了抑制异质栅SOI MOSFET的漏致势垒降低效应,在沟道源端一侧引入了高掺杂Halo结构.通过求解二维电势Poisson方程,为新结构器件建立了全耗尽条件下表面势和阈值电压解析模型,并
文中根据劲酒工艺和污水规模的特点,提出一种基于PROFIBUS和LabVIEW技术的污水处理控制系统的实现方法。将可编程控制器、组态软件LabVIEW、变频器、工控机以及各类传感器相