基于FPGAUSB设备端控制器设计.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于FPGAUSB设备端控制器设计

基于FPGAUSB设备端控制器设计   【摘 要】将USB设备端控制器作为一个IP核研究,详细阐述了一种基于FPGA 的USB设备端控制器的设计流程。对复杂的IP核设计进行分块构思,从硬件上进行模块划分。划分的模块包括PHY、UTMI接口、PL协议层、CTRL控制传输、FIFO、ROM配置文件等6个功能模块。在此基础上,完成了各模块的设计。   【关键词】FPGA USB 设备端控制器 IP核 功能模块   一、引言   USB(Universal Serial Bus,通用串行总线)是一种点到点的电缆总线,具有连接容易、便捷易用、速度快、适应不同外设要求、即插即用、扩展方便等优点[1]。对比RS232串行口,USB接口方案大大提高了嵌入式系统的数据吞吐能力,与以太网接口相比有即插即用特性、有块和同步等多种数据传输模式[2]。这使得USB设备在嵌入式系统中得到广泛使用。   考虑到基于Verilog HDL语言在FPGA上来实现USB设备端控制器IP核是可行的且占用的FPGA资源较少[3]。因此,近年来基于SOPC技术开发嵌入式系统,通常将USB设备端控制器作为一个IP核从而进入到SOPC里面去。目前,对USB控制器IP核的研究不少,但大多是针对USB2.0设备端控制器的设计[4]。由于USB2.0的传输速度最高达480Mbps,要求数据缓存比较大,一般在实现上采用片外SRAM;同时高速率的收发器在低端的FPGA中实现也不可行,一般只能采用ASIC型式的USB总线收发器。因此,整个IP核显的十分零乱,可重用性很差。   值得一提的是,尽管USB协议包括1.0、1.1和2.0以及USB OTG等版本,但目前的USB设备普遍都兼容USB1.1协议,12Mbps的传输速率也足以满足嵌入式系统中的绝大部分应用。为此,从实用性角度出发,基于FPGA开发USB1.1设备端控制器IP核具有实际意义。同时,该设备端控制器开发的主要目的是扩展SOPC系统性能,满足日益变化的设计需求。   二、USB设备端控制器的总体设计方案   本设计将整个IP核划分为6个功能模块,如图1所示,分别为PHY模块、UTMI接口模块、PL协议层模块、CTRL控制传输模块、FIFO模块、ROM配置文件模块。   三、各模块的具体实现   (一)PHY模块的实现   图2 PHY实现的框图   PHY模块由发送和接收两个子模块组成的。模块框图如图2所示。发送模块完成UTMI功能模块传送过来的8位并行数据转换成串行数据,并发送给主机。   (二)UTMI接口模块的实现   UTMI接口模块的功能相当于USB1.1协议里的串行接口引擎(SIE)部分。主要功能根据协议层模块发出控制信号对PHY模块的发送/接收子模块进行控制;同时要将数据送到发送   图3 UTMI接口模块结构图   总线/接收总线上。其模块结构图如图3所示。   (三) PL协议层模块的实现   控制器的核心逻辑是PL(Protocol Layer)模块,负责管理所有USB数据I/O。其中协议引擎(Protocol Engine)处理所有标准的USB握手信号。其模块结构图如图4所示。   图4 协议层模块结构图   1. 包组装器的实现   包组装器组装包并送入输出FIFO。先组装包头,插入相应的包标识(PID)和CRC校验码,然后加入数据域。包标识符分为标记(Token)、数据(Data)、握手(Handshake)和专用(Special)四种类型,每种包含有不同的事务格式。每种事务格式有唯一对应的编码,同种类型包不同事务格式有两位是相同的。由于同种类型包不同事务格式有两位是相同的,根据不同的两位就可以分辨出事务格式。   USB里有两种类型的CRC 校验:5位CRC校验和16位CRC校验。根据USB1.1协议,5位CRC作用于标记包,生产多项式为G(X)=X5 + X2+ 1。这个多项式的二进制位组合是00101B。如果所有的标记位都被准确无误的收到,接收器的5位余数应该是01100B。16位CRC作用于数据包,生成多项式为G(X)=X16 + X15+ X2 +1。这个多项式的二进制位组合是1000,0000,0000,0101B。如果所有的数据和CRC位被准确无误的收到,16位的余数应该是1000,0000,0000,1101B。   USB中CRC产生器与校验器具有相同的构造。故包组装器和包拆装器都有这两种检测。组装器中的crc5和crc16模块是用来CRC校验的;包拆装器中的crc5和crc16模块是用来产生CRC码的。   2.包拆装器的实现   包拆装器先解码出PID 和序列号以及校验和,再从8位PID取低4位(或高4位取反)得到PID[3

文档评论(0)

bokegood + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档