《电子技术应用》
您所在的位置:首页 > 可编程逻辑 > 设计应用 > 内嵌8051的USB 2.0设备控制器IP设计
内嵌8051的USB 2.0设备控制器IP设计
来源:微型机与应用2012年第17期
陈 亮,袁志坚,史大龙,黄 鲁
(中国科学技术大学 电子科学与技术系 集成电路实验室,安徽 合肥 230027)
摘要: 基于USB 2.0协议规范提出了一个USB 2.0设备控制器串行接口引擎SIE的IP核的设计,并内嵌8051软核作为其微控制器进行SoC设计。所设计的SIE核在FPGA开发板上经过验证。
Abstract:
Key words :

摘  要: 基于USB 2.0协议规范提出了一个USB 2.0设备控制器串行接口引擎SIE的IP核的设计,并内嵌8051软核作为其微控制器进行SoC设计。所设计的SIE核在FPGA开发板上经过验证。
关键词: 串行接口引擎;通用串行总线片上系统;微控制器

 凭借着每年超过20亿新单元的安装速度,通用串行总线USB(Universal Serial Bus)如今已成为最为流行的计算机接口。只要与计算机打交道,人们的日常生活已经离不开USB端口,通过它们人们可与鼠标、键盘、扫描仪、数码相机、手机和平板电脑等人们想象的到的设备相连接。USB凭借可靠、高速、方便和省电的优点,已经广泛得到主要的操作系统的支持。
 目前大多数的USB设计都是进行系统集成,采用现成商用的USB芯片进行开发,并没有涉及到对IP核的设计与开发。本文通过分析USB 2.0协议,使用Verilog HDL 硬件描述语言设计实现了一个USB 2.0设备控制器串行接口引擎SIE(Serial Interface Engine)核,选取MC8051软核作为其微控制器,并通过Wishbone片上总线进行连接。
1 USB 2.0设备控制器系统设计
1.1 系统设计

 根据USB 2.0设备控制器所要实现的功能,本系统采用自顶向下(Top-to-Down)的设计结构,将设备控制器划分为7个主要功能模块:物理层收发器(USB PHY)、UTMI接口、协议层PL(Protocol Layer)、RAM缓冲区、存储器接口和仲裁器、控制和状态寄存器及功能总线接口。
 USB 2.0 IP核结构框图如图1所示。SIE部分的SSRAM、功能总线接口、PHY模块为可更改的,通过对相应模块的更改可使本IP满足不同应用的需求。最下面接口用于连接微控制器)。

 由于USB 2.0串行总线上最高速率高达480 MHz,远高于Standard Cell电路的处理能力,因此需要全定制的Transceiver来进行数据恢复。PHY的主要作用是将接收来的差分信号进行NAZI编码和位填充[2]。
1.2 各模块具体实现
 UTMI接口是与PHY相连接的接口模块,它并不对输入和输出的数据进行处理,主要用于控制总线挂起/恢复模式和全速/高速模式的切换。
 协议层PL是USB设备控制器中最核心的模块,它负责所有的USB数据I/O和通信的控制,其中包括DMA和内存接口、协议引擎PE(Protocol Engine)、组包PA(Packet Assembly)和解包PD(packet Disassembly)几个子模块。PL内部框架如图2所示。

 PA和PD模块分别是对USB包进行装配和拆分。DMA和内存接口是PE模块到内存的接口,它提供了直接的内存访问(Direct Memory Access)和DMA块传输。协议引擎PE是PL中的核心模块,PE处理所有标准USB协议握手和控制通信,包括SOF标记、应答(ACK、NACK和NYET)以及对PING标记的回答。PE模块将端点控制状态寄存器(CSR)的值解码成内部控制信号线,将端点缓冲区(Buffer)寄存器EP_BUF的值解码成Buffer的大小和指针。图3描述了PE核心的基本操作。USB设备总是等待一个来自USB总线主机的标记包,才开始执行其他的操作。一旦接收到标记包,解包模块将对其解码,PE执行合适的操作。USB主循环根据标记包的不同将操作分为特殊包处理、Setup循环、IN数据循环和OUT数据循环。
 存储器接口和仲裁器实际上就是一个2选1的选择器,选择SRAM与Wishbone总线(及连接微控制器)还是SRAM与PL层的DMA内存接口连接。

2 微控制器模块
2.1 MC8051主要特性

 在USB的通信过程中,微控制器主要用来处理各种中断,识别主机发送的是何种请求,返回相应的数据,从而完成设备的枚举和之后的数据传输。本设计采用了MC8051的IP软核,该IP满足USB对微控制器功能的要求。通过修改MC8051中的固件(Firmware)来对SIE的寄存器进行配置,以实现USB 2.0设备控制器不同的功能。
2.2 8051与USB 2.0 IP核的连接
 由于SIE与MC8051使用不同的时钟域(SIE使用PHY提供的60 MHz时钟,而MC8051使用自身的时钟),并且MC8051是个通用的IP核,其接口并没有采用本USB 2.0 IP核的Wishbone兼容接口,而且MC8051是个8 bit的通用MCU(处理数据宽度是8 bit),因此MC8051和本USB 2.0 IP核不能直接相连。
 本文设计了一个与Wishbone总线兼容的接口转换模块,以使MC8051能正确地连接在Wishbone总线上,完成与SIE的数据传输。转换模块主要实现了跨时钟域的数据传输、数据位数转换(8 bit到32 bit和32 bit到8 bit)以及Wishbone总线兼容信号的加入。实际上完成了一个异步FIFO的功能,但比FIFO使用起来更加灵活,因为8051执行每条指令会有一定的指令延时,如果使用FIFO,很难保证SIE可以正确的接收到数据。跨时钟域的数据传输主要体现在SIE和微控制器之间,SIE主要使用PHY提供的60 MHz的时钟,而微控制器MC8051的工作频率不超过40 MHz。为了防止跨时钟域的数据传输容易产生的亚稳态,在接口转换模块里采用了“超前送数”的策略,即MCU读写命令在有效信号到达之前把数据放入三态数据端口寄存,读写信号到达之后进行数据传输。
 微控制器与SIE之间的数据交换可以分为写入地址与数据和写地址并读数据两种方式,分别对应着USB固件中两种最基本的命令函数。连接转换模块通过状态机来进行控制,接收到数据后随即进行数据和地址的转换,并将转换好的数据和地址存入寄存器中。转换完成后进入WE状态,进行判断。如进行写入地址与数据则进入到WE_AD状态,该状态会将Wishbone总线的控制位CYC、STB和WE置高同时输出转换好的地址与数据;写地址并读数据则进入WE_A,该状态将控制位CYC与STB置高,WE为低表示读过程,同时输入要读数据的地址,WE_A过后就进入RE_DATA读取数据并输出。
 数据位数转换的原理实际上很简单,采用标志位对其进行区分,如图4所示。其中,WE是写入信号,低电平有效;flag为2 bit的标志位;done是转换完成信号;datain和dataout分别是8 bit输入信号和转换好的32 bit输出信号。8 bit转32 bit的过程为:在flag为00、01、10、11每段分别向datain中写入1个8 bit数据,最先写入的为低8 bit,然后是次8 bit,依次写完。等到done信号置高后,再按照Wishbone总线数据的操作方式进行传输。32 bit数据转8 bit与该过程相反。

 该连接模块已成功通过FPGA验证,能够正确转换与传输数据。
3 系统验证
3.1 FPGA验证环境搭建

 本文选用Xilinx公司的Virtex-II Pro FPGA开发板作为验证USB 2.0 SIE核的平台。选用Cypress公司的CY7C68000芯片作为前端的收发器(PHY),将USB总线上480 MHz的串行数据流转换成8 bit 60 MHz的并行数据。系统测试平台架构如图5所示。

 

 

 CY7C68000与FPGA开发板之间采用100脚Hirose FX2扩展插槽相连接,该接口有LVCMOS25的HS_CLKIN高速时钟输入的接口来作为收发器PHY_CLK 60 MHz时钟的引入。缓冲区使用ISE软件自带的RAM IP核。本设计使用ISE 10.1.03对USB SIE模块综合后的FPGA资源使用情况为:Slices数为1 718个,Slice Flip Flops数为1 801个,4输入LUT数为2 885,最大时钟频率为127.583 MHz,满足了USB 2.0设备控制器工作所需的60 MHz时钟要求。
3.2 结果和分析
 将程序下载到FPGA实验板上后,将收发器CY7C68000连到主机,主机马上会出现一个“检测到新硬件”的消息。这表示设备枚举过程的完成,枚举就是从设备读取一些信息,了解是什么样的设备,如何进行通信,这样主机就可以根据这些信息来加载合适的驱动程序。枚举过程属于控制传输,一般分为3个阶段,具体过程如下。
 (1)建立阶段。建立阶段如图6所示,USB主机首先发送来一个SETUP令牌包,PID为0x2d,设备地址为0x00,端点0x10(控制端点)。后面紧跟一个数据包,PID为0xc3是DATA0的数据包,后面的数据0x80 0x06 0x00 0x01 0x00 0x00 0x40 0x00表示这是一个Get_Descriptor标准设备请求的数据包。USB设备收到并检测无误之后会返回一个ACK(PID为0xd2)握手包告诉主机已收到数据。
 (2)数据阶段。主机会发出一个IN包,如图7所示,PID为0x69,设备收到IN包后用数据包DATA1(PID为0x4b)返回它自己的设备描述符,描述符里有该设备自身特性的信息。主机收到数据包后会返回一个ACK握手包(PID为0xd2),表示数据接收正确。

 (3)状态阶段。主机会发出OUT包,但与数据阶段不同,状态阶段所发数据包内容为空。设备收到数据包后返回一下ACK握手包表示枚举过程的结束。
 本文提出的USB 2.0设备控制器IP的架构具有强的实用性和复用性。它既可以作为单独的设备芯片使用,也可与其他IP一起进行SoC设计,只需在片上总线上添加相应的模块。单独设计的接口转换模块成功完成内嵌8051微控制器核的设计,也可以利用该模块外接一个51系列微控制器,具有很强的灵活性。在操作系统上添加相应的驱动程序即可进行数据传输的实验。
参考文献
[1] Universal serial bus specification(Rev 2.0)[S]. www.usb.org, 2002.4.
[2] USB 2.0 transceriver macrocell interface(UTMI) Specification (Version 1.05)[S].2001.3.
[3] 周立功.USB 2.0与OTG规范及开发指南[M].北京:北京航空航天大学出版社,2004.
[4] AXELSON J.USB开发大全[M].北京:人民邮电出版社,2011.

此内容为AET网站原创,未经授权禁止转载。