EDN China > 设计实例 > EDA工具与服务 > IP核 > 正文
? 2016博客大赛-不限主题,寻找电子导师,大奖升级??

(多图) USB2.0主机控制器IP核的设计

2012年01月09日 ?? 收藏0

3 USB2.0 协议模块的设计和实现

在 ULPI模块完成了设备的状态监测和转移之后,等进入正常的全速或者是高速模式,就可以按照USB2.0 协议完成数据的传输,USB2.0 协议实现模块是主机控制器实现的核心模块,完成USB 数据的读写和传输方式的控制。根据协议层的功能主要把协议层分成三个子模块来实现,分别是封包模块(PA)、拆包模块(PD)以及控制传输的协议引擎模块( PE )。

3.1 PA PD 模块的设计实现

封包模块(PA)需要对令牌包、数据包和握手包三种包按照其对应格式分别进行封装并发送到ULPI 模块。开始空闲状态,接到发包指令后,判断发包类型然后进入相应的状态。例如令牌包需将其PID 域、ADDR 域、ENDP 域以及CRC5 校验域按照顺序封装完成后发送。

状态转移图如下所示:

图4 PA模块状态转移图
图4 PA模块状态转移图

拆包模块(PD)刚好是封包模块的逆过程,该模块是把从ULPI 模块接收到的数据包和握手包进行拆包。对数据包拆包首先就是要判断PID 域以确定数据包的类型,并且还需对数据进行CRC 校验然后根据该数据包的功能将数据域内容送给要保存数据的模块,图5 是拆包模块的状态转移图:

图 5 PD 模块状态转移图
图 5 PD 模块状态转移图

仿真结果如图6 所示:

图 6 拆包的仿真波形
图 6 拆包的仿真波形

在图6 中,完成一个包含三个数据域的拆包过程。信号rx_valid 和rx_active 同时有效时rx_data[7:0]代表从ULPI 模块接收到的数据,首先根据接收PID 域值为C3,判断出该数据包的类型为DATA0,pid_data0 信号为高。Rx_data_st 保存拆包完成后的数据域,数据是在rx_data_valid 信号为高电平期间存入rx_data_st 寄存器的,所以接收数据为0x00、0x01、0x02、0x03。最后对接收的CRC 部分进行了验证,由于0xef、0x7a 是此包数据域正确的CRC 生成码,所以传输无误情况下crc16_err 一直为0。

3.2 PE 模块的设计实现

协议引擎(PE)模块主要负责协调PA 和PD 模块实现USB 传输方式,本设计主要实现两种传输方式即控制传输方式和批量传输方式。该模块设计的主状态转移图如图7 所示,状态机在空闲状态收到请求传输有效信号transreq后,就会对请求类型transtype进行判断。不同的transtype 值代表着不同的传输事务要求。按照不同的要求,主状态机就会转到相应的传输事务状态中进行处理。

图 7 PE 模块主状态转移图
图 7 PE 模块主状态转移图

每个传输事务由不同的状态转移过程来实现,以其中的setup 传输事务为例。首先,状态机向PA 模块发送发包使能标志,同时将表示setup 令牌包的值"1101"送给PA 模块。PA模块接到发setup 包指令,就会按照要求完成封包发送的工作,最后反馈给PE 模块一个发包结束的信号sendpacketen。setup状态机接收到发包结束信号sendpacketen为'1'后,就会转到下一个状态发data0 数据包。在此状态下如果收到发包结束有效信号,也会转到下一状态接收握手包。在这个状态中,主要是和PD 模块进行通信。PD 模块通过对接收的握手包进行拆包,来分析包的PID 域是否出错。如果没有错就会反馈给PE 模块包的类型,出错就通过信号来通知PE 模块。状态机本状态除了要判断接收包是否出错,还要判断接收包是否超时。各个事务分别完成之后,至此协议层完成。

图 8 Setup 事务状态转移图
图 8 Setup 事务状态转移图

4 结论

本文完成了 USB2.0 主机控制器中ULPI 模块与USB2.0 协议层模块设计,此USB2.0 主机控制器 IP 核主要针对全速和高速海量存储设备。设计采用VHDL 语言进行RTL 级描述,使用Xilinx 公司的ISE simulator 工具进行波形仿真,仿真结果验证了设计的正确性,并且在Xilinx XUPV2 FPGA 开发板[8]和带有USB接口并以物理层芯片ISP1504为核心的子板上进行了验证。本文设计的USB2.0 主机控制器可作为独立的IP 核移植到其他数字系统中,摆脱对USB2.0 主机控制器ASIC 的依赖,提高产品集成度。


上一页12下一页
?? ?? ??


打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮

1.扫描左侧二维码
2.点击右上角的分享按钮
3.选择分享给朋友
?? ??

Xilinx? 波形仿真? ULPI 接口? VHDL?

相关文章

我来评论
美国的游客
美国的游客 ??? (您将以游客身份发表,请登录 | 注册)
?
有问题请反馈