USB3.0链路层状态控制器的Verilog实现
2014-02-17张斌
张斌
摘要:根据USB3.0协议,链路层控制器主要是对链路的初始化和配置,对主机和设备之间的数据交流建立链接和控制。该文详细介绍链路层状态控制器的基本原理以及利用 Verilog HDL 语言实现了状态控制器的描述, 并通过了Modelsim 仿真。
关键词:USB 3.0;状态控制器;仿真验证
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2014)02-0411-03
当下,在我们的日常工作中需要传递的信息量在加大,人们对数字媒体的依赖也随之加剧。现在很多装备连接器的信息传递速度已经无法满足人们的工作和生活学习所需。所以我们需要改进和发展互联接口以此来满足人们对庞大信息量的传递所需,减少人们在等待中耗费掉的时间,加快信息传递的速度。因此因特尔、惠普、NEC、NXP半导体以及德州仪器等经济组织在7年前就一起达成了USB3.0协定,并着手研发出USB3.0等商品,其使用范围主要有个人PC、移动设备、大众消费电子商品的快速,同步一体的信息传递。这项协定不但向下兼容USB2.0、USB1.0标准[3],同时它又具备早就存在的USB技术职能。因为这项技术使得电源管理工作得到了优化,所以它能将能耗最大限度的降低,同时还可以提高传递速度。更令人振奋的是 USB 3.0 推广团队(USB 3.0 Promoter Group)在2013年8月2号正式以 USB 3.1 之名确定了新的规格标准。据悉新标准在接口方面没有什麽改变,但它可以提供两倍于 USB 3.0 的传输速度(即10Gbps),同时还能向下兼容 USB 2.0,与此同时令我们深感现代信息技术更新换代之快, 本文以USB3.0数据链层状态控制器为例在,在深入理解协议的基础上利用Verilog语言实现状态控制器的描述,并且进行Modelsim仿真。
1 链路层状态控制器
数据链路层:链路链接从本质上来看是信息发出口与接收口的逻辑连接与物理连接。目的是确保信息包的正常传递以及对链路进行有效的管理。全过程还包括对信息包的CRC添加与CRC冗余的核查,同时也有利用包含有信用信息的数据调控体系来对发送端以及接收端的信息储备缓存进行调控。一旦发现有任何失误或者是信息的损失,链路就可以自发地进行第二次发送以便及时纠错。
链路层调节器处理的问题是链路初始化和装配,以及对主机与装备之间的信息交换进行连接和调控, 整个控制器对数据包的发出与传递以及其它后续工作都起着重要的管理与影响作用。控制器主要分为状态控制模块和错误处理模块,本次主要研究状态控制模块。
USB3.0协议中应用LTSSM状态机可以用来对链路进行初始化设置和确定方向。链路系统由供电到开始正常运转都是通过状态机来进行的,状态机保证了数据包的成功运输。
LTSSM状态机是由12种互相有别的形态构成:Recovery、U0、U1、U2、U3、loop back、Rx.Detect 、Polling、Hot Reset、Compliance Mode、SS.Inactive以及SS.Disabled,每一个形式都有与之相对应的子状态[6]。
在USB3.0协议中规定了一种非常节省功耗的电源管理机制,电源管理是通过发送消息事务包和内部控制信号来实现的,主机利用装置要求将装置调整到某一种形式下,不过对数据链层进行电源管理则是讲协定层与物理层调整链路形式,以确保主机与其他装置的流畅联系。通过信息事务数据以及内部调控信息的发出,电源的管理工作才能完成。协议明确提出了四个电源形式:U0、U1、U2、U3他们的形式变换如图中所示
U0:正常的工作状态、完全活动的状态、链路上有数据包的发送和接收。
U1:处于能量消耗较少的情况下,链路上不存在数据包的传送,不过链路始终保持着活跃,同时链路上全部的物理端口都会处在最小能耗的环境中。
U2:和U1进行对比你会发现,这种状态更能降低能耗,不过,U1的推出延迟时间相对比较久一些。
U3:是三个中电源最低的状态,链路上的装置保持悬挂,同时保持着断开的形式,链路不能正常运转,不过在进行热复位以及供给电源后就可以正常投入工作。
在链路的实际运转中,数据包接纳口的工作比较繁重,而数据包传出口的工作则相对清闲些,不过要返回对应的回复信号,在这个时候数据包发出口就能够进入低耗能状态中。Polling、Rx.Detect 、Recovery、Hot Reset 为四个链路形式,
Rx.Detect (检测)状态表示当链路上电后,主机和设备能够互相识别到双方的存在,当识别成功后,双方将开始进入初始化的训练程序:
Polling(轮询)状态表示主机和设备在初始化发送端和接收端以及进行同步,准备进行数据包的发送。
Recovery(恢复)主要是当链路发现当前系统要从低功耗状态切换出来或者当前没有工作在U0状态而需要重新进行训练和配置的时候进行链路恢复。
Hot Reset表示链路允许下行端口重新设置上行端口。
SS.Inactive为链路出现错误的状态它包括两个子状态1、SS_Inactive_Disconnect 2、 SS_Inactive_Quiet 但为了简单起见他们不考虑在设计。
SS.Disabled为链路工作在非超高速状态或者链路工作在USB2.0状态。
Loop 误码率测试。
Complace 一致性测试。
在USB3.0协定中,为了保证LTSSM可以正常参加工作,所以才对这些状态进行了多种时间段的限制。已经得到的时间数据也是不同形态直接跳转的依据。全部的时间计数装置都会在电源恢复正常后变成零。
从链路上电开始到正常工作(类似将USB3.0的U盘插到笔记本的USB3.0接口上到能够正常开始读取数据)需要经历三个阶段:Rx.Detect、Polling、U0,如图2所示,其中Polling过程会对链路上的终端设备进行相关的初始化设置,从Rx.Detect到U0的过程需要经历的子过程步骤如下,在Rx.Detect状态,链路上的主机或者设备开始识别远端是否有端接,如果有端接,则链路上的终端均开始发送特定规格的Polling.LFPS码(低频周期突发信号,周期在20ns到100ns之间),LFPS信号是一个非常关键的信号,通过不同特征的LFPS信号可以实现host或者device在多种状态之间进行切换,不同特征的LFPS信号主要表现为时序上的不同,如tBurst和tRepeat参数。
经过特定时间的Polling.LFPS握手后,开始发送定制好的TS.EQ码进行接收端的均衡器设置,然后再通过TS1/TS2(Training Sequence,训练码)码进行其它相关参数的设置,最后通过发送Idle码进行握手,完成整个链路的初始化,进入U0正常工作状态。
2 功能仿真过程及效果
在这里我们通过modelsim仿真软件还有编码测试代码将所设计的项目进行功能性仿真,如图3所示。
VBUS信号高电平有效,SS_disable情况出现时,即链路工作在非超高速状态或者链路工作在USB2.0状态时,即使VBUS信号请求数据时,端口也不能进行接受和发送LFPS信号和Superspeed信号。下行端口是通过VBUS信号进行Rx-Detect,在SS-Inactive状态时下行端口和上行端口只能退出当前状态,此时Warm-RST信号出现。loopback这种状态用于测试和故障隔离。Hot_Rest信号有效时只有下行端口可以启动热复位,这将重置整个操作,此时端口可以转换到其他状态当它得到适当的信号。在接收超时时,端口将从U2进入U3状态在这种状态下最大程度的节能进行了测量。U0是正常操作状态发送和接收数据包。当它接收到命令LG0_U1,LG0_U2和LG0_U3端口将会减少电力。LGO_U1,在申请进入U1的时候发出.LGO_U2,在申请进入U2的时候发出.LGO_U3,在申请从下行端口进入的时候,会批准上一个请求。
参考文献:
[1] Universal serial bus 3.0 specification[S].Revision 1.0, November,2008.
[2] 夏宇闻.Verilog数字系统设计[M].北京:北京航空航天大学出版社,2008.
[3] 孟会,刘雪峰.PCI Express 总线技术分析[J].计算机工程,2006,32(32).
[4] 刘瑞梅.PCI Express 总线PHY接口技术分析[J].河北建筑工程学院报,2010(1).
[5] 胡为东.USB3.0物理层测试中的一致性模式和环回模式介绍[J].力科电子测量应用案例连载,2011,8(8).