您的位置 首页 FPGA

用于SOC的SPI接口规划与验证

摘要:给出了一个可用于SoC设计的SPI接口IP核的RTL设计与功能仿真。采用AMBA 2.0总线标准来实现SPI接口在外部设备和内部系统之间进行通信,在数据传输部分,摒弃传统的需要一个专门的移位传

摘要:给出了一个可用于SoC规划的SPI接口IP核的RTL规划与功用仿真。选用AMBA 2.0总线规范来完结SPI接口在外部设备和内部体系之间进行通讯,在数据传输部分,摒弃传统的需求一个专门的移位传输寄存器完结串/并转化的规划办法,选用复用寄存器的办法,把移位传输寄存器和发送寄存器结合在一起,进步了传输速度,也节省了硬件资源。选用SoC验证渠道进行SoC环境下对IP的验证,在100 MHz时钟频率下的仿真和验证结果表明,SPI接口完结了数据传输,且满意时序规划要求。

0 导言

SPI(Serial Peripheral Interface)是一种同步串行总线接口,许多器材如E2PROM、FLASH、实时时钟、A/D转化器等都用到了SPI接口,它也是SoC中的一个常用外围功用模块。AMBA总线是由ARM公司开发的一种高功能、开放性SoC体系总线,它首要包含AHB,ASB和APB三种总线类型。AHB总线首要用于衔接高功能、高速度的体系模块,如CPU,DSP,SRAM等;APB总线首要用于衔接低速外围模块,如UART,I2C等,接口简略,功率高,功耗低;ASB总线通过衔接体系高速部件来完结高速通讯,一般较少用到。

本文规划一个可作为IP核用于SoC规划的SPI接口,选用AMBA2.0总线规范来完结SPI接口在外部设备和内部体系之间进行通讯,SPI接口作为低速外围模块挂载在APB总线上。

1 SPI接口的界说

1.1 接口信号

SPI的接口信号为同步串行时钟SCLK、主机输入/从机输出MISO、主机输出/从机输入MOSI、从机挑选

用于SOC的SPI接口规划与验证

(低电平有用),因为只用到四根线作业,与其他接口比较具有结构简略、速度快的长处。SPI有主/从两种作业形式,SPI总线的串行时钟SCLK用来同步数据传输,在主形式下由主机发生,从机挑选信号

用于SOC的SPI接口规划与验证

用来决议外部设备是否被选作SPI的从设备。主从设备衔接办法如图1所示。

1.2 内部寄存器

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

用于SOC的SPI接口规划与验证

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所示。

2 SPI接口的RTL规划

本规划是针对SoC体系的,方针是完结适用于SoC规划而且契合SPI通讯协议的IP核,完结SoC通过此SPI接口和外设通讯。所以,本规区分红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所示。

用于SOC的SPI接口规划与验证

2.1.1 时钟发生子模块规划

该子模块首要作用是发生SPI主/从设备通讯所需的同步串行时钟sclk。在主形式下,sclk由体系供给的时钟信号pclk分频发生,发生的串行时钟的时钟频率由式(1)核算得来:

用于SOC的SPI接口规划与验证

传输开端前,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。

用于SOC的SPI接口规划与验证

2.1.3 RTL代码规划

spi_master模块代码规划区分如下:

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

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

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

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

为了进步代码的复用性,特别规划了一个宏界说模块,首要界说了传输最大位数SPI_MAX_CHAR,分频寄存器位数SPI_DIVIDER_LEN,从机挑选数目SPI_SS_NB等相关数据。

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所示。

用于SOC的SPI接口规划与验证

以第一次传输为例进行剖析,传输时调用写使命,别离向寄存器DIVIDER、TX_0、CTRL写入32’h01、32’h5a、32’h308,设定spi_sla ve.data为32’ha5967e5a。由波形看出,数据在ss[0]有用传输,传输完结后MIS0=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验证的功率。本规划用到的SoC验证渠道如图6所示,验证环境为Linux操作体系,仿真东西为VCS。

用于SOC的SPI接口规划与验证

在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,结果表明契合要求。

用于SOC的SPI接口规划与验证

5 结语

本文完结了根据AMBA 2.0总线的、可作为IP核用于SoC规划的SPI接口的规划,而且通过全面的仿真验证,能够看出本规划满意功能要求。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/fpga/295911.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部