FPGA与C8051F高速数据传输的设计与实现

时间:2022-08-16 08:20:51

FPGA与C8051F高速数据传输的设计与实现

摘 要:针对低速总线接口难以满足大数据背景下的高速信号传输这一需求。文章提出了一种FPGA与C8051F单片机的低成本、高速率接口解决方案。在系统分析SPI接口工作时序的基础上,设计其内部逻辑电路。本方案以Quartus II为开发平台,运用Verilog HDL硬件描述语言,从行为级建立SPI接口数据传输模型,并在Modelsim环境下对该模型进行功能与时序仿真。最后将配置完成的FPGA与C8051F进行板级调试。测试结果表明:本方案所设计的SPI接口具有速率快、协议简洁、扩展性强、系统开发成本低的特点。

关键词:SPI接口;FPGA;C8051F;行为级

引言

随着现代信息技术的发展,对处理速度的要求变的越来越高。为了满足这个需求,设计者常常采用多处理器结构,组成分布式控制系统[1]。以缓解部分电路的信息处理压力,从而保持系统处于高速运行的状态。而如何确保处理器之间高效的数据传输便成了一个至关重要的问题。SPI接口是一种全双工的同步串行外设接口[2]。相比较传统的I2C总线及CAN总线,具有更高的传输速度。正是这种简单高效的特性,如今被广泛的应用于通信领域。

SPI接口的实现可以通过软件进行扩展。其操作比较简单,但由于传输速度受到指令周期的影响而受到极大的制约。在日益复杂的系统环境下,这种方案显然无法满足设计要求。随着FPGA的片内资源跨过百万门级,在如此丰富的器件资源下,FPGA成为解决高速数据传输的重要角色。此外FPGA具有很强的灵活性,可以根据需求对其内部电路进行维护、修改以及对其内部逻辑功能的重新配置[3]。在这种架构下,应用FPGA来构建SPI接口最为切实可行。

1 SPI原理概述

1.1 SPI接口简介

Serial Peripheral Interface是由Motorola首先在其MC68HCXX系列处理器上定义的通信协议。通常包含4根信号线:

(1)时钟信号线(SCK:Serial Clock)。

(2)主输出从输入数据线(MOSI/SDO:Master Out Slave In/Serial Data Output)。

(3)主输入从输出数据线(MISO/SDI:Master In Slave Out /Serial Data Input)。

(4)片选信号线(CS/SS:Chip Select/Slave Select)。

一个SPI总线可以连接多个主设备和多个从设备,但是在同一时刻只允许有一个主设备操作总线。通信时在主设备和从设备之间会产生一个数据链路回环(Data Loop)[4],即在时钟信号线的控制下,两个双向移位寄存器进行数据交换。其硬件连接示意图如图1所示。

1.2 SPI工作时序分析

从主设备输入从设备的时钟信号线,为双方的数据传输提供同步信号。通常可根据外设的工作要求对其进行设置,设置参数包括时钟极性(CPOL:Clock Polarity)和时钟相位(CPHA:Clock Phase)。这两个参数的共同作用决定了总线的工作模式。

(1)CPOL是指SPI设备空闲时,时钟信号的电平值为高还是低。

若CPOL= 0,则SPI设备空闲时SCK管脚下的时钟信号是低电平。

若CPOL= 1,则SPI设备空闲时SCK管脚下的时钟信号是高电平。

(2)CPHA是指SPI设备工作时,进行数据接收是在时钟前沿(Leading edge)还是在时钟后沿(Trailing edge)[5]。

若CPHA=0, 则SPI设备在时钟前沿进行数据接收。

若CPHA=1, 则SPI设备在时钟后沿进行数据接收。

为保证主从设备的正常通信,其时钟极性和时钟相位的设置应该一致。下面根据SPI接口的时序图来说明其工作机制。SPI时序图如图2所示。

在本方案中C8051F作为主设备,FPGA作为从设备,总线运行在工作模式0(即CPOL= 0,CPHA=0)。其工作机制如下:

(1)当SPI总线处于空闲状态时,主设备控制时钟信号线(SCK)输出低电平,片选信号线(CS)输出高电平。

(2)当SPI总线从空闲状态转为工作状态时,时钟信号线(SCK)输出有效时钟信号,片选信号线(CS)输出低电平。在某个时钟后沿,主设备和从设备同时发送数据,将数据分别传输到MOSI和MISO数据线上;在随后的时钟前沿,主设备和从设备同时触发数据接收,并分别将信号线上的数据存储到寄存器内。

(3)当数据传输完成后,主设备控制时钟信号线(SCK)回归为低电平,片选信号线(CS)回归为高电平,SPI总线重新回到空闲状态。至此,一个完整的SPI总线数据传输过程完成。

2 SPI接口设计

本方案选用Altera公司的Cyclone II EP2C5T144芯片。该芯片内部资源足够满足设计要求,且性价比较高。文中采用自上而下(Top-Down)的设计方法, 将其内部电路结构划分为三大模块:状态模块、数据发送模块、数据接收模块。随后对各自的功能块编写Verilog HDL代码,当每个模块测试完毕后,再进行系统级的联调[6]。该方案既保证了模块之间能够正确组合,又为查找问题带来一定的便利。简化的SPI接口电路模型如图3所示。

2.1 状态模块设计

该模块主要是检测C8051F输出的spi_cs,spi_sck两根信号线的电平值。只有spi_cs处于低电平时,主从设备的数据交换才有效。针对时钟状态的判断,先将spi_sck的电平值依据时间先后的顺序,依次写入spi_sck_before和spi_sck_after寄存器,通过比较前后两个时间点的时钟信号电平值,即可得出目前时钟的运行状态。当spi_sck_before为低电平,同时spi_sck_after为高电平,则说明时钟为上升沿;相应的当spi_sck_before为高电平,同时spi_sck_after为低电平,则说明时钟为下降沿。如果spi_sck_before与spi_sck_after同为低或高电平,则说明时钟不处于跳变沿。

2.2 发送模块设计

模块中包含发送移位寄存器和发送寄存器。每当spi_sck处于时钟后沿时,发送移位寄存器transmit_data就按高位先传的顺序,向MISO信号线上发送一位数据。并用计数器transmit_count记录下时钟后沿的个数,当记满8个时表明数据发送完成,置位数据发送完成标志位end_transmit_flag,随后发送寄存器把下一个发送数据写入发送移位寄存器中。

2.3 接收模块设计

接收模块与发送模块的设计方案类似,其中包含接收移位寄存器和接收寄存器。需要注意的是,如果触发数据发送是在时钟后沿,则触发数据接收一定是在时钟前沿。每当spi_sck处于时钟前沿时,接收移位寄存器receive_data就从MOSI信号线上接收一位数据。并用计数器receive_count记录下时钟前沿的个数,当记满8个时表明数据接收完成,置位数据接收完成标志位end_receive_flag,随后接收寄存器从接收移位寄存器中读取数据。

3 性能测试与评估

3.1 时序仿真测试

SPI接口用Verilog HDL语言描述好后,先在ModelSim软件的测试机(Testbench)下对其进行功能仿真(此时的仿真不考虑时延,假设是在理想的条件下进行)。再进行综合优化(Synthesis),将硬件描述语言编译成由与门、或门、非门、RAM、触发器等基本逻辑单元组成的逻辑连接网表[7]-[8]。随后进行FPGA的后仿真(即对生成的网表文件进行时序仿真),此次仿真不同于功能仿真,主要是将布局布线的延时信息标注到设计网表中来检测有无时序违规现象(即不满足时序约束条件或器件固有的时序规则,如建立时间、保持时间等)。由于不同芯片的内部延时不一样,不同的布局布线方案也给延时带来不同的影响。因此在布局布线后,通过对系统和各个模块进行时序仿真,分析其时序关系,估计系统性能,以及检查和消除竞争冒险是非常有必要的。其中部分管脚的时序仿真如图4所示。

3.2 板级调试

将SPI接口程序配置到FPGA内部,设置主设备向从设备持续发送数据。用示波器的一个通道检测输入接口信号,另一个通道检测输出接口信号,仔细分析两个信号的时延、误码率及传输速率等性能指标。如图5所示。

测试一:在初始化中设定不同的传输速率,测试线路中的实际速率,相关测试结果见表1。

测试二:在传输相同数据的条件下,比较I2C、CAN与SPI的误码率,相关测试结果见表2。

通过对表格内数据的分析,可以看出所设计的SPI接口性能稳定且满足了高速数据传输的要求。

4 结束语

文章介绍了一种FPGA与C8051F实现高速数据传输的通信协议及其用Verilog HDL硬件描述语言的实现方法,重点描述了SPI接口的设计方案及各个子模块的代码实现。本方案很好地发挥了FPGA时序控制能力强的优势,并采用了从系统级对任务进行划分的方法,使时序逻辑直观简单,大幅度提高了设计效率。随着数字系统的不断发展,SPI接口技术作为一种高速高效率的串行接口技术,其应用必然越来越广。

参考文献

[1]杨美刚,李小文.SPI接口及其在数据交换中的应用[J].通信技术,2007,11(40):385-387.

[2]杨承富,徐志军.SPI总线接口的FPGA设计与实现[J].军事通信技术,2004,25(2):72-76.

[3]左东广,魏瑞轩.SPI接口技术及应用[J].工业控制计算机,2001,2(14):9-10.

[4]A.K.Oudjida, M.L.Berrandjia, A.Liacha. Design and Test of General-Purpose SPI Master/Slave IPs on OPB bus. Systems Signals and Devices (SSD)[C]. the 7th International Multi-Conference on System, Algeria 27-30 June 2010.

[5]张桂友,戴庆元.串行接口SPI功能模块的设计[J].微处理机,2009,4:15-17.

[6]苏伟禄,施隆照.基于MCU IP核的SPI接口ASIC设计及实现[J].中国集成电路,2011,149:32-38.

[7]吴继华,王诚,Altera FPGA/CPLD设计(高级篇)[M].北京:人民邮电出版社,2005.

[8]唐恒标,冯建华,冯建科.基于测试系统的FPGA逻辑资源的测试[J].微电子学,2006,3(26):292-295.

作者简介:许可行(1993-),男,浙江临安,本科,研究方向:电子电路设计与应用,嵌入式系统技术。

李琪(1974-),女,山西晋城,硕士生导师,研究方向:嵌入式系统应用与开发,无人机技术。

羊帆(1985-),男,陕西,博士研究生,研究方向:先进控制理论与应用,机器人技术。

上一篇:四年级:妈妈(爸爸)真辛苦 下一篇:让班规充满人性化教育力量