微波EDA网,见证研发工程师的成长!
首页 > 通信和网络 > 通信网络技术文库 > 中科SoC的USB1.1 OHCI主机控制器IP设计

中科SoC的USB1.1 OHCI主机控制器IP设计

时间:08-02 来源:互联网 点击:
主机控制器串行接口引擎模块  

本模块主要用来完成USB 规范中协议处理部分的功能。它用作主机控制器的协议引擎,并且与列表处理器、数据FIFO 以及OHCI 寄存器相连接,此外它还实现了用来同步HSIE 和端口状态机之间接口的控制逻辑。本模块的数据流框图如图2 所示, 图中HSIE 模块工作在48MHz、打包模块和拆包模块工作在12MHz,因此需要异步逻辑在不同的时钟域之间实现同步,为简单起见,图中省去了异步逻辑模块和控制逻辑。  


  
在USB 数据接收期间,D+和D-信号经由差分接收器变成单端字位流,然后经由DPLL 模块提取时钟和数据信息。在HSIE 的接收器中实现了大部分协议解释功能, 诸如NRZI-NRZ 的转变、位填充拆除、同步域检测、SE0 检测、CRC16 计算、超时逻辑、串并转换、速度控制等。在拆包模块中还实现了状态机来检测USB 的功能是否收到有效的握手信号。  

在USB 数据发送期间,打包模块根据列表处理器的要求确定需要发送的包类型。有3 种类型的包:标示,数据,握手包。如果是数据包,则需要进行CRC16 校验;如果是标示包,则需要进行CRC5 校验;握手包不需要进行CRC 校验。打包模块随后将字节流传送给HSIE 的发送器进行同步域添加、并串转换、位填充、NRZ-NRZI 转换等工作。限于篇幅,仅介绍其中的关键模块:时钟恢复和数据提取电路以及并行CRC 算法。  

(1) 数字锁相环(Digital Phase Lock Loop,DPLL)  

由于USB 主机与USB 设备所采用的工作时钟完全分离性,唯一的交互信息是USB 总线上的字位流,为了正确提取字位流中包含的数据信息,必须有一套机制从接收到的字位流中恢复时钟信息。本文采用一种超前滞后型数字锁相环(Lead Lag DPLL)来实现上述功能。LL-DPLL 时钟恢复环路的原理如图3。   


  
环路的工作原理如下: 数字鉴相器( Digital PhaseDetector)比较字位流数据Data 与本地跟随时钟Clk_out 的相位,给出相位误差信号Lead Pulse 和Lag Pulse。数字环路滤波器对相对误差进行平滑滤波,并生成控制数控振荡器的控制信号Deduct 和Insert。DCO 根据控制信号给出的指令,利用内部高速振荡器的产生的时钟调整输出时钟Clk_out 的相位,使其跟随输入数据Data 的相位。按照恢复时钟对输入的字位流进行采样,即可提取数据。  

(2)并行CRC算法  

为了提高串行数据的校验速率,在传统的串行CRC基础上,本文提出了一种并行CRC 算法,以CRC5 为例,该算法的Verilog 硬件描述如下:  

module usbh_crc5(ci, d, co);  
input [4:0] ci; //上一次输入数据CRC 校验值或CRC 初值  
input [10:0] d;//输入的待校验数据  
output [4:0] co;//本次输入数据的CRC 校验输出  
assign co[0] = d[10]^d[9]^d[6]^d[5]^d[3]^d[0]^ci[0]^ci[3]^ci[4];  
assign co[1] = d[10]^d[7]^d[6]^d[4]^d[1]^ci[0]^ci[1]^ci[4];  
assign co[2] = d[10]^d[9]^d[8]^d[7]^d[6]^d[3]^d[2]^d[0]^ci[0]^ci[1]^ci[2]^ci[3]^ci[4];  
assign co[3] = d[10]^d[9]^d[8]^d[7]^d[4]^d[3]^d[1]^ci[1]^ci[2]^ci[3] ^ci[4];  
assign co[4] = d[10]^d[9]^d[8]^d[5]^d[4]^d[2]^ci[2]^ci[3]^ci[4];  
endmodule  

根集线器配置模块  

本模块实现了针对根集线器部分的OHCI 寄存器堆,并为每个下行端口实现了一个状态机以控制端口功能状态。根集线器配置模块可以根据不同的用户需求做到端口数目可配置,最多可配置15 个下行端口,为用户提供了很大的灵活性。  

仿真与验证  

USB 是一个复杂的系统,包括上层应用程序、USB 类驱动程序、主机控制器驱动程序、主机控制器以及USB 设备,为了对USB 主机控制器进行全面的行为级验证,必须建立相对完整的虚拟验证平台。本文的验证工作基于中科院计算所自行开发的SoC 虚拟验证平台,主要验证下述内容:  

(1)主机控制器IP 的OHCI 寄存器堆的可编程性;  
(2)主机控制器IP 与虚拟存储器之间数据传输的正确性;  
(3)主机控制器IP 内部协议处理部分在不同种类传输情况下的正确性,包括帧管理、主状态机在各种条件下的状态转换和管理、串行化与反串行化、位填充与位填充拆除、时钟和数据信号提取、NRZ 和NRZI 码相互转化、中断处理等;  
(4)传输差错处理,包括CRC 校验错、PID 校验错、位填充错、传输顺序错、应用程序缓冲区BufferOverRun 和BufferUnderRun错、控制器内部数据FIFO DataOverRun 和DataUnderRun 错、设备Babble、设备超时错等;  
(5)根集线器配置部分功能,主要包括下行端口状态转换、设备连接/断开检测、端口过流检测、远程唤醒、设备挂起、USB 总线复位等。主机控制器IP 设计使用的硬件描述语言是Verilog。仿真工具使用Cadence 公司的NCSIM。逻辑综合使用Synopsys公司的Design Compiler。作者在RTL 设计完成以后在行为级作仿真。在确定行为正确以后,利用综合工具作逻辑综合,形成网表文件和综合后的时延估计(Standard Delay Format,SDF)文件,然后利用这两个文件作门级仿真。  


  
为简单起见,本文列出综合后门级仿真一个典型Setup交易的波形图,如图4 所示。图中USB 总线上进行的交易为USB 总线复位结束以后,主机控制器检测到根端口1 上接入了一个USB 设备,由根端口作完设备速度评估,判断出接入端口1 的虚拟设备为全速设备,然后应用程序根据这些信息以及现有系统中USB 设备的相关信息来设置当前接入的设备地址,图中所示波形展示了主机发出SetAddress 请求以后USB 总线上的数据线D+和D-的行为以及主机控制器IP 的端口数据线的行为。  

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top