一种高速USB设备控制器IP核的设计与实现
1 引言
为了满足各种不同设备类型需求,USB2.0 规范在USB1.1 全速(12Mbps)及低速(1.5Mbps)的基础上增加了高速(480Mbps)传输速率,同时为了兼容USB1.x 规范,高速设备在全速信号环境中必须以全速正常工作,即能够在高/全速两种信号环境中正确地进行速率切换,这也加大了高速设备控制器的设计难度。本文通过分析USB2.0 协议, 利用VerilogHDL 实现了符合该规范的高速设备控制器IP 核,同时对设计中的几个问题加以讨论并提出相应的解决方案。
2 USB2.0 协议
包(Packet)是USB 传输的最小单位。每个数据包的开始都有同步头(SYNC)以及相应的包标示符(PID),包的结尾处都有包结束符(EOP)。在全/低速信号环境中,SYNC 长度为8 个时钟周期(对应一个字节01h),EOP 为2 个时钟周期的单端0 (singleend,SE0)。而在高速信号环境中,除了新添加了几个信息包PID,以及同步头、EOP 分别增加到4 个字节长度和1 个字节(有个例外, 就是SOF 后面的EOP 可以到4 字节)长度以外,为保证包中数据的正确性而进行的PID 互补校验以及数据字段的CRC 校验都没有变化。
USB 传输(Transfer)是通过一个或者多个包含一系列数据包的事务(transaction)完成的,事务的格式示意图如图1(a)所示。令牌数据包定义传输类型、目标设备地址、端点号码以及数据传输方向,如图1(b);数据阶段的数据包装载长度与传输类型相关的数据,如图1(c);握手应答包(在同步传输中没有)定义该次事务的结果, 视接收情况分为4 种:ACK、NAK、STALL、NYET,分别表示数据成功接受、设备忙、设备(端点)不可用、还没有足够的缓存空间接受下一个数据包。
每一个USB 设备的端点都有其特定的属性标明如何访问它,每一种传输类型也都和具体的应用要求相联系。为了支持各种设备类型,USB 规范提供中断(interrupt) 传输、块(bulk) 传输和同步(isochronous) 传输以满足不同的应用要求。控制(control)传输基本用于主机(HOST)对设备进行配置以及下达各种命令,且有专门的PID 标示。因高速环境中总线带宽大大的提升,所以包的数据字段的有效载荷都相应的加大了。不过对于任何高速设备来说,首先都是以全速设备出现,如果其复位时发出握手信号(线性调频脉冲)主机端应答成功,则断开上拉电阻而进入高速模式。
3 设备控制器核的设计与实现
3.1 设计思想
目前USB 设备端控制器的实现主要有两种方式:一是全集成芯片,如专用的微处理器(MCU)内嵌符合USB 规范的SIE(Serial Interface Engine);二是部分集成芯片,如分立的通用微处理器+SIE。前者涉及到要开发专用的MCU,开发时间长、风险大;后者集成度虽低,但不需专门设计MCU,极大地缩短了开发时间和风险性,同时应用时具有更大灵活性。考虑设计开发时间、设计工作量及应用测试等因素,本设计采用第二种方式(外置通用MCU),完成设备控制器整个数字部分IP 核的设计。
设计完成的IP 核实现了控制,中断,批量,同步四种模式传输,同时根据总线信号环境自动完成高/全速转换。为了降低MCU 的开发难度,精简内部的中断产生, 自动实现数据重传而不需要MCU 的任何干预。
3.2 模块划分及具体实现
该USB 设备控制器的逻辑功能框图如图2(a)所示。SIE(串行接口引擎)为该设计的核心。设备在接收数据时, 对NRZI 数据流进行解码并提交数据及其接收情况;发送数据时生成相应的数据PID 并进行NRZI 编码发送出去。为了更好地实现整个控制逻辑,把整个设备端控制器核划成6 大块:物理层PHY,收发器宏单元接口UTMI,协议层PL,存储接口仲裁MIA , 内部状态控制寄存器CSR 以及端点存储DPRAM,如图2(b)所示。
3.2.1 PHY
由USB2.0 协议规范可知, 高速设备控制器必须能在高/全速信号环境之间正确切换, 因此PHY必须能够根据工作模式确定其信号环境;其次必须进行高速480M/全速12 MHz 的NRZI 数据流解码、编码工作及其相应的串并、并串转换。设计中PHY使用了Philips 的ISP1501, 因此该部分数模混合设计不做介绍,ISP1501 的详情请参考文献。
3.2.2 UTMI
UTMI 控制suspend/resume 的产生以及生成全/高速之间切换的模式信号, 由于ISP1501 的数据线宽度为16 bits,一次处理一个字(1 word=2 bytes),故还要起到PHY 与协议层(PL)之间数据交换的缓冲作用。内部框架如图3 所示。速度协商控制(SNC)为该模块的核心。
评论