当前位置:智城范文网>范文大全 > 征文 > 面向系统级芯片的串行外设接口模块设计

面向系统级芯片的串行外设接口模块设计

时间:2022-03-23 09:21:47 来源:网友投稿

zoޛ)j馔!*H<!##
,2WZ T$<!ky报告进行分析,并有针对性地手动加入测试点提高各项代码覆盖率。仿真结果表明,与传统的SPI设计相比,面向SoC的SPI模块设计支持高级可扩展接口(AXI)总线扩展,具有8个独立的读写通道,各通道间支持可乱序访问,不会出现通道堵塞情况。

关键词:系统级芯片;串行外设接口;高级可扩展接口;验证环境;代码覆盖率

中图分类号: TP302.1

文献标志码:A

Abstract:

The traditional module design for Serial Peripheral Interface (SPI) is inflexible, unfavorable to expand and does not support the outoforder access. In order to solve the problems, a kind of SPI module for SystemonaChip (SoC) was designed. Firstly, the basic architecture of SPI was designed according to the SPI communication protocol. Secondly, the Finite State Machine (FSM) of input and output, the extension ports and the Identification (ID) module supporting the outoforder access were designed according to the architecture of SPI. Thirdly, the correctness of the SPI design was verified by using Verilog Compile Simulator (VCS) simulation tool of Synopsys. Finally, a random verification environment was built for the SPI design, in which parameters could be configured. The code coverage report was analyzed and test points were manually added to improve the code coverage rate. The simulation results show that, compared with the traditional design of SPI, the design of SPI module for SoC supports Advanced eXtensible Interface (AXI) bus extension and has eight independent read and write channels, each of which can be outoforder accessed. The proposed design is incapable of occurring channel congestion.

英文关键词Key words:

SystemonaChip (SoC); Serial Peripheral Interface (SPI); Advanced eXtensible Interface (AXI); verification environment; code coverage

0引言

随着电子技术的发展,系统级芯片(SystemonaChip, SoC)的发展已经成为一种趋势,广泛应用于各个领域,串行接口已成为当前传输接口的发展趋势[1]。用户希望产品可以与多种设备进行数据交换,所以很多芯片都支持传统串行外设接口(Serial Peripheral Interface, SPI)、通用串行总线(Universal Serial Bus, USB)等接口。其中SPI是由Motorola公司首先在其MC68HCXX系列处理器上定义的一种高速的、全双工、同步的通信总线,并且在芯片管脚上只占用4根线,节约了芯片的管脚,同时也为印制电路板(Printed Circuit Board, PCB)的布局节省了空间[2]。目前,很多器件如FLASH、液晶显示屏(Liquid Crystal Display, LCD)、安全数码卡(Secure Digital Memory Card, SD)等都采用了SPI接口。SPI以其独特的优越性得到越来越广泛的应用。

在电子科学技术还不发达时,大部分处理器都不集成SPI总线接口芯片,当想要与集成了SPI总线接口的器件进行信息互通时,电路工程师只能借助软件来实现。近几年随着计算机的发展,先进的计算机控制器内部都会集成SPI总线接口电路,方便多个器件间实现信息交换。这样不仅很大程度上开拓了SPI总线的运用范围,而且使越来越多的科技领域可以借助其优势得以发展[2]。由于SPI接口应用广泛,并且不同的应用场景具体要求也不同,因此现在已经出现了很多SPI总线接口设计,其功能也有差异。文献[3]考虑到,由于传统SPI接口使用厂家提供的知识产权核(Intellectual Property core, IP)实现,因此缺乏灵活性,不利于功能扩展的情形,设计了一种基于Wishbone总线的高速可复用SPI总线接口IP核。文献[4]设计了一个可以支持4种不同传输时序,并且可以选择先最高位传输或者最低位传输的SPI模块,增加了一条片选以实现主模块可以和两个从模块在不需要硬件复位的前提下交替工作。文献[5]采用参数化的方法设计了一种能适用于多种设备的SPI模块,此外,还支持主机或从机模式,可以设置传输速率,适用于不同时序的SPI接口的设计。

对于SoC内部来说,需要使用高级可扩展接口(Advanced eXtensible Interface, AXI)这类面向高性能、高频率的系统设计;对于SoC外部而言,为实现与多种设备进行数据交换,SPI设计非常重要。然而传统的SPI设计与AXI协议之间无法实现通信。传统的SPI设计只是针对单一功能、单一slave而设计,并且一旦通道堵塞,将无法工作。因此,传统的SPI设计虽然能满足基本的SPI通信要求,但是设计不灵活,不利于功能的扩展。一方面,为支持扩展,本文设计的SPI模块面向通用SoC;另一方面,为支持乱序访问,本文设计的SPI模块具有8个独立读写通道,各通道间可乱序访问,有效解决了堵塞问题。完成后的设计在搭建的随机验证环境下得到充分验证。验证结果表明,该SPI设计在各种情况下都能正确完成数据传输。

1SPI总线原理

1.1SPI协议

SPI 总线是一种3线总线,因其硬件功能很强,所以与SPI有关的软件就相当简单,使中央处理器(Central Processing Unit, CPU)有更多的时间处理其他事务。正是因为这种简单易用的特性,如今越来越多的芯片集成了这种通信协议,比如AT91RM9200[6]。

SPI是一种高速、高效率的串行接口技术。通常由一个主模块和一个或多个从模块组成,主模块选择一个从模块进行同步通信,从而完成数据的交换。SPI是一个环形结构,通信时需要至少4根线(事实上在单向传输时3根线也可以)。1) SCK:串行同步时钟线,由SPI主模块产生,数据在时钟脉冲下按位传输,高位在前(目前应用中的数据速率可达几Mbit/s)。2) MOSI:串行数据输出线,当SPI模块为主模块时,它输出数据;当SPI模块为从模块时,它接收数据。3) MISO:串行数据输入线,当SPI模块为主模块时,它接收数据;当SPI模块为从模块时,它输出数据。4) SS:从机片选线,低电平有效,由主模块控制。

1.2SPI协议时序

SPI协议为了和外部设备进行数据交换,根据外设的工作要求,规定了4种传输时序,这4种传输时序共同点是每位数据的发送或接收需要1个SCK周期,每次可传输若干个8位数据。4种时序由时钟极性CPOL和时钟相位CPHA的不同配置来区分。CPOL=0表示串行同步时钟的空闲状态为低电平,CPOL=1表示串行同步时钟的空闲状态为高电平;CPHA=0表示在SCK的第1个时钟采样数据(数据必须稳定半个周期),CPHA=1表示在SCK的第2个时钟采样数据[7]。具体4种传输模式,如表1所示。

在CPOL=0,CPHA=0时,在SCK的上升沿采样数据,下降沿发送数据;在CPOL=0,CPHA=1时,在SCK的上升沿发送数据,下降沿采样数据;在CPOL=1,CPHA=0时,在SCK的上升沿发送数据,下降沿采样数据;在CPOL=1,CPHA=1时,在SCK的上升沿采样数据,下降沿发送数据。以模式2为例,SPI传输时序关系如图1所示。

2SPI模块设计

本文设计的SPI模块支持4种时序工作模式,主要作为SoC的配置或控制模块,其功能为:通过SPI接口,接收外部的配置或控制命令,配置或控制内部的各个从设备,比如:双倍速率同步动态随机存储器(Double Data Rate, DDR)、外设部件互连标准(Peripheral Component Interconnect Express, PCIE)、音频编码器及解码器(Audio Coder and Decoder, Audio CODEC)等。其在芯片中位置如图2所示。

2.1SPI架构

图3是本文SPI设计架构,SPI 是AXI总线上的slave 模块,因此除了SPI协议自身需要的接口外,还增加与AXI总线连接接口。

图片

AXI是一种总线协议,该协议是ARM公司提出的高级微控制器总线架构(Advanced Microcontroller Bus Architecture, AMBA)3.0协议中最重要的部分,为SoC设计提供了较好的可移植和可复用性,同时具有低功耗、高性能和结构可移植的系统设计以及较好的可测性设计[8]。

主机发送的命令或数据放在AXI总线上,经过控制分别写给控制寄存器、扩展寄存器、数据寄存器、状态寄存器。控制寄存器控制数据的传输。扩展寄存器控制时钟产生SPI的tclk信号,用来给SPI设计提供时钟。控制状态机控制8位数据的串行发送,写缓存模块是一个写FIFO,用来暂存从CPU中发送的数据;读缓存模块是一个读FIFO,用来暂存从SPI设计接收的数据。移位寄存器用来将缓存中的8位数据一位一位移入和送出,tdi数据线接在移位模块上,同时移位模块送出的数据传送给tdo信号线。

设计支持各种SPI请求,具有8个独立读写通道,各通道间可乱序访问。实现方式是:发送的请求命令将地址或数据缓存在标识(IDentification, ID)控制模块,通过输入状态机状态判断需要缓存在读(写)地址区还是读(写)数据区,应答命令发出后通过识别读写地址ID号来确定应答是哪个地址请求命令,同时清空请求命令对应地址或数据队列。

2.2SPI功能设计

本文的SPI设计有4种命令类型,分别为:读请求、读请求应答、写请求、写请求应答。根据不同的命令类型,SPI内部状态机作出相应反应,SPI输入输出状态机如图4、图5。

输入状态机:空闲状态表示SPI不工作。命令类型表示当前操作是哪种命令。请求地址表示读(写)请求在哪个地址进行。在写请求时需要输入数据,其余命令不需要输入数据。

输出状态机:空闲状态表示SPI不工作。SPI当前状态为8位,8’h0表示SPI状态正常,其余值表示内部状态错误。命令类型表示当前操作是哪种命令。应答地址是原样将输入地址低24位返回。应答数据在写请求应答时返回输入的数据;在读请求应答时返回读到的数据;在其余两种命令时不返回。输出信息包含对当前命令的响应状态,读(写)请求时,为8’h2表示AXI总线,为8’h0表示出现错误;读请求应答时,为8’h0表示读成功,为8’h1表示等待数据返回,其余表示出错;写请求应答时,为8’h0表示写成功,为8’h1表示写请求丢在总线上,为8’h2表示写数据丢在总线上。

3SPI随机验证环境设计

SPI传输有一个显著优点,那就是普通的串行通信一次连续传送至少8位数据,而SPI允许数据一位一位地传送,甚至允许暂停,因为SCK时钟线由主控设备控制,当没有时钟跳变时,从设备不采集或传送数据。也就是说,主设备通过对SCK时钟线的控制可以完成对通信的控制。SPI还是一个数据交换协议,因为SPI的数据输入和输出线独立,所以允许同时完成数据的输入和输出。

SPI协议中没有严格要求SCK时钟占空比必须为50%,也没有说明是否在片选信号无效时SCK必须为0。本文提出的验证环境将上述两个值随机变动,可任意配置。验证地址个数可配置,验证方式可配置(读或写)。本文验证环境按照发送task方式驱动SPI设备。在定义每种task时,打印必要信息,如果没有按照SPI设计功能输出,显示出错信息。在验证SPI设计时,输入的地址及数据利用System Verilog[9-11]语言编写生成受约束的随机激励。在SPI工作过程中,将读写地址及数据输出到文件,最后自动对比读操作读出的数据是否与写入的相同。

3.1验证环境与SPI 设计连接关系

验证环境(spi_master)与SPI设计连接关系如图6所示。环境接口中,miso为主设备输入SPI从设备输出,spi_reset为SPI主从设备复位信号,mosi为主设备输出SPI从设备输入,ss为片选信号,低电平有效。

3.2验证环境几种主要task

本章开始提到,本文提出的验证环境通过发送task方式驱动SPI设备。表2是定义的几种主要task。

以上task可根据设计验证要求配置调用,参数可以定点设置也可随机生成。例如,要测试连续写请求后写请求应答,通过多次调用write_data64任务后再多次调用write_ans即可。

4代码覆盖率分析

SPI设计的验证是否达到预期要求,仅仅根据各个测试案例是否全部通过来判断是不充分的,因此,本文对代码覆盖率进行了统计分析。代码覆盖率是通过在VCS编译和运行期间使用-cm line+cond+tgl+branch覆盖选项进行的[12]。其中:行覆盖(Line Coverage)是度量被测代码中每个可执行语句是否都被执行;条件覆盖(Condition Coverage)是度量判定中的每个子表达式结果true和false是否都被测试;分支覆盖(Branch Coverage)是度量程序中每个判定的分支是否都被测试;翻转覆盖(Toggle Coverage)是度量代码中信号0到1和1到0的翻情况是否都被测试。

在验证初期,代码覆盖率并不高,见表3。主要原因有三类:1)验证不充分;2)代码错误;3)设计需要。针对原因,修改设计、增加验证:连续发送请求和应答命令(不超过8个),这样请求的8项队列都能用到;判断应答地址时,增加触发信号锁存。经过多次调试修改设计和验证环境后,最终得到令人满意覆盖率结果,见表4。

5仿真结果及分析

SPI模块设计在一个完整的写读操作后的波形如图7所示,首先在32’h26a00ce0的地址上写了64’h82c04cc5a1b70397的数据,之后对同样的地址进行读操作,从波形可以看出读写数据一致,说明设计读写功能正确。SPI模块设计支持各种SPI请求的结果如图8所示,首先对SPI设计连续发送8个写请求命令,之后连续发出8个写请求应答命令,从波形结果可以看出,每次发送写请求应答命令后,之前发送的写请求占用队列清空(读操作类似),说明设计具有8个独立读写通道,各通道间可乱序访问。

6结语

本文设计的SPI模块,由于其支持转化成SoC上常见的AXI协议,因此可以广泛应用在SoC中。各通道间支持乱序访问的8个独立读写通道提高了SPI处理事务的能力,极大地避免了请求堵塞。利用可配置的随机验证环境,通过大量不同的测试组合,对该设计作了充分验证,并利用验证环境中自动对比功能判断读操作读出的数据是否与写入的相同,保证了设计的正确性及有效性。

参考文献:

[1]

WANG Y, JIN W, CAI Y, et al. Implementation of SPI bus interface based on FPGA [J]. Modern Electronics Technique, 2010, 33(14): 102-104. (王珏文,金伟信,蔡一兵,等.基于FPGA的SPI总线接口的实现[J].现代电子技术,2010,33(14):102-104.)

[2]

WANG E. Design and implement of high speed reusable SPI bus with Verilog HDL [D]. Kaifeng: Henan University, 2007: 4-5. (王二萍.高速可复用SPI总线的设计与Verilog HDL实现[D].开封:河南大学,2007:4-5.)

[3]

ZHOU B, LI D, LU G. Design of highspeed and reusable SPI IP core based on wishbone interface [C]// ICECE 2011: Proceedings of the 2011 International Conference on Electrical and Control Engineering. Piscataway: IEEE, 2011: 1040-1042.

[4]

ZHANG J, WU C, ZHANG W, et al. The design and realization of a comprehensive SPI interface controller [C] // MACE 2011: Proceedings of the 2011 2nd International Conference on Mechanic Automation and Control Engineering. Piscataway: IEEE, 2011: 4529-4532.

[5]

LIU T, WANG Y. IP Design of universal multiple devices SPI interface [C]// ASID 2011: Proceedings of the 2011 IEEE International Conference on AntiCounterfeiting, Security and Identification. Piscataway: IEEE, 2011: 169-172.

[6]

OUDJIDA A K, BERRANDJIA M L, LIACHA A, et al. Design and test of generalpurpose SPI master/slave IPs on OPB bus [C]// SSD 2010: Proceedings of the 2010 7th International MultiConference on Systems, Signals and Devices. Piscataway: IEEE, 2010: 1-6.

[7]

HU G, LI B, CHEN C, et al. Application of FPGAbased SPI bus interface in software receiver [J]. Modern Electronics Technique, 2011, 34(8): 20-22. (胡刚,李冰,陈冲,等.基于FPGA的SPI总线在软件接收机上的应用[J].现代电子技术,2011,34(8):20-22.)

[8]

AMBA. AMBA AXI protocol specification v1.0 2003 [DB/OL]. (2003-06-16)[20150405]. http://infocenter.arm.com/help/index.html.

[9]

SPEAR C. System Verilog for verification [M]. Berlin: Springer, 2008: 161-216.

[10]

LUO J. Basic design of Verilog HDL and digital ASIC [M]. Wuhan: Huazhong University of Science & Technology Press, 2008: 66-100. (罗杰.Verilog HDL与数字ASIC设计基础[M].武汉:华中科技大学出版社,2008:66-100.)

[11]

WANG C, WU J, FAN L, et al. Design of Altera FPGA/CPLD [M]. Beijing: Posts & Telecom Press, 2005: 3-18 (王诚,吴继华,范丽珍,等.Altera FPGA/CPLD设计[M].北京:人民邮电出版社,2005:3-18.)

[12]

LUO D, ZHAO J. Integrated circuit verification based on coverage [J]. Modern Electronics Technique, 2009, 32(14): 115-119. (罗登富,赵建明.基于覆盖率的集成电路验证[J].现代电子技术,2009,32(14): 115-119.)(文献无英文、知网/万方/维普等数据库中也没有查到英文,本文献由作者翻译。)

推荐访问: 外设 模块 芯片 接口 面向

版权所有:智城范文网 2010-2025 未经授权禁止复制或建立镜像[智城范文网]所有资源完全免费共享

Powered by 智城范文网 © All Rights Reserved.。粤ICP备20058421号