CN101894063A - 一种用于微处理器功能验证的测试程序生成方法及装置 - Google Patents

一种用于微处理器功能验证的测试程序生成方法及装置 Download PDF

Info

Publication number
CN101894063A
CN101894063A CN 201010201216 CN201010201216A CN101894063A CN 101894063 A CN101894063 A CN 101894063A CN 201010201216 CN201010201216 CN 201010201216 CN 201010201216 A CN201010201216 A CN 201010201216A CN 101894063 A CN101894063 A CN 101894063A
Authority
CN
China
Prior art keywords
population
test procedure
row
individuality
covering
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.)
Granted
Application number
CN 201010201216
Other languages
English (en)
Other versions
CN101894063B (zh
Inventor
程旭
佟冬
张良
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Zhongzhi Core Technology Co Ltd
Peking University
Original Assignee
BEIDA ZHONGZHI MICROSYSTEM SCIENCE AND TECHNOLOGY Co Ltd BEIJING
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by BEIDA ZHONGZHI MICROSYSTEM SCIENCE AND TECHNOLOGY Co Ltd BEIJING filed Critical BEIDA ZHONGZHI MICROSYSTEM SCIENCE AND TECHNOLOGY Co Ltd BEIJING
Priority to CN2010102012166A priority Critical patent/CN101894063B/zh
Publication of CN101894063A publication Critical patent/CN101894063A/zh
Application granted granted Critical
Publication of CN101894063B publication Critical patent/CN101894063B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Abstract

一种用于微处理器功能验证的测试程序生成方法及装置;方法包括:A、随机生成μ+λ个个体并保存成原始生成种群;将所述原始生成种群作为当前种群;B、结合指令库,将当前种群中的个体转化为测试程序;C、仿真执行当前种群中的各个体转化得到的测试程序,生成功能覆盖报告;D、如果当前种群是原始生成种群,则直接进行步骤E;否则选择当前种群中的个体进行λ次交叉、变异操作,产生的新个体也保存进当前种群,然后进行步骤E;E、根据功能覆盖报告,从当前种群中选出至少μ个个体作为新一代种群;F、如果满足停止条件,则输出该新一代种群中个体对应的测试程序集;否则将该新一代种群作为当前种群,返回步骤B。

Description

一种用于微处理器功能验证的测试程序生成方法及装置
技术领域
本发明涉及微处理器的指令级验证,特别涉及一种用于微处理器功能验证的测试程序生成方法及装置。
背景技术
随着集成电路制造工艺的快速发展,微处理器设计规模和复杂度越来越高,并引入许多新的微体系结构特征,如深度流水线,动态调度,乱序执行等。微处理器作为计算机系统中的核心部件,其功能正确性是最终产品正常工作的关键,需要有效的验证方法来发现设计中潜藏的设计错误。如果存在功能验证漏洞,导致设计错误流入到最终产品中,会给企业带来巨大损失。
现阶段,微处理器芯片级验证主要采用模拟执行大量汇编测试程序的方法,其基本思想是把测试程序翻译成机器码,作为测试激励施加于待验证设计,在仿真模拟后获得输出并评估其正确性,或者与黄金参考模型的输出进行比对。
当前,主要使用定向或受限随机的方法来生成测试程序。定向测试程序生成针对性强,可以覆盖到复杂的边角情况,但该方法自动化程度低,工作量较大。受限随机方法使用约束(constrains)和偏倚(bias)技术,通过设置不同的约束条件来控制测试程序的生产方向,可以提高随机向量的质量,在一定程度上减少对人的依赖,但该方法会产生大量冗余测试程序,对约束的设置也需要工程师丰富的经验,经常需要多次尝试运行才能确定约束参数,并且在验证目标和如何产生有针对性的测试激励之间缺少关联。
当前,覆盖率反馈的测试生成(coverage directed test generation,CDG)方法通过自动覆盖分析来发现尚未覆盖到的测试点,并自动引导测试激励生成方向,可以使大部分模拟验证进程自动化,成为微处理器功能验证的研究热点之一。常用的覆盖模型,如代码覆盖模型和翻转(Toggle)覆盖模型,模型复杂度低,覆盖结果通常过于乐观,并且和功能验证兴趣点缺少关联。功能覆盖模型和所要实现的功能关联最紧密,是微处理器功能验证中最重要的覆盖模型。
演化计算是一种借鉴生物演化和自然遗传选择的思想和原理来求解实际问题的一种极为有效的方法,它采用简单的编码技术来表示各种复杂的结构,并通过对一组编码表示进行简单的遗传操作和优胜劣汰的自然选择,来指导学习和确定搜索的方向。它提供了一种求解复杂方法优化问题的通用框架,不需要事先描述问题的全部特点,不依赖于问题的具体领域,对问题的种类有很强的鲁棒性。
演化算法可以同时搜索解空间内的多个区域,而且特别适合大规模并行处理。在众多优化计算方面得到广泛的应用。Coron等使用演化计算技术来进化测试程序本身,探索得到一个执行效率更高的测试程序。经过不断的改进,已经成功应用于简单的设计如i8051,中等规模微处理器如LEON2和Pentium 4处理器的测试和验证工作中。
图1示出了Coron等提出的测试程序演化方法的流程图,其执行过程如下:
步骤101,生成初始种群,当前代数gen=0。随机生成包含μ个个体的初始种群,染色体个体使用有向图(Directed Graph,DG)来表达,DG的每个节点包含一个指针指向指令库中的宏单元(Macro)。
步骤102,确定当前种群,gen=gen+1。确定使用初始种群作为当前种群,还是使用新一代种群作为当前种群。
步骤103,将个体转化为测试程序。结合指令库,将当前种群中的个体,转化为测试程序。使用DG表达的个体,每个节点包含一个指针指向Macro,通过随机产生Macro所需的参数值,将Macro映射成一条汇编指令或代码片段,这样每条染色体就对应一个程序流,可以转化成一个有效的汇编测试程序。
步骤104,测试平台执行各测试程序,生成覆盖报告。现有的测试程序演化方法,使用覆盖率作为个体的适应度值,所以,覆盖报告中包含每个测试程序模拟执行后取得的功能覆盖率。
步骤105,判断是否发现设计错误。如果发现设计错误,则转到步骤111:输出触发设计错误的测试程序,供验证人员和设计人员分析使用,算法运行结束。如果没有发现设计错误,则转到步骤106。功能验证的目的就是发现设计错误,测试平台包含待验证设计和周期精确的黄金参考模型,可以通过对测试程序的执行结果进行比对,来判断是否存在设计错误。
步骤106,获得覆盖报告,根据覆盖率为种群中个体赋一个适应度值。个体的适应度值就是该个体在模拟执行时所取得的功能覆盖率,作为个体的评价依据。
步骤107,演化生成新的测试程序。选择当前种群中的个体进行λ次交叉、变异操作,产生λ’个新个体并合并进当前种群中。演化操作包括变异和交叉操作,可以修改DG拓扑结构或内部参数,得到新的个体。其中交叉操作对两个核交换后生成新个体。核是一个完整的指令序列段,不和核外发生分支关联。如果在选择连续节点作为核时遇到有连接到外部的分支边,则需要把其相关联节点都包含进核中。变异包括对DG拓扑结构的变异(增加节点、删除节点)和对DG节点内部参数的变异(修改节点参数值)。
步骤108,确定新一代种群。对当前种群中的个体按照适应度值排序,将适应度值最高的前μ个个体选取出来保留,作为新一代种群。
步骤109,判断是否满足停止规则。如果满足停止规则,则转到步骤110:输出最优解,即新一代种群中各个体对应的测试程序集。否则如果不满足停止规则,则转到步骤102,继续进行下一代演化。可以根据验证需求设计多种停止规则,如可以设计为达到最大演化代数时即停止运行,或者达到期望的功能覆盖率时则满足停止规则,也可以设计为达到某种稳态时则停止演化(该稳态可以是在连续指定代数内,没有搜索到更优的解)。
现有测试程序演化方法使用覆盖率作为适应度函数值,根据适应度值大小对个体排序,并将排在前面的μ个个体保留至下一代。使用这种精英保存策略存在如下弊端:
对于适应度值低的测试程序,很可能覆盖到了一些关键的边角情况。所以,只根据功能覆盖率大小来决定个体的存活,会淘汰掉一些重要的测试程序,影响验证收敛效果。
两个适应度值都很高的测试程序,可能包含许多相似基因或覆盖大部分相同的功能点。传统的保留策略会将这些测试程序都保留到下一代,导致早熟收敛。
但现有的演化测试程序自身的方法在过去的应用实例中,主要用于代码覆盖率模型或其它简单的自定义覆盖模型。不适合功能覆盖模型和需要较大规模测试程序的设计验证,这是因为微处理器功能覆盖模型通常包含大量差异度很大的兴趣点,要达到功能覆盖率目标需要大规模测试程序。而现有的测试程序演化方法,测试程序由种群中的个体映射得到,演化算法运行过程中需要检查测试程序的有效性,计算成本受染色体编码长度影响很大。
另外,现有演化测试程序方法在解空间中探索唯一的最优测试程序,这对于复杂覆盖模型需要很大的搜索努力,极大增加算法的运行时间,并且单个最优解搜索不适合功能覆盖模型的多兴趣点特征,影响算法的收敛速度。
微处理器设计的复杂度和规模较大,功能覆盖模型复杂度较高,包含大量差异度很大的兴趣点,传统的测试程序演化方法要达到功能覆盖率目标需要大规模测试程序,这对于复杂覆盖模型需要很大的搜索努力,极大增加算法的运行时间。
综上所述,使用现有的测试程序演化方法可以在解空间中搜索高品质测试程序,但用于微处理器功能覆盖模型验证时效果不佳,缺少验证微处理器功能覆盖率模型的实际经验。所以如何将测试程序演化技术应用到复杂微处理器的面向功能覆盖模型的验证中,有很强的现实意义。
发明内容
本发明要解决的技术问题是提供一种用于微处理器功能验证的测试程序生成方法及装置,能够快速、自动对大规模微处理器进行功能覆盖模型的验证,提高生成效果。
为了解决上述问题,本发明提供了一种用于微处理器功能验证的测试程序生成方法,包括:
A、随机生成μ+λ个个体并保存成原始生成种群;将所述原始生成种群作为当前种群;
B、结合指令库,将当前种群中的个体转化为测试程序;
C、仿真执行当前种群中的各个体转化得到的测试程序,生成功能覆盖报告;
D、如果当前种群是原始生成种群,则直接进行步骤E;
否则选择当前种群中的个体进行λ次交叉、变异操作,产生的新个体也保存进当前种群,然后进行步骤E;
E、根据功能覆盖报告,从当前种群中选出至少μ个个体作为新一代种群;
F、如果满足停止条件,则输出该新一代种群中个体对应的测试程序集;否则将该新一代种群作为当前种群,返回步骤B。
进一步地,所述步骤C中,所述功能覆盖报告包含每个测试程序对每个功能覆盖点的是否覆盖的情况;
所述步骤E包括:
E1、当前种群中各个体转化为的测试程序作为第一集合,功能点作为第二集合;
E2、根据功能覆盖报告,从第一集合中挑选出覆盖了最多第二集合中功能点的测试程序;将该测试程序对应的个体保存到新一代种群;
E3、从第一集合中删除该测试程序;从第二集合中删除该程序所覆盖的功能点;
E4、判断是否第一或第二集合为空,如果是则结束;否则根据功能覆盖报告,判断第一集合中剩余的各测试程序,对于第二集合中剩余的各功能点是否都不覆盖,是则结束,不是则返回步骤E2。
进一步地,所述步骤C中:
所述功能覆盖报告包含一个功能覆盖表,单元格值用于表示是否覆盖,每一行对应一个功能点,每一列对应当前种群中一个个体转化成的测试程序;
所述步骤E包括:
步骤31,找出功能覆盖表O中包含表示“覆盖”的值个数最多的一列,记为tp列;
步骤32,将tp列对应的测试程序加入到集合P,并从O中删除tp列;对于所有的行,如果该行第tp列的值为表示“覆盖”的值,则删除该行;
步骤33,判断O是否为空表或所有单元格值都为表示“不覆盖”的值;如果是,则转到步骤34;如果不是,则转到步骤31;
步骤34,将集合P中测试程序所对应的个体作为新一代种群。
进一步地,所述步骤E还包括:
如果新一代种群中的个体个数|P|未达到μ,则根据功能覆盖报告将当前种群的其它测试程序按照适应度值排序,选取排在前面的μ-|P|个测试程序,将所选取的测试程序对应的个体也保存进所述新一代种群。
进一步地,所述的方法还包括:
将全局功能覆盖目标划分成若干覆盖子目标的步骤;
对于各覆盖子目标分别进行所述步骤A到F,得到各覆盖子目标的测试程序集;
对于各覆盖子目标都进行完所述步骤A到F后,还包括将各覆盖子目标的测试程序集合并,缩减得到最终测试程序集的步骤。
本发明还提供了一种用于微处理器功能验证的测试程序生成装置,包括:
转化模块,用于结合指令库,将当前种群中的个体转化为测试程序;
生成模块,用于随机生成μ+λ个个体并保存成原始生成种群;将所述原始生成种群作为当前种群输出给所述转化模块;
测试平台,用于仿真执行当前种群中的各个体转化得到的测试程序,生成功能覆盖报告;
选择模块,用于从当前种群中选出至少μ个个体作为新一代种群;
处理模块,当收到所述测试平台的功能覆盖报告后,如果当前种群是原始生成种群,则直接启动所述选择模块;否则选择当前种群中的个体进行λ次交叉、变异操作,产生的新个体也保存进当前种群,然后再启动所述选择模块;
输出模块,用于当满足停止条件时输出该新一代种群中个体对应的测试程序集;否则将该新一代种群作为当前种群输出给所述转化模块。
进一步地,所述测试平台生成的所述功能覆盖报告包含每个测试程序对每个功能覆盖点的是否覆盖的情况;
所述选择模块包括:保存单元、选取单元、删除单元及判断单元;
所述保存单元用于将当前种群中各个体转化为的测试程序保存为第一集合,功能点保存为第二集合;然后启动所述选取单元;
所述选取单元用于根据功能覆盖报告,从第一集合中挑选出覆盖了最多第二集合中功能点的测试程序;将该测试程序对应的个体保存到新一代种群,然后启动删除单元;
所述删除单元用于从第一集合中删除该测试程序;从第二集合中删除该程序所覆盖的功能点;然后启动判断单元;
所述判断单元用于判断是否第一或第二集合为空,如果是则结束;否则根据功能覆盖报告,判断第一集合中剩余的各测试程序,对于第二集合中剩余的各功能点是否都不覆盖,是则结束,不是则启动所述选取单元。
进一步地,所述测试平台生成的所述功能覆盖报告包含一个功能覆盖表,单元格值用于表示是否覆盖,每一行对应一个功能点,每一列对应当前种群中的一个个体转化成的测试程序;
所述选择模块包括:选取单元、删除单元及判断单元;
所述选取单元用于找出功能覆盖表O中包含表示“覆盖”的值个数最多的一列,记为tp列,然后启动所述删除单元;
所述删除单元用于将tp列对应的测试程序加入到集合P,并从O中删除tp列;对于所有的行,如果该行第tp列的值为表示“覆盖”的值,则删除该行;然后启动所述判断单元;
所述判断单元用于判断O是否为空表或所有单元格值都为表示“不覆盖”的值;如果是则将集合P中各测试程序所对应的个体作为新一代种群输出;如果不是则指示所述选取单元工作。
进一步地,所述选取单元还用于当新一代种群中的个体个数|P|未达到μ时,根据功能覆盖报告将当前种群的其它测试程序按照适应度值排序,选取排在前面的μ-|P|个测试程序,将所选取的测试程序对应的个体也保存进所述新一代种群。
进一步地,所述的装置还包括:
划分模块,用于将全局功能覆盖目标划分成若干覆盖子目标;
调度模块,用于对各覆盖子目标,分别调用所述转化模块、生成模块、测试平台、选择模块、处理模块和输出模块,以得到各覆盖子目标的测试程序集;
合并模块,用于将各覆盖子目标的测试程序集合并,缩减得到最终测试程序集。
本发明的技术方案可以应用到现有微处理器验证流程中,自动面向复杂功能覆盖模型生成高品质测试程序,可用于大规模复杂微处理器功能覆盖验证领域;本发明的优化方案还可以提高验证效率。
附图说明
图1为现有测试程序演化方法流程图;
图2为实施例一中具体例子的流程图;
图3为实施例一中功能覆盖表的一个示例;
图4为实施例一中功能覆盖表最优保存算法流程图;
图5为实施例一中功能覆盖表最优保存算法的一个具体实施例;
图6为现有使用测试程序演化算法的设计验证方法流程图;
图7为实施例一的一种实施方式中具体例子的流程示意图。
具体实施方式
下面将结合附图及实施例对本发明的技术方案进行更详细的说明。
需要说明的是,如果不冲突,本发明实施例以及实施例中的各个特征可以相互结合,均在本发明的保护范围之内。另外,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
实施例一,一种用于微处理器功能验证的测试程序生成方法,包括:
A、随机生成μ+λ个个体并保存成原始生成种群;将所述原始生成种群作为当前种群;
B、结合指令库,将当前种群中的个体转化为测试程序;
C、仿真执行当前种群中的各个体转化得到的测试程序,生成功能覆盖报告;
D、如果当前种群是原始生成种群,则直接进行步骤E;
否则选择当前种群中的个体进行λ次交叉、变异操作,产生的新个体也保存进当前种群,然后进行步骤E;λ的选取方式可以跟现有技术一样;
E、根据功能覆盖报告,从当前种群中选出至少μ个个体作为新一代种群;μ是根据需要的测试程序集的规模设定的;
F、如果满足停止条件,则输出该新一代种群中个体对应的测试程序集;否则将该新一代种群作为当前种群,返回步骤B。
现有技术中是直接用原始生成的个体作为初始种群,而本实施例的特点是先对原始生成种群做一次演化进程(不同之处在于该次处理是不进行交叉、变异操作的),挑选出的至少μ个个体才作为初始种群。
另外本实施例中原始生成的个体个数为μ+λ个,扩大了初始种群的搜索范围。演化算法是一种随机搜索方法,初始种群的品质对解的收敛速度和最终测试程序的效果有很大影响;本实施例中,适当扩大初始种群的搜索范围并提高其品质,以提高初始种群的品质,从而提高了演化效果。
本实施例的步骤A中,可以但不限于将随机生成的μ+λ个个体先存入集合Pgen中,令集合Rgen=Pgen;此时集合Rgen和Pgen中个体的数量都是μ+λ;
相应的,步骤D中,可以将产生的λ’个新个体存入集合Qgen中;将Pgen和Qgen合成为集合Rgen=Pgen∪Qgen,集合Rgen中个体的数量是(μ’+λ’);这里的μ’是指步骤E中选择出的个体的个数,μ’为大于或等于μ的整数;
步骤E中,是从集合Rgen中选择新一代种群;
步骤F中,当不满足停止条件时,是将新一代种群存入Pgen中,将Pgen作为当前种群,此时,集合Pgen中个体的数量是μ’。
本实施例的步骤A中,可以但不限于在随机生成μ+λ个个体时,将当前代数gen设置为-1,选择出初始种群时,令gen=gen+1,即此时gen=0。
相应的,步骤D中可以通过判断gen是否为-1,来判断当前种群是否为初始种群。
一个具体的流程如图2所示,包括:
步骤201,首先随机生成μ+λ个个体,保存在原始生成种群里;当前代数gen=-1;
步骤202~205与步骤102~105相同,这里不再赘述。
步骤206A,获得覆盖报告,根据覆盖率为种群中个体赋一个适应度值;并根据覆盖情况建立一个功能覆盖表(详见后文)。
步骤206B,根据当前代数,来决定下一步操作。如果当前代数是第-1代,则当前种群是原始生成种群,包含μ+λ个个体,直接转入步骤208选取精英种群;否则,当前种群是由原始生成种群经过一次演化过程得到的初始种群,或演化生成的新一代种群,转入步骤207进行演化操作。
步骤207与步骤107相同,这里不再赘述。
步骤208,选择μ’个个体作为新一代种群;μ’为大于或等于μ的整数。可以使用最优保存算法选择,详见后文。
步骤209~211与步骤109~111相同,这里不再赘述。
本实施例中,所述步骤E可以采用最优保存算法选择,该算法是借鉴基于贪心算法的测试程序集缩减技术,选择一个最优测试程序集作为精英群体并保存到新一代种群。如果所述精英群体中个体数量小于μ,则对余下的个体按照适应度函数值排序,并选择适应度值高的个体一同保存到新一代种群;如果大于或等于μ,则一起保存到新一代种群。
采用最优保存算法时,所述步骤C中,所述功能覆盖报告除了包含每个测试程序取得的覆盖率之外,还包含更详细的每个测试程序对每个功能覆盖点的覆盖情况,即是否覆盖的情况。
所述步骤E具体可以包括:
E1、当前种群中各个体转化为的测试程序作为第一集合,功能点作为第二集合;
E2、根据功能覆盖报告,从第一集合中挑选出覆盖了最多第二集合中功能点的测试程序;将该测试程序对应的个体保存到新一代种群;
E3、从第一集合中删除该测试程序;从第二集合中删除该程序所覆盖的功能点;
E4、判断是否第一或第二集合为空,如果是则结束;否则根据功能覆盖报告,判断第一集合中剩余的各测试程序,对于第二集合中剩余的各功能点是否都不覆盖,是则结束,不是则返回步骤E2。
如果新一代种群中的个体个数|P|未达到μ,则根据功能覆盖报告将当前种群的其它测试程序按照适应度值排序,选取排在前面的μ-|P|个测试程序,将所选取的测试程序对应的个体也保存进所述新一代种群。
本实施例中,所述步骤C中,所述功能覆盖报告可以但不限于包含一个功能覆盖表,以表示所述覆盖情况,本实施例中,所述功能覆盖表是一个二维表格O(m,n),单元格的取值为0或1,该二维表格记录测试程序集T={t1,t2,...tn}对功能点集C={c1,c2,...cm}的覆盖情况。功能点集C和测试程序集T构成O(m,n)的行列索引。如果测试程序tj覆盖ci功能点,则单元格O(i,j)=1,否则如果测试程序ti没有覆盖ci功能点,则单元格O(i,j)=0当每一行对应一个功能点时,行数固定不变;每一列对应种群中的一个个体转化成的测试程序,本实施例采用可变种群个体数量的方案,所以功能覆盖表的列数会随着种群中个体数量的变化而变化。
图3为功能覆盖表的一个具体示例,在该示例中,测试程序的个数n=8,功能覆盖点的个数m=9。设C(ti)表示测试程序ti覆盖到的功能点集合,
Figure BSA00000157417400121
Figure BSA00000157417400122
则根据表格中的单元格值(“1”表示覆盖,“0”表示不覆盖),可以看出测试程序集ti(i=1~n)对功能点集ci(i=1~m)的覆盖情况如下(在C(ti)集合内的功能点表示被ti覆盖的功能点):
C(t1)={c2,c4,c9};
C(t2)={c7};
C(t3)={c1,c4};
C(t4)={c5,c9};
C(t5)={c2,c4,c5,c7,c9};
C(t6)={c3};
C(t7)={c1,c4,c5,c7};
C(t8)={c2,c7,c9};
当使用功能覆盖表时,所述步骤E如图4所示,具体可以包括下列步骤:
步骤401,找出功能覆盖表O中包含“1”(即表示“覆盖”的值)的个数最多的一列,记为tp列。该步骤是用贪心算法选择一个可以覆盖最多功能点的测试程序。
步骤402,将tp列对应的测试程序加入到集合P,并从O中删除tp列及tp覆盖的所有行(即对于所有的行,如果该行第tp列的值为“1”,则删除该行);该步骤将选出的测试程序加入到保留集合中,同时将该测试程序覆盖到的所有功能点从功能覆盖表O中删除,在以后的步骤中不需要考虑。
步骤403,判断O是否为空表或所有单元格值(元素值)都为0(即表示“不覆盖”的值)。如果是,则选择完成,转到步骤404;如果不是,则转到步骤401,继续贪心选择过程。
步骤404,判断集合P中测试程序数量是否小于设定的种群规模μ。如果小于μ,则转到步骤405,选择合适的测试程序填满;否则,转到步骤406;
步骤405,对集合P之外的测试程序,依据适应度值排序,选取排在前面的μ-|P|个测试程序,放入集合P中,|P|为集合P中测试程序的个数。保证种群规模至少是μ。
步骤406,将集合P中测试程序所对应的个体作为新一代种群。
如果是用行和列分别代表多个测试程序和多个功能点,则实现过程和上面的步骤一致,只要互换“行”和“列”即可,这里不再赘述。
本实施例中的方法基于功能覆盖表反馈,使用基于功能覆盖表的最优保存策略,并使用扩大初始种群搜索范围和可变种群个体数量技术。可以看出,传统测试程序演化方法探索得到的是单一测试程序,而本实施例在解空间中探索一个最优测试程序集,多点搜索特性更适合复杂功能覆盖模型的特点。
图5是基于功能覆盖表的最优保存算法进行步骤E的一个具体实施例,设μ=2,其过程如下:
功能覆盖表501是初始功能覆盖表;首先贪心选择t5列,并将t5加入到保留集合P中,P={t5}。删除t5对应的列,同时删除t5覆盖的所有行,这些行包括{c2,c4,c5,c7,c9},此时生成新的功能覆盖表502。对功能覆盖表502,再次使用贪心选择,选取t3列,并将t3加入到保留集合P中,P={t5,t3}。删除t3对应的列,同时删除t3覆盖的所有行,这些行包括{c1},此时生成新的功能覆盖表503。对功能覆盖表503,再次使用贪心选择,选取t6列,并将t6加入到保留集合P中,P={t5,t3,t6}。删除t6对应的列,同时删除t6覆盖的所有行,这些行包括{c3},此时生成新的功能覆盖表504。功能覆盖表504所有单元格值都为0,则贪心选择过程结束。集合P中测试程序数量|P|=3,大于设定的种群规模μ,则将P中测试程序所对应的3个个体,全部保留下来作为新一代种群。
本实施例的一种实施方式中,当要解决大规模复杂微处理器的自动化测试程序生成及功能验证问题,并采用上述测试程序演化方法时,整个生成方法还可以包括:
步骤一、将全局功能覆盖目标划分成若干覆盖子目标;
步骤二、对每个覆盖子目标,分别进行所述步骤A~F;得到各覆盖子目标的测试程序集;
步骤三、对于各覆盖子目标都进行完所述步骤A到F后,将各覆盖子目标的测试程序集合并,面向全局功能覆盖目标进行测试程序集缩减,得到最终测试程序集。
所述步骤一中,可以人工根据经验划分覆盖子目标,也可以预设一定的划分策略后,由系统自动划分覆盖子目标。
本实施例中,所述步骤二中的各测试程序演化方法可以并行运行,互不干涉。
本实施例中,所述步骤三可以使用现有的任何测试程序集缩减技术。
可见,该实施例的演化进程面向全局功能覆盖目标,通过演化算法探索得到一个最优的测试程序集;将目标划分后,多个演化进程并行,可提高生成测试程序的效率。
现有的方式如图6所示,只包括:
步骤601、确定功能覆盖目标;
步骤602、进行测试程序演化进程;
步骤603、得到最终的测试程序集。
而该实施方式的一个具体例子如图7所示,包括:
步骤702,将全局功能覆盖目标划分为若干个覆盖子目标。传统功能验证流程中,制定功能验证计划时会对覆盖任务进行粗粒度分类,如控制相关的功能验证,数据相关功能验证等,此时的分类只考虑覆盖目标的关联、方便分工及对验证进程的管理,没有考虑是否适合自动化测试程序生成。如果在验证计划制定阶段就考虑对功能覆盖模型进一步划分,可以利于后续功能覆盖反馈的自动化测试程序生成。覆盖率模型的大小应该合理选择。
模型不应该太大,以至于很难完成自动覆盖或增加分析难度;模型不应该太小,否则会包含重复的初始化过程,降低验证效率。模型大小合理的结果是为每个子目标生成的测试程序,一次性可以覆盖多个覆盖点,并且不会导致测试程序集规模太大。
步骤703,为每个子目标独立运行测试程序生成,即进行步骤201~211。
本实施例中,覆盖目标划分完毕后,可以但不限于根据每个子目标的特点,有针对性地修改指令库和算法运行参数,比如对于和分支有关的覆盖目标,可以适当提高分支指令出现概率;对于流水线冒险有关的覆盖目标,可以减小寄存器范围,提高发生冒险的可能性。
本实施例中,在记录子目标覆盖信息表用于反馈指导的同时,还要记录最终测试程序集对全局目标的覆盖情况,维护全局功能覆盖信息表,在测试程序集缩减阶段使用。
步骤704,将上一步面向每个子目标生成的测试程序集合并为一个集合。
步骤705,对合并后的集合使用测试程序集缩减技术,得到精简后的最终测试程序集。
由于各覆盖子目标独立运行演化测试程序,会导致面向一个子目标生成的测试程序集覆盖到其它子目标的功能点。将所有测试程序集合并起来作为实现全局覆盖目标的测试程序集时,可能会存在少量冗余的测试程序。因此,在流程的最后阶段,使用测试程序集缩减技术来进一步面向全局覆盖目标优化测试程序集。
在步骤703的并行测试程序演化生成时,已经各自记录了对全局目标的覆盖情况,所以可以直接运用测试程序集缩减技术。测试程序集缩减没有改变测试程序本身,但可以在保证覆盖率的前提下缩减整个测试程序集规模,提高模拟执行效率,特别是回归测试效率。测试程序集缩减问题实际上可归结为求解集合覆盖问题,被证明是NP难问题,使用精确解法非常耗时,一般采用启发式算法来解决,当然,任何测试程序集缩减技术都可以应用到本实施例流程中。
实施例二,一种用于微处理器功能验证的测试程序生成装置,包括:
转化模块,用于结合指令库,将当前种群中的个体转化为测试程序;
生成模块,用于随机生成μ+λ个个体并保存成原始生成种群;将所述原始生成种群作为当前种群输出给所述转化模块;
测试平台,用于仿真执行当前种群中的各个体转化得到的测试程序,生成功能覆盖报告;
选择模块,用于从当前种群中选出至少μ个个体作为新一代种群;
处理模块,当收到所述测试平台的功能覆盖报告后,如果当前种群是原始生成种群,则直接启动所述选择模块;否则选择当前种群中的个体进行λ次交叉、变异操作,产生的新个体也保存进当前种群,然后再启动所述选择模块;
输出模块,用于当满足停止条件时输出该新一代种群中个体对应的测试程序集;否则将该新一代种群作为当前种群输出给所述转化模块。
本实施例中,所述测试平台生成的所述功能覆盖报告包含每个测试程序对每个功能覆盖点的是否覆盖的情况;
所述选择模块包括:保存单元、选取单元、删除单元及判断单元;
所述保存单元用于将当前种群中各个体转化为的测试程序保存为第一集合,功能点保存为第二集合;然后启动所述选取单元;
所述选取单元用于根据功能覆盖报告,从第一集合中挑选出覆盖了最多第二集合中功能点的测试程序;将该测试程序对应的个体保存到新一代种群,然后启动删除单元;
所述删除单元用于从第一集合中删除该测试程序;从第二集合中删除该程序所覆盖的功能点;然后启动判断单元;
所述判断单元用于判断是否第一或第二集合为空,如果是则结束;否则根据功能覆盖报告,判断第一集合中剩余的各测试程序,对于第二集合中剩余的各功能点是否都不覆盖,是则结束,不是则启动所述选取单元。
本实施例中,所述测试平台生成的所述功能覆盖报告包含一个功能覆盖表,单元格值用于表示是否覆盖,每一行对应一个功能点,每一列对应当前种群中的一个个体转化成的测试程序;
所述选择模块包括:选取单元、删除单元及判断单元;
所述选取单元用于找出功能覆盖表O中包含表示“覆盖”的值个数最多的一列,记为tp列,然后启动所述删除单元;
所述删除单元用于将tp列对应的测试程序加入到集合P,并从O中删除tp列;对于所有的行,如果该行第tp列的值为表示“覆盖”的值,则删除该行;然后启动所述判断单元;
所述判断单元用于判断O是否为空表或所有单元格值都为表示“不覆盖”的值;如果是则将集合P中各测试程序所对应的个体作为新一代种群输出;如果不是则指示所述选取单元工作。
本实施例中,所述选取单元还用于当新一代种群中的个体个数|P|未达到μ时,根据功能覆盖报告将当前种群的其它测试程序按照适应度值排序,选取排在前面的μ-|P|个测试程序,将所选取的测试程序对应的个体也保存进所述新一代种群。
本实施例中,所述的装置还包括:
划分模块,用于将全局功能覆盖目标划分成若干覆盖子目标;
调度模块,用于对各覆盖子目标,分别调用所述转化模块、生成模块、测试平台、选择模块、处理模块和输出模块,以得到各覆盖子目标的测试程序集;
合并模块,用于将各覆盖子目标的测试程序集合并,缩减得到最终测试程序集。
此时所述装置里可以有多套所述转化模块、生成模块、测试平台、选择模块、处理模块和输出模块,分别对各覆盖子目标进行处理;也可以是这些模块中的全部或部分并行的对多个覆盖子目标的相应演化进程进行处理,比如测试平台可以并行对多个覆盖子目标的测试程序进行仿真,这样用一个测试平台即可。实际应用时,可以根据模块的处理能力、覆盖子目标的数量等选择各功能模块(所述转化模块、生成模块、测试平台、选择模块、处理模块和输出模块中的全部或部分)是用多个分别完成不同覆盖子目标的演化进程,还是用一个并行或串行完成不同覆盖子目标的演化进程。
其它实现细节可同实施例一。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
当然,本发明还可有其他多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明的权利要求的保护范围。

Claims (10)

1.一种用于微处理器功能验证的测试程序生成方法,包括:
A、随机生成μ+λ个个体并保存成原始生成种群;将所述原始生成种群作为当前种群;
B、结合指令库,将当前种群中的个体转化为测试程序;
C、仿真执行当前种群中的各个体转化得到的测试程序,生成功能覆盖报告;
D、如果当前种群是原始生成种群,则直接进行步骤E;
否则选择当前种群中的个体进行λ次交叉、变异操作,产生的新个体也保存进当前种群,然后进行步骤E;
E、根据功能覆盖报告,从当前种群中选出至少μ个个体作为新一代种群;
F、如果满足停止条件,则输出该新一代种群中个体对应的测试程序集;否则将该新一代种群作为当前种群,返回步骤B。
2.如权利要求1所述的方法,其特征在于:
所述步骤C中,所述功能覆盖报告包含每个测试程序对每个功能覆盖点的是否覆盖的情况;
所述步骤E包括:
E1、当前种群中各个体转化为的测试程序作为第一集合,功能点作为第二集合;
E2、根据功能覆盖报告,从第一集合中挑选出覆盖了最多第二集合中功能点的测试程序;将该测试程序对应的个体保存到新一代种群;
E3、从第一集合中删除该测试程序;从第二集合中删除该程序所覆盖的功能点;
E4、判断是否第一或第二集合为空,如果是则结束;否则根据功能覆盖报告,判断第一集合中剩余的各测试程序,对于第二集合中剩余的各功能点是否都不覆盖,是则结束,不是则返回步骤E2。
3.如权利要求1所述的方法,其特征在于,所述步骤C中:
所述功能覆盖报告包含一个功能覆盖表,单元格值用于表示是否覆盖,每一行对应一个功能点,每一列对应当前种群中一个个体转化成的测试程序;
所述步骤E包括:
步骤31,找出功能覆盖表O中包含表示“覆盖”的值个数最多的一列,记为tp列;
步骤32,将tp列对应的测试程序加入到集合P,并从O中删除tp列;对于所有的行,如果该行第tp列的值为表示“覆盖”的值,则删除该行;
步骤33,判断O是否为空表或所有单元格值都为表示“不覆盖”的值;如果是,则转到步骤34;如果不是,则转到步骤31;
步骤34,将集合P中测试程序所对应的个体作为新一代种群。
4.如权利要求2或3所述的方法,其特征在于,所述步骤E还包括:
如果新一代种群中的个体个数|P|未达到μ,则根据功能覆盖报告将当前种群的其它测试程序按照适应度值排序,选取排在前面的μ-|P|个测试程序,将所选取的测试程序对应的个体也保存进所述新一代种群。
5.如权利要求1到3中任一项所述的方法,其特征在于,还包括:
将全局功能覆盖目标划分成若干覆盖子目标的步骤;
对于各覆盖子目标分别进行所述步骤A到F,得到各覆盖子目标的测试程序集;
对于各覆盖子目标都进行完所述步骤A到F后,还包括将各覆盖子目标的测试程序集合并,缩减得到最终测试程序集的步骤。
6.一种用于微处理器功能验证的测试程序生成装置,其特征在于,包括:
转化模块,用于结合指令库,将当前种群中的个体转化为测试程序;
生成模块,用于随机生成μ+λ个个体并保存成原始生成种群;将所述原始生成种群作为当前种群输出给所述转化模块;
测试平台,用于仿真执行当前种群中的各个体转化得到的测试程序,生成功能覆盖报告;
选择模块,用于从当前种群中选出至少μ个个体作为新一代种群;
处理模块,当收到所述测试平台的功能覆盖报告后,如果当前种群是原始生成种群,则直接启动所述选择模块;否则选择当前种群中的个体进行λ次交叉、变异操作,产生的新个体也保存进当前种群,然后再启动所述选择模块;
输出模块,用于当满足停止条件时输出该新一代种群中个体对应的测试程序集;否则将该新一代种群作为当前种群输出给所述转化模块。
7.如权利要求6所述的装置,其特征在于:
所述测试平台生成的所述功能覆盖报告包含每个测试程序对每个功能覆盖点的是否覆盖的情况;
所述选择模块包括:保存单元、选取单元、删除单元及判断单元;
所述保存单元用于将当前种群中各个体转化为的测试程序保存为第一集合,功能点保存为第二集合;然后启动所述选取单元;
所述选取单元用于根据功能覆盖报告,从第一集合中挑选出覆盖了最多第二集合中功能点的测试程序;将该测试程序对应的个体保存到新一代种群,然后启动删除单元;
所述删除单元用于从第一集合中删除该测试程序;从第二集合中删除该程序所覆盖的功能点;然后启动判断单元;
所述判断单元用于判断是否第一或第二集合为空,如果是则结束;否则根据功能覆盖报告,判断第一集合中剩余的各测试程序,对于第二集合中剩余的各功能点是否都不覆盖,是则结束,不是则启动所述选取单元。
8.如权利要求6所述的装置,其特征在于:
所述测试平台生成的所述功能覆盖报告包含一个功能覆盖表,单元格值用于表示是否覆盖,每一行对应一个功能点,每一列对应当前种群中的一个个体转化成的测试程序;
所述选择模块包括:选取单元、删除单元及判断单元;
所述选取单元用于找出功能覆盖表O中包含表示“覆盖”的值个数最多的一列,记为tp列,然后启动所述删除单元;
所述删除单元用于将tp列对应的测试程序加入到集合P,并从O中删除tp列;对于所有的行,如果该行第tp列的值为表示“覆盖”的值,则删除该行;然后启动所述判断单元;
所述判断单元用于判断O是否为空表或所有单元格值都为表示“不覆盖”的值;如果是则将集合P中各测试程序所对应的个体作为新一代种群输出;如果不是则指示所述选取单元工作。
9.如权利要求7或8所述的装置,其特征在于:
所述选取单元还用于当新一代种群中的个体个数|P|未达到μ时,根据功能覆盖报告将当前种群的其它测试程序按照适应度值排序,选取排在前面的μ-|P|个测试程序,将所选取的测试程序对应的个体也保存进所述新一代种群。
10.如权利要求6到8中任一项所述的装置,其特征在于,还包括:
划分模块,用于将全局功能覆盖目标划分成若干覆盖子目标;
调度模块,用于对各覆盖子目标,分别调用所述转化模块、生成模块、测试平台、选择模块、处理模块和输出模块,以得到各覆盖子目标的测试程序集;
合并模块,用于将各覆盖子目标的测试程序集合并,缩减得到最终测试程序集。
CN2010102012166A 2010-06-13 2010-06-13 一种用于微处理器功能验证的测试程序生成方法及装置 Active CN101894063B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2010102012166A CN101894063B (zh) 2010-06-13 2010-06-13 一种用于微处理器功能验证的测试程序生成方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2010102012166A CN101894063B (zh) 2010-06-13 2010-06-13 一种用于微处理器功能验证的测试程序生成方法及装置

Publications (2)

Publication Number Publication Date
CN101894063A true CN101894063A (zh) 2010-11-24
CN101894063B CN101894063B (zh) 2012-09-26

Family

ID=43103258

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2010102012166A Active CN101894063B (zh) 2010-06-13 2010-06-13 一种用于微处理器功能验证的测试程序生成方法及装置

Country Status (1)

Country Link
CN (1) CN101894063B (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102567165A (zh) * 2011-12-29 2012-07-11 中国科学院自动化研究所 对寄存器传输级硬件实现进行验证的系统及方法
CN105630680A (zh) * 2015-12-28 2016-06-01 中国科学院微电子研究所 一种随机测试程序生成方法
CN109557460A (zh) * 2019-02-18 2019-04-02 深兰人工智能芯片研究院(江苏)有限公司 一种基于fpga的卷积神经网络算法的测试方法及设备
CN111523283A (zh) * 2020-04-16 2020-08-11 北京百度网讯科技有限公司 一种验证处理器的方法、装置、电子设备及存储介质

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108694103A (zh) * 2017-04-11 2018-10-23 北京君正集成电路股份有限公司 一种检测cpu的方法及装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1873626A (zh) * 2005-06-01 2006-12-06 中兴通讯股份有限公司 一种自动生成桩和驱动函数的单元测试系统及方法
CN101436128A (zh) * 2007-11-16 2009-05-20 北京邮电大学 软件测试用例自动生成方法及系统
CN101551842A (zh) * 2009-05-05 2009-10-07 天津大学 一种基于模型驱动的安全测试方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1873626A (zh) * 2005-06-01 2006-12-06 中兴通讯股份有限公司 一种自动生成桩和驱动函数的单元测试系统及方法
CN101436128A (zh) * 2007-11-16 2009-05-20 北京邮电大学 软件测试用例自动生成方法及系统
CN101551842A (zh) * 2009-05-05 2009-10-07 天津大学 一种基于模型驱动的安全测试方法

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102567165A (zh) * 2011-12-29 2012-07-11 中国科学院自动化研究所 对寄存器传输级硬件实现进行验证的系统及方法
CN102567165B (zh) * 2011-12-29 2014-04-23 中国科学院自动化研究所 对寄存器传输级硬件实现进行验证的系统及方法
CN105630680A (zh) * 2015-12-28 2016-06-01 中国科学院微电子研究所 一种随机测试程序生成方法
CN105630680B (zh) * 2015-12-28 2018-12-18 中国科学院微电子研究所 一种随机测试程序生成方法
CN109557460A (zh) * 2019-02-18 2019-04-02 深兰人工智能芯片研究院(江苏)有限公司 一种基于fpga的卷积神经网络算法的测试方法及设备
CN111523283A (zh) * 2020-04-16 2020-08-11 北京百度网讯科技有限公司 一种验证处理器的方法、装置、电子设备及存储介质
CN111523283B (zh) * 2020-04-16 2023-05-26 北京百度网讯科技有限公司 一种验证处理器的方法、装置、电子设备及存储介质

Also Published As

Publication number Publication date
CN101894063B (zh) 2012-09-26

Similar Documents

Publication Publication Date Title
Ding et al. Improved particle swarm optimization algorithm based novel encoding and decoding schemes for flexible job shop scheduling problem
Erbas et al. Multiobjective optimization and evolutionary algorithms for the application mapping problem in multiprocessor system-on-chip design
Rahimi-Vahed et al. A multi-objective scatter search for a mixed-model assembly line sequencing problem
Rashid et al. A review on assembly sequence planning and assembly line balancing optimisation using soft computing approaches
Coello et al. Solving multiobjective optimization problems using an artificial immune system
Campos et al. Context-independent scatter and tabu search for permutation problems
CN104239213A (zh) 一种面向航天器自动化测试的并行测试任务两阶段调度方法
CN101894063B (zh) 一种用于微处理器功能验证的测试程序生成方法及装置
CN104035816A (zh) 一种基于改进nsga-ii的云计算任务调度方法
CN110472790A (zh) 一种多无人船路径规划方法、终端设备及存储介质
Da Ronco et al. A simplex crossover based evolutionary algorithm including the genetic diversity as objective
US20070179917A1 (en) Intelligent design optimization method and system
CN111209192A (zh) 一种基于双混沌鲸鱼优化算法的测试用例自动生成方法
Babazadeh et al. A novel meta-heuristic approach to solve fuzzy multi-objective straight and U-shaped assembly line balancing problems
Carr et al. Scalable contour tree computation by data parallel peak pruning
De Souza et al. A hybrid binary multi-objective particle swarm optimization with local search for test case selection
Wang et al. Solving task scheduling problems in cloud manufacturing via attention mechanism and deep reinforcement learning
CN106919504B (zh) 一种基于ga算法的测试数据进化生成方法
CN109961129A (zh) 一种基于改进粒子群的海上静止目标搜寻方案生成方法
Khan et al. The benefits of co-evolutionary Genetic Algorithms in voyage optimisation
Coello Evolutionary multiobjective optimization: current and future challenges
CN114239237A (zh) 一种支持数字孪生的配电网仿真场景生成系统与方法
Avigad et al. Simultaneous concept-based evolutionary multi-objective optimization
CN104392317A (zh) 一种基于遗传文化基因算法的项目调度方法
Zhan et al. An automatic heuristic design approach for seru scheduling problem with resource conflicts

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
ASS Succession or assignment of patent right

Owner name: JI NAN ZHONGZHI INFORMATION TECHNOLOGY CO., LTD. B

Effective date: 20111229

C41 Transfer of patent application or patent right or utility model
TA01 Transfer of patent application right

Effective date of registration: 20111229

Address after: 100080, Beijing Haidian District Zhongguancun 151 North Street, building 11, resources

Applicant after: Beida Zhongzhi Microsystem Science and Technology Co., Ltd., Beijing

Co-applicant after: Jinan Dpstor Co., Ltd.

Co-applicant after: Peking University

Address before: 100080, Beijing Haidian District Zhongguancun 151 North Street, building 11, resources

Applicant before: Beida Zhongzhi Microsystem Science and Technology Co., Ltd., Beijing

C14 Grant of patent or utility model
GR01 Patent grant
C41 Transfer of patent application or patent right or utility model
TR01 Transfer of patent right

Effective date of registration: 20160425

Address after: 100080 Beijing City, Haidian District Zhongguancun No. 151 North Street Yanyuan resources building room 1107

Patentee after: Beijing Zhongzhi core technology Co. Ltd.

Patentee after: Peking University

Address before: 100080, Beijing Haidian District Zhongguancun 151 North Street, building 11, resources

Patentee before: Beida Zhongzhi Microsystem Science and Technology Co., Ltd., Beijing

Patentee before: Jinan Dpstor Co., Ltd.

Patentee before: Peking University