一种NANDFlash控制器的验证方法

文档序号:6398974阅读:254来源:国知局
专利名称:一种NAND Flash控制器的验证方法
技术领域
本发明涉及一种NAND Flash Controller (与非闪存控制器,NFC)的验证方法。
背景技术
NAND Flash (与非快闪存储器)具有存储单元面积小,编程速度快,擦除时间短等优势,是目前业界非常流行的存储介质。当处理器要访问NAND Flash中的数据时,必须通过NFC发送指令才能完成。因此,NFC在数字SoC (System on Chip,系统级芯片/片上系统)芯片架构中构成了芯片内处理器与芯片外侧NAND Flash信息通讯中不可替代的桥梁。随着NAND Flash越来越盛行,目前市场上的NANF Flash闪存芯片型号越来越多,并且各种芯片间的差异也越来越大。当前主流的NAND Flash接口协议主要有ONFI和Toggle两种,而且由于Flash厂商的不同,所生产的NAND Flash芯片也有一些小的不同。芯片验证中虽然传统的验证方法尽力保持技术更新步伐以适应芯片设计尺寸以及复杂度的增加,但验证在面对日益复杂的SoC以及可重用的IP模块设计中面临巨大的调整,验证方法远远跟不上NFC的发展速度。因此,在搭建NFC验证平台时,一方面要考虑验证平台能够兼容两种主流Flash接口协议,并考虑到未来协议的发展,另一方面也要考虑如何面对厂商不同所带来的NANDFlash model (与非快闪存储器模型)的不同,这就对本身就很复杂的NFC验证平台提出了更高的要求。在一些实现中NAND Flash控制器设计了一种命令描述符,用于处理各种芯片之间的差异,这也导致控制器的验证变的非常复杂。NFC验证面临着SoC复杂度和IP验证复杂度持续增加的压力,设计能力与验证所提供的能力之间存在巨大的鸿沟,调查显示约有一半到三分之二的SoC项目在第一次流片后失败,而功能缺陷是其中的主要原因。在面对验证覆盖率的问题时,首先与验证平台搭建的困难,比如预测到所有可能的边界条件(corner cases),以及发现设计中深层次设计缺陷,当这些问题被发现时,修改验证平台往往是比较困难的。

发明内容
因此,本发明的目的在于,提供一种可重用的Nand Flash控制器的验证方法,降低验证平台的搭建难度。本发明采用以下技术方案
一种NAND Flash控制器的验证方法,根据NAND Flash操作命令权重创建命令权重文件,从而该验证方法包括以下步骤
1)读取所述命令权重文件,解析该命令权重文件,形成命令队列;
2)基于命令队列及权重,随机出命令序列;
3)使用工厂模式将随机到的所述命令序列进行重载,生成直接测试序列和随机测试序
列; 4)依据所生成的直接测试序列和间接测试序列对NFC进行测试;以及
5)收集测试结果匹配比较模块进行评价;
其中匹配当前的NAND Flash模型所增加的测试命令在所述命令权重文件中加入新的命令并匹配该命令分配不为零的权重,或者在解析命令权重文件后把新的测试命令加入所述命令队列。从以上技术方案可以看出,依据本发明的NAND Flash控制器的验证方法采用命令权重文件描述验证平台或者说匹配与待测NFC所需要的操作命令,验证平台读取命令权重文件,具有直观、易操作性,提高了测试的效率。由所述命令权重文件随机产生NFC操作序列,能够充分验证NFC的各种操作,提高验证的功能覆盖率。匹配待测NFC,对于新增加的测试命令,只需要修改命令权重文件就可以实现对该命令的覆盖,进一步提高了验证效率。另夕卜,匹配工厂(factory)机制对生成的测试序列的重载,进一步实现验证平台的可重用及可扩展性。上述NAND Flash控制器的验证方法,所增加的测试命令都源于基类Seq_nfc,对应地,基类Seq_nfc预留有子类开展接口,从而,根据当前待测NFC,对所述基类Seq_nfc进行继承扩展。上述NAND Flash控制器的验证方法,针对所增加的测试命令,通过伪汇编指令编写出直接测试序列,然后再验证环境中验证该直接测试序列的正确性;
在基类Seq_nfc的基础上匹配验证正确的所述测试序列扩展出新的子类,实现这个测试序列;
再把对应测试命令赋予不为零的权重写入所述命令权重文件。上述NAND Flash控制器的验证方法,所述命令权重文件按照不同的NAND Flash操作命令类型进行分类,分类后的命令以序列为单位划分权重。上述NAND Flash控制器的验证方法,验证环境中的黄金模型和驱动类通过数据传输类与步骤3)所产生的直接测试序列和间接测试序列接口。上述NAND Flash控制器的验证方法,在测试过程中需要使能看门狗。上述NAND Flash控制器的验证方法,在所述命令权重文件中含有环境类和配置类指令。下面结合说明书附图对本发明做进一步的描述,使本领域的技术人员更清楚地理解本发明。


图1为一种可重用的NAND FLASH控制器验证平台的整体架构示意图。图2为随机产生NFC操作序列的流程图。
具体实施例方式为了保证NFC验证平台能够充分测试各种Nand Flash模型及其各种命令,通过测试平台直接读取命令权重文件的方式,直观有效的控制随机测试序列,在进一步的应用中,验证平台的各个子模块应具有很强的独立性,可以实现验证平台的高覆盖率、高重用性及扩展性。
应知,权重是一个相对的概念,是针对某一指标而言。某一指标的权重是指该指标在整体评价中的相对重要程度。如学生期末总评是对学生平时成绩,期中考成绩,期末考成绩的综合评价,但是这三个成绩所占期末总评成绩的比重不一样。若平时成绩占30%,期中考成绩占30%,期末考成绩占40%,那么期末总评=平时成绩*0. 3+期中考成绩*0. 3+期末考成绩*0. 4。在以下的内容中可以对比的给出命令权重文件。如图1所示的架构,表示为一种可重用的NAND FLASH控制器的验证平台,包含以下模块
DFlash命令序列(Flash_cmdseq)模块用于实现验证平台直接读取外部命令权重文件(Flash_cmd. weight), SV (System Verilog,简称SV语言,是硬件设计和验证的语言)再进一步解析各命令序列。由于Flash的操作非常复杂,具有很多限制(Flash具体操作规范可以参考onfi协议,和一些Flash的datasheet数据表格)。Nand Flash控制器的命令描述符和Flash的操作命令组合成控制器的控制序列,Nand Flash控制器通过解码这些控制序列,完成对Nand Flash的读写擦除等各种操作。上述命令序列根据类型不同,在操作中出现的概率也是不同的。而这些序列内部的操作一方面要测试通用的Nand Flash控制序列,另一方面要根据软件设计的要求增加测试一些新的命令序列,从而要求验证平台具有灵活的序列扩展能力。因此命令权重文件是把Nand Flash的命令根据不同操作进行分类,归类后的命令以序列为单位划分权重,当随机出命令时,权重高的被随机出的概率大一些,在给定的随机次数条件下,可以覆盖所有命令,并匹配实际的操作条件下相关命令使用的频率。修改或者新增的命令序列都是源于基类Seq_nfc,在Seq_nfc中预留出子类扩展的接口,根据需求对基类Seq_nfc进行继承扩展即可。在进行验证时,只需简单的修改命令权重值,本验证平台就可以按照附图2的流程自动随机到不同权重的命令测试序列。因此,采用命令权重文件,可以使测试人员直观的、有目的的对随机测试序列进行有效控制。基类通过继承机制,可以利用已有的数据类型来定义新的数据类型。所定义的新的数据类型不仅拥有新定义的成员,而且还同时拥有旧的成员。在计算机领域称已存在的用来派生新类的类为基类,又称为父类。这就是基类。一个类的基类包括它的直接基类以及该直接基类的基类。换句话说,基类集是直接基类关系的传递闭包。除了类object (对象),每个类有且只有一个直接基类。object类没有任何直接基类,并且是所有其他类的终极基类。那么,命令权重文件作为外部文件被存放,验证平台读取命令权重文件,解析,产生命令队列。从而,所产生的命令队列中的命令为含有命令权重的命令,在此基础上,根据权重可以直接产生测试序列,也可以在产生命令队列后产生命令序列,然后再依据命令序列产生测试序列。2)随机数产生类(Gen_nfc)模块本模块根据factory机制(又叫工厂模式)将随机到的命令序列重载,从而产生直接测试序列(DTC)和随机测试序列(RTC),通过Put_trans接口将Flash_cmdseq模块和Gld_nfc模块等上下模块完全独立开。当命令测试序列有所改动时,不会影响Put_trans接口以下的模块。
在环境中针对Nand Flash的命令描述符和通用的测试序列编写了伪汇编指令。验证人员可以灵活的加入需要测试的功能序列。比如软件组想测试一组新的命令序列,首先可以通过伪汇编指令编写直接测试序列,验证这个序列的正确性。然后可以在基类Seq_nfc的基础上扩展出新的子类,实现这个测试序列,然后再在命令权重文件中将这一命令序列设为不为零的权重,验证平台就可以将其自动的调到随机的命令序列的队列中,从而实现自动化的测试新增的测试序列。关于工厂模式,通过其实例化对象,用工厂方法代替验证中的new操作。工厂模式是当前最常用的模式,著名的Jive论坛,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见。为什么工厂模式是如此常用?因为工厂模式就相当于创建实例对象的new,经常要根据类Class生成实例对象,如A a=new A()工厂模式也是用来创建实例对象的,替代为工厂模式,虽然会多做一些工作,但会给你系统带来更大的可扩展性和尽量少的修改量。我们以类Sample为例,如果要创建Sample的实例对象
Sample sample=new SampleO ;
可是,实际情况是,通常都要在创建sample实例时做点初始化的工作,比如赋值查询数据库等。首先,一般情况下,需要进行以下操作
Sample sample=new Sample (参数);
但是,如果创建sample实例时所做的初始化工作不是像赋值这样简单的事,可能是很长一段代码,如果也写入构造函数中,那代码很难处理(就需要Refactor重整)。
`
为什么说代码很难处理,分析如下,初始化工作如果是很长一段代码,说明要做的工作很多,将很多工作装入一个方法中,相当于将很多鸡蛋放在一个篮子里,是很危险的,这也是有背于Java面向对象的原则,面向对象的封装(Encapsulation)和分派(Delegation)告诉我们,尽量将长的代码分派“切割”成每段,将每段再“封装”起来(减少段和段之间耦合联系性),这样,就会将风险分散,以后如果需要修改,只要更改每段,不会再发生牵一动百的事情。这时就需要Factory工厂模式来生成对象了,不能再用上面简单new Sample (参数)。另一方面,如果Sample有个继承如MySample,,按照面向接口编程,需要将Sample抽象成一个接口。现在Sample是接口,有两个子类MySample和HisSample ,要实例化他们时,如下
Sample mysample=new MySample();
Sample hissample=new HisSample();
随着项目的深入,Sample可能还会〃生出很多儿子出来〃,那么要对这些儿子一个个实例化,更糟糕的是,可能还要对以前的代码进行修改加入后来生出儿子的实例,这在传统程序中是无法避免的。下面看一下工厂模式下的方法,即工厂方法
建立一个专门生产Sample实例的工厂
public class Factory{public static Sample creator(int which){
//getClass产生Sample —般可使用动态类装载装入类。
if (which== I)return new SampleA ();else if (which==2)return new SampleB ();
}
}
那么在程序中,如果要实例化Sample时,就使用 Sample sampIeA=Factory. creator (I);
从而,在整个就不涉及到Sample的具体子类,达到封装效果,也就减少错误修改的机 工厂方法确实为系统结构提供了非常灵活强大的动态扩展机制,只要更换一下具体的工厂方法,系统其他地方无需一点变换,就有可能将系统功能进行改头换面的变化。3)黄金模型(Gld_nfc)模块主要实现NFC的黄金模型(Golden model),这一模块与Nand Flash的接口协议和NFC的Spec (规范)相关联。由于不同厂商的Nand Flash的接口协议不同,比如onf1、toggle接口协议,或者随着Nand Flash技术的不断更新,接口协议不断升级,以及根据项目需求改动NFC的Spec时,都需要对Gld_nfC模块进行修改或者重写。因此,本模块利用factory的机制将原来的模型替换为修改后的模型,整个验证平台的其他架构不需做任何改动,实现了 NFC验证平台的最大可重用性。4)其余模块环境类和配置类(EnvCfg)模块用于实现验证环境的配置。驱动类(Drv_nfc)模块用于检测NFC寄存器的初始值,NFC与Nand Flash是否已连接以及获取命令表。命令表经Ahb总线的主机端(Ahbjnst)模块传送给NFC,NFC处理后的数据经Ahb总线的从机端(Ahb_slv)模块收集后送入计分板(Scb_nfc)模块。Scb_nfc模块用于进行golden值和DUT (Device Under Testing,待测设备)值的数据比对。从而,在图1所示,环境类和配置类的命令及匹配的参数也可以写入命令权重文件,这样,可以在解析命令权重文件后,直接对验证平台进行配置,对于操作命令则留作后续的随机命令进行随机,并通过工厂模式进行重载。依据上述可重用的NAND FLASH控制器的验证方法,具有以下有益效果
(I)验证平台直接读取命令权重文件,具有直观、易操作性,提高了测试效率;如所增加的测试命令的装载,可以把所增加的测试命令赋予一定的权重写入命令权重文件,也可以在命令权重文件解析后装入所生成的命令队列中,前者更容易实现自动化,后者开放性更好。当然,前者也具有较好的开放性,可以根据测试进程进行修改。显然,相通用的部分可以获得重用。(2)随机产生NFC操作序列,能够充分验证NFC的各种操作,提高了验证的功能覆
盖率;
(3)Gen_nfc模块和Gld_nfc模块利用factory实现了验证平台的可重用及可扩展性,以适应不同的命令测试序列和不同的Nand flash接口协议,提高了验证的自动化程度,缩短了研发周期,降低了研发成本。
权利要求
1.一种NAND Flash控制器的验证方法,其特征在于,根据NAND Flash操作命令权重创建命令权重文件,从而该验证方法包括以下步骤O读取所述命令权重文件,解析该命令权重文件,形成命令队列;2)基于命令队列及权重,随机出命令序列;3)使用工厂模式将随机到的所述命令序列进行重载,生成直接测试序列和随机测试序列;4)依据所生成的直接测试序列和间接测试序列对NFC进行测试;以及5)收集测试结果匹配比较模块进行评价;其中匹配当前的NAND Flash模型所增加的测试命令在所述命令权重文件中加入新的命令并匹配该命令分配不为零的权重,或者在解析命令权重文件后把新的测试命令加入所述命令队列。
2.根据权利要求1所述的NANDFlash控制器的验证方法,其特征在于,所增加的测试命令都源于基类Seq_nfc,对应地,基类Seq_nfc预留有子类开展接口,从而,根据当前待测 NFC,对所述基类Seq_nfc进行继承扩展。
3.根据权利要求2所述的NANDFlash控制器的验证方法,其特征在于,针对所增加的测试命令,通过伪汇编指令编写出直接测试序列,然后再验证环境中验证该直接测试序列的正确性;在基类Seq_nfc的基础上匹配验证正确的所述测试序列扩展出新的子类,实现这个测试序列;再把对应测试命令赋予不为零的权重写入所述命令权重文件。
4.根据权利要求1至3任一所述的NANDFlash控制器的验证方法,其特征在于,所述命令权重文件按照不同的NAND Flash操作命令类型进行分类,分类后的命令以序列为单位划分权重。
5.根据权利要求1所述的NANDFlash控制器的验证方法,其特征在于,验证环境中的黄金模型和驱动类通过数据传输类与步骤3)所产生的直接测试序列和间接测试序列接口。
6.根据权利要求1所述的NANDFlash控制器的验证方法,其特征在于,在测试过程中需要使能看门狗。
7.根据权利要求1所述的NANDFlash控制器的验证方法,其特征在于,在所述命令权重文件中含有环境类和配置类指令。
全文摘要
本发明公开了一种NANDFlash控制器的验证方法,根据NANDFlash操作命令权重创建命令权重文件,解析该命令权重文件,形成命令队列;基于命令队列及权重,随机出命令序列;使用工厂模式将随机到的所述命令序列进行重载,生成直接测试序列和随机测试序列;其中匹配当前的NANDFlash模型所增加的测试命令在所述命令权重文件中加入新的命令并匹配该命令分配不为零的权重,或者在解析命令权重文件后把新的测试命令加入所述命令队列。依据本发明能够降低验证平台的搭建难度。
文档编号G06F11/26GK103049363SQ20131003935
公开日2013年4月17日 申请日期2013年2月1日 优先权日2013年2月1日
发明者刘松, 张洪柳, 戴绍新, 李风志, 杨萌, 姚香君 申请人:山东华芯半导体有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1