SPI串行总线接口的Verilog实现.doc

上传人:sk****8 文档编号:3520627 上传时间:2019-06-01 格式:DOC 页数:9 大小:85KB
下载 相关 举报
SPI串行总线接口的Verilog实现.doc_第1页
第1页 / 共9页
SPI串行总线接口的Verilog实现.doc_第2页
第2页 / 共9页
SPI串行总线接口的Verilog实现.doc_第3页
第3页 / 共9页
SPI串行总线接口的Verilog实现.doc_第4页
第4页 / 共9页
SPI串行总线接口的Verilog实现.doc_第5页
第5页 / 共9页
点击查看更多>>
资源描述

1、SPI 串行总线接口的 Verilog 实现摘 要:集成电路设计越来越向系统级的方向发展,并且越来越强调模块化的设计。SPI(Serial Peripheral Bus)总线是 Motorola 公司提出的一个同步串行外设接口,容许 CPU 与各种外围接口器件以串行方式进行通信、交换信息。本文简述了 SPI 总线的特点 ,介绍了其 4 条信号线,SPI 串行总线接口的典型应用。重点描述了 SPI 串行总线接口在一款 802.11b 芯片中的位置,及该接口作为基带和射频的通讯接口所完成的功能,并给出了用硬件描述语言 Verilog HDL 实现该接口的部分程序。该实现已经在 Modelsim 中

2、完成了仿真, 并经过了 FPGA 验证, 最后给出了仿真和验证的结果。在 SOC 设计中,利用 EDA 工具设计芯片实现系统功能已经成为支撑电子设计的通用平台.并逐步向支持系统级的设计方向发展。而且 ,在设计过程中,越来越强调模块化设计。SPI 总线是 Motorola 公司提出的一个同步串行外设接口 ,具有接口线少、通讯效率高等特点。本文给出的是利用 Verilog HDL 实现的 SPI 总线模块,该模块是 802.11b 无线局域网芯片中一个子模块,该模块完成了芯片中基带(base band)与 RF 的通讯工作.1 SPI 总线接口概述SPI(Serial Parallel Bus)总

3、线是 Motorola 公司提出的一个同步串行外设接口,允许 CPU 与各种外围接口器件(包括模/数转换器、数/模转换器、液晶显示驱动器等)以串行方式进行通信、交换信息。他使用 4 条线:串行时钟线(SCK)、主机输入/从机输出线(MISO)、主机输出/从机输入线(MOSI)、低电平有效的使能信号线(CS)。这样,仅需 34 根数据线和控制线即可扩展具有 SPI 接口的各种 I/O 器件 其典型结构如图 1 所示。SPI 总线具有以下特点:(1)连线较少,简化电路设计。并行总线扩展方法通常需要 8 根数据线、8 16 根地址线、2 3 根控制线。而这种设计 ,仅需 4 根数据和控制线即可完成并

4、行扩展所实现的功能。(2)器件统一编址,并与系统地址无关,操作 SPI 独立性好。(3)器件操作遵循统一的规范,使系统软硬件具有良好的通用性。2 SPI 总线接口的设计与实现该模块是 802.1lb 无线局域网芯片中的一子模块, 其在芯片中的位置如图 2 所示。其中 base band(基带 )为 SPI 的主控器(master),RF(射频)为 SPI 的受控器(slave)。SPI interface 作为 baseband 与 RF 的通讯接口, 主要完成以下工作:(1)将从 base band 接收到的 16 位的并行数据,转换为 RF 所能接收的串行数据,并将该数据根据 SPI 协议

5、送给 RF。(2)产生 RF 所需的时钟信号 SCLK,使能信号 CSB。(3)接收从 RF 传回的串行数据,并将其转换为并行数据。(4)将 base band 发送的数据,与 RF 返回的数据进行比较, 并把比较结果传给 base band。下面给出用 Verilog HDL 语言实现前两项功能的关键程序,相关变量的声明在此略去。/generate a counteralways (posedge clock or negedge reset)beginif(!reset)counter= 1 elsecsb = 1;end/Generate “sclk“always (posedge cl

6、ock or negedge reset)begincase(counter)6d02: sclk = 1;6d05: sclk = 1;6d08: sclk = 1;6d11: sclk = 1;6d14: sclk = 1;6d17: sclk = 1;6d20: sclk = 1;6d23: sclk = 1;6d26: sclk = 1;6d29: sclk = 1;6d32: sclk = 1;6d35: sclk = 1;6d38: sclk = 1;6d41: sclk = 1;6d44: sclk = 1;6d47: sclk = 1;default sclk = 0;endc

7、aseendalways (counter or csb)beginif(csb = 0)case(counter)6h00,6h01,6h02,6h03:mosi_index = 5h00;6h04,6h05,6h06:mosi_index = 5h01;6h07,6h08,6h09:mosi_index = 5h02;6h0A,6h0B,6h0C:mosi_index = 5h03;6h0D,6h0E,6h0F:mosi_index = 5h04;6h10,6h11,6h12:mosi_index = 5h05;6h13,6h14,6h15:mosi_index = 5h06;6h16,6

8、h17,6h18:mosi_index = 5h07;6h19,6h1A,6h1B:mosi_index = 5h08;6h1C,6h1D,6hlE:mosi_index = 5h09;6h1F,6h20,6h21:mosi_index = 5h0A ;6h22,6h23,6h24:mosi_index = 5h0B;6h25,6h26,6h27:mosi_index = 5h0C ;6h28,6h29,6h2A:mosi_index = 5h0D ;6h2B,6h2C,6h2D:mosi_index = 5h0E;6h2E,6h2F,6h30:mosi_index = 5h0F;defaul

9、t:mosi_index = 5h00;endcaseelsemosi_index = 5h00:endassign mosi=“spi“_datamosi_index3;(声明:以上程序已经过修改,只供借鉴,不可用作商业用途)用 Verilog HDL 实现的 SPI 总线接口模块,在 ModelSim 中编译、调试, 并做了前仿真。前仿真通过后,又在 Altera 公司的 EPXA10 Develop Board 上做了 FPGA 验证,结果与在 ModelSim 中的仿真结果一致。最后在 base band 与 RF 的联合调试过程中,该 SPI 总线接口模块达到了预期的要求。参考文献1

10、 任志斌,车长征 .串行外设接口 SPI 的应用J.电子技术应用,2002,29(10):20-22.2 易志明.SPI 串行总线接口及其实现j.自动化与仪器仪表,2002,(6):45-48.3 夏宇闻.Verilog 数字系统设计教程M.北京:北京航空航天大学出版社,2003.系统分类: CPLD/FPGA | 用户分类: 单片机 | 来源: 转贴 | 【推荐给朋友】 | 【添加到收藏夹】 可复用 SPI 模块 IP 核的设计与验证摘要:SoC 是超大规模集成电路的发展趋势和新世纪集成电路的主流。其复杂性以及快速完成设计、降低成本等要求,决定了系统级芯片的设计必须采用 IP(Intelle

11、ctual Property)复用的方法。本文介绍以可复用 IP 设计方法,设计串行外设接口 SPI(Serial Peripheral Interface)模块 IP 核的思路,用 Verilog 语言实现,并经 FPGA 验证,通过 TSMC(台湾集成电路制造公司)的 0.25m工艺生产线流水实现,完成预期功能。关键词:SoC 可复用 IP SPI AMBA 总线引言随着集成电路设计技术和深亚微米制造技术的飞速发展,集成电路的规模越来越大,出现了片上系统 SoC(System on Chip,又称之为系统级芯片)。由于其在速度、功耗和成本方面的优势,发展势头迅猛。SoC 芯片是一个复杂的系

12、统,为了在规定时间完成设计,并提高设计的可靠性,只有依赖基于 IP 复用的 SoC 设计方法。如何为 SoC 设计提供可复用的 IP 核,成为 SoC 设计的基础和难点。东南大学 ASIC 系统工程技术研究中心针对 AMBA(Advanced Microcontroller Bus Architecutre,先进微控制器)总线规范开发了一款代号为 Garfield 的嵌入式微处理器。此微处理器除采用 ARM 公司 ARM7TDMI 内核的硬 IP 外,其余模块采用了自己开发的软 IP。本文以串行外设接口 SPI 为例,介绍基于复用的 IP 设计与验证的一些经验。此 SPI 模块基于 AMBA

13、的 APB(Advanced Peripheral Bus,先进外设总线)规范,可以不作修改地应用在任何符号 AMBA 总线规范的微处理器设计中。1 可复用 IP 核的 SoC 设计方法系统级芯片设计中,IP 特指经过验证的各种超级宏单元模块电路。VSIA (虚拟器件接口联盟)根据设计层次,将 IP 划分为三个层次:硬 IP、软 IP 和介于两者之间的固 IP。硬 IP 性能最优但适应性较差,软 IP 灵活性大、可移植性好。IP 核必须具有以下特征:可读性;设计的衍展性和工艺适应性;可测性;端口定义标准化;版板保护。代码编写规则和可综合的书写规范是实现 IP 核的基础,可保证 IP 软核在任何

14、 EDA 工具下编译和综合的正确性。为 SoC 集成时消除综合产生的风险,我们制定了 Verilog 代码的书写规范,并要求有详细的注释,易于他人理解和修改。可复用 IP 设计流程如图 2 所示。为了容易地将 IP 集成到芯片中,需要标准化的接口或片上总线,VSIA 在这方面作了一定的工作。另外,设计中要尽量将 IP 核接口部分与功能部分分开,单独作为一模块进行设计,当需要集成到其它互连协议中时,只需修改接口部分。为尽可能地提供灵活性,允许综合时设置多个参数。在最终面向用户的产品发布中,用户手册是非常重要的部分。这部分文档将被用于 IP 核的选择、集成和验证,是一种非常专业化的文楼。它主要包括

15、模块系统结构、功能框图、输入、输入/输出口、时序图、调用方式、设计流程、测试指导、推荐使用和软件编译器和驱动程序、系统验证指导、调试指导和该 IP核版本历史等。在可重用 IP 核产品发布中,还应包含该 IP 核的多种仿真模型,以便用户在进行评估、设计和系统测试时使用。IP 核的仿真器模型一般可分为 3 个层次: 行为级模型,能够仿真该 IP 核的全部功能,包括在算法级和指令集上的功能;硬件级模型,能够精确提供该 IP 核的功能和时序的仿真;门级模型,提供硬核的带有时序反标注信息的仿真模型。在实践中,我们搜索出一套基于 CVS(协作版本管理系统)的版本管理和设计、验证人员协同工作的制定流程,对

16、RTL 代码作了尽可能全面的仿真,提供完备的测试矢量,保证了最终 IP 核的质量,并按要求建立了标准、规范的文档。2 SPI 模块 IP 核的设计串行外围设备接口 SPI(Serial Peripheral Interface)总线技术是 Motorola公司推出的多种微处理器、微控制器以及外设间的一种全双工、同步、串行数据接口标准。SPI 总线量种三线总线,因其硬件功能很强,所以,与 SPI 有关的软件就相当简单,使 CPU 有更多的时间处理其它事务。2.1 SPI 模块的接口信号及时序要求(1)内部总线接口AMBA 规范是由 ARM 公司制定的片上总线规范,为 SoC 的设计提供了以下优点

17、:较好的可移植和可复用设计、低功耗设计、讥生能和结构可移植的系统设计以及较好的可测性设计。SPI 是 APB 总线上的 Slave 模块。APB 总线时序比较简单,有兴趣的读者可以查阅 ARM 公司的 AMBA Specificetion(Rev 2.0)。因此此 SPI 模块支持 3 种 DMA 操作,所以除标准 APB 信号线外,还有 3 根与 DMA 模块连接的请求信号线。(2)SPI 总线接口及时序SPI 总线包括 1 根串行同步时钟信号线以及 2 根数据线。SPI 模块为了和外设进行数据交换,根据外设工作要求,其输出串行同步时钟极性和相位可以进行配置,时钟极性(CPOL )对传输协议

18、没有重大的影响。如果 CPOL=0,串行同步时钟的空闲状态为低电平;如果 CPOL=1,串行同步时钟的空闲状态为高电平。时钟相位(CPHA)能够配置用于选择两种不同的传输协议之一进行数据传输。如果 CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;如果 CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。SPI 主模块和与之通信的外设音时钟相位和极性应该一致。SPI 接口时序如图 3、图 4 所示。22 SPI 模块功能设计根据功能定义及 SPI 的工作原理,将整个 IP 分为 8 个子模块:APB 接口模块、时钟分频模块、发送数据 FIFO 模块、接收数据

19、FIFO 模块、状态机模块、发送数据逻辑模块、接收数据逻辑模块以及中断形式模块。深入分析 SPI 的四种传输协议可以发现,根据一种协议,只要对串行同步时钟进行转换,就能得到其余的三种协议。为了简化设计规定,如果要连续传输多个数据,在两个数据传输之间插入一个串行时钟的空闲等待,这样状态机只需两种状态(空闲和工作)就能正确工作。相比其它设计,在基本不降低性能的前提下,思路比较精炼、清晰。此 SPI 模块有两种工作方式:查询方式和 DMA 方式。查询方式通过处理器核监视 SPI 的状态寄存器来获其所处的状态,从而决定下一步动作。DMA 方式由 DMA 模块控制数据在内存和 SPI 间的交换,而不需要

20、处理器核的参考,有效提高了总线利用率。3 EMA 软件仿真与 FPGA 验证为了保证设计的鲁棒性,运用多种方法对此 IP 的功能进行全面的仿真和验证。首先进行 EDA 软件仿真验证。这种仿真包括 RTL 级和门级仿真验证。RTL级仿真只是将代码文件调入硬件描述语言的仿真软件进行功能仿真,检查逻辑功能是否正确。门级仿真包括布局布线前和布局布线后仿真。布局布线后仿真,可以获得比较精确的时延参数,能够比较真实地反映芯片制造完成后,模块在实际工作中的行为与性能,所以通过了此类仿真应认为模块设计成功,可以进行流片。将 RTL 级代码转换成门级网表,使用的是 Synopsys 公司的综合工具 DC(Des

21、ign Compiler)以及台湾集成电路制造公司( TSMC)的 0.25m标准单元库。在传统的设计流程中进行功能验证,首先需要通过写测试矢量的方式给需要进行功能测试的模块加激励,然后通过观察模块的输出结果,判断模块的功能是否正确。但是在写测试矢量时,测试工程师是在自己对模块功能理解的基础上进行的。这样就存在一个问题,测试矢量对模块的激励有可能是不完备的,还有可能是错误的,但测试矢量的激励并没有使错误体现出来;也有可能模块的功能是正确的,误报错误使难证过程变得非常低效。为避免以上问题,在模块的功能验证中,采用系统级验证环境。该环境由 IP 总线、驱动器、监视器、外部模块和协调它们工作的脚本组

22、成。组成系统的各模块可以按需要加入环境。每次验证过程就是相应的激励作用于环境的过程。验证结果由环境产生、检验和输出。该验证环境在 SOLARIS5.8 操作系统下,仿真器采用 Synopsys 公司的 VCS,支持 C/C+、Verilog 和 VHDL 协同仿真,可以直接 SPI 模块挂在验证环境中,通过 Verilog 的$readmemh 任务读入软件激励进行验证。在系统时钟为 66MHz, CPOL=1、CPHA=0 下收发 6 字节数据的仿真结果如图 5、6 所示。SPI 模块的典型应用是:通过与带 SPI 接口的触摸屏控制芯片连接,提供对触摸屏的支持。针对此目标,将 SPI 模块及

23、其它必要模块加载到 FPGA 中进行硬件、软件联合调试,对实际电路进行验证。我们选用了最常见的四线式电阻式触摸屏,而触摸屏控制芯片采用 ADS7843。ADS7843 是一个内置 12 位模数转换、低导通过电阻模拟开关的串行接口芯片,支持 8 和 12 位的 A/D 转换精度。为了完成一次电极电压切换和 A/D 转换,微处理器需要先通过 SPI 接口往 ADS7843 发送控制字,转换完成后再通过 SPI 接口读出电压转换值。标准的一次转换需要 24 个时钟周期。典型的应用电路如图 7 所示。SPI 的 FPGA 验证平台包括 ARM 公司提供的 Intergrator/LM-EP20K100

24、0E和 Intergrator/CM7TDMI 开发验证板以及 Garfield II 验证电路板(自行设计)。其中 Intergrator/CM7TDMI 上的 ARM7TDMI 微处理器内核作为整个开发系统的 CPU。通过 ARM Multi-ICE,将验证必需的包括 SPI 在内的所有模块由 JTAG 口加载到 Intergrator/LM-EP20K1000E 板上 Altera APEX20K 系列的 EP20K1000EFC672 中。外围电路由 Garfield II 验证电路板(包含 ADS7843)以及触摸屏组成。在 FPGA 上通过软硬件协同验证,通过逻辑分析仪观测 SPI

25、 总线信号,也证明此 SPI 模块性能良好。另外,通过台湾集成电路制造公司(TSMC),采用其 0.25m 标准单元库对该设计多次进行流水验证,获得的实际 IP 电路在样机中工作十分稳定。至此,IP 的设计十分成功。当设计相似架构的 SoC 芯片时,可根据需要配置相应参数后直接进行复用。结语建立经过充分验证的功能正确、性能良好的可复用 IP 模块库,是快速进行 SoC 设计的基础和要求。设计可复用的 IP,需要遵守一定的设计方法:完整、清晰的文档;良好的代码风格;详细的注释;精心设计的校验环境;极高代码覆盖率的测试向量等。本文以 SPI 模块 IP 为例,按照规范的流程和要求,进行了初步的尝试

26、,得到了较好的结果。 一个 CPLD 的 SPI 应用实例采用昨天的 SPI 模块做的一个应用实例, 还附带了 testbench 文件,发现所写的 SPI 模块还挺方便及实用的,SPI 模块的文件在上篇日志里有下载。 module spim(rst,clk,sdi,sdo,sck,cs,idata1,idata2,odata1);input rst; / 异步清零 input clk; / 系统时钟input sdi; / spi sdiinput cs; / spi cs input sck; / spi clk, MAX 25MHz input7:0 idata1; / input da

27、ta1 want to sendinput7:0 idata2; / input data2 want to send(可根据需要继续添加)output sdo; / spi sdooutput reg7:0 odata1; / receive data1 write to cpld(可根据需要继续添加)/*/wire ReceiveFlag; / SPI 收到 8 位数据标志wire TransEndFlag; / 发送结束标志reg CmdFlag; / 命令为 1,数据为 0 reg TransFlag; / 告诉 SPI 发送数据标志,并处于发送状态reg RFstRunFlag; /

28、 run once time by once receivceflagreg7:0 CmdStore; / 保存指令和操作地址reg7:0 SPIData; / 发送的数据寄存器wire7:0 SPICoder; / 命令字和操作地址parameter CODER0CMD = 8b11110000, / 操作指令和操作地址 0CODER1CMD = 8b11110001, / 操作指令和操作地址 1CODER2CMD = 8b11110010; / 操作指令和操作地址 2spi spi1( .rst(rst),.clk(clk),.sdi(sdi),.sdo(sdo),.sck(sck),.c

29、s(cs),.OData(SPICoder),.IData(SPIData),.ReceiveFlag(ReceiveFlag),.TransFlag(TransFlag),.TransEndFlag(TransEndFlag);系统分类: CPLD/FPGA | 用户分类: CPLD | 来源: 原创 | 【推荐给朋友】 | 【添加到收藏夹】 标签: CPLD,SPI,MCU,Verilog 用 Verilog 语言写的 CPLD 和 MCU 通讯的 SPI 接口程序近日,在调试 Altera 的 MAXII 系列的一款 CPLD,做了一个 SPI 接口同 MCU 通讯,MCU 做主机通过

30、SPI 对 CPLD 做读写操作,经过测试验证 ,效果不错。程序代码及仿真波形见附件,独立模块,可以根据实际应用直接实例化使用。 module spi (rst,clk,sdi,sdo,sck,cs,OData,IData,ReceiveFlag,TransFlag,TransEndFlag);input rst; / 异步清零input sdi; / spi data inputinput sck; / spi clk, MAX 25MHzinput cs; / spi csinput clk; / system clk,MIN 50MHzinput7:0 IData; / Input 8bit Data want to transmit to mcuinput TransFlag; / 发送标志output reg sdo; / spi sdooutput reg7:0 OData; / Receive 8bit Data 命令字或数据output reg ReceiveFlag; / 收到 8bit Data 标志output reg TransEndFlag; / 发送结束标志系统分类: CPLD/FPGA | 用户分类: CPLD | 来源: 原创 | 【推荐给朋友】 | 【添加到收藏夹】

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 实用文档资料库 > 策划方案

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。