随着集成电路设计的快速发展,系统芯片(System-on-a-Chip,SoC)的集成度越来越高,从而对信号之间交流的要求也变高[1-2]。由于串行外设接口(Serial Peripheral Interface,SPI)总线协议具有全双工模式、占用I/O端口少、协议灵活等优点,在实时时钟、AD转换器、数字信号处理器和数字信号解码器之间得到了广泛应用[3-4]。
目前,SPI IP核已经成为SoC的标准配置,相关人员也做了很多研究。例如,周雪荣等人面向AD9222设计的一款SPI模块[5],可以配置为主机模式且符合AD9222芯片的接口时序;汪永琳等人设计的SPI接口[6],实现了SPI主从机之间数据的双向传输且满足三线半全工工作方式;李大江等人基于FPGA的SPI总线设计[7],分别设计了主机和从机。上述SPI设计可以适用于不同的应用场合,但是在SoC中进行通信时,不具有主从模式下动态可重构的能力。因此,本文根据SPI总线协议,设计了一种主从模式动态可重构,支持四线全双工,允许七种时钟传输速率的SPI IP核,并对其逻辑资源消耗和功耗问题进行了优化。
SPI总线协议是由Motorola公司首先提出的,主要应用于单片机系统中短程通信的同步串行通信接口规范[8]。SPI总线协议规定,它以主机或从机方式工作,主从机之间的数据传输存在4种数据传输模式并由cpol(时钟极性)和cpha(时钟相位)来控制,如表1所示。当cpol=0时,sclk的空闲电平为0;当cpol=1时,sclk的空闲电平为1。当cpha=0时,在空闲状态到有效状态边沿采集数据;当cpha=1时,在有效状态到空闲状态边沿采集数据[9]。
在SoC中SPI IP核的传统连接方式如图1所示。通信过程中,SPI通过片上总线将CPU核传输的并行数据转换为串行数据,与从机进行数据交换;并把从机传输的串行数据转换成并行数据,通过片上总线发送给CPU核[10]。对SPI从机来说,它会在被主机选中的情况下与主机进行数据的传输[11]。
根据SPI功能的不同,将所设计的SPI IP核划分为如图2所示的3个模块:寄存器配置块(Register Configuration Block,RCB)、数据传输块(Data Transfer Block,DTB)和错误中断块(Fault Interrupt Block,FIB)。RCB由CPU核对其进行配置,如主从模式、时钟极性和时钟相位等;DTB根据配置的信息来进行主从机间的数据传输;FIB在出现模式错误(例如当SPI配置为主机时,从机选择端口被拉低)、读写冲突等问题时会向CPU核发出中断请求。
nwr和nrd分别是写使能和读使能端口;addr是地址端口;idata和odata分别是数据输入和输出端口。当地址有效时,数据输入和输出端口根据读写使能的配置来进行数据的输入和输出操作。spen、mstr、cpol和cpha 4个端口依次是SPI使能端、主从机配置端、时钟极性和时钟相位端,使得对SPI IP核进行配置更加直接和方便。
misoo、misotri和misoi 3个端口与一个三态缓冲器连接,以提供一个外部双向端口miso,外部双向端口mosi和sclk原理相同。这些双向端口在有限状态机模块的控制下被配置为不同的传输方向,以此来解决主机模式和从机模式下数据传输端口传输方向相反的问题。miso在从机模式下发送数据,在主机模式下接收数据;mosi在主机模式下发送数据,在从机模式下接收数据;sclk在主机模式下发送时钟,在从机模式下接收时钟。同时,SPI IP核通过复用一个移位寄存器就可以完成主机和从机模式下的数据传输,实现了主从模式可配置的能力并节省了芯片面积。ssn是从机选择端口,配置为从机时才使用,低电平有效。
int是中断控制端口,当数据传输完成或SPI被配置为主机而ssn(从机选择)端口为低电平等情况时,FIB模块就会产生中断请求。
SPI可重构电路状态机的设计,如图3所示。当复位信号有效或者SPI使能端口spen被配置为低电平无效状态时,可重构电路状态机就会处于空闲状态。此时,可向主机模式或从机模式进行转移。
转移为主机模式时,首先需要把mstr端口配置为1。然后,有两种情况可以转移到主机模式:(1)配置从机选择端口无效位ssdis为高电平有效状态;(2)配置ssn端口为高电平无效状态。
转移为从机模式时,首先需要把mstr配置为0。然后,有3种情况可以转移到从机模式:(1)当配置cpha为高电平时,并配置ssdis位为有效状态,此种情况适用于只有一个从机下的数据传输;(2)当配置cpha为高电平时,检测到ssn端口为低电平;(3)当配置cpha为低电平时,检测到ssn端口的下降沿。
当状态机从空闲状态已经过渡到主机或者从机模式时,就会判断数据的传输是否完成,当传输未完成时,就会保持在当前状态;当传输已完成时,就会转移到空闲状态。此外,当前模式出现错误时,也会转移到空闲状态。SPI可重构电路状态机如图3所示。
由状态转移图可知,此SPI IP核可实现空闲状态、主机模式和从机模式之间的状态转换,具有在线动态可重构的特性。
主机模式下的串行时钟由7位计数器、数据选择器和D触发器组成的时钟分频模块产生,如图4所示。
输出时钟sclko取决于CPU核对控制寄存器的配置,当对控制器寄存器相应的三位配置都为1时,sclko的值为cpol的值,不产生时钟,其他情况均对时钟有分频作用。因此,此时钟分频模块可对系统时钟产生7种分频,如表2所示。
为了方便验证此SPI IP核的正确性,设计了模拟CPU核功能的发送接收模块、验证IP核(Verification IP,VIP)模块和数据比较模块等。发送接收模块产生指令和数据对SPI IP核和VIP模块进行配置。配置完成后,SPI IP核和VIP模块进行主从机之间数据的传输;传输完成后,发送接收模块分别读取SPI IP核和VIP模块传输的数据。最后,比较模块从CPU核读取所传输的数据并验证数据的正确性。仿真原理如图5所示。
最后,使用NC-Verilog对其进行仿真验证,主从模式下的仿真时序如图6所示。首先,通过发送接收模块对SPI IP核的控制寄存器依次写入h’10和h’50(配置SPI为主机模式,SPI接口有效)。同时,配置VIP模块为从机。然后,设置主机要发送的数据为h’aa,从机要发送的数据为h’55,在sclko(对clk时钟2分频)时钟频率下,主机的mosio(主机输出,从机输入)端口串行发送数据h’aa,misoi(主机输入,从机输出)端口串行接收数据h’55,传输完成后读取状态寄存器的值为h’80(传输完成),读取数据寄存器的值为h’55(传输成功)。然后,对控制寄存器写入h’40(配置SPI为从机,SPI接口有效)。同时,配置VIP模块为主机,ssn(从机选择端口)变为低电平有效状态。在sclki(对clk时钟4分频)时钟频率下,从机的miso(从机输出,主机输入)端口串行发送数据h’55,mosii(从机输入,主机输出)端口串行接收数据h’aa,传输完成后读取状态寄存器的值为h’80(传输完成),读取数据寄存器的值为h’aa(传输成功)。
主机模式下不同时钟速率下的数据传输如图7所示。图中给出了对clk时钟2分频时,主机发送数据为h’aa,接收数据为h’55;对clk时钟4分频时,主机发送数据为h’55,接收数据为h’aa;对clk时钟8分频时,主机发送数据为h’aa,接收数据为h’55等情况下的数据传输情况。在不同分频模式下,数据传输能正常传输且结果正确。
仿真结果表明:此SPI IP核符合SPI总线协议并且满足设计规范的要求。综合结果显示:在0.13 μm工艺下消耗1 062个逻辑门,在系统工作频率80 MHz下的功耗约为0.395 7 mW。
本文根据SPI总线协议设计了一种高性能主从模式动态可重构的SPI IP核,并对该IP核的模块划分、接口定义和可重构电路状态机等进行了详细描述。结果显示,此设计符合SPI总线协议,实现了7种时钟分频,支持4种数据传输模式;在保证功能和性能情况下,逻辑资源消耗更少、功耗更低。
全部0条评论
快来发表一下你的评论吧 !