CN101673236B - 一种全覆盖的微处理器测试用例包自动生成方法 - Google Patents
一种全覆盖的微处理器测试用例包自动生成方法 Download PDFInfo
- Publication number
- CN101673236B CN101673236B CN2009100445254A CN200910044525A CN101673236B CN 101673236 B CN101673236 B CN 101673236B CN 2009100445254 A CN2009100445254 A CN 2009100445254A CN 200910044525 A CN200910044525 A CN 200910044525A CN 101673236 B CN101673236 B CN 101673236B
- Authority
- CN
- China
- Prior art keywords
- instruction
- register
- test case
- jump
- template
- 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.)
- Expired - Fee Related
Links
Landscapes
- Test And Diagnosis Of Digital Computers (AREA)
Abstract
本发明公开了一种全覆盖的微处理器测试用例包自动生成方法,目的是解决微处理器形式化方法和随机测试方法无法覆盖全部指令组合的问题。技术方案是将每条指令的标识、指令的汇编名称、源操作数类型和目的操作数类型构成指令模板,M条指令模板构成大小为M的指令模版库;根据用户需测试的指令数N,从指令模板库中选择N条指令模板,按序排列成指令模板组合,形成MN个指令模板组合;采用实例化方法将每个指令模板组合实例化成指令组合;将初始化函数Init、指令组合以及状态输出函数Output顺序连接成一条测试用例,将所有测试用例打包构成测试用例包。采用本发明可以确保覆盖全部的测试用例,满足某些特定领域专用芯片不能避免遗漏任何功能验证的要求。
Description
技术领域
本发明涉及微处理器的自动测试方法,尤指全覆盖的微处理器测试用例包自动生成方法。
背景技术
在微处理器的开发过程中,对其功能进行准确而严密的测试是十分关键的。功能验证的主要方式是基于指令集的测试验证。由于指令组合数量巨大,测试员手工方式编写测试用例效率低、覆盖率低,一般不作为主要方法。目前,由程序自动生成测试用例是微处理器功能测试的主要形式,可以分为两种:形式化方法和随机方法。
形式化方法是指对待测部件建立抽象状态机模型,根据其状态转换及相应激励,采用约束求解、符号执行等技术自动生成测试用例。形式化方法生成的测试用例覆盖率高,但由于存在状态爆炸问题,其扩展性较差,一般只用来测试处理器中的某个部件,例如流水线或Cache协议。
微处理器整体功能验证目前大部分采用随机方法。随机方法是首先建立指令模板库,然后在满足约束条件下随机抽取其中的指令组成测试用例。目前随机方法研究较多且应用广泛,并且结合专家系统、模型检验、定理证明等其他技术有效提高了测试程序的覆盖率。但是现有的随机方法仍然存在很多问题,如有的系统要求用户根据处理器特性编写大量的配置文件,或者根据微处理器的硬件设计进行详细建模。而芯片的用户由于无法掌握这些信息,从而不能对芯片进行充分测试,只能通过运行大型Benchmark或自己开发用户级测试程序进行验收。
无论是形式化方法还是随机方法,生成的测试用例都无法覆盖到全部的指令组合,无法确保检测到微处理器的所有错误。而对于某些特定领域(例如航空航天领域)的专用芯片,芯片的功能验证要求极为严格,不能遗漏任何的功能验证,一个微小的错误都有可能会造成极为严重的后果。因此,形式化方法和随机方法这些非全覆盖的测试用例生成方法不适合这类特定领域。此外,特定领域的专用芯片涉及的指令数目比一般的通用处理器小,更加适合生成全覆盖的测试用例,不易产生指令组合爆炸问题。
发明内容
本发明要解决的技术问题在于:针对微处理器随机测试方法无法确保覆盖全部指令组合以及用户难以使用的问题,提出一种全覆盖的微处理器测试用例包自动生成方法,使用户在不了解处理器硬件设计细节的情况下,实现对微处理器全部指令组合的自动测试,提高小指令数情况下测试用例的覆盖率,弥补随机测试方法的不足。
为了解决上述技术问题,本发明的技术方案为:根据微处理器指令集,将每条指令的标识ID(identification)、指令的汇编名称、源操作数类型和目的操作数类型构成一条指令模板,M条指令模板构成大小为M的指令模版库。根据用户需测试的指令数N,从指令模板库中任意选出N条指令模板,按顺序排列成长度为N的指令模板组合,共可形成MN个指令模板组合。采用实例化方法将每个指令模板组合实例化成对应的指令组合,MN个指令模板组合实例化成MN个指令组合。初始化函数、指令组合和状态输出代码顺序构成一条测试用例,共有MN条测试用例。将MN条测试用例打包构成测试用例包。
具体技术方案为:
设用户需测试的指令数为N。
第一步、构建初始化函数Init。Init是测试用例的一部分,负责对指令组合在测试过程中所涉及的测试用例计数器、内存、运算部件和各类寄存器进行初始化,以消除任何会导致不确定状态的因素。Init的流程是:
1.1设置测试用例计数器,用于标识已运行过的测试用例和定位出错的测试用例,在运行环境构建开始时将测试用例计数器初值设为零。
1.2分配数据内存,包括源操作数和目的操作数使用的内存,根据数据类型分配不同的内存大小,类型包括:单字定点、单字浮点、双字定点和双字浮点。
1.3对于运算部件,通过连续执行空转指令(NOP)排空流水线。
1.4对于寄存器,依照状态寄存器、源寄存器和目的寄存器分别进行处理。状态寄存器是指诸如处理器状态寄存器(Processor State Register,PSR)、浮点状态寄存器(Floating-Point Status Register,FSR)等表示系统运行状态的寄存器;源寄存器是指在指令组合中用来装载源操作数的寄存器;目的寄存器是指在指令组合中用来放置结果的寄存器。对以上三种寄存器的初始化过程如下:
1.4.1对状态寄存器中会被指令执行影响到的位清零;
1.4.2对源寄存器赋初值。源寄存器作为测试用例自动生成过程的输入,必须赋予初值,初值的选择要使指令能正常执行;
1.4.3对目的寄存器清零。目的寄存器作为测试用例自动生成过程的输出,是指令组合执行完毕后状态的一部分,初始化时需要全部清零。
为避免代码过度膨胀,将Init组织为单独的函数,在指令组合执行之前进行调用。
第二步、构建状态输出函数Output。Output是测试用例的一部分,负责输出每条指令组合执行时的状态寄存器、目的寄存器和访存指令涉及的内存值,以便验证指令组合执行结果的正确性。
同样为了避免代码过度膨胀,将Output组织为单独的函数,在指令组合执行之后进行调用。
第三步、建立包含M条指令模板的指令模板库,M是微处理器指令集中指令的条数。测试用例中的每条指令都源自于该指令模板库。每条指令模板由指令ID、指令的汇编名称、源操作数类型和目的操作数类型构成。指令ID为枚举类型常量,指令的汇编名称为字符串常量,对应指令的汇编语法,源操作数和目的操作数类型为整型、浮点类型等所有常用数据结构。指令模板中使用操作数类型而非操作数,便于在实例化指令时重用寄存器,减少寄存器压力,消除指令组合内的源寄存器和目的寄存器冲突。
第四步、根据第三步建立的指令模板库,构造大小为MN的指令模板组合集合X。构造方法是:从指令模板库中任取N条指令模板构成一条指令模板组合,共形成MN条指令模板组合,所有指令组合构成大小为MN的指令模板组合集合X。
第五步、判断集合X是否为空,若为空,执行第九步,若不为空,执行第六步;
第六步、从集合X中任选一个待实例化的指令模板组合x,X=X-{x},即从集合X中删除x;
第七步、顺序对指令模板组合x中的每一条指令模板i进行实例化,得到实例化后的指令为i’,相应得到x实例化后的指令组合x’,具体过程如下:
指令模板i中的指令ID和指令汇编名称是唯一的,无需实例化,实例化指令模板i只需对源操作数类型和目的操作数类型进行,这两项的实例化过程均采用静态寄存器映射的方式实现。
7.1如果指令模板i为CALL指令,执行步骤7.6;如果指令模板i为跳转指令,执行步骤7.7;否则,执行步骤7.2;
7.2根据源或目的操作数类型将所有寄存器划分成若干子集;
7.3设指令模板i的目的操作数类型对应的寄存器子集为J,x’中位于i’之前的所有指令的目的操作数所分配的全部寄存器集合为L,J=J-L;
7.4为指令模板i的每个源操作数根据其类型分配对应寄存器集合中的一个寄存器,为指令模板i的每个目的操作数根据其类型分配J集合中的一个寄存器。如果指令个数过多,寄存器无法划分成足够的子集时,则采用经典的寄存器分配算法(如图着色法或线形扫描算法)为指令模板i的源操作数和目的操作数进行动态映射分配;
7.5如果指令i’和i’的前一条指令之间存在依赖关系,则在它们之间插入空指令,转第九步;
7.6对CALL指令进行实例化,方法是:
7.6.1为了能够控制跳转后的行为,不对后面的指令产生副作用,创建叶子函数,叶子函数是位于调用图中叶子位置的函数,即不再调用其他函数。叶子函数除空指令和返回语句外不包含任何其他指令,其地址作为CALL指令的操作数,并在叶子函数入口地址处设置标号_cvt_lp,使函数返回时可继续执行CALL指令的下一条指令;
7.6.2将CALL指令模板中的源操作数实例化为空,目的操作数实例化为7.6.1中定义的标号_cvt_lp。生成带目标地址_cvt_lp的调用函数指令,形式为“call _cvt_lp”。
7.6.3转第八步;
7.7对跳转指令进行实例化,方法是:跳转指令分为无条件跳转指令和条件跳转指令。无条件跳转指令直接跳转到目标地址,条件跳转指令读取状态寄存器的值,根据其内容判断指令是否跳转。测试用例中的跳转指令和一般程序中的跳转指令不同,无论哪种跳转指令,均不能改变指令组合中指令的执行顺序,即跳转指令结束之后,应该顺序执行指令组合中的下一条指令。为了能够使测试用例实现对跳转指令的功能测试,同时又不改变指令组合中指令的执行顺序,必须进行“伪跳转”。“伪跳转”仅执行跳转动作,跳转结束后返回原指令组合中跳转指令的下一条指令。采用跳转表实现“伪跳转”,跳转表是记录指令组合中跳转指令信息的表,其每一项代表一条跳转指令信息,具体包括标号、指令和目标地址。标号代表该表项的入口地址,为每条跳转指令跳转的目标地址;指令代表跳转指令;目标地址代表跳转指令结束跳转时返回指令组合下一条指令的地址。每条跳转指令跳转到跳转表中对应的一项,再根据目标地址跳回指令组合中的下一条指令,完成跳转功能。跳转指令实例化方法具体子步骤:
7.7.1如果跳转指令为指令组合中的第一条跳转指令,建立该指令组合的跳转表,初始化跳转表,建立第一条表项内容;如果不是第一条跳转指令,则在跳转表中增加一条表项内容。按如下方法填写跳转表表项内容:标号部分填写表项的入口地址;指令部分填写无条件跳转指令;目标地址部分填写指令组合中跳转指令的下一条指令地址。
7.7.2实例化跳转指令模板,跳转指令模板的源操作数类型实例化为空,目的操作数类型实例化为步骤7.7.1中填写的跳转表表项的标号。
第八步、将第一步获得的初始化函数Init、第七步获得的指令组合以及第二步获得的状态输出函数Output顺序连接成一条测试用例,返回第五步;
第九步、将全部测试用例打包构成测试用例包,输出该测试用例包。
与现有技术相比,采用本发明可达到以下技术效果:
1.作为随机方法的补充,可以确保指令组合全部覆盖,满足特定领域对微处理器进行完整功能验证的需求;
2.由于不涉及微处理器内部设计细节,本发明可以使微处理器用户对芯片进行初步功能测试,其结果可作为芯片验收时的参考。
附图说明
图1是本发明的总流程图。
具体实施方案
图1是本发明的总流程图。
步骤1)、构建初始化函数Init:将初始化代码构成单独的初始化函数,供测试用例调用;
步骤2)、构建状态输出函数Output;
步骤3)、根据微处理器指令的描述建立包含M条指令模板的指令模板库;
步骤4)、构造大小为MN的指令模板组合集合X;
步骤5)、判断集合X是否为空,若为空,执行步骤9),若不为空,执行步骤6);
步骤6)、从集合X中任选一个待实例化的指令模板组合x,X=X-{x};
步骤7)、将步骤6)中获得的指令模板组合x中的每一条指令模板i进行实例化,得到x对应的一条指令组合x’;
步骤8)、将步骤1)获得的初始化代码、步骤7)获得的指令组合以及步骤2)获得的状态输出代码顺序连接成一条测试用例,返回步骤5);
步骤9)、将全部测试用例打包构成测试用例包,输出该测试用例包,结束。
Claims (2)
1.一种全覆盖的微处理器测试用例包自动生成方法,其特征在于包括以下步骤:
第一步、构建初始化函数Init,Init是测试用例的一部分,负责对指令组合在测试过程中所涉及的测试用例计数器、内存、运算部件和各类寄存器进行初始化,且将Init组织为单独的函数,在指令组合执行之前进行调用,Init的流程是:
1.1设置测试用例计数器,用于标识已运行过的测试用例和定位出错的测试用例,在运行环境构建开始时将测试用例计数器初值设为零;
1.2分配数据内存,包括源操作数和目的操作数使用的内存,根据数据类型分配不同的内存大小,类型包括:单字定点、单字浮点、双字定点和双字浮点;
1.3对于运算部件,通过连续执行空转指令NOP排空流水线;
1.4对于寄存器,依照状态寄存器、源寄存器和目的寄存器分别进行处理:状态寄存器是指表示系统运行状态的寄存器;源寄存器是指在指令组合中用来装载源操作数的寄存器;目的寄存器是指在指令组合中用来放置结果的寄存器,对以上三种寄存器的初始化过程如下:
1.4.1对状态寄存器中会被指令执行影响到的位清零;
1.4.2对源寄存器赋初值,初值的选择要使指令能正常执行;
1.4.3对目的寄存器清零;
第二步、构建状态输出函数Output,Output是测试用例的一部分,负责输出每条指令组合执行时的状态寄存器、目的寄存器和访存指令涉及的内存值;且将Output组织为单独的函数,在指令组合执行之后进行调用;
第三步、建立包含M条指令模板的指令模板库,M是微处理器指令集中指令的条数,测试用例中的每条指令都源自于该指令模板库;每条指令模板由指令ID、指令的汇编名称、源操作数类型和目的操作数类型构成,指令ID为枚举类型常量,指令的汇编名称为字符串常量,对应指令的汇编语法,源操作数和目的操作数类型为常用数据结构;
第四步、根据指令模板库构造大小为MN的指令模板组合集合X,N为用户需测试的指令数,构造方法是:从指令模板库中任取N条指令模板构成一条指令模板组合,共形成MN条指令模板组合,所有指令组合构成大小为MN的指令模板组合集合X;
第五步、判断集合X是否为空,若为空,执行第九步,若不为空,执行第六步;
第六步、从集合X中任选一个待实例化的指令模板组合x,X=X-{x};
第七步、顺序对指令模板组合x中的每一条指令模板i进行实例化,方法是采用静态寄存器映射的方式实现i的源操作数类型和目的操作数类型的实例化,得到实例化后的指令为i’,相应得到x实例化后的指令组合x’,具体过程是:
7.1如果指令模板i为CALL指令,执行步骤7.6;如果指令模板i为跳转指令,执行步骤7.7;否则,执行步骤7.2;
7.2根据源或目的操作数类型将所有寄存器划分成若干子集;
7.3设指令模板i的目的操作数类型对应的寄存器子集为J,x’中位于i’之前的所有指令的目的操作数所分配的全部寄存器集合为L,J=J-L;
7.4为指令模板i的每个源操作数根据其类型分配对应寄存器集合中的一个寄存器,为指令模板i的每个目的操作数根据其类型分配J集合中的一个寄存器;
7.5如果指令i’中i’的前一条指令之间存在依赖关系,则在它们之间插入空指令,转第九步;
7.6对CALL指令进行实例化,方法是:
7.6.1创建叶子函数,叶子函数除空指令和返回语句外不包含任何其他指令,其地址作为CALL指令的操作数,并在叶子函数入口地址处设置标号_cvt_lp,使函数返回时可继续执行CALL指令的下一条指令;
7.6.2将CALL指令模板中的源操作数实例化为空,目的操作数实例化为7.6.1中定义的标号_cvt_lp,生成带目标地址_cvt_lp的调用函数指令,形式为“call_cvt_lp”;
7.6.3转第八步;
7.7对跳转指令进行实例化,方法是:
7.7.1如果跳转指令为指令组合中的第一条跳转指令,建立该指令组合的跳转表,初始化跳转表,建立第一条表项内容;如果不是第一条跳转指令,则在跳转表中增加一条表项内容;跳转表是记录指令组合中跳转指令信息的表,每一项代表一条跳转指令信息,包括标号、指令和目标地址,标号代表该表项的入口地址,为每条跳转指令跳转的目标地址;指令代表跳转指令;目标地址代表跳转指令结束跳转时返回指令组合下一条指令的地址;填写跳转表表项内容的方法是:标号部分填写表项的入口地址;指令部分填写无条件跳转指令;目标地址部分填写指令组合中跳转指令的下一条指令地址;
7.7.2实例化跳转指令模板,跳转指令模板的源操作数类型实例化为空,目的操作数类型实例化为跳转表表项的标号;
第八步、将第一步获得的初始化函数Init、第七步获得的指令组合以及第二步获得的状态输出函数Output顺序连接成一条测试用例,返回第五步;
第九步、将全部测试用例打包构成测试用例包,输出该测试用例包。
2.如权利要求1所述的一种全覆盖的微处理器测试用例包自动生成方法,其特征在于在指令个数过多,寄存器无法划分成足够的子集时,采用经典的寄存器分配算法为指令模板i的源操作数和目的操作数进行动态映射分配。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009100445254A CN101673236B (zh) | 2009-10-13 | 2009-10-13 | 一种全覆盖的微处理器测试用例包自动生成方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009100445254A CN101673236B (zh) | 2009-10-13 | 2009-10-13 | 一种全覆盖的微处理器测试用例包自动生成方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101673236A CN101673236A (zh) | 2010-03-17 |
CN101673236B true CN101673236B (zh) | 2011-05-11 |
Family
ID=42020468
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2009100445254A Expired - Fee Related CN101673236B (zh) | 2009-10-13 | 2009-10-13 | 一种全覆盖的微处理器测试用例包自动生成方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101673236B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102902906A (zh) * | 2012-09-26 | 2013-01-30 | 中国航天科技集团公司第九研究院第七七一研究所 | 微处理器指令集验证方法 |
Families Citing this family (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102736973A (zh) * | 2011-04-07 | 2012-10-17 | 中国科学技术大学 | 不变量指导的随机测试用例自动化生成方法 |
CN102360331B (zh) * | 2011-10-09 | 2014-05-07 | 中国航空无线电电子研究所 | 基于形式化描述的测试程序自动生成方法 |
CN102789418B (zh) * | 2012-06-27 | 2015-09-30 | 北京大学深圳研究生院 | 处理器功能仿真模型生成装置、方法及功能验证方法 |
CN103365777B (zh) * | 2013-07-04 | 2015-12-02 | 卫生部统计信息中心 | 一种测试用例生成方法及系统 |
CN104317715A (zh) * | 2014-10-30 | 2015-01-28 | 南京富士通南大软件技术有限公司 | 基于模拟器的中央处理器指令集的功能测试自动实施方法 |
CN104899022B (zh) * | 2015-05-12 | 2018-01-02 | 北京京东尚科信息技术有限公司 | 一种处理指令的方法和装置 |
CN108694103A (zh) * | 2017-04-11 | 2018-10-23 | 北京君正集成电路股份有限公司 | 一种检测cpu的方法及装置 |
CN108172249B (zh) * | 2017-12-22 | 2021-09-17 | 湖南国科微电子股份有限公司 | 一种NAND Flash访问操作方法、装置及系统 |
CN110275818B (zh) * | 2018-03-13 | 2024-04-30 | 龙芯中科技术股份有限公司 | 硅后验证方法、装置及存储介质 |
CN109063323B (zh) * | 2018-07-28 | 2022-09-13 | 西安微电子技术研究所 | 一种验证sdram的随机测试用例的生成方法 |
CN109901054A (zh) * | 2019-03-25 | 2019-06-18 | 苏州中晟宏芯信息科技有限公司 | 定浮点转换电路的功能覆盖率模型测试点提取方法及系统 |
CN110233772B (zh) * | 2019-04-22 | 2021-11-19 | 视联动力信息技术股份有限公司 | 一种视联网系统测试方法和装置 |
CN110532487B (zh) * | 2019-09-11 | 2022-07-29 | 北京百度网讯科技有限公司 | 标签的生成方法及装置 |
CN111045880A (zh) * | 2019-12-17 | 2020-04-21 | 湖南长城银河科技有限公司 | 芯片测试方法、验证系统及存储介质 |
CN113688046B (zh) * | 2021-08-26 | 2023-08-25 | 中国科学院上海高等研究院 | 用于处理器仿真验证的大规模用例生成方法 |
-
2009
- 2009-10-13 CN CN2009100445254A patent/CN101673236B/zh not_active Expired - Fee Related
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102902906A (zh) * | 2012-09-26 | 2013-01-30 | 中国航天科技集团公司第九研究院第七七一研究所 | 微处理器指令集验证方法 |
CN102902906B (zh) * | 2012-09-26 | 2015-06-10 | 中国航天科技集团公司第九研究院第七七一研究所 | 微处理器指令集验证方法 |
Also Published As
Publication number | Publication date |
---|---|
CN101673236A (zh) | 2010-03-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101673236B (zh) | 一种全覆盖的微处理器测试用例包自动生成方法 | |
Paulin et al. | Flexware: A flexible firmware development environment for embedded systems | |
Marwedel et al. | Code generation for embedded processors | |
CN104820613B (zh) | 一种异构多核程序的编译方法 | |
CN101763265B (zh) | 一种过程级软硬件协同设计自动化开发方法 | |
JP4619606B2 (ja) | 構成可能なプロセッサを設計する自動化されたプロセッサ生成システムおよびその方法 | |
CN103744647B (zh) | 一种基于工作流可视化开发工具的Java工作流开发系统及其方法 | |
CN107347253A (zh) | 用于专用处理器的硬件指令生成单元 | |
US8689202B1 (en) | Scheduling of instructions | |
CN104965750A (zh) | 基于Python语言的Rapidio切换器逻辑仿真验证平台及方法 | |
CN106055308A (zh) | 用于低能加速器处理器架构的设备 | |
CN107506888A (zh) | 一种通用的在线服务平台定制化评估方法和系统 | |
US9383977B1 (en) | Generation of compiler description from architecture description | |
CN106201870A (zh) | 一种测试gpu的方法及装置 | |
CN104317715A (zh) | 基于模拟器的中央处理器指令集的功能测试自动实施方法 | |
CN100504761C (zh) | 在不同种类的体系结构中映射调试信息的方法 | |
CN101727513A (zh) | 一种超长指令字处理器的设计和优化方法 | |
CN103377103B (zh) | 存储数据测试方法、装置及系统 | |
CN101882190B (zh) | 字节码中间表示程序的分模块形式化验证方法 | |
CN106897220A (zh) | 一种基于xml的系统对象模型的校验方法 | |
CN104035809B (zh) | 一种基于Dalvik虚拟机JNI机制中接口函数性能优化方法 | |
Daniel et al. | Predicate abstraction in java pathfinder | |
Igual et al. | Automatic Generation of Micro-kernels for Performance Portability of Matrix Multiplication on RISC-V Vector Processors | |
Fortin et al. | Towards mechanised semantics of hpc: The bsp with subgroup synchronisation case | |
CN110097432A (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 | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20110511 Termination date: 20161013 |
|
CF01 | Termination of patent right due to non-payment of annual fee |