查看: 4181|回复: 1

USB2.0设备控制器IP核的AHB接口技术

[复制链接]

该用户从未签到

发表于 2007-8-2 18:10:12 | 显示全部楼层 |阅读模式
分享到:
摘要
介绍了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的控制相关性以及等待时间。
回复

使用道具 举报

该用户从未签到

发表于 2007-8-2 23:07:26 | 显示全部楼层

RE:USB2.0设备控制器IP核的AHB接口技术

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /4 下一条



手机版|小黑屋|与非网

GMT+8, 2024-11-22 09:16 , Processed in 0.118419 second(s), 17 queries , MemCache On.

ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

苏公网安备 32059002001037号

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.