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

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

ID:51362455

大小:79.00 KB

页数:12页

时间:2020-03-22

上传者:U-148533
SPI串行总线接口的Verilog实现.doc_第1页
SPI串行总线接口的Verilog实现.doc_第2页
SPI串行总线接口的Verilog实现.doc_第3页
SPI串行总线接口的Verilog实现.doc_第4页
SPI串行总线接口的Verilog实现.doc_第5页
资源描述:

《SPI串行总线接口的Verilog实现.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

SPI串行总线接口的Verilog实现摘要:集成电路设计越来越向系统级的方向发展,并且越来越强调模块化的设计。SPI(SerialPeripheralBus)总线是Motorola公司提出的一个同步串行外设接口,容许CPU与各种外围接口器件以串行方式进行通信、交换信息。本文简述了SPI总线的特点,介绍了其4条信号线,SPI串行总线接口的典型应用。重点描述了SPI串行总线接口在一款802.11b芯片中的位置,及该接口作为基带和射频的通讯接口所完成的功能,并给出了用硬件描述语言VerilogHDL实现该接口的部分程序。该实现已经在Modelsim中完成了仿真,并经过了FPGA验证,最后给出了仿真和验证的结果。   在SOC设计中,利用EDA工具设计芯片实现系统功能已经成为支撑电子设计的通用平台.并逐步向支持系统级的设计方向发展。而且,在设计过程中,越来越强调模块化设计。   SPI总线是Motorola公司提出的一个同步串行外设接口,具有接口线少、通讯效率高等特点。本文给出的是利用VerilogHDL实现的SPI总线模块,该模块是802.11b无线局域网芯片中一个子模块,该模块完成了芯片中基带(baseband)与RF的通讯工作.1SPI总线接口概述   SPI(SerialParallelBus)总线是Motorola公司提出的一个同步串行外设接口,允许CPU与各种外围接口器件(包括模/数转换器、数/模转换器、液晶显示驱动器等)以串行方式进行通信、交换信息。他使用4条线:串行时钟线(SCK)、主机输入/从机输出线(MISO)、主机输出/从机输入线(MOSI)、低电平有效的使能信号线(CS)。这样,仅需3~4根数据线和控制线即可扩展具有SPI接口的各种I/O器件其典型结构如图1所示。 SPI总线具有以下特点:(1)连线较少,简化电路设计。并行总线扩展方法通常需要8根数据线、8~16根地址线、2~3根控制线。而这种设计,仅需4 根数据和控制线即可完成并行扩展所实现的功能。(2)器件统一编址,并与系统地址无关,操作SPI独立性好。(3)器件操作遵循统一的规范,使系统软硬件具有良好的通用性。2SPI总线接口的设计与实现   该模块是802.1lb无线局域网芯片中的一子模块,其在芯片中的位置如图2所示。    其中baseband(基带)为SPI的主控器(master),RF(射频)为SPI的受控器(slave)。SPIinterface作为baseband与RF的通讯接口,主要完成以下工作:(1)将从baseband接收到的16位的并行数据,转换为RF所能接收的串行数据,并将该数据根据SPI协议送给RF。(2)产生RF所需的时钟信号SCLK,使能信号CSB。(3)接收从RF传回的串行数据,并将其转换为并行数据。(4)将baseband发送的数据,与RF返回的数据进行比较,并把比较结果传给baseband。   下面给出用VerilogHDL语言实现前两项功能的关键程序,相关变量的声明在此略去。//generateacounteralways@(posedgeclockornegedgereset)begin if(!reset)   counter<=0; elseif(enable) begin   if(counter<53)   counter="counter"+1; end end//generatesignal"csb"always@(posedgeclockornegedgereset)begin if(!reset)   csb<=1; elseif(counter>=1&&counter<=50)   csb=0; else   csb=1;end//Generate"sclk"always@(posedgeclockornegedgereset)begin case(counter)   6'd02:sclk=1;   6'd05:sclk=1;   6'd08:sclk=1;   6'd11:sclk=1;   6'd14:sclk=1;   6'd17:sclk=1;   6'd20:sclk=1;   6'd23:sclk=1;   6'd26:sclk=1;   6'd29:sclk=1;   6'd32:sclk=1;   6'd35:sclk=1;   6'd38:sclk=1;   6'd41:sclk=1;   6'd44:sclk=1;   6'd47:sclk=1;   defaultsclk=0;endcase endalways@(counterorcsb)begin if(csb==0) case(counter)   6'h00,   6'h01,   6'h02,   6'h03:mosi_index=5'h00;   6'h04,   6'h05,   6'h06:mosi_index=5'h01;   6'h07,   6'h08,   6'h09:mosi_index=5'h02;   6'h0A,   6'h0B,   6'h0C:mosi_index=5'h03;   6'h0D,   6'h0E,   6'h0F:mosi_index=5'h04;   6'h10,   6'h11,   6'h12:mosi_index=5'h05;   6'h13,   6'h14,   6'h15:mosi_index=5'h06;   6'h16,   6'h17,   6'h18:mosi_index=5'h07;   6'h19,   6'h1A,   6'h1B:mosi_index=5'h08;    6'h1C,   6'h1D,   6'hlE:mosi_index=5'h09;   6'h1F,   6'h20,   6'h21:mosi_index=5'h0A;   6'h22,   6'h23,   6'h24:mosi_index=5'h0B;   6'h25,   6'h26,   6'h27:mosi_index=5'h0C;   6'h28,   6'h29,   6'h2A:mosi_index=5'h0D;   6'h2B,   6'h2C,   6'h2D:mosi_index=5'h0E;   6'h2E,   6'h2F,   6'h30:mosi_index=5'h0F;   default:mosi_index=5'h00; endcase else   mosi_index=5'h00:endassignmosi="spi"_data[mosi_index3];(声明:以上程序已经过修改,只供借鉴,不可用作商业用途)   用VerilogHDL实现的SPI总线接口模块,在ModelSim中编译、调试,并做了前仿真。   前仿真通过后,又在Altera公司的EPXA10DevelopBoard上做了FPGA验证,结果与在ModelSim中的仿真结果一致。最后在baseband与RF的联合调试过程中,该SPI总线接口模块达到了预期的要求。 参考文献[1]任志斌,车长征.串行外设接口SPI的应用[J].电子技术应用,2002,29(10):20-22.[2]易志明.SPI串行总线接口及其实现[j].自动化与仪器仪表,2002,(6):45-48.[3]夏宇闻.Verilog数字系统设计教程[M].北京:北京航空航天大学出版社,2003.系统分类:CPLD/FPGA   |   用户分类:单片机   |   来源:转贴   |   【推荐给朋友】   |   【添加到收藏夹】可复用SPI模块IP核的设计与验证摘要:SoC是超大规模集成电路的发展趋势和新世纪集成电路的主流。其复杂性以及快速完成设计、降低成本等要求,决定了系统级芯片的设计必须采用IP(Intellectual Property)复用的方法。本文介绍以可复用IP设计方法,设计串行外设接口SPI(Serial Peripheral Interface)模块IP核的思路,用Verilog语言实现,并经FPGA验证,通过TSMC(台湾集成电路制造公司)的0.25μm工艺生产线流水实现,完成预期功能。    关键词:SoC 可复用IP SPI AMBA总线引言    随着集成电路设计技术和深亚微米制造技术的飞速发展,集成电路的规模越来越大,出现了片上系统SoC(System on Chip,又称之为系统级芯片)。由于其在速度、功耗和成本方面的优势,发展势头迅猛。SoC芯片是一个复杂的系统,为了在规定时间完成设计,并提高设计的可靠性,只有依赖基于IP复用的SoC设计方法。如何为SoC设计提供可复用的IP核,成为SoC设计的基础和难点。    东南大学ASIC系统工程技术研究中心针对AMBA(Advanced Microcontroller Bus Architecutre,先进微控制器)总线规范开发了一款代号为Garfield的嵌入式微处理器。此微处理器除采用ARM公司ARM7TDMI内核的硬IP外,其余模块采用了自己开发的软IP。本文以串行外设接口SPI为例,介绍基于复用的IP设计与验证的一些经验。此SPI模块基于AMBA的APB( Advanced Peripheral Bus,先进外设总线)规范,可以不作修改地应用在任何符号AMBA总线规范的微处理器设计中。1 可复用IP核的SoC设计方法    系统级芯片设计中,IP特指经过验证的各种超级宏单元模块电路。VSIA(虚拟器件接口联盟)根据设计层次,将IP划分为三个层次:硬IP、软IP和介于两者之间的固IP。硬IP性能最优但适应性较差,软IP灵活性大、可移植性好。IP核必须具有以下特征:①可读性;②设计的衍展性和工艺适应性;③可测性;④端口定义标准化;⑤版板保护。    代码编写规则和可综合的书写规范是实现IP核的基础,可保证IP软核在任何EDA工具下编译和综合的正确性。为SoC集成时消除综合产生的风险,我们制定了Verilog代码的书写规范,并要求有详细的注释,易于他人理解和修改。可复用IP设计流程如图2所示。    为了容易地将IP集成到芯片中,需要标准化的接口或片上总线,VSIA在这方面作了一定的工作。另外,设计中要尽量将IP核接口部分与功能部分分开,单独作为一模块进行设计,当需要集成到其它互连协议中时,只需修改接口部分。为尽可能地提供灵活性,允许综合时设置多个参数。    在最终面向用户的产品发布中,用户手册是非常重要的部分。这部分文档将被用于IP核的选择、集成和验证,是一种非常专业化的文楼。它主要包括模块系统结构、功能框图、输入、输入/输出口、时序图、调用方式、设计流程、测试指导、推荐使用和软件编译器和驱动程序、系统验证指导、调试指导和该IP核版本历史等。在可重用IP核产品发布中,还应包含该 IP核的多种仿真模型,以便用户在进行评估、设计和系统测试时使用。IP核的仿真器模型一般可分为3个层次:①行为级模型,能够仿真该IP核的全部功能,包括在算法级和指令集上的功能;②硬件级模型,能够精确提供该IP核的功能和时序的仿真;③门级模型,提供硬核的带有时序反标注信息的仿真模型。    在实践中,我们搜索出一套基于CVS(协作版本管理系统)的版本管理和设计、验证人员协同工作的制定流程,对RTL代码作了尽可能全面的仿真,提供完备的测试矢量,保证了最终IP核的质量,并按要求建立了标准、规范的文档。2 SPI模块IP核的设计    串行外围设备接口SPI(Serial Peripheral Interface)总线技术是Motorola公司推出的多种微处理器、微控制器以及外设间的一种全双工、同步、串行数据接口标准。SPI总线量种三线总线,因其硬件功能很强,所以,与SPI有关的软件就相当简单,使CPU有更多的时间处理其它事务。 2.1 SPI模块的接口信号及时序要求(1)内部总线接口    AMBA规范是由ARM公司制定的片上总线规范,为SoC的设计提供了以下优点:较好的可移植和可复用设计、低功耗设计、讥生能和结构可移植的系统设计以及较好的可测性设计。SPI是APB总线上的Slave模块。APB总线时序比较简单,有兴趣的读者可以查阅ARM公司的《AMBA Specificetion》(Rev 2.0)。因此此SPI模块支持3种DMA操作,所以除标准APB信号线外,还有3根与DMA模块连接的请求信号线。(2)SPI总线接口及时序    SPI总线包括1根串行同步时钟信号线以及2根数据线。    SPI模块为了和外设进行数据交换,根据外设工作要求,其输出串行同步时钟极性和相位可以进行配置,时钟极性(CPOL)对传输协议没有重大的影响。如果CPOL=0,串行同步时钟的空闲状态为低电平;如果CPOL=1,串行同步时钟的空闲状态为高电平。时钟相位(CPHA)能够配置用于选择两种不同的传输协议之一进行数据传输。如果CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;如果CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。SPI主模块和与之通信的外设音时钟相位和极性应该一致。SPI接口时序如图3、图4所示。2.2 SPI模块功能设计    根据功能定义及SPI的工作原理,将整个IP分为8个子模块:APB接口模块、时钟分频模块、发送数据FIFO模块、接收数据FIFO模块、状态机模块、发送数据逻辑模块、接收数据逻辑模块以及中断形式模块。    深入分析SPI的四种传输协议可以发现,根据一种协议,只要对串行同步时钟进行转换,就能得到其余的三种协议。为了简化设计规定,如果要连续传输多个数据,在两个数据传输之间插入一个串行时钟的空闲等待,这样状态机只需两种状态(空闲和工作)就能正确工作。相比其它设计,在基本不降低性能的前提下,思路比较精炼、清晰。    此SPI模块有两种工作方式:查询方式和DMA方式。查询方式通过处理器核监视SPI的状态寄存器来获其所处的状态,从而决定下一步动作。DMA方式由DMA模块控制数据在内存和SPI间的交换,而不需要处理器核的参考,有效提高了总线利用率。3 EMA软件仿真与FPGA验证    为了保证设计的鲁棒性,运用多种方法对此IP的功能进行全面的仿真和验证。     首先进行EDA软件仿真验证。这种仿真包括RTL级和门级仿真验证。RTL级仿真只是将代码文件调入硬件描述语言的仿真软件进行功能仿真,检查逻辑功能是否正确。门级仿真包括布局布线前和布局布线后仿真。布局布线后仿真,可以获得比较精确的时延参数,能够比较真实地反映芯片制造完成后,模块在实际工作中的行为与性能,所以通过了此类仿真应认为模块设计成功,可以进行流片。将RTL级代码转换成门级网表,使用的是Synopsys公司的综合工具DC(Design Compiler)以及台湾集成电路制造公司(TSMC)的0.25μm标准单元库。    在传统的设计流程中进行功能验证,首先需要通过写测试矢量的方式给需要进行功能测试的模块加激励,然后通过观察模块的输出结果,判断模块的功能是否正确。但是在写测试矢量时,测试工程师是在自己对模块功能理解的基础上进行的。这样就存在一个问题,测试矢量对模块的激励有可能是不完备的,还有可能是错误的,但测试矢量的激励并没有使错误体现出来;也有可能模块的功能是正确的,误报错误使难证过程变得非常低效。为避免以上问题,在模块的功能验证中,采用系统级验证环境。该环境由IP总线、驱动器、监视器、外部模块和协调它们工作的脚本组成。组成系统的各模块可以按需要加入环境。每次验证过程就是相应的激励作用于环境的过程。验证结果由环境产生、检验和输出。该验证环境在SOLARIS5.8操作系统下,仿真器采用Synopsys公司的VCS,支持C/C++、Verilog和VHDL协同仿真,可以直接SPI模块挂在验证环境中,通过Verilog的$readmemh任务读入软件激励进行验证。    在系统时钟为66MHz,CPOL=1、CPHA=0下收发6字节数据的仿真结果如图5、6所示。    SPI模块的典型应用是:通过与带SPI接口的触摸屏控制芯片连接,提供对触摸屏的支持。针对此目标,将SPI模块及其它必要模块加载到FPGA中进行硬件、软件联合调试,对实际电路进行验证。我们选用了最常见的四线式电阻式触摸屏,而触摸屏控制芯片采用ADS7843。ADS7843是一个内置12位模数转换、低导通过电阻模拟开关的串行接口芯片,支持8和12位的A/D转换精度。为了完成一次电极电压切换和A/D转换,微处理器需要先通过SPI接口往ADS7843发送控制字,转换完成后再通过SPI接口读出电压转换值。标准的一次转换需要24个时钟周期。典型的应用电路如图7所示。    SPI的FPGA验证平台包括ARM公司提供的Intergrator/LM-EP20K1000E和Intergrator/CM7TDMI开发验证板以及Garfield II验证电路板(自行设计)。其中Intergrator/CM7TDMI上的ARM7TDMI微处理器内核作为整个开发系统的CPU。通过ARM Multi-ICE,将验证必需的包括SPI在内的所有模块 由JTAG口加载到Intergrator/LM-EP20K1000E板上Altera APEX20K系列的EP20K1000EFC672中。外围电路由Garfield II验证电路板(包含ADS7843)以及触摸屏组成。在FPGA上通过软硬件协同验证,通过逻辑分析仪观测SPI总线信号,也证明此SPI模块性能良好。    另外,通过台湾集成电路制造公司(TSMC),采用其0.25μm标准单元库对该设计多次进行流水验证,获得的实际IP电路在样机中工作十分稳定。至此,IP的设计十分成功。当设计相似架构的SoC芯片时,可根据需要配置相应参数后直接进行复用。结语    建立经过充分验证的功能正确、性能良好的可复用IP模块库,是快速进行SoC设计的基础和要求。设计可复用的IP,需要遵守一定的设计方法:完整、清晰的文档;良好的代码风格;详细的注释;精心设计的校验环境;极高代码覆盖率的测试向量等。本文以SPI模块IP为例,按照规范的流程和要求,进行了初步的尝试,得到了较好的结果。 一个CPLD的SPI应用实例   采用昨天的SPI模块做的一个应用实例,还附带了testbench文件,发现所写的SPI模块还挺方便及实用的,SPI模块的文件在上篇日志里有下载。modulespim(rst,clk,      sdi,sdo,sck,cs,      idata1,idata2,odata1);input rst;                   //异步清零                                   input clk;                  //系统时钟input sdi;                  //spisdiinput cs;                  //spics                                 input sck;              //spiclk,MAX25MHz                   input[7:0] idata1;     //inputdata1wanttosendinput[7:0] idata2;     //inputdata2wanttosend(可根据需要继续添加)output sdo;             //spisdo output reg[7:0] odata1;       //receivedata1writetocpld(可根据需要继续添加)/************************************************************************/wire ReceiveFlag;             //SPI收到8位数据标志wire TransEndFlag;          //发送结束标志reg  CmdFlag;                   //命令为1,数据为0    reg  TransFlag;                  //告诉SPI发送数据标志,并处于发送状态reg  RFstRunFlag;             //runoncetimebyoncereceivceflagreg[7:0]  CmdStore;         //保存指令和操作地址reg[7:0]  SPIData;           //发送的数据寄存器wire[7:0]  SPICoder;         //命令字和操作地址parameter CODER0CMD = 8'b11110000,    //操作指令和操作地址0      CODER1CMD = 8'b11110001,              //操作指令和操作地址1      CODER2CMD = 8'b11110010;              //操作指令和操作地址2spispi1( .rst(rst),.clk(clk),.sdi(sdi),.sdo(sdo),.sck(sck),.cs(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做主机通过SPI对CPLD做读写操作,经过测试验证,效果不错。程序代码及仿真波形见附件,独立模块,可以根据实际应用直接实例化使用。 modulespi(rst,clk,   sdi,sdo,sck,cs,   OData,IData,   ReceiveFlag,TransFlag,TransEndFlag);input rst;                     //异步清零input sdi;                    //spidatainputinput sck;                    //spiclk,MAX25MHzinput cs;                      //spicsinput clk;                   //systemclk,MIN50MHzinput[7:0] IData;         //Input8bitDatawanttotransmittomcuinput TransFlag;          //发送标志output reg sdo;          //spisdooutput reg[7:0] OData;      //Receive8bitData命令字或数据output reg ReceiveFlag;      //收到8bitData标志output regTransEndFlag;   //发送结束标志系统分类:CPLD/FPGA   |   用户分类:CPLD   |   来源:原创   |   【推荐给朋友】   |   【添加到收藏夹】

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
关闭