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

网友投稿 306 2022-10-31

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

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

引言

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

1  设计概述

1.1  协议概述

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

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

1.2  设计规格

在总体设计中有如下关键问题,决定了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配置的寄存器组模块。

2.2  SLV模块设计

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

对于写操作,当收到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]

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

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

3  IP验证验证

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

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

结语

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

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

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:【华为云·云筑2020】AI考卷答案
下一篇:【华为云·云筑2020】IOT考卷答案
相关文章

 发表评论

暂时没有评论,来抢沙发吧~