>
首页 » 业界动态 » USB设备控制器IP核系统设计及FPGA实现

USB设备控制器IP核系统设计及FPGA实现

作者:雍尚刚,邓龙江,朱向东  时间:2006-12-03 13:20  来源:edi
摘要:本文针对USB设备单芯片设计方法,介绍一种USB设备控制器IP核系统的设计,提出SIE核心控制流程,能满足设备控制器最大限度精简指令,同时对USB设备控制器如何屏蔽USB协议做了部分探讨,并简述了FPGA验证。

关键词:USB设备控制器;IP核;系统设计;FPGA

1 引言

继USB协议公布后,USB凭借其占用系统资源少、廉价、通用、热插拔等优点,日益成为通用的串行接口总线。当前,绝大部分计算机外围设备如打印机、MP3、移动硬盘等均采用USB接口。USB设备的开发也受到越来越多的设计公司关注。

设计一种带USB接口的外围设备,可以采用多芯片和单芯片两种设计方法实现。多芯片设计方法即将USB设备控制器与专用单片机组合,由于需要专用的USB设备控制器,不仅不经济,而且USB设备控制器作为一个“黑匣子”调试起来异常麻烦,USB设备产品升级周期长。而采用单芯片设计方法,在单芯片内集成USB设备控制核和基于该核的单片机,既可以节省芯片资源、降低成本,也可以方便特定单片机设计,升级灵活,缩短了设计周期。

本文针对单芯片设计方法提出了一种全速USB设备控制器IP(Intelligent Property,简称IP)核的系统设计,总结出USB设备控制器SIE(Serial Interface Engine,简称SIE)的核心控制流程,完全符合协议且独立于设备具体命令,精简了报错机制,减少了对设备不必要的中断请求;同时对设备控制器特性做了部分探讨,以便于具体USB设备IP核设计和调试。这样,既可以减少USB设备对来自于设备控制器频繁却没必要的中断报错的后续处理,也能通过对USB格式数据屏蔽方法的介绍,方便USB设备调试,甚至经细微修改后可以适应不同设备的命令请求。本设计采用VerilogHDL硬件描述语言编写,通过了FPGA验证,可转入ASIC设计。

2 设备控制器功能实现

2.1 设备控制器简介
整个USB协议实现分三层,其中总线接口层分USB主机控制器、集线器、USB设备控制器和设备。设备与主机数据交换时,需要USB主机控制器和USB设备控制器完成并串/串并转换和数据USB格式的生成/屏蔽。设备控制器集成电压调整器、收发器、SIE、存储器管理和存储器。电压调整器将外部电压或自供电压调整成稳定的3.3伏;收发器直接与USB电缆相连,自带上拉电阻,协调转换两条差分数据线双向输出,并可由数据传输模式和是否SUSPEND来控制其上拉电阻;存储器管理负责调用存储器,而自带的存储器一般较小,只是用于暂时缓冲数据;SIE即串行接口引擎,是整个USB设备控制器的核心,用来屏蔽数据USB格式,完成串并转换。本IP核包括SIE和存储器管理模块。

2.2 IP核设计思想
整个IP可以实现控制、中断、批量和同步四种模式传输,具有独立的SIE,不仅精简了设备控制器指令,减少了中断请求,而且屏蔽数据重传,具有良好的可扩展性,可以添加本地DMA(Direct Message Access,简称DMA)传输模式或者更改设备命令集。

2.3 IP核模块划分及详细设计
USB设备控制器的最终目的是对数据流进行打包或解包。其控制逻辑由主机信息流和设备命令生成,数据流理论上不影响控制逻辑,但错误的数据包传输会被提前处理。控制逻辑比较复杂,为了易于实现和理解,本文将整个设备控制器IP核划分为六个模块(见图1),即时钟生成GECLK、事件探测ENENT_D、物理接口PHY、数据访问控制MAC、数据访问接口MAI和端点控制EPC,由USB2CLT顶层调用。除了GECLK模块和EVENT_D模块生成全局信号外,其他模块均双向数据传输。以下介绍每个模块功能及其详细设计。

图1 设备控制器IP核模块划分图

2.3.1 GECLK
本模块实现以下两个功能:从NRZI信号恢复生成12MHz时钟和可配置时钟输出。对于前者,本模块对12MHz信号元(bitcell)四次过采样从而恢复生成12MHz时钟。由于PLL(Phase Locked Loop,简称PLL)能逐渐同步信号中的跳变沿,所以具有三次信号元连续跳变的包同步头(SYNC)可以促使时钟同步。另外,位填充(BITSTUFF)机制也是为时钟同步而设计的。至于可配置时钟输出,可以供设备使用,不过这种时钟输出未必与设备控制器工作时钟同步。

2.3.2 EVENT_D
本模块直接对差分信号进行探测,识别空闲、单端零(SE0)状态,并根据协议翻译生成相应信号,应用于整个系统或者报告给设备。

2.3.3 PHY
该模块直接与收发器接壤,接收来自收发器的差分放大信号并向其发送NRZI差分信号。主要功能为添删同步头(SYNC)和位填充(BIT STUFF),对NRZI编解码且翻转高低位(因为低位先入)。其流程如图2所示。

图2 NRZI编解码处理流程

2.3.4 MAC
该模块是SIE的核心,控制整个传输,内部涵盖对所有TOKEN、DATA和HANDSHAKE的处理过程,其流程如图3所示。此流程图分为四部分,即PID Analyse、Levellin DATA Disposal、Levellout DATA Disposal和Special Disposal。除Special disposal外,前三者均可以通过单独的Mealy状态机实现,Levellin DATA Disposal状态机和Levellout DATA Disposal状态机相互独立(因为SIE只屏蔽USB格式,而非USB具体数据),但都是从PID Analyse状态机转入,在处理完后立即返回,从而形成状态机之间的握手。

图3 媒体访问控制(MAC)模块处理流程图

(1)PID Analyse。从某种角度来说,USB协议实现是靠PID发起的,因此解析PID是MAC的首要问题。PID由TOKEN PID、HANDSHAKE PID和DATA PID组成。其中,TOKEN PID是数据传输的先导,所附带的端点和地址信息将驻留在寄存器中,以便其后数据传输,CRC错误的TOKEN将使其后的数据传输搁置。HANDSHAKE PID标志一个数据包传输结束,设备必须通过设备控制器中断请求得到通知。不过,设备控制器根据ACK触发的TOGGLE位对设备却是透明的,因为数据包的同步作为USB协议的一部分应该被屏蔽。DATAPID后是数据信息,将触发Levellout DATA Disposal状态机运转。

(2)Levellout DATA Disposal。为避免差分信号冲突,设备控制器将无条件接收来自主机的数据,待接收完毕后,才根据其端点可用性及数据CRC校验码的正确性返回相应的握手信号(不过,建立数据包作为整个传输的建立数据,具有绝对优先权,不允许返回NAK(Non Acknowledge,简称NAK)或者STALL握手信号)。为了维持数据传输的连续性,非同步模式下错误的数据包(即数据包PID不符或者生成16位CRC不等于0X80_0D)将会被设备控制器与设备联合清除,传输无误的数据包会被设备读出解析,以备下一次数据传输。本IP核中,为了简化设备对此中断请求的后续处理,可以主动清除缓冲区错误数据,但没有权力解析它。

(3)Levellin DATA Disposal。当传输模式规定(如中断传输)或者设备由主机数据包解析得知下一次传输为设备向主机发送数据包时,设备会预先向设备控制器相应端点写入非USB格式数据。随后,主机发送的IN TOKEN首先促使PHY模块发送SYNC,根据设备控制器TO GGLE位生成的数据PID及纠错码紧随其后;最后,从缓冲区读出的数据随16位CRC校验码一起被发送。这也称为对数据USB格式打包。注意,设备控制器也仅仅对数据打包,对整个传输的阶段性一无所知。至于CRC函数的生成,既可使用时序电路,也可使用组合电路。时序电路编写简单,耗用资源多;组合电路逻辑复杂,耗用资源少。

(4)Special Disposal。为一些特殊的设备配置准备,比如刷新SOF帧号寄存器,并通知设备。

2.3.5 MAI
作为直接与设备相连的模块,MAI需要锁入设备命令或数据,并对命令进行翻译。设备命令分两种类型:一种需要MAI翻译后赋给MAC,以控制其状态机运转以及与主机的应答(但不影响MAC由USB协议构建的控制流程);另一种则仅仅作为数据输出的具体命令,MAI翻译后,将待读数据置入输出寄存器中,等待读信号触发。同时,缓冲区数据读写由MAI调用EPC间接实现。

2.3.6 EPC
EPC主要实现主端点双缓冲切换。主端点由64×4字节深度FIFO(First In First Out,简称FIFO)组成,根据需要,可以组成64×2或者128×1双缓冲。在同步传输模式下,主端点在缓冲区切换时,需要触发中断,以通知设备及时读写。如果需要添加local DMA模式,则在此添加,因为DMREQ是根据缓冲区内容产生的。

3 设备控制器特性探讨

3.1 TOGGLE位设置及重传实现
TOGGLE位利用ACK触发,用以识别重传数据包,实现数据包同步。对于主机重传数据包,设备控制能识别并抛弃,而当设备控制器发现向主机传送数据失败(即等待ACK超时)时,设备控制器可以屏蔽重传,并将RAM外部读地址返回上次读地址,不产生任何中断;或者立即触发中断,请求设备再次写入原数据。不过,本地DMA批量传输模式不允许产生这种中断,所以设备控制必须屏蔽重传。

在控制传输模式下,TOGGLE设置有些特殊。协议规定主机输出数据包初始设置为DATA0,设备送入数据包初始设置为DATA1,每次建立阶段都会被刷新,设备控制器控制端点TOGGLE位设置必须与协议符合。但是,协议还规定状态阶段(整个控制传输的末阶段)应促使数据阶段未成功翻转的TOGGLE位翻转,这显然是画蛇添足。

3.2 双缓冲机制
双缓冲仅用于主端点,用于增加批量传输吞吐量和完成同步传输。批量传输模式下,双缓冲自动切换。对于同步传输模式,则有必要在双缓冲切换时产生中断通知设备写入和读出数据。这种中断请求有些特殊,需要考虑数据传输的连续性,如果数据来自主机,设备控制器在缓冲区切换时才通知设备,并在整个数据包传输结束且设备已经读空前一个双缓冲后再产生一次中断;如果数据向主机发送,则需要收到TOKEN后就立即通知设备。

对于允许一定错误率的同步传输来说,双缓冲机制是薄弱环节,有一定的纠错能力,不过仅针对数据过载。为了具有这种纠错能力,双缓冲的切换必须由来自于主机的数据信息触发。也就是当设备未及时取走数据、主机数据流过载时,缓冲区强行切换并主动清除前一个缓冲区内容。设备数据输入过载没有切换缓冲区的权力,过载的数据被禁止写入缓冲区。

3.3 设备控制器与设备的应答
设备与设备控制器应答的唯一条件是设备控制器产生中断。中断既可以通知设备读写数据以维持数据传输的连续性,也可以把相应传输错误报告给设备。不过,设备控制器并不能鉴别出所有传输错误,极少部分需要设备主动纠错。例如,主机在控制传输的数据阶段未完全取走先前声明的字节数就进入状态阶段时,设备控制器不会中断报错,设备应该识别这种错误并主动清除已预先置入缓冲区的数据。这也是调试不易发觉的错误。

4 FPGA验证

本设计的FPGA验证即是对主机请求做相应的应答,以验证代码可行性以及协议屏蔽的正确性。FPGA器件采用Altera的ACEX1KEP1K100QC208-3,本IP核在调用EAB后占用23%的LUTs。验证环境配置需要收发器、48MHzPLL(或48MHz晶振)、FPGA和MCU。为了利于调试,这里特编写一个模块,仿MCU,直接写入FPGA,对主机请求做闭环式应答,以完成基本配置以及对不同端点的测试。

验证时,在sof二进制文件通过并行口以JTAG模式下载到FPGA后,将USB数据线插入主机USB口,随后进行配置。其基本配置过程见参考文献,注意事项参考本文第4节。基本配置成功后(如果设置产品ID号为非全零,主机会提醒安装驱动程序),打开windriver,对每个端点在不同模式下写入数据后读出比较,如果数据比较无误,则IP核验证通过。

5 结束语

以往符合USB1.1协议的设备控制器芯片如PHIUSBD12、USBN9602等均有过多不必要的中断报错,不利于单片机处理,而且未申明对错误数据的处理方法,致使88USB设备设计和调试困难。本设计在摒除了以上缺点的基础上,基于可扩展性提出了SIE通用的处理流程图,占用较少资源(23%ACEX1KEP1K100的LUTs)通过了FPGA验证,表明IP核系统内部诸如CRC算法、触发位设置、数据打包解包等处理完全符合协议,可以作为IP固核继续进行ASIC设计。

相关推荐

没有退路的FPGA与晶圆代工业者

FPGA  晶圆代工  2014-01-03

采用FPGA的可编程电阻的设计结构分析

FPGA  电阻  2013-09-24

从FPGA的制程竞赛看英特尔与Fabless的后续变化

FPGA  Fabless  2013-07-16

物联网融合自动化推动高效生产模式变革

物联网  FPGA  SoC  2013-07-09

针对PCB设计挑战 Mentor阐述3D PCB系统设计技术

PCB  系统设计  2013-07-08

14纳米FPGA展现突破性优势

14纳米  FPGA  2013-06-20
在线研讨会
焦点