跟着一些新科技的呈现,例如Constrained-random Data Generation、Assertion-based Verification、Coverage-driven Verification以及Formal Model Checking等,衡量功用验证(Functional
Verification)作业功率的办法现已大大不一样。尽管模仿(Simulation)仍将继续扮演实务上验证作业中不行或缺的部份,但当咱们在评价整个验证进程的时分,仿真的速度现已不再是最首要的思考基准。运用者可以藉由上述多项新科技的帮忙,调配原先所独自凭借的模仿,完结更领先的验证作业。如此一来,尽管今天世上的描绘继续以惊人速度杂乱化,描绘者依然可以因本人的验证作业能找出各式各样的偏远个案(Corner cases)而充溢决心。
可是,单纯让作业「跑得更快」现已不够了,眼前可以看到的描绘现已变得太大且太杂乱,无法成功猜测一切的偏远个案(Corner cases),因而,验证战略有必要批改,而为了要清晰界说出怎样改动才干正确且满足地到达政策,有必要先界说清晰几件作业,也就是一个成功的验证次序一切必要到达的根本政策如下:
?有必要通知运用者上述两项政策何时现已被到达了。
长久以来,模仿就是验证(Verification)的核心技能。验证工程师对准需求验证的描绘,发展出测验档来发作所需求的测验鼓励(Stimuli)写入在描绘里边,在完结模仿之后查看作用是不是得到正确的反响。一切的测验都需求花时刻来编写、除错还有实行。当咱们断定某一个测验可以成功地被实行而且掩盖某特定功用之后,咱们会将它参加回归测验群组(Regression Suite)傍边,然后着手编撰下一个测验档,当然又得颠末编写、除错以及实行等步调。这样的办法使得担任测验的工程师为了可以掩盖描绘里边一切不一样的特性而编撰出不一样的测验档,这是为了完结验证作业的第一个政策。当参加越多功用在描绘里时,就得花更多时刻并参加更多的测验文件来到达政策。
在以仿真为主的流程里,验证工程师首要须把描绘里边的根底架构(Infrastructure)先串好,再想办法编写测验档,然后灌入描绘里边,纪录并查看作用。这种树立测验平台(Test-Bench)的办法可以会占去绝大多数的验证时刻,乃至变成整个企划的要害要径。一般所谓的测验平台主动化指的是藉由EDA东西的帮忙,运用某些办法论来树立上述的验证环境,意图是让验证者在最短的时刻内检测完最多的特性。因而,测验平台主动化的质量好坏就决议于可以在多短的时刻内树立起所需求的环境,并发展出一切的测验档。
若将测验平台比方作一台大机器,上面有许多的开关和旋钮,而测验档就是一连串实行「操控开关」和「改动旋钮」的特定次序指令作业。可想而知,若是机器上面有越多的开关和旋钮,而它们上面又各自有越多的刻度,那测验档编撰者就有必要得花更多的时刻来描绘一切可以的情境。每个情境会经由不一样的途径跑过描绘里边不一样的情况,也一同测完特定的一些功用。在如此的情况底下,若是想要得到更高的生产力,好像就得想办法让验证东西可以主动地操控旋钮和开关,以树立更多种的情境来完结测验。
上述的测验平台主动化可以运用受束缚型随机(Constrained-Random, CR)调配模仿来完结,其精力是:每一个测验档的确描绘一堆可以的情境,而仿真器自身在每次被发动(Invocation)时会主动挑选其间的一种来实行。而为了帮忙咱们可以有用操控开关及旋钮,市面上所看到如SystemVerilog和SystemC这样的验证言语供给可运用束缚条件(Constraints)的办法来描绘测验鼓励的情境。藉以操控驱动描绘信号和买卖的数值在必定的合法(Valid)规模。因而,仿真器便能随机发作影响所需求的数值,而且在此一同束缚条件(Constraints)包管生出来的情境都是正确的。要跑下一个情境时,咱们可以很轻松地在仿真器中调配另一个不一样的随机种子,生出不一样但合法的影响,然后查验另一个新的特性。
幻想一个Bus-Based的描绘,其规矩(Protocol)答应单字组(Single-Word)和脉冲(Burst)两种类型的存取。可以运用描绘发作在总线上面的处置(Transaction)来建构一个测验,然后让处置读写办法和总线形式(Bus mode)可以被随机决议。运用「CR」,运用者可以仅用一个测验就验证完一切的总线形式,更有时机发掘出一些偏远个案,例如在一个Single Write之后立刻来了一个Burst-Read的情况。而若是在Bus上面的多个设备都对应到不一样的地址规模(Address
Range),或是某些设备并不撑持一切的总线形式,咱们所要做的仅仅更改本来的束缚条件来随机发作地址信息,而且束缚总线的形式,让测验只会在合理地址规模内成为供给的形式之一。这样一来,便可以测验总线上每一个设备是在一切被撑持形式之下的行动,而且可以包管不包罗任何所没有被撑持的情况会发作。
包罗率导向验证法
(Coverage-Driven Verification)
藉由上述比如,在真实开端进行测验之前并无法得知会被选用的地址(address)和形式(mode),由于它们是被随机发作出来的,所以在进行仿真的时分记载下某些信息是必要的,意图是弄清晰哪些情境是真实被实行过的,这样纪录的举措一般被称作「功用包罗率(Functional Coverage)」剖析,所得出的数据关于验证进程的功率性一望而知。假使咱们可以运用包罗率剖析的数据来厘清某一个特定的测验测能否测到某个想测的功用,或是终究测的好不好,接下来再将此数据报答给处置次序来决议验证的下一步该怎样进行,这样的办法称为「包罗率导向验证(Coverage-Driven Verification, CDV)」。在本文所谓「高阶的验证办法」里,CDV的首要精力在于能主动化纪录并剖析某些测验情境能否现已被实行,然后运用这些信息帮忙剩下来的验证作业可以更有用率地被完结。
CDV是运用单一测验随机发作出测验鼓励,进而主动生产出多样的情境,由于其与生俱来的「随机」特性可以让本来简略的一些测验有才干找出偏远个案的过错(Corner Case Bugs),也就是一些描绘者压根儿也不会想到的情况。当包罗率(Coverage)的信息被搜集结束后,新的测验可以被主动化或是用人工树立出来,其树立的原则为更改束缚条件(Constraints),把未被掩盖的功用或情境作为验证政策。一个杰出的CDV运用会需求运用者运用断语(Assertions)或是其它机制来具体指定其所必要实行到之包罗点(Coverage Points)或是特定行动(Behavior)。
功用包罗率(Functional Coverage)这个用语,在不一样的文章与引用途会有不一样的寓意。在最根本的情况之下,包罗率剖析就是纪录一些数据,以断定能否一切情境都被测验结束,其实,运用一些简略的Checkbox加上EXCEL次序就可以完结一个包罗率剖析的表格,而一个缺乏经历的工程师可以就会运用这个表格调配波形图的办法来调查一个Bus-Based描绘,辛苦地剖析某些地址和形式能否被实行过。
正如所谓次序代码包罗率(Code Coverage)存在许多不一样的类型,如Line、Toggle、Path、Expression等,功用包罗率也有许多的细分类,其决议于所要量测的政策,像测验包罗率(Test Coverage)以及标准包罗率(Specification
Coverage)别离是依据验证方案(Verification Plan)或是功用标准(Functional Specification)来量测某些特性能否已被测验。值得注重的是,这种类型的包罗率剖析其实很简略用上述的浅显「表格法」来完结,而其重点是将所谓「记载数据」及「就数据提出陈述的才干」建构入验证次序傍边。
布局包罗率(Structural Coverage)是一种比拟领先的次分类,它是由0-IN与Mentor Graphics所提出。在描绘内有一些较为艰难验证的部份,例如Arbiters、FIFOs、还有跨频率规模(Clock-Domain Crossings)的描绘及一些相似的问题。可是风趣的是,此类组件的行动相对来说比拟广为咱们所晓得,
事实上,可以简略界说出承认其已被包罗结束所需求的规矩,而所谓的布局包罗率就是在描绘里辨别出这些组件,然后主动地依据「功用包罗率」的数据提出陈述。
除了「剖析」功用包罗率数据的作业之外,咱们可以先就怎样搜集这些信息来评论。这有必要先认清一点,搜集数据的作业自身也是功用包罗率的一种,所以要当心厘清评论的政策终究是什么。在上面所说到的搜集包罗纪录两种根本型的功用包罗率:所谓的数据导向包罗率(Data-Oriented Coverage)以及分配导向包罗率(Control-Oriented
Coverage)。
数据导向包罗率指的是在模仿中某一特守时刻点,纪录下一连串变量的值。举例来说,在一个网络运用上,它可以运用来纪录某些封包在进入某描绘之前和之后的内容。上述曾说到的总线架构描绘里,也答应代表在每一个总线周期(Bus Cycle)的起始点扫描出地址和总线形式(Bus Mode)的信息。如此纪录的作业一般树立影响的进程中完结,以包管运用者已的确把一切的处置类型(Transaction Types)都标准正确。除此之外,也可以会在查看作用的时分做完纪录,其优点是每个组件的呼应都是正确的。无论怎样「数据导向包罗率」的纪录都是在测验平台里边完结,而非待测组件(Device Under Test, DUT)。作用一般会以矩阵的办法呈现,其内在是当每一个变量在其它变量固定于特定数值时,有多少次时机可以到达某一特定数字,得出来的每一种特别组合会被纪录其呈现的次数,最终东西再帮你把这些组合呈现的总和数据报答出来。
分配导向包罗率指的是纪录bu上或是DUT里边某些特定时刻短行动(Temporal Behaviors)发作的次数。根本上,
Control-Oriented Coverage大都是运用者在运用断语(Assertions)的时分,东西会纪录下某些被实行的特定通讯协议(protocols),或是某特定情境(scenarios)发作的情况。举例来说,一个retry发作在某讯框传输(frame transfer)的第n个封包,或是当CPU正在实行jump的时分却来了一个搅扰(interrupt)等情况。典型的Control-Oriented Coverage的作用是一连串的数据代表每一种序列(sequence)发作的次数为何。Assertions所界说出来的序列可所以有弹性的,也就是例如「某b在某a的1~3个clock之后发作」。若是咱们可以晓得某b在a之后一个clock呈现的次数和三个clock之后呈现的次数各为何,这样的信息就适当有参考价值了。上例中的包罗率次分类一般被称作断语包罗率(Assertion Coverage)。
正式模型查验
(Formal Model Checking)
正式模型查验(Formal Model Checking, FMC)又可以称作特点查验(Property Checking),其寓意和同属正式验证(formal
verification)的等效查验(Equivalence Checking)完全不一样,尽管都是依托具体的数值剖析来完结。所谓的Equivalence Checking是比拟两种不一样的导入办法能否为功用性等效(Functional Equivalence)。可是,FMC是彻完全底地查看过描绘中一切可以的情况,看看能否有任何可以违背某特定特点(property)的情况发作。
一般会运用Assertions来表达所谓的Properties,而内在则是表明在一个描绘里边一些准确的序列型(Sequential)行动或是不变化(Invariant)行动,前者例如「某甲发作在某乙之后」,而后者则例如某甲「永不发作」或是某乙「必定发作」。因而,可以把每一个Property当成标准(specification)的一个小碎片。可以将Property描绘为描绘的某些行动,或是把property描绘成关于输入描绘的inpu其行动上的束缚,也就是所谓的束缚条件(Constraints)。在此Constraints其实跟咱们评论「CR Simulation」时提及的Constraints是一样的,尽管引出这个词汇在运用流程上的来龙去脉有点不一样。
就理论上来说,可以运用FMC成功验证任何一个极点杂乱的描绘。可是当咱们实践来看,由于FMC牵扯到的数学剖析可以杂乱到难以幻想,有些时分可以会影响FMC运用到描绘里边的一些小区块。不过,由于FMC有本领剖分出一切描绘里边可以到达的情况,因而即便省去运用者本人编撰测验档的步调,运用它来完全验证一些特定的功用是完全没有问题的,在此情况底下,Properties反而扮演了验证政策的人物,调配Constraints来界说某描绘的环境条件。以下将会评论FMC在bBlock Level中所供给的更多优点。
正式模型查验以及仿真
(Formal Model Checking and Simulation)
Formal Model Checking可以被视为模仿技能的互补,一同也扮演CDV办法论中不行或缺的一环。FMC可以完全验证完描绘中的一切可以情况,也就是可包管契合一切运用者界说之Assertions的标准,一同也包管顺畅到达一切的包罗点(Coverage
Point)。把FMC技能与模仿技能调配运用的时分,可看到一个簇新的验证办法-动态正式验证(Dynamic Formal Verification ,DFV),这概念是由0-IN所提出,其呈现大大地晋升了CDV内在与价值。
首要把一些FMC与模仿的根本概念从头思考,大多数的仿真器包罗Mentor的ModelSim,新思科技的VCS还有利华核算机的NCSim都是运用「Event-Based」的语义实行描绘行动,而正式东西(Formal Tools)是运用Cycle-Based的办法来作业。将这两种形式分隔运用来验证描绘时,可以会使得作用发作一些意想不到的不一样,运用者得要十分当心,不然常常会使得Formal Tool跟仿真器对准特定的Property实行出不一样的作用。也就是由于这种潜在的风险,0-IN的正式验证(Formal Verification)功用会主动从头实行一切仿真器体现出的FMC反例以包管两种诠释办法作用最终是异曲同工。
为了可以包管仿真器与FMC的作用共同,将SystemVerilog与PSL两种验证言语标准化就显得很重要了。由于如此一来才可以包管不一样言语的Properties之间具有一样的语义。如此的共同性促进可以运用经过block level正式验证的Properties来作为模仿进程中的监督者(Monitor),尤其是在仿真大型的体系时更有作用。例如当给予某个区块指定的一些Constraints,若是它能成功经过正式验证,承认其会有某些特定的行动之后,接下来需求做的就是承认体系中与此区块有关联性的其它部份也契合一样的Constraints。由于Assertion Monitor会在体系仿真时主动查看block的输入,咱们可以藉此验证一切的输入Constraints是正确的,一同FMC剖析也毫无瑕庛。
若是FMC可以正式证明某个区块在给予的一串输入行动之下可运转正确,而且整个体系也只会让这个区块在上述输入行动的标准内作业,那咱们就可以百分之百断定此区块在这个体系里边永久不会犯错。因而不需求在Full-Chip模仿的时分,费尽心机想生出一堆杂乱Stimulus,就为了使得区块可以跑到某些特别的情况。而咱们就可把模仿作业专心于整个芯片End-to-End的正常行动,由于单一区块的行动现已可以包管咱们无忧无虑。
以断语为根底的验证
(Assertion-Based Verification)
比拟常看到的情况是咱们都把所谓的Assertion-Based Verification(ABV)视为运用Assertions来当模仿时的监督器,尽管这没有太大的过错,不过更正确的解说应该是将Assertions别离运用在模仿以及正式验证中。由于Assertions在模仿和Formal Model Checking内都可以扮演极重要的人物。所谓的Assertions让咱们可以运用简略的数学概念来准确描绘某区块需求恪守的行动,或是束缚其运作环境。除此之外,Assertions还可以被运用来描绘包罗点(Coverage Points),所谓包罗点指的是不管运用任何的技能,在验证进程里边都有必要要实行到的某些特定情境。
Assertion常常会被分类成「White-Box Assertions」和「Black-Box Assertions」。White-Box
Assertions让咱们可以关于描绘的内部情况一望而知,而且一般可以反映出描绘者所决断出的特定实行(Implement)办法,例如某特定情况机被设定为「one-hot」。而Black-Box Assertions则是拿来描绘「End-to-End」的行动,也因而它与描绘者怎样做内部描绘没有关联。Assertions的最大优点是可以让描绘者在验证进程傍边,轻松地检核描绘或是环境有没有照着原先幻想的办法。风趣的作业是,咱们常听到的问题是:「我怎样晓得这样就够了呢?」。
若是Assertions被赋予的任务是验证描绘的行动能否契合标准的标准,有两种办法来评断「是不是真的够了」。首要是要断定有满足的Assertions来验证咱们想要验证的一切要害行动,一般这也就是验证方案的一个部份。第二点是要断定描绘里边的「每一个部份」都充分地与「至少一个Assertion」有关联,有关这部份就可以视为所谓的「Assertion密度」,其估计的办法是核算需求多少Clock Cycles才干让缓存器数值传送到一个Assertion。若是所需求的Clock Cycle越少,就代表咱们可以更简略关于某些Assertions能否有被违背来做正式剖析。假使整个描绘里边的每一个部份都可以在两个到三个Clock Cycles里边被Assertions测过(这是经历规律里边比拟成功的事例数字),或许就能答复你:「是的,这样现已够了。」
技能价值的阐明
包罗率导向验证法
(Coverage-Driven Verification Value
Statement)的价值阐明
所谓CDV的价值,可从往两个方向思考,第一是所提出来的处理方案终究可以缩短多少树立Test-Bench的时刻;第二是关联的测验终究能多有用地被实行并验证描绘里的待测特性。
当咱们将测验平台(Test-Bench)组合起来的时分,所谓的价值就可以用以下的条件归纳思考:
?能否供给满足且具水平的IP缩短编写次序代码的时刻?
?有没有优秀的政策指引咱们树立一个可重复运用而且撑持多样笼统(Abstraction)层级的验证环境?
当咱们建好Test-Bench而且承认其可以正常作业今后,接下来就是要运用CR技能的长处来帮忙调配模仿。而为了可以顺畅完结任务,在CR模仿需求注重三个根本政策,首要,已然某些言语可以描绘随机数值的束缚条件(constraints),就得挑选一个能撑持这些言语的仿真器。第二、仿真器自身得要具有所谓束缚条件处理器(Constraint Solver)的附加功用,所谓的Constraint
Solver功用指的是可以忠于原味地将咱们下在Constraints里边指定的随机数值体现出来,无庸置疑的,若是一个Constraint Solver可以把这些随机数值组成功地尽量扩大,就可以帮忙咱们发作出更多不一样且具有含义的情境出来。接下来第三点,需求调配Functional Coverage的功用来监督包管咱们所想要的情境真的都已被有用实行。而就整个办法论的观念来看,CDV也一同需求Test自身可以做自我检测(Self-Checking)。
一个好的CDV办法论当然要可以撑持验证的第一个政策,也就是成功验证某个描绘能否完结一切希望中有必要到达的一切事项。而其重点是要可以更简略树立整个验证环境而且发作某些测验,这些tests可以包管咱们测完描绘自身被希望到达的某些特性。在此很重要的概念是或许描绘里有些特性可直接用手写测验反而较易测,也就是写测验的工程师直接供给一些Scenarios来测验就可以。可是关于大多数的特性而言,运用CDV概念运用Constrained-Random Tests来发作出各种不一样却合理的情境并完结测验,才是一种有用率的验证法。
CDV也能顾及到验证的第二个政策,成功验证某个描绘能否没有做出任何希望中不应到达的任何事项。试想描绘者可以没有办法将描绘与次体系互动的一切情况都思考进去,可是由于随机数值的不行猜测性,促进更有时机可以发掘出一些偏远个案。
正式模型查验
(Formal Model Checking Value Statement)法的价值阐明
关于CDV也答应以帮忙找出一些在模仿作业的时分,描绘者疏忽思考到的一些情境。而就界说上来说,正式剖析的根本精力就是可以包管一切的情境都可以被测到。因而,咱们可以运用FMC的办法,给予一些输入Constraints来正式验证一个block,然后调查它能否正确地作业。如此一来,咱们就可以省去在block
level做模仿的时刻,这样一来,不管是用Constrained-Random或是直接做测验都可以省掉。所以,当一切的区块兜在一同做验证,看看作业能否正常的时分再来运用模仿即可。
另一种观点表明,可以运用FMC把整个芯片阶级给完全验证结束而省掉掉模仿的步调。这样的说法有必要在下列的条件之下才干包管不会犯错:若是你给某区块A一些输入行动,然后承认它可以作业无误,接下来你也得承认与区块A有相互作用的区块B并不会有任何「违背」上述输入行动的情况呈现。这样的正式验证被称做为「Assume-Guarantee典范」,而且理论上这种办法是十分可行的。接下来要证明那些「区块B的输入」也契合上面的假定内容,然后依序往前推。回到实际面来看,想要有用地办理properties与区块之间的相互关系并非如抱负中那么简略,理论里的大同世界在实务上可所以艰难重重。
但也不必因而而太失望,有一个人数不少且继续生长中的运用者联盟大力认可FMC的潜在优点,尤其是对准描绘里边占有重要要害方位的一些组件,例如Arbiters、Clock-Domain Crossings还有FIFOs等等。FMC的真实价值在于完全剖析的才干,关于找出不管是描绘中或是标准中的过错适当有用。当正式剖析找出了问题之后,除错机能会开端断定这个问题终究是「描绘出了错」或是「Assertion的瑕疵」。别疏忽一种可以性,写Assertion的人很可以把标准的精力诠释过错,在这种情况发作的时分,犯错Assertion就有必要要被修正。可是一般的问题大部份会出在描绘里边的过错。由于FMC完全剖析的特性,上述的任何情况都难逃高眼,而且会一一被修复,由于当所谓的「被验证过的Assertions」被运用在模仿上的时分,咱们关于这样买了双保险的验证次序才愈加的有决心。
包罗率导向验证调配正式模型验证
(Coverage-Driven Verification and Formal
Model Checking)的价值阐明
CDV是藉由随机发作Stimulus的办法来使得一个单一的测验可以主动创造出多种不一样的情境。测验正因随机与生俱来的优点,咱们有时机可以找到一些描绘者原先没有想到的Corner Case Bugs。
FMC则是完全判定完一切描绘里边可以的情况来包管描绘与标准里的描绘具有共同性。FMC运用Properties或是Assertions来做实务上的检测,担保可以把一切的Corner
Case Bugs给抓出来。事实上咱们可以把Constrained Random
Simulation就当作FMC的近似类型,仅仅它运用模仿来替代正式剖析。
想想上面提过的一个问题,是不是FMC只能拿来做小区块的停止剖析呢(Static Analysis)?其实所谓的束缚大多数是来自内存和运算资源的缺乏。还好,「动态正式验证(Dynamic Formal Verification, DFV)」可以增强追寻模仿作业,进步CDV办法论的价值。
给定一些政策行动(或许是运用Assertions或是Coverage Points来体现),DFV运用了正式剖析的办法来追寻模仿作业里发现的一些「令人重视的情况(Interesting
States)」,然后判别它们会不会违背任何一个Assertions或者是能不能触及到某一个Coverage Point。关于功用验证的进程来说,所谓的「令人重视的情况(Interesting States)」是指发现某个「新的」或是「稀有的」描绘行动发作的情况。
让咱们解说一下这个概念,幻想一个过错在模仿开端好久今后才呈现,而这个过错只要在某一特定FIFO满了,而且某特定FSM处于「FOO」情况时分才会发作,若只透过模仿,咱们需求想办法让灌入的测验去喂饱那个FIFO,然后再用同一个或是别的一个测验去驱动政策FSM进入FOO情况。若是仅运用随机影响去等待两个事情会一同发作,这样的机率恐怕不高。也就是说Constrained-Random Stimulus或许需求测验平台具有一大堆的「旋钮」和「开关」,来到达这样细密的操控,才干找出一切相似的偏远个案。假使此刻导入DFV的概念,当模仿作业走到FIFO是充溢的情况时,正式剖析会开端查看所由此刻刻点所推演出来的一切情况,所以可以顺畅发现而且揭露出发作此情况而且招致过错的特别次序终究为何。因而,运用DFV调配CR运用比起只单纯运用CR来做测验的优点在于可以省去许多树立额定测验平台次序代码的时刻。
若是没有DFV,一个CDV的运用者得要思考可以会有潜在的过错存在,然后想办法更动Stimulus Constraints以设法扶引测验到达特定的一些情况。清楚明了的这并不大简略。就实际情况而言,DFV一般可以将单一的情境扩大成适当许多且有用的测验(或许超越一万个)。这样一来,真实的测验平台束缚条件就可以变得简略的多,由于咱们毋需为了上述的「细密操控情况」费尽心机以建出抱负中的Constraint环境。
办法论评论
前面的评论首要都是着重在验证流程中所谓树立测验平台主动化,以及正式特点查验技能的概念。为了可以真实在实务上发扬功效,接下来就要评论怎样运用这些技能,而且看看终究在实务上可以或是可以可以做些什么作业。其实所谓「怎样运用」完全决议于描绘者自身,验证的作业其实就是包管怎样运用,以符合标准所指定要做的什么作业。须注重的是,在从拟定的标准移动到真实逻辑闸的进程里,一般城市运用到多个不一样程度的笼统层级(Levels of Abstraction)。可是,想要成为一个成功的验证办法论,其间之一的条件就是可以简略地在笼统阶级之间搬运,而且保持功用上的共同性。
实施验证(Implementation Verification)指的是包管RTL到闸口层之间的共同性。一般来说,咱们关于组成(Synthesis)进程的精力晓得颇丰,想要查看RTL到闸口的共同性相对来说比拟直观。在此情况傍边,所谓的「RTL」就可以被看作是与「闸口阶级描绘」相比拟时的「标准(Specification)」。别的一方面,关于一切功用验证的进程来说,一切意图都是为了可以包管RTL描绘可以准确反映出咱们希望中的功用,因而也可以成为要比拟闸口阶级功用时的正确政策。所以本阶段所说到的功用验证里,RTL的人物就被视为拿来跟标准相比拟的导入进程。
不管是评论到「Implementation Verification」或是「Functional Verification」,验证的根本作业都是去比拟两种行动各自的体现,有许多办法描绘希望中的行动,其间之一是运用Properties或是Assertions,然后运用它们来做FMC,拿来跟RTL做比拟,完全验证描绘里边的次区块的功用能否正确,另一方面,assertions也可以拿来运用在模仿傍边监控现已被实行过的行动,当然众所周知模仿自身也需求别的一种体现希望中行动的政策,就是测验平台。
买卖阶级原型的刻画
(Transaction-Level Modeling)
可以常常思考验证流程怎样比拟有用率是一件功德,而坚信最有用的办法就是让测验平台永久聚集在描绘被希望到达的政策上。想要到达这个政策,最合理的办法或许就是让测验平台在「买卖阶级(Transaction level)」里边被完结。所谓「Transaction」指的是描绘里边某个恣意活动的体现。而且可以被体如今各种不一样的笼统层级之中,例如un-timed、cycle-accurate、pin-accurate等等。因而一个买卖层级的测验有必要可以描绘政策买卖所应该实行的作业。而验证环境这时所扮演的人物是担任变换这些transactions成为清晰的行动,使这些行动可以契合将进行仿真形式的笼统层级。咱们常常会运用所谓的「Transactors」或是「Bus-functional models, BFM」等组件,它们都是运用来做上述变换的作业。在此可以界说一个好的验证环境:答应咱们树立买卖层级的测验,而且供给完善的机能,即便描绘里边有不一样笼统层级的运用,这些测验依然可以被成功地运用。
首要,让咱们评论一下仿真,不管买卖是被运用在哪一种笼统层级之内,总是会有一些信息是与这些层级关联的,例如地址或是数据等。可以说测验是用来描绘买卖,而Transactors则是用来实施这些买卖。在本文说到许多关于CDV的优点,这些优点都可以在买卖描绘符号(Transaction Descriptor)的身上找到,这些符号可以通知Transactors该做些什么,还有该指定哪些的随机束缚条件。假使咱们可以树立标准接口群组,用来办理测验、Transactors还有描绘之间的通讯,就可以简略地透过交流架构中比拟低阶的部份,而毋需想办法改动较高的阶级。如此一来,一个一样的测验可以透过一组Transactors来驱动描绘中的一个买卖阶级形式,也可以透过别的一组不一样可是却兼容的Transactors来驱动一个RTL形式。
当咱们在跑一个买卖阶级形式的仿真时,「黑箱(black box)」的Assertions可以用来指定在此阶级的某些特定行动,而当咱们修正描绘下到RTL阶级的时分,黑箱的Assertions也可以一同做相似程度的修正。因而,当描绘和Assertions都现已成功下到RTL阶级时,这些一样的Assertions(或许修正过)就可以拿来当作动态正式剖析的政策物,其意图是为了可以帮忙买卖阶级测验的主动化。
到达完善修复的终极验证
若是可以一同运用Dynamic Formal Verification以及Constrained-Random的测验平台,将可以大幅晋升CDV的价值,由于可以运用一样的影响来衍生出许多的情境。除此之外,运用DFV来剖析某模仿作业里多重的情境,代表可以削减附加在测验平台上面的旋钮以及开关的数量,也因而DFV帮运用者省去了极可观自行生出次序代码的时刻,如此一来让写测验平台的作业简化了许多。另一方面,运用Constrained Random Simulation调配Dynamic Formal Analysis更可以让每一个测验自身可以到达更高的功用性包罗率。综上所述,皆是为了完结验证的终极意图,不管在多么杂乱的描绘里边,偏远个案过错都可以更简略地被发现而且被修复之。