用于SoC的SPI接口设计与验证

时间:2022-10-19 08:05:09

用于SoC的SPI接口设计与验证

摘 要: 给出了一个可用于SoC设计的SPI接口IP核的RTL设计与功能仿真。采用AMBA 2.0总线标准来实现SPI接口在外部设备和内部系统之间进行通信,在数据传输部分,摒弃传统的需要一个专门的移位传输寄存器实现串/并转换的设计方法,采用复用寄存器的方法,把移位传输寄存器和发送寄存器结合在一起,提高了传输速度,也节约了硬件资源。采用SoC验证平台进行SoC环境下对IP的验证,在100 MHz时钟频率下的仿真和验证结果表明,SPI接口实现了数据传输,且满足时序设计要求。

关键词: SPI协议; AMBA总线; SoC设计; 数据传输

中图分类号: TN402?34 文献标识码: A 文章编号: 1004?373X(2013)24?0149?03

Design and verification of SPI applied to SoC

KUANG Chun?yu, MA Qi, CHEN Ke?ming

(Microelectronics CAD Center, Hangzhou Dianzi University, Hangzhou 310018, China)

Abstract: The RTL design and functional simulation of SPI IP core applied to SoC design is presented in this paper. The AMBA 2.0 bus standards is adopted to achieve the communication between the peripheral devices and the internal system through SPI. As fore data transmission section, the traditional design method was abandoned, which needs a specific shift register for serial/parallel transfer. The shifting transmission register and receive register are put together by the reuse registers to improve the speed and save the hardware resources. IP is verified with an SoC verification platform under SoC environment. The results of simulation at the clock frequency of 100 MHZ show that the design can achieve data transmission and meet the requirements of time?sequence design.

Keywords: SPI I ptotocol; AMBA bus; SoC design; data transmission

0 引 言

SPI(Serial Peripheral Interface)是一种同步串行总线接口,很多器件如E2PROM、FLASH、实时时钟、A/D转换器等都用到了SPI接口[1],它也是SoC中的一个常用功能模块。AMBA总线是由ARM公司开发的一种高性能、开放性SoC系统总线,它主要包括AHB,ASB和APB三种总线类型[2]。AHB总线主要用于连接高性能、高速度的系统模块,如CPU,DSP,SRAM等;APB总线主要用于连接低速模块,如UART,I2C等,接口简单,效率高,功耗低[3];ASB总线通过连接系统高速部件来实现高速通信,一般较少用到。

本文设计一个可作为IP核用于SoC设计的SPI接口,采用AMBA2.0总线标准来实现SPI接口在外部设备和内部系统之间进行通信,SPI接口作为低速模块挂载在APB总线上。

1 SPI接口的定义

1.1 接口信号

SPI的接口信号为同步串行时钟SCLK、主机输入/从机输出MISO、主机输出/从机输入MOSI、从机选择[SS](低电平有效)[4],由于只用到四根线工作,与其他接口相比具有结构简单、速度快的优点。SPI有主/从两种工作模式,SPI总线的串行时钟SCLK用来同步数据传输,在主模式下由主机产生,从机选择信号[SS]用来决定外部设备是否被选作SPI的从设备。主从设备连接方式如图1所示[5]。

1.2 内部寄存器

SPI的内部寄存器如表1所示。

1.3 传输时序

在本设计中,SPI的传输时序由控制寄存器CTRL来决定。CTRL[9]定义为RX_NEGE,置1表示数据在时钟下降沿接收,置0为上升沿接收;CTRL[10]定义为TX_NEGE,置1表示数据在下降沿发送,置0为上升沿发送;CTRL[11]定义为LSB,置1表示数据从最低位开始传输,置0从最高位开始传输。CTRL[6:0]定义为CHAR_LEN,为数据传输长度,最长可为128 b。以其中一种传输时序为例说明,如图2所示。

图1 主从设备连接图

表1 SPI内部寄存器

图2 上升沿发送下降沿接收时序

2 SPI接口的RTL设计

本设计是针对SoC系统的,目标是实现适用于SoC设计并且符合SPI通信协议的IP核,实现SoC通过此SPI接口和外设通信[5]。所以,本设计分成SPI主机模块spi_master的设计和SPI从机模块spi_slave的设计,采用Verilog HDL进行RTL设计。

2.1 spi_master模块设计

spi_master的功能主要包括:

(1)实现主机通过APB总线初始化spi_master的寄存器;

(2)实现spi_master和spi_slave之间的数据交换。因此,spi_master模块主要就是实现分频和串并转换,主要包含时钟产生子模块spi_clgen和数据传输子模块spi_shift,其设计结构如图3所示[6]。

图3 spi_master模块结构图

2.1.1 时钟产生子模块设计

该子模块主要作用是产生SPI主/从设备通信所需的同步串行时钟sclk。在主模式下,sclk由系统提供的时钟信号pclk分频产生[7],产生的串行时钟的时钟频率由式(1)计算得来:

[fsclk=fpclk(DIVIDER+1)×2] (1)

传输开始前,cnt载入DIVIDER值,满足传输条件下cnt减1计数,减为0时,输出时钟clk_out翻转,并且在clk_out的上升沿和下降沿分别产生pos_edge和neg_edge信号 。

2.1.2 数据传输子模块设计

该子模块的主要功能是完成数据的串/并转换。在本设计中,该子模块负责把内部APB总线并行传输进来的数据转化成串行数据传输给SPI从设备,并且把外部SPI从设备串行传输进来的数据转化成并行数据传入到APB总线上。

传统的串/并转换设计方法需要一个专门的移位传输寄存器,本设计采用了复用寄存器的方法,把移位传输寄存器和发送寄存器结合在一起。当传输停止且总线锁存使能时,数据从APB总线并行传输到spi_shift移位传输寄存器即发送寄存器TxX,然后在传输时钟使能情况下串行输出到MOSI;而在主机接收使能的情况下,由从机MISO串行输入数据至spi_shift移位传输寄存器。传输结构如图4所示,从图4可以看出,数据传输位宽最大可达128 b/s。

图4 spi_shift模块传输结构

2.1.3 RTL代码设计

spi_master模块代码设计划分如下:

(1)寄存器选择使能信号的地址译码电路;

(2)读寄存器部分,将并行数据输出到APB总线上;

(3)控制寄存器ctrl、时钟分频寄存器divider、从机选择寄存器ss初始化部分;

(4)例化时钟分频子模块和数据传输子模块。

为了提高代码的复用性,特别设计了一个宏定义模块,主要定义了传输最大位数SPI_MAX_CHAR,分频寄存器位数SPI_DIVIDER_LEN,从机选择数目SPI_SS_NB等相关数据[8]。

2.2 spi_slave模块设计

这部分设计作为SPI的从设备与主机进行数据交换,与spi_shift模块时钟同步。通信开始后,从机数据最高位开始串行输入到MISO,主机发出的数据从最低位串行输出到MOSI。

3 SPI接口的功能仿真

本设计采用Verilog HDL编写Testbench,使用ModelSim软件进行功能仿真,并用Debussy软件联合调试并观察波形。为了实现主从设备通信的仿真,编写了一个p_master模块并例化到测试代码里面来模拟主机SoC对spi_master的操作,主要包括一个数据写task、一个数据读task、一个数据比较task。分别测试了1 b,8 b,16 b,32 b,64 b,128 b的数据。仿真全部通过,局部仿真波形如图5所示。

图5 局部仿真波形

以第一次传输为例进行分析,传输时调用写任务,分别向寄存器DIVIDER、TX_0、CTRL写入32’h01、32’h5a、32’h308,设定spi_slave.data为32’ha5967e5a。由波形看出,数据在ss[0]有效传输,传输完成后MISO=8’b10100101(即32’ha5),MOSI=8’b01011010(即32’h5a),满足了上升沿发送下降沿接收及高位先开始的数据传输时序。在100 MHz的主时钟频率下,得到串行时钟频率25 MHz,为4分频,符合式(1)的计算。

4 SPI接口的SoC平台验证

验证用SoC平台具有良好的可重用性和通用性,可以方便的挂接带有AHB/APB总线接口的IP核,并通过内部寄存器对其进行配置和验证,避免了对不同IP设计需要不同的Testbench平台,提高了IP验证的效率[9]。本设计用到的SoC验证平台如图6所示[10],验证环境为Linux操作系统,仿真工具为VCS。

图6 SoC验证平台

在SoC验证平台中,SPI接口作为外设连接在APB总线的Slave4端口上,地址空间为0xA400_0000~0XA4FF_FFFF。用C测试程序向Tx0写32’h67,spi_slave.data=32’h0,局部仿真波形如图7所示,MOSI=8’b01100111(即32’h67),MISO=8’b0,结果表明符合要求。

图7 局部仿真波形

5 结 语

本文实现了基于AMBA 2.0总线的、可作为IP核用于SoC设计的SPI 接口的设计,并且经过全面的仿真验证,可以看出本设计满足性能要求。

参考文献

[1] 易志明,林凌,郝丽宏,等.SPI串行接口及其实现[J].自动化与仪器仪表,2002(6):45?48.

[2] 陆小艳.基于AMBA 2.0的SoC总线平台的实现[D].西安:西安电子科技大学,2012.

[3] 陈玉梅.面向SoC的UART及DMA控制器IP软核的设计[D].济南:山东大学,2007.

[4] 赵杰,易波.基于AMBA总线的SPI IP核的实现与验证[J].电子测量技术,2010(1):74?77.

[5] 李跃峰.基于Verilog HDL的SPI可复用IP核的设计与实现[D].成都:西南交通大学,2008.

[6] 沈圣盛.基于APB总线的接口IP核设计与验证[D].西安:西安电子科技大学,2011.

[7] 赵杰.基于AMBA总线的SPI协议IP核的实现与验证[D].合肥:中国科学技术大学,2009.

[8] 王二萍.高速可复用SPI总线的设计与Verilog HDL实现[D].开封:河南大学,2007.

[9] 史明睿.SoC环境下IP核的设计与验证[D].西安:西安电子科技大学,2009.

[10] 贾凡,谢蒂,杨义先.基于AMBA总线USB控制器的SoC设计与验证[J].电子测量技术,2007(12):95?97.

上一篇:饮食文化里的道德反思 下一篇:国库存款高企折射央地关系待优化