论文部分内容阅读
【摘 要】将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],通过USB1.1协议的PID类型定义译码出PID名,判斷是Token分组(OUT、IN、SOF和SETUP)还是DATA分组(DATA0、DATA1、DATA2和MDATA)。
拆包流程是由一个状态机来控制的,首先根据解析出来的PID来确定包的类型,然后对数据包和标识包两种包再进一步处理。ACTIVE状态确定包的类型并对握手包进行处理。DATA是当收到数据包的状态。TOKEN是收到标识包的状态。各个状态的转换图如图5所示。
3.协议引擎的实现
协议引擎处理所有标准的USB握手信号和数据传输过程的控制。主要是对数据传输分为同步和非同步两种,根据主机发送过来的握手信号以及自身的状态,进行流程控制。流程控制是由一个状态机来实现的。该状态机含有的状态分别是:TOKEN标识状态,等待一个clk。UPDATEW将IDMA的数据写入到存储区里。IN输入操作状态。IN2第2次输入操作状态。OUT输出操作状态。OUT2A发送ACK/NACK/NYET信号。OUT2B延时一个clk,发送NACK。从控制状态寄存器里读取信息,解析出主机要进行通信的端点号(传输类型)、事务类型、数据量的大小。 4. 内部DMA的实现
内部DMA在块传输时启动,它的内部例化了一个小容量的FIFO,完成设备端点和发送/接收数据总线之间数据快速搬运。块传输的传输由标记,数据和握手包构成三相位传输组成,当设备准备好进行块传输的输入或输出事务时,启动DMA将数据送入或输出FIFO。
(四)CTRL控制传输模块的实现
控制传输模块配合主机完成设备的枚举过程。所有的USB设备都是通过缺省控制通道对主机的请求发出響应。每个控制传输至少有2个事务阶段:建立和状态,中间可能有数据阶段。在建立阶段里,建立事务向功能部件的控制端口发送信息。控制传输有一个主状态机,含有的状态分别是:IDLE空闲;GET_HDR开始响应主机的设备请求状态;GET_STATUS_S响应主机的GET_STATUS状态;CLEAR_FEATURE_S响应主机的CLEAR_FEATURE状态;WAIT_IN_DATA等待输入的数据;STATUS_IN数据输入状态;STATUS_OUT数据输出状态等8个状态。
(五)FIFO模块的实现
fifoRTL模块是通过利用FPGA内部存储器,开辟一个连续的存储区,配合相应的读、写逻辑来完成的。由于FifoRTL的读、写操作是在各自的时钟驱动下进行的,即是异步FIFO。fifoRTL模块实现的原理框图如图6所示。
(六)ROM配置文件模块的实现
该USB设备端控制器,对主机的所有标准请求都支持。将有关该功能设备的有关信息预先存放存储区里。在clk的上升沿,根据输入的地址将相应地址里的数据输出到dataout口。其原理图如图7所示。
四、结论
本文基于FPGA设计了USB1.1设备端控制器IP核。主要包括USB体系结构和USB通信原理两个部分。阐述了基于FPGA的USB设备端控制器的实现方案,进行功能模块划分。最后,对每个功能模块的具体实现进行了详细的设计。
图7 配置文件模块原理图
参考文献:
[1]肖楠编译.跟上USB前进的步伐[J].电子技术, 2008, 8:18-20
[2]张国云,马文玲.USB技术分析与应用[J].现代电子技术, 2005, 18: 68-70
[3]廖坚,于海勋. USB中的CRC校验原理及其Verilog HDL语言实现[J].计算机工程与设计,2010,26(11): 3127-3129
[4]阮利华,王祥,黄全平等.USB2.0接口IP核的开发与设计[J].复旦学报(自然科学版), 2005, 44(1): 173-177
作者简介:
卢卓浩,男,1987年出生,本科,学士,助教。研究方向:嵌入式系统。联系电话:15921727781
基金项目:
上海市教委科研创新项目(12YZ156),上海市大学生创新活动计划项目 (cs1224004)资助。
【关键词】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],通过USB1.1协议的PID类型定义译码出PID名,判斷是Token分组(OUT、IN、SOF和SETUP)还是DATA分组(DATA0、DATA1、DATA2和MDATA)。
拆包流程是由一个状态机来控制的,首先根据解析出来的PID来确定包的类型,然后对数据包和标识包两种包再进一步处理。ACTIVE状态确定包的类型并对握手包进行处理。DATA是当收到数据包的状态。TOKEN是收到标识包的状态。各个状态的转换图如图5所示。
3.协议引擎的实现
协议引擎处理所有标准的USB握手信号和数据传输过程的控制。主要是对数据传输分为同步和非同步两种,根据主机发送过来的握手信号以及自身的状态,进行流程控制。流程控制是由一个状态机来实现的。该状态机含有的状态分别是:TOKEN标识状态,等待一个clk。UPDATEW将IDMA的数据写入到存储区里。IN输入操作状态。IN2第2次输入操作状态。OUT输出操作状态。OUT2A发送ACK/NACK/NYET信号。OUT2B延时一个clk,发送NACK。从控制状态寄存器里读取信息,解析出主机要进行通信的端点号(传输类型)、事务类型、数据量的大小。 4. 内部DMA的实现
内部DMA在块传输时启动,它的内部例化了一个小容量的FIFO,完成设备端点和发送/接收数据总线之间数据快速搬运。块传输的传输由标记,数据和握手包构成三相位传输组成,当设备准备好进行块传输的输入或输出事务时,启动DMA将数据送入或输出FIFO。
(四)CTRL控制传输模块的实现
控制传输模块配合主机完成设备的枚举过程。所有的USB设备都是通过缺省控制通道对主机的请求发出響应。每个控制传输至少有2个事务阶段:建立和状态,中间可能有数据阶段。在建立阶段里,建立事务向功能部件的控制端口发送信息。控制传输有一个主状态机,含有的状态分别是:IDLE空闲;GET_HDR开始响应主机的设备请求状态;GET_STATUS_S响应主机的GET_STATUS状态;CLEAR_FEATURE_S响应主机的CLEAR_FEATURE状态;WAIT_IN_DATA等待输入的数据;STATUS_IN数据输入状态;STATUS_OUT数据输出状态等8个状态。
(五)FIFO模块的实现
fifoRTL模块是通过利用FPGA内部存储器,开辟一个连续的存储区,配合相应的读、写逻辑来完成的。由于FifoRTL的读、写操作是在各自的时钟驱动下进行的,即是异步FIFO。fifoRTL模块实现的原理框图如图6所示。
(六)ROM配置文件模块的实现
该USB设备端控制器,对主机的所有标准请求都支持。将有关该功能设备的有关信息预先存放存储区里。在clk的上升沿,根据输入的地址将相应地址里的数据输出到dataout口。其原理图如图7所示。
四、结论
本文基于FPGA设计了USB1.1设备端控制器IP核。主要包括USB体系结构和USB通信原理两个部分。阐述了基于FPGA的USB设备端控制器的实现方案,进行功能模块划分。最后,对每个功能模块的具体实现进行了详细的设计。
图7 配置文件模块原理图
参考文献:
[1]肖楠编译.跟上USB前进的步伐[J].电子技术, 2008, 8:18-20
[2]张国云,马文玲.USB技术分析与应用[J].现代电子技术, 2005, 18: 68-70
[3]廖坚,于海勋. USB中的CRC校验原理及其Verilog HDL语言实现[J].计算机工程与设计,2010,26(11): 3127-3129
[4]阮利华,王祥,黄全平等.USB2.0接口IP核的开发与设计[J].复旦学报(自然科学版), 2005, 44(1): 173-177
作者简介:
卢卓浩,男,1987年出生,本科,学士,助教。研究方向:嵌入式系统。联系电话:15921727781
基金项目:
上海市教委科研创新项目(12YZ156),上海市大学生创新活动计划项目 (cs1224004)资助。