《电子技术应用》
您所在的位置:首页 > 可编程逻辑 > 设计应用 > 一种基于FPGA的可配置SPI Master接口设计实现
一种基于FPGA的可配置SPI Master接口设计实现
来源:电子技术应用2010年第10期
李大江,崔建明
山东科技大学 信息科学与工程学院,山东 青岛266510
摘要: 介绍一种基于FPGA的SPI Master Interface设计。依据SPI同步串行接口的通信协议, 设计一个可配置的、高度灵活的SPI Master 模块,以满足正常、异常及强度测试要求。利用Verilog 语言实现SPI接口的设计原理和编程思想。
中图分类号: TP332
文献标识码: A
文章编号: 0258-7998(2010)10-0060-03
The design and implementation of configurable SPI master interface based on FPGA
LI Da Jiang,CUI Jian Ming
1.College of Information Science and Engineering , Shandong University of Science and Technology , Qingdao 266510,China
Abstract: The design of SPI master interface by FPGA is detailed described in this paper.According to communication protocol of SPI synchronous serial interface,a configurable and highly flexible SPI master interface is introduced, to meet the requirements of normal test,exception test, and strength test. This paper presents the design theory and programming idea of implementing SPI interface with Verilog language.
Key words : SPI synchronous serial interface;filed programmable gate array;test

    随着现场可编程门阵列(FPGA)芯片在商业、军事、航空航天等领域的广泛应用,其可靠性和可测试性显得尤为重要。对设计人员来说,FPGA的使用相当灵活。然而,正是这种应用的不确定性和重复可编程性,增加了芯片的测试难度。其核心问题是建立什么样的测试模型才能使故障激活。根据需求,FPGA的测试大体可分为面向制造的测试过程(MTP)和面向应用的测试过程(ATP)两类。MTP主要是从制造商的角度来测试,ATP是在应用级上的测试,也就是把FPGA配置为特定的功能进行测试,具有很强的针对性[1]。本文介绍ATP测试中SPI Master 模型的建立。在测试FPGA设计的集成电路时,对设计电路的性能进行实时测试是必不可少的环节[2]。这就需要设计一种接口电路,将测试数据送入设计电路。
1 SPI总线协议介绍
    SPI(Serion Perpheral Interface)[3]是一种高速的、全双工、同步的通信总线,并且在芯片的管脚上只占用4根线,节约了芯片的管脚,同时为PCB的布局节省空间,提供方便,正是出于这种简单易用的特性,越来越多的芯片集成了这种通信协议。SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(用于单向传输时,也就是半双工方式)。也是所有基于SPI的设备共有,分别是MISO(数据输入),MOSI(数据输出),SCK(时钟),NSS(片选),如图1所示。

    (1)MOSI:主设备数据输出,从设备数据输入。
    (2)MISO:主设备数据输入,从设备数据输出。
    (3)SCK:时钟信号,由主设备产生。
    (4)NSS:从设备使能信号,由主设备控制。
    使能信号低电平有效,当使能信号为低电平时,输出数据(MOSI)在串行时钟(SCK)下降沿变化,输入数据(MISO)在(SCK)上升沿变化。
2 SPI Master原理
    本文介绍的基于FPGA的、可配置的SPI Master接口设计,能满足测试的各种正常、异常以及强度测试要求。此SPI接口模块可设置为单次发送、循环发送(发送间隔可设);发送数据长度可变;串行时钟线(SCK)与输出数据线(MOSI)时序关系可变;串行时钟线(SCK)与使能信号(NSS)时序关系可变。
    一般情况下,为了SPI数据发送的灵活性,SPI发送次数及发送间隔是由软件实现的,当需要循环发送且发送间隔达到微秒甚至纳秒数量级时,软件很难实现。本文将SPI发送次数以及发送间隔集成到SPI Master模块中,使SPI发送间隔可变且最小为一个SCK周期。按照SPI总线协议设计的SPI Master输出数据(MOSI)在串行时钟(SCK)下降沿变化,不能进行异常时序测试,而异常时序在FPGA[4,5]的接口测试中又最为重要,故本文利用触发器特性设计电路,使SPI发送数据时序可变,精度为1个系统时钟周期。
3 SPI Master 模块结构图
    SPI Master模块由Bram接口、配置寄存器、控制器三部分组成,如图2所示。此模块系统时钟为100 MHz。
    BRAM接口:控制配置参数以及SPI数据的读写配置参数及SPI数据在BRAM中存储结构如表1所示。


    控制器:解析配置寄存器,产生发送时序,控制BRAM接口进行数据读写。
    对配置寄存器说明如下。
    (1)循环发送标识寄存器:1 bit,高电平标识循环发送,低电平标识单次发送。
    (2)循环发送次数寄存器:15 bit,若循环发送标识为高电平时,此寄存器值为要发送的数据长度,单位:B;发送模块中包含一发送次数计数器,NSS从高电平变为低电平,发送次数计数器加1。
    (3)循环发送间隔寄存器:16 bit,若循环发送标识为高电平时,此寄存器值为每两次发送间隔,单位:10 ns。(最小间隔为1个SCK周期,若小于1个SCK周期,则从设备不能检测到NSS信号变化),发送模块中包含1个发送间隔计数器,从一次SPI发送结束开始计数,直到与循环发送间隔寄存器中值相等,启动下次发送。
    (4)SCK频率寄存器:16 bit,此寄存器值表示串行时钟SCK周期,单位为10 ns(系统时钟为100 MHz,精度为20 ns);时序模块中包含一分频模块,SCK周期=(SCK频率寄存器)×10 ns。
    (5)MOSI时序寄存器:8 bit,此寄存器值表示MOSI变化与SCK下降沿间隔时间,单位:10 ns(系统时钟为100 MHz,因此最小间隔为10 ns)。
    (6)数据长度寄存器:16 bit,此寄存器值表示要发送数据的长度,单位:B。
    (7)NSS时序寄存器:8 bit,此寄存器值表示NSS变化与SCK下降沿间隔时间,单位:10 ns(系统时钟为100 MHz,因此最小间隔为10 ns)。
4 SPI Master模块功能介绍
    (1)SPI循环发送次数可变,范围:1~32 767;(2)SPI数据发送长度可变,范围:1~65 535,单位:B;(3)SPI循环发送间隔可变,范围:(1个SCK周期)~(65 536×10 ns),实现了连续发送,即一次SPI发送结束后下一SCK时钟立即启动下次SPI发送;(4)MOSI与SCK时序关系可变,NSS与SCK时序关系可变,SPI总线为下降沿发送,上升沿接收,故MOSI、NSS在SCK下降沿后半个周期可调即可。
    SPI功能流程如图3所示,FPGA上电复位后不断检测SPI_start信号,当SPI_start信号有效时(高电平)启动SPI发送,读取BRAM中的配置参数,进行译码,依据译码后数据长度值读取BRAM中数据,按照SPI协议发送数据;完成一次SPI发送后判断是否为循环发送,若为循环发送则启动下一次SPI发送,直到发送次数等于循环发送次数寄存器值,其中发送间隔由循环发送间隔寄存器值决定。

4.1 单次发送(正常时序)
    SPI Master控制器检测到SPI_start信号有效,即控制Bram接口读取配置参数,经译码后若循环发送标识寄存器为低电平,则配合发送长度寄存器读取BRAM中数据,并进行发送。
4.2 单次发送(异常时序)
    MOSI异常时序:正常情况下MOSI在SCK下降沿变化,此设计采用一带抽头的序列寄存器产生异常时序,如图4。

    每增加一个触发器,延时增加一个系统时钟[6],多路开关依据MOSI时序寄存器中值选择相应触发器输出,产生异常时序,举例说明如图5。

    图5中sys_clk为系统时钟频率100 MHz,NSS为使能信号;MOSI为串行输出信号;当SCK频率寄存器为10时,SPI串行时钟SCK周期=(SCK频率寄存器)×10 ns=100 ns,即SCK频率为10 MHz;当MOSI时序寄存器值为4时,MOSI在SCK下降沿后4个sys_clk开始变化。
4.3 循环发送(时序正常)
      每完成一次SPI发送,发送次数计数器加1,当发送次数计数器中的值与循环发送次数寄存器中值相等时,完成循环发送。发送次数由循环发送次数寄存器值决定,循环发送间隔由发送间隔计数器决定。
4.4 循环发送(时序异常)
      类似循环发送(正常时序),异常时序产生类似单次发送(异常时序)。
    实现的目标器件是Xilinx的Virtex2 pro开发板。本文已应用于中国科学院光电研究院测试平台中,实现了SPI接口以及与其功能相关的的测试。
    与同类SPI Master相比,发送间隔可变、精度高,最小间隔仅为1个SCK时钟周期;发送时序可变,精度高,为1个系统时钟周期;基本满足正常、异常以及强度等测试要求。
参考文献
[1] 唐恒标,冯建华,冯建科.基于测试系统的FPGA逻辑资源的测试[J],微电子学,2006(6).
[2] (美)伯杰龙(Bergeron,J.)著,编写测试平台:HDL模型的功能验证(第二版)[M],张春等译.北京:电子工业出版社,2006.
[3] 孙晓云.接口与通信技术原理与应用[M].北京:中国电力出版社,2007.
[4] 李云松.Xilinx FPGA设计基础[M].西安:西安电子科技大学出版社,2008.
[5] 薛小刚,葛毅敏.Xilinx ISE 9.X FPGA/CPLD设计指南[M]. 北京:人民邮电出版社,2007.
[6] 夏宇文.Verilog数字系统设计教程[M].北京:北京航空航天大学出版社,2008.

此内容为AET网站原创,未经授权禁止转载。