CN104331351A - 一种模拟usb传输过程中链路指令出错的方法 - Google Patents
一种模拟usb传输过程中链路指令出错的方法 Download PDFInfo
- Publication number
- CN104331351A CN104331351A CN201410573214.8A CN201410573214A CN104331351A CN 104331351 A CN104331351 A CN 104331351A CN 201410573214 A CN201410573214 A CN 201410573214A CN 104331351 A CN104331351 A CN 104331351A
- Authority
- CN
- China
- Prior art keywords
- link
- link instructions
- mistake
- instructions
- instruction
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Landscapes
- Information Transfer Systems (AREA)
Abstract
本发明公开了一种模拟USB传输过程中链路指令出错的方法。该方法通过设置错误编码来模拟实现对USB3.0/3.1传输过程中各种链路指令的干扰。本发明能够对USB3.0/3.1协议中各种类型的链路指令进行全字段加错,可用于USB3.0/3.1主机/设备控制器IP的功能验证中。
Description
技术领域
本发明涉及一种模拟USB传输过程中链路指令出错的方法。
背景技术
USB是由Intel、NEC、Microsoft等公司发起的用于连接外部设备的一个串口总线标准。其发展经过USB1.0、USB1.1、USB2.0、USB3.0和USB3.1五个阶段,USB1.0支持1.5Mbps带宽,USB1.1支持12Mbps带宽,USB2.0支持480Mbps带宽,USB3.0支持5Gbps带宽,目前最新的USB3.1支持10Gbps带宽。
USB采用分层体系结构,从上到下分别为协议层(Protocol Layer)、链接层(Link Layer)、物理层(Physical Layer)。其中链路层用于维护链路的连通性,以保证链路双方数据的正确传输。
USB3.0/3.1链路层共有22个链路指令,当接收端收到一个头包(Header Packet),需要发送LGOOD_x(x为大于等于0且小于等于7的整数)用于通知对方收到Header Packet;当收到不正确的头包,接收端需要发送LBAD通知对方重发包;当接收端接收到一个LBAD,需要先发送LRTY,然后将LBAD对应的包重新发送;当接收端的头包处理完,则需要清空其缓冲区(Rx Header Buffer)并按序发送LCRD_x(x为A,B,C,D中的一个);LGO_Ux(x为1,2,3中的一个)为低功耗请求链路指令,当接收端同意进入低功耗则发送LAU给对方,对方接收到LAU后发送LPMA,如果接收端处于事物处理过程,不同意进入低功耗状态则发送LXU给对方;在U0状态,只有下游端口才可以发送LDN,用于通知上游端口其存在状态,只有上游端口才可以发送LUP,用于通知下游端口其存在状态。
USB的应用非常广泛,很多集成电路设计公司都致力于USB主机/设备控制器IP的开发,验证作为设计过程中的一个重要组成部分约占整个设计周期的70%,所以寻找较好的验证方法对提高IP核的设计效率和正确性有很大意义。
链路指令在实际USB3.0/3.1传输过程中会出现各种错误情况,如开端有序集错误、类型错误、CRC5校验错误等。因此在USB3.0/3.1主机/设备控制器IP核进行功能验证时,需要提供一种简易的方法来模拟所有错误情况从而提高IP的功能验证覆盖率。
发明内容
本发明所要解决的技术问题是针对背景技术的不足提供了一种采用错误编码方式配置寄存器,能够模拟USB3.0/3.1传输过程中链路指令出错的方法。
本发明为解决上述技术问题采用以下技术方案
一种模拟USB传输过程中链路指令出错的方法,包含如下步骤:
1)由验证平台初始化模块对链路指令错误编码寄存器进行配置,寄存器的个数等于需要加错的链路指令的数量;
2)链路指令产生模块根据链路指令错误编码寄存器的内容产生相应的链路指令并将其发送给USBIP核。
优选的,所述步骤1)中,具体包括以下步骤:
1-1)同时对data和datak进行加错;
1-2)重排链路指令顺序;
1-3)设置了序号位,用于对指定的链路指令进行加错,序号位的位宽可以根据实际测试需求而定。
优选的,在步骤2)中,所述链路指令产生模块具体包括以下步骤:
2-1)如果当前链路指令序号不在错误编码寄存器中,则不对该指令进行加错;
2-2)如果错误编码寄存器中DK_EN=1’b1,则将Data_K字段的内容输出到PIPE接口的datak,否则按照原来正确的结果进行输出;
2-3)如果DS_EN=1’b1,则将DataS中比特位为1对应的字节内容清空输出;
2-4)将原来正确的字段进行加1操作作为加错后的字段进行输出;
2-5)发送正确的乱序链路指令。
优选的,在步骤1-1)中,所述加错包含开端序集和链路指令字。
优选的,所述步骤1-1)具体包含:使用1比特DK_EN来标志是否对datak进行加错和使用2比特Lcw_EN表示是否对链路指令字进行加错。
本发明采用以上技术方案与现有技术相比,具有以下技术效果:
本发明采用简单的错误编码方式配置寄存器,使链路指令产生模块能够根据寄存器内容产生各种类型的错误链路指令,有助于提高USB3.0/3.1主机/设备控制器IP核的功能验覆盖率。
附图说明
图1是本发明链路指令加错框图;
图2是错误指令编码格式图;
图3 是本发明实施例2中的流程图;
图4 是本发明实施例3中的链路指令产生模块框图。
具体实施方式
下面结合附图对本发明的技术方案做进一步的详细说明:
一种模拟USB传输过程中链路指令出错的方法,包含如下步骤:
1)由验证平台初始化模块对链路指令错误编码寄存器进行配置,寄存器的个数等于需要加错的链路指令的数量;
2)链路指令产生模块根据链路指令错误编码寄存器的内容产生相应的链路指令并将其发送给USBIP核。
其中,所述步骤1)中,具体包括以下步骤:
1-1)同时对data和datak进行加错;
1-2)重排链路指令顺序;
1-3)设置了序号位,用于对指定的链路指令进行加错,序号位的位宽可以根据实际测试需求而定。
其中,在步骤1-2)中,所述链路指令产生模块具体包括以下步骤:
2-1)如果当前链路指令序号不在错误编码寄存器中,则不对该指令进行加错;
2-2)如果错误编码寄存器中DK_EN=1’b1,则将Data_K字段的内容输出到PIPE接口的datak,否则按照原来正确的结果进行输出;
2-3)如果DS_EN=1’b1,则将DataS中比特位为1对应的字节内容清空输出;
2-4)将原来正确的字段进行加1操作作为加错后的字段进行输出;
2-5)发送正确的乱序链路指令。
其中,在步骤1-1)中,所述加错包含开端序集和链路指令字。
其中,所述步骤1-1)具体包含:使用1比特DK_EN来标志是否对datak进行加错和使用2比特Lcw_EN表示是否对链路指令字进行加错。
实施例1:基于链路指令加错的验证平台
本发明的验证方式是一种模拟USB3.0/3.1传输过程中链路指令出错的方法,使用该方法实现的链路指令加错模块作为USB3.0/3.1主机/设备控制器IP核的功能验证测试平台的一部分,能够实现各种链路指令加错,以验证设计能够正确处理这些情况。如图1所示,首先在初始化模块中配置指令错误编码寄存器,然后链路指令产生模块根据指令错误编码寄存器产生相应的链路指令,最后链路指令加错检测模块对IP的反馈结果进行检查。
图2为本发明的错误指令编码格式,包括Seq_Num、DS_EN、DataS、DK_EN、Data_K、Lcw_EN、Class、Type、SubType、CRC5以及DisO。
表1为各种错误编码字段的具体含义。
实施例2:错误编码寄存器配置。
图3为错误编码寄存器配置过程图,具体步骤如下所示:
步骤31:设置链路指令的序号。链路指令产生模块中有一个计数器,初始化时为零,工作过程中每发送一个链路指令计数器增加1,在发送链路指令之前,链路指令产生模块需要对比计数器和链路指令寄存器中Seq_Num字段的值,如果两者相等,则根据链路指令寄存器中其他字段对当前链路指令进行加错然后输出,否则直接将原来的链路指令输出。
步骤32:如果对datak进行加错,则设置DK_EN=1’b1,并设置Data_k的值。链路指令由两个DWORD(4个字节)组成,链路指令的第一个DWORD为有序集,其对应的正确的datak=4’b1111,链路指令的第二个为两个LCW,对应的正确的datak=4’b0000;若对链路指令的第一个字节进行加错,则Data_k=8’b0000_1110;若对链路指令的第5个字节进行加错,则Data_k=8’b0001_1111;其他情况以此类推。
步骤33:如果对开端有序集进行加错,则设置DS_EN=1’b1,并设置DataS的值。链路指令的开端序集为{EPF,SLC,SLC,SLC},其中EPF和SLC为特殊的K字符,DataS中4位分别对应着这4个字符,当DataS中某一位为1,则表示对其对应的字节进行加错,链路命令产生器模块加错的方式为使用8’h00来代替对应的字节。
步骤34:当对LCW0进行加错时,设置Lcw_EN[0]=1’b1,并且将Class[0]、Type[0]、SubType[0]、CRC5[0]中的一位或者多位设置为1。
步骤35:当对链路指令顺序进行加错时,需要步骤37的配合,即设置Lcw_EN[0]=1’b0,Lcw_EN[1]=1’b0,同时需要对{Class[0]、Type[0]、SubType[0]、CRC5[0]、DisO[0]}进行编码,如表2所示(其中x为1或者2),{Class[1]、Type[1]、SubType[1]、CRC5[1]、DisO[1]}的设置和{Class[0]、Type[0]、SubType[0]、CRC5[0]、DisO[0]}的配置相同。
步骤36:当对LCW1进行加错时,设置Lcw_EN[1]=1’b1,并且将Class[1]、Type[1]、SubType[1]、CRC5[1]中的一位或者多位设置为1。
实施例3:链路指令产生模块加错过程:
图4所示为链路指令产生模块的框图,图中cfg开头的信号为链路指令配置寄存器对应的值,链路指令产生模块由比较器、datak控制器、LCW0控制器、LCW1控制器以及开端序集控制器组成。比较器用于判断计数器和当前错误编码寄存器中的Seq_Num是否相等,两者相等是datak控制器、LCW0控制器、LCW1控制器以及开端序集控制器工作的前提条件。
datak控制器用于控制产生适合PIPE接口datak的信号,LCW0控制器用于控制第一个链路控制字,LCW1控制器用于控制产生第二个链路控制字,开端序集控制器用于控制产生链路指令中的开端序集。
实施例4:链路指令加错检测模块检测过程
对于链路指令开端序集或者开端序集对应的datak加错,如果加错一个字符或者一个字符对应的datak,由于USB3.0/3.1具有开端序集错一个字符的冗余能力,IP应该可以校正这个错误,如果IP不具有校正功能,则应该进入应该进入LTSSM(Link Training and Status State Machine)的Recovery状态并发送TS有序集,链路指令加错检测模块若检测到TS有序集则证明IP功能错误。
对于其他链路指令加错情况,IP应该在接收到链路指令产生模块发送的错误链路指令后3us进入Recovery状态,所以链路指令加错检测模块应该在3us左右检测到TS有序集,否则IP功能错误。
链路指令错误编码各字段含义如表1,链路指令乱序编码如表2;
表1
字段 | 位宽 | 偏移 | 描述 |
Seq_Num | m-25 | 26 | 需要加错的链路指令的序号,m可以根据实际情况进行配置 |
DS_EN | 1 | 25 | 链路指令开端有序集加错使能 |
Data_S | 4 | 21 | 每一位分别对应着开端序集的每一个字节 |
DK_EN | 1 | 20 | datak加错使能 |
Data_K | 8 | 12 | 每位分别对应着链路指令的datak中的每一位 |
Lcw_EN | 2 | 10 | Link Command Word的加错使能信号,低位对应着LCW0,高位对应着LCW1 |
Class | 2 | 8 | Class[0]=1’b1表示对LCW0中Class字段加错;Class[1]=1’b1表示对LCW1中Class字段加错; |
Type | 2 | 6 | Type[0]=1’b1表示对LCW0中Type字段加错;Type[1]=1’b1表示对LCW1中Type字段加错 |
SubType | 2 | 4 | SubType[0]=1’b1表示对LCW0中SubType字段加错;SubType[1]=1’b1表示对LCW1中SubType字段加错; |
CRC5 | 2 | 2 | CRC5[0]=1’b1表示对LCW0中CRC5字段加错;CRC5[1]=1’b1表示对LCW1中CRC5字段加错 |
DisO | 2 | 0 | 当Lcw_EN[0]=1’b0,DisO[0]才有效;加错;当Lcw_EN[1]=1’b0,DisO[1]才有效 |
表2
Class[x] | Type[x] | SubType[x] | CRC5[x] | DisO[x] | 链路指令 |
0 | 0 | 0 | 0 | 0 | LGOOD0 |
0 | 0 | 0 | 0 | 1 | LGOOD1 |
0 | 0 | 0 | 1 | 0 | LGOOD2 |
0 | 0 | 0 | 1 | 1 | LGOOD3 |
0 | 0 | 1 | 0 | 0 | LGOOD4 |
0 | 0 | 1 | 0 | 1 | LGOOD5 |
0 | 0 | 1 | 1 | 0 | LGOOD6 |
0 | 0 | 1 | 1 | 1 | LGOOD7 |
0 | 1 | 0 | 0 | 0 | LCRDA |
0 | 1 | 0 | 0 | 1 | LCRDB |
0 | 1 | 0 | 1 | 0 | LCRDC |
0 | 1 | 0 | 1 | 1 | LCRDD |
0 | 1 | 1 | 0 | 0 | LRTY |
0 | 1 | 1 | 0 | 1 | LBAD |
0 | 1 | 1 | 1 | 0 | LGO_U1 |
0 | 1 | 1 | 1 | 1 | LGO_U2 |
1 | 0 | 0 | 0 | 0 | LGO_U3 |
1 | 0 | 0 | 0 | 1 | LAU |
1 | 0 | 0 | 1 | 0 | LXU |
1 | 0 | 0 | 1 | 1 | LPMA |
1 | 0 | 1 | 0 | 0 | LUP |
1 | 0 | 1 | 0 | 1 | LDN |
Claims (5)
1.一种模拟USB传输过程中链路指令出错的方法,其特征在于:包含如下步骤:
1)由验证平台初始化模块对链路指令错误编码寄存器进行配置,寄存器的个数等于需要加错的链路指令的数量;
2)链路指令产生模块根据链路指令错误编码寄存器的内容产生相应的链路指令并将其发送给USB的IP核。
2.根据权利要求1所述模拟USB传输过程中链路指令出错的方法,其特征在于:所述步骤1)中,具体包括以下步骤:
1-1)同时对data和datak进行加错;
1-2)重排链路指令顺序;
1-3)设置了序号位,用于对指定的链路指令进行加错,序号位的位宽可以根据实际测试需求而定。
3.根据权利要求1所述模拟USB传输过程中链路指令出错的方法,其特征在于,在步骤2)中,所述链路指令产生模块具体包括以下步骤:
2-1)如果当前链路指令序号不在错误编码寄存器中,则不对该指令进行加错;
2-2)如果错误编码寄存器中DK_EN=1’b1,则将Data_K字段的内容输出到PIPE接口的datak,否则按照原来正确的结果进行输出;
2-3)如果DS_EN=1’b1,则将DataS中比特位为1对应的字节内容清空输出;
2-4)将原来正确的字段进行加1操作作为加错后的字段进行输出;
2-5)发送正确的乱序链路指令。
4.根据权利要求2所述模拟USB传输过程中链路指令出错的方法,其特征在于:在步骤1-1)中,所述加错包含开端序集和链路指令字。
5.根据权利要求2所述模拟USB传输过程中链路指令出错的方法,其特征在于:所述步骤1-1)具体包含:使用1比特DK_EN来标志是否对datak进行加错和使用2比特Lcw_EN表示是否对链路指令字进行加错。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410573214.8A CN104331351A (zh) | 2014-10-23 | 2014-10-23 | 一种模拟usb传输过程中链路指令出错的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410573214.8A CN104331351A (zh) | 2014-10-23 | 2014-10-23 | 一种模拟usb传输过程中链路指令出错的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN104331351A true CN104331351A (zh) | 2015-02-04 |
Family
ID=52406083
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410573214.8A Pending CN104331351A (zh) | 2014-10-23 | 2014-10-23 | 一种模拟usb传输过程中链路指令出错的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104331351A (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2007207090A (ja) * | 2006-02-03 | 2007-08-16 | Canon Inc | 記録装置の動作検証方法 |
CN102209000A (zh) * | 2011-07-05 | 2011-10-05 | 北京航空航天大学 | 一种带分层错误注入和错误分析的afdx网络终端系统模拟器 |
CN103701663A (zh) * | 2013-12-25 | 2014-04-02 | 北京航天测控技术有限公司 | 一种1553b总线程控故障注入装置 |
CN103812607A (zh) * | 2013-12-04 | 2014-05-21 | 安徽虹庄微电子有限公司 | 一种模拟usb3.0传输过程中包出错的方法 |
-
2014
- 2014-10-23 CN CN201410573214.8A patent/CN104331351A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2007207090A (ja) * | 2006-02-03 | 2007-08-16 | Canon Inc | 記録装置の動作検証方法 |
CN102209000A (zh) * | 2011-07-05 | 2011-10-05 | 北京航空航天大学 | 一种带分层错误注入和错误分析的afdx网络终端系统模拟器 |
CN103812607A (zh) * | 2013-12-04 | 2014-05-21 | 安徽虹庄微电子有限公司 | 一种模拟usb3.0传输过程中包出错的方法 |
CN103701663A (zh) * | 2013-12-25 | 2014-04-02 | 北京航天测控技术有限公司 | 一种1553b总线程控故障注入装置 |
Non-Patent Citations (1)
Title |
---|
王杰: "USB3.0设备控制器IP核控制端点的RTL功能验证", 《中国优秀硕士论文全文数据库 信息科技辑》 * |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105656600B (zh) | 一种从站自适应两种通信协议的通信方法 | |
CN103473088B (zh) | 一种单片机在线升级方法和系统 | |
CN103036739B (zh) | 一种用于高可靠通信系统验证与性能分析的形式化方法 | |
CN102231143A (zh) | 一种安全可复用spi外围接口电路 | |
CN104021081B (zh) | 一种针对浏览器的调试方法及装置 | |
CN105243044B (zh) | 基于串口的管理系统及管理方法 | |
CN105182210A (zh) | 一种计量芯片测试装置的通用接口及其实现方法 | |
CN103533045A (zh) | 一种用于pcie数据链路层高性能容错的方法 | |
CN107688521A (zh) | 一种服务器电源在位检测电路及检测方法 | |
CN103530211A (zh) | 一种基于uvm平台的pcie回环自检测的方法 | |
CN105068955B (zh) | 一种局部总线结构及数据交互方法 | |
CN105335548A (zh) | 一种用于ice的mcu仿真方法 | |
CN103077144A (zh) | 一种确保数据完整的spi通讯接口及其通讯方法 | |
CN102253875B (zh) | 基于PicoBlaze嵌入式软核处理器的FPGA逻辑模块调试与数据采集方法 | |
CN107293330A (zh) | 对随机存取存储器ram进行仿真验证的方法和仿真验证系统 | |
CN101859277A (zh) | 基于uart终端输入字符串命令进行人机交互调试ec的方法 | |
CN212112457U (zh) | 一种总线控制器 | |
CN104331351A (zh) | 一种模拟usb传输过程中链路指令出错的方法 | |
CN1703027B (zh) | 传递调试信息 | |
CN113986600B (zh) | 一种用于芯片串行接口的测试方法、装置和芯片 | |
CN103812607A (zh) | 一种模拟usb3.0传输过程中包出错的方法 | |
US20060268724A1 (en) | Using Open Vera Assertions to verify designs | |
CN102521197A (zh) | 一种利用低成本mcu的uart实现iso7816协议的方法 | |
CN103389924B (zh) | 应用于随机存储器的ecc存储系统 | |
CN102495778A (zh) | 一种测试单包正则匹配逻辑的系统和方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20150204 |