新闻  |   论坛  |   博客  |   在线研讨会
USB2.0设备控制器IP核的AHB接口技术
tvb2058 | 2008-01-07 14:31:56    阅读:1624   发布文章

摘要 介绍了USB2.0设备控制器IP核的AHB接口的设计。解决了双时钟域问题;实现了多事务DMA控制,减少了块传输的中断次数;缓存采用乒乓机制,并对外隐蔽了双缓冲区。最后用Verilog完成RTL代码,并通过充分验证,证明接口符合AHB协议,且完成既定所有功能。

关键词 AHB接口 USB2.0 IP核 SoC

引言

  通用串行总线USB 2.0接口是目前PC机的主流接口,可提供480 Mb/s(60 MB/s)的高速数据传输,具有即插即用、热插拔、接口体积小巧、节省系统资源、传输可靠、提供电源、良好的兼容性、共享式通信、低成本等优点。由于USB接口的优点和流行,当今嵌入式设计要与PC连接,首选USB接口。

  ARM 公司提出的AMBA总线,由于其本身的高性能和ARM 处理器的广泛应用,已经成为SoC 设计中广泛使用的总线标准。AMBA rev20中的AHB,采用地址/数据分离格式,支持固定长/不定长猝发(burst) 交易、分裂(split) 交易特性和多个主设备的总线管理,具有高带宽、高性能特性,适合于嵌入式处理器与高性能外围设备、片内存储器及接口功能单元的连接。

  根据两种总线的特点和广泛支持,为了给嵌入式SoC系统提供USB接口,需要设计USB和AHB间的桥接IP核(Intellectual Property Core)。本文介绍USB 2.0设备控制器IP中的AHB接口部分设计。

1 设计概述

1.1 协议概述

  设计前首先需要了解USB和AHB数据传输的特点。

  USB上的数据组织为事务进行串行传输,最小数据单位是字节。USB传输始终是由主机方发起的,设备方只负责响应。USB的数据传输分为块、同步、控制、中断四种传输,本IP支持前三种。对于块传输,默认上层协议为BULK ONLY协议[1]。

  AHB总线采用单时钟域同步设计。数据、地址线宽32位,采用2级流水线结构,地址、控制信号比数据信号早一个时钟周期。可用猝发(burst)传输来传数据。只需一个时钟周期就可完成总线交权。由于是嵌入式的SoC片上总线,故强调的是面积、工作频率和功耗等。详细情况参见USB[13]和AMBA协议[4]。

1.2 设计规格

  本IP核的AHB接口,最主要的任务是控制数据在缓存和AHB总线间正确传输,使接口时序满足AHB协议,并协助AHB上的MCU(默认为ARM)控制数据传输;同时要处理与USB控制部分的连接问题,控制USB端的中断申请和寄存器输出。

  为了适用于大数据量的传输,本IP要求的控制传输是用非DMA方式,块、同步用DMA方式,且已知外部有DMA控制器(默认为ARM双Master的DMA控制器[5])。

  在总体设计中有如下关键问题,决定了IP中AHB接口设计的细节。

  ① 双时钟域问题。USB时钟是60 MHz,设计的AHB时钟频率是30~133 MHz。跨时钟域的控制信号需要用同步器同步。
  ② 数据的缓冲问题。IP中使用32位数据位宽的流过式DPRAM(双口SRAM)作为USB和AHB间的数据缓冲。每个端点有固定的缓冲区,使各端点间透明;使用乒乓机制,每个端点两个缓冲区,减小USB和AHB总线速率的相关性,使数据传输更流畅;同时DPRAM的两个口分属不同时钟域,起到隔离数据的双时钟域问题的作用。

  ③ 是否需要AHB Master的问题。IP在USB端是从设备,在AHB端是主设备。也就是AHB上传输的都是由本IP发起的。本来设计中有一个AHB Master,当作DMA控制器。现在由于已经有外部DMA控制器,因此IP只需要AHB Slave,用中断告知ARM信息,由ARM配置外部DMA控制器来进行DMA传输。所以为了减小面积和功耗,去掉AHB Master。

  ④ 要实现多事务DMA才发一次中断,减少中断次数。由于块传输通过上层BULK ONLY协议已经知道多个事务数据长度,所以前面的事务DMA可以用硬件处理,最后一次事务完成后才报中断。

  ⑤ AHB地址划分。每个端点在AHB上只有一个固定地址,看作一个I/O接口,隐蔽双缓冲区和缓冲区内部的相对地址,而IP中每个内部寄存器有一个单独的AHB地址。

2 AHB接口设计实现

2.1 模块划分

  如图1所示,根据功能可把AHB接口分为如下6个模块:

  ① CTRL,产生对外部DMA控制器的DMA申请信号,并接收回应信号;负责控制多个通道的多事务长度的DMA结束中断;改变REG模块中的DMA配置信息[56]。

  ② SLV,负责接收AHB上的读写请求,控制AHB Slave的时序。

  ③ DEC,地址译码模块,根据AHB地址译码产生寄存器选中信号或缓冲写信号。

  ④ MUX,DPRAM和寄存器输出的多选一模块,包括USB端寄存器输出。

  ⑤ INT,总中断产生模块。综合USB端的中断申请,产生总中断信号和总中断向量。

  ⑥ REG,ARM配置的寄存器组模块。


图1 AHB接口模块框图

2.2 SLV模块设计

  SLV模块处理AHB时序,主要功能是根据AHB地址和控制信号,产生对缓存的读写、地址信号;支持猝发传输的提前结束和插入BUSY周期。SLV模块不需要使用RETRY/SPLTT功能来干预AHB仲裁器的仲裁。这是因为IP中有用于缓存的DPRAM,并且处于USB设备端,在AHB总线看来,IP在接受AHB IN/OUT操作前都已经做好准备,不存在不能接收AHB操作的情况。

  Slave状态转换如图2所示。Slave状态机是AHB Slave设计的关键。hready_in和hsel同时为高时,SLV才能采样地址和控制信号。


图2 Slave状态转换图

  对于写操作,当收到NONSEQ时,先存储地址信息,在下一周期收到hwdata后同时发对缓冲的写信号、写地址、写数据。遇到BUSY周期进入HS_WRBUSY状态,等待下次写操作。

  对于读操作,当收到NONSEQ时,先采样地址信息,判断是否正确,再发读信号和读地址,这需要一个周期。一个周期后从缓冲收到读数据,还要通过一级寄存器后才能发到AHB总线上。所以SLV处理AHB读操作需要3个周期预读取数据,加入HS_RDSTART1、HS_RDSTART2、HS_RDSTART3状态,拉低hready_out,等待读数据。因为每个端点只有1个AHB地址,如果SLV一直对同一个端点进行传输,则可以使用预读取数据,保持流水,提高数据传输效率。遇到BUSY周期进入HS_RDBUSY状态,有专门寄存器存储预读数据,等待后面读操作中使用。

  SLV只支持WORD(32位)传输,但是USB是以字节为单位的。解决的办法是寄存器组REG中对每个端点都有一个DMA长度寄存器,ARM写入多事务数据的长度,精确到字节, IP知道数据的字节数,而AHB上只以WORD为单位传输。这样做还有个目的是简化外部DMA控制的操作,一次连贯的DMA只需ARM配置一次。否则,传输非WORD的数据可能要ARM特殊处理。

  SLV有检错机制,当读写地址操作端点缓冲边界或进行非WORD传输时,SLV认为出错,先后进入HS_ERR1、HS_ERR2状态,进行2周期的AHB错误回应。

  AHB中的1 KB地址边界检查是由AHB Master保证的,Slave不作检查。

2.3 其他模块设计

  DPRAM控制部分对每个端点有一个busy信号和hbuf信号。当busy为0时,表示端点控制权在AHB端;否则,在USB端。hbuf信号为0表示端点使用缓冲区0,否则使用缓冲区1。对于OUT端点,busy为0表示缓冲中有USB OUT数据,需要DMA传输;对于IN端点,busy为0表示缓冲空闲,可以接收DMA IN数据。所以CTRL模块接收这两组信号,以hbuf指示的busy信号为0作为端点的对外部DMA控制器的申请,同时需要打开相关DMA使能。这还需要外部DMA控制器支持多个DMA申请。

  ARM往DMA长度寄存器写入多事务数据的长度,当Slave传输了此长度的数据后,向ARM报DMA结束中断。这样可以不依赖外部DMA控制器,IP自己硬件减少块DMA传输中断数,否则一般会每次事务报一次中断。

  其余模块实现的功能都不复杂,都是简单的逻辑控制。

2.4 同步器设计[6]

  需要同步的信号分两种,单周期高电平有效和多周期高电平有效,要不同处理。

  对单周期高电平有效信号,如果从快时钟域到慢时钟域,可能寄存器采不到信号,需要先延长源信号的高电平,等采到后再拉底;而目标时钟域中通过两级寄存器同步,使平均出错频率变为大约100年一次,最后再用上升沿检测电路使其只保持一个慢周期高电平。具体电路如图3所示。


图3 单周期有效信号的同步模块

  对于多周期高电平有效,只需要通过两级寄存器即可。这样设计简单,出错概率极小。

3 IP验证验证

  工作主要是验证平台的搭建和testcase编写。要求验证集完备,能充分验证正常和非正常的工作情况。

  验证使用的软件是VCS,在验证环境中使用synopsys的UTMI和AHB VIP(验证IP)对USB部分和AHB接口一起验证。使用VIP能提高验证平台自身的可靠性。

  针对AHB接口的testcase有非DMA传输,多DMA一起传输,块端点和同步端点一起传输和AHB错误状态检查等。所有testcase都已通过,达到验证的目标。图4是外部DMA控制器的Master写IP Slave的波形图。


图4 外部DMA控制器写Slave的波形





结语

  经过充分的验证,证明AHB接口设计符合AHB协议,并完成既定功能。设计中应用同步器解决了双时钟域问题;用总长度寄存器,实现了多事务DMA控制,减少了块传输的中断次数;采用外部不可见的乒乓机制的缓存,减小了USB和AHB的数据相关性,提高了IP效率。

  在DC下综合后速度能达到150 MHz,给后端设计留下充分余地。本IP按计划已经投入实际使用;但也有需要改进的地方,DPRAM比较耗面积,占了IP总面积的70%。如果使用SPRAM(单口SRAM),缓存面积至少会减小一半。所以改用SPRAM,会降低成本和功耗,只是增加了USB和AHB的控制相关性以及等待时间。

参考文献

[1] USB Implementers Forum,USB Mass Storage Class BulkOnly Transport Revision 1.0[S/OL].http://www.usb.org/developers/devclass_docs_usbmassbulk_10.pdf
[2] 王成儒,李英伟. USB 2.0原理与工程开发[M]. 北京:国防工业出版社,2004.
[3] Compaq, Intel,Microsoft,Philips,Universal Serial Bus Specification,Revison2.0,2000[S/OL].http://www.usb.org/developers/docs/usb_20_05122006.zip
[4] ARM Limited. AMBA Specification(ARM IHI 0011A),Version2.0,1999[S/OL].http://www.arm.com/products/solutions/AMBA_Spec.htm1
[5] ARM PrimeCell DMA Controller(PL080) [EB/OL].http://www.nalanda.nitc.ac.in/industry/appnotes/arm/soc/DDI0196C_DMA_PL080.pdf
[6] 邹杨,林平分,王普,等. 基于AMBA总线的DMA控制器IP核设计[J].电子产品世界,2006(14).
[7] Clifford E. Cummings. Synthesis and Scripting Techniques for Designing Multi-Asynchronous Clock Designs,2001[EB/OL]. http://www.sunburst-design.com/papers/CummingsSNUG2001SJ_AsyncClk.pdf

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客