导言
SPI(串行外围接口)总线,是一个同步串行接口的数据总线,它具有全双工、信号线少、协议简略、传输速度快等长处。因为串行总线的信号线比并行总线更少、更简略,越来越多的体系抛弃运用并行总线而选用串行总线。在许多串行总线中,SPI 总线与I2C 总线、CAN 总线、USB 等其他常用总线比较有很大优势,如SPI 总线的数据传输速度可达若干Mbps, 比I2C 总线快许多。SPI 总线最典型的运用便是主机与外围设备(如EEPROM、Flash RAM、A/D 转化器、LED 显示器、实时时钟等)之间的通讯。
FPGA(现场可编程门阵列)是在PAL、GAL、PLD 等可编程器材的基础上进一步开展的产品,具有规划周期短、可重复编程、灵活性强等特色。用FPGA 规划的SPI 总线具有可扩展性强、便于修正等长处。只要对规划做简略的改动,即可对SPI 总线的数据位数、作业形式等进行扩展,充分发挥了FPGA 的优势。
1 SPI 总线的结构和作业原理
SPI 总线区别主机(Master)和从机(Slave)两部分,它的结构框图如图1 所示。
图1 SPI 总线结构框图
主机和从机之间经过4 根信号线衔接,别离是SCK、MOSI、MISO、CS,它们的界说如下。
SCK:同步时钟信号,用来同步主机和从机的数据传输,由主机操控输出,从机在SCK 的边缘接纳和发送数据;MOSI:主机输出、从机输入信号,主机在上升沿(或下降沿)经过该信号线发送数据给从机,从机鄙人降沿(或上升沿)经过该信号线接纳该数据;MISO:主机输入、从机输出信号,从机在上升沿(或下降沿)经过该信号线发送数据给主机,主机鄙人降沿(或上升沿)经过该信号线接纳该数据;CS:从机片选信号,由主机操控输出。
其作业原理是: 当没有数据需求在主机和从机之间传输时,主机操控SCK 输出闲暇电平,CS 输出无效电平,SPI 总线处于闲暇状况;当有数据需求传输时,主机操控CS 输出有用电平,SCK输出时钟信号,SPI 总线处于作业状况;在某个时钟边缘,主机和从机一起发送数据,将数据别离传输到MOSI 和MISO 上;鄙人一个时钟边缘,主机和从机一起接纳数据,别离将MISO 和MOSI上的数据接纳并存储;当数据悉数传输完毕时,主机操控SCK 输出闲暇电平,CS 输出无效电平,SPI 总线从头回到闲暇状况。至此,一个完好的SPI 总线数据传输进程完结。
SPI 总线有两个操控位:CPOL 和CPHA.将SCK 的闲暇电平用IDLE 表明,非闲暇电平用ACTIVE 表明。CPOL 用来挑选IDLE 的电平值。当CPOL=0 时,IDLE=0;当CPOL=1 时,IDLE=1.
CPHA 用来挑选接纳数据的时间。当CPHA=0 时, 接纳时间是IDLE-ACTIVE 边缘;当CPHA=1 时,接纳时间是ACTIVE-IDLE边缘。依据CPOL 和CPHA 的取值状况,SPI 总线共有4 种不同的作业形式。图2 给出了SPI 总线在不同作业形式下的作业时序。
图2 SPI 总线的作业时序
当CPHA=0 时,MOSI 和MISO 的时序有所不同,首要是第一个数据位MSB 的发送时间不同。MOSI 的MSB 在SCK 的第一个IDLE-ACTIVE 边缘的前半个周期由主机发送到MOSI 上;而MISO 的MSB 则在CS 信号的下降沿由从机发送到MISO 上。当CPHA=1 时,MOSI 和MISO 的时序完全相同。
2 SPI 主机模块的规划
本文规划的SPI 主机模块首要完结以下作业:
(1) 将主机收到的8 位并行数据转化为串行数据,并发送给从机;(2) 接纳来自从机的串行数据,将其转化为并行数据,经过并行端口输出;(3) 输出从机所需求的输入信号、时钟信号SCK 和片选信号CS。
在数据串并转化的进程中, 有必要用到寄存器来寄存暂时数据。一般状况下,发送数据需求1 个发送寄存器,接纳数据需求1个接纳寄存器,则至少需求2 个寄存器。在SPI 总线中,每发送1个数据位则发送寄存器多出1 个闲暇位, 正好能够在半个周期后用来接纳1 个数据位。为了削减资源耗费,能够用1 个移位寄存器来替代2 个独立的接纳寄存器和发送寄存器。图3 所示为SPI 总线的硬件结构框图,其间Master 和Slave 各运用1 个移位寄存器接纳和发送数据。
图3 SPI 总线的硬件结构
为了完结对模块的操控,除了clk、cs、sck、miso、mosi 这些信号之外,还需求一些其他信号。其间,rst 是复位信号,用于SPI 模块的初始化。en 是模块的使能信号,当en=1 时模块开端作业。
data_i 是待发送数据的8 位并行输入端。data_o 是用于接纳和发送数据的移位寄存器, 也是数据传输完结时已接纳数据的8位并行输出端,图4 是所规划的SPI 主机模块的框图。
图4 SPI 模块框图
下面是用Verilog HDL 规划的SPI 主机模块(CPOL =0,CPHA=1)的首要程序,程序中省去了变量的声明,并在注释中对这些变量作了阐明。
3 规划的仿真、归纳与完结
经过编写测验渠道,并运用Mentor Graphics 公司的仿真东西ModelSim SE PLUS 6.1f 对该SPI 模块进行仿真,得到的仿真波形如图5 所示。
图5 SPI 模块的仿真波形
从图中能够看出,sck 的闲暇电平IDLE=0,接纳数据时间是下降沿即ACTIVE-IDLE 边缘, 故该SPI 模块的作业形式是CPOL=0,CPHA=1,与规划共同。当en=0 时,cs=1,SPI 总线处于闲暇状况。当en=1 时,鄙人降沿cs=0,sck 输出时钟信号,总线数据传输开端。一起,data_o=data_i, 移位寄存器存入待发送数据11010111.在第1 个周期上升沿,主机经过mosi 发送data_o 最高位1 至从机。在第1 个周期下降沿,data_o 左移一位,多出一个闲暇位data_o[0],主机经过miso 接纳从机发送的数据最高位1,并将其存入data_o[0],data_o=10101111.依此类推,后边7 个周期的数据传输进程与第1 个周期相似。8 位数据悉数传输完结之后,cs=1,一个完好的SPI 总线传输进程完毕。能够发现,data_o中的数据被一个一个从主机发送到从机,一起data_o 也被用来存储从机发送的数据。8 个周期完结之后,data_o 中存储的数据正是从机发送的数据10101101.归纳以上剖析,该SPI 模块的功用是正确的。
经过试验,在Xilinx ISE 9.1i 中完结了对该模块的归纳与完结,并下载到Digilent 公司的FPGA 开发板Spartan-3E Starter 上进行验证,试验成果正确。归纳东西运用ISE 自带的XST,下载东西运用ISE 自带的iMPACT.
4 结语
本文用Verilog 硬件描绘言语规划了一个契合SPI 总线标准的SPI 主机模块,运用仿真东西ModelSim 对其进行仿真并给出了仿真波形。在Xilinx ISE 中对该模块进行归纳与完结,并在FPGA 上完结了下载与验证。该SPI 主机模块的功用正确,作业安稳,可扩展性强。因为SPI 总线运用规模很广,使用FPGA 可重复装备的长处,该模块能够很方便地运用于各种场合。本文作者立异点:依据SPI 总线标准,用Verilog HDL 规划并完结了一个带有移位寄存器的SPI 总线模块,具有简练高效、便于修正、可扩展性强等特色。