首页 > 其他分享 >Verification -- Basic Concepts ~ 4. Constraint Random Verification

Verification -- Basic Concepts ~ 4. Constraint Random Verification

时间:2024-04-09 21:34:10浏览次数:23  
标签:CRV Constraint 验证 生成 可能 测试用例 Verification Basic

Constraint Random Verification

Constraint Random Verification (CRV) 是一种用于生成具有特定约束的随机测试用例的技术,以确保生成的输入激励满足某些设计要求。

在 CRV 中,定义了一组捕获设计要求的约束,例如数据范围、时序要求和接口协议。然后,测试平台生成一组满足这些约束条件的输入激励。然后,生成的测试用例可用于验证设计的功能和性能。

CRV 是一种流行的验证技术,因为它可以生成大量涵盖各种场景的随机测试用例。通过使用 CRV, 验证工程师可以快速识别使用其他验证技术可能无法发现的潜在设计错误。

CRV 的主要优势之一是其可扩展性。它可用于验证任何规模和复杂程度的设计,并且可以相对轻松地生成数百万个测试用例。此外, CRV 允许快速迭代和修改测试用例,从而加快验证过程。

但是, CRV 也有一些局限性,生成的测试用例可能无法涵盖所有可能的场景,并且某些 bug 可能仍未被发现。此外,创建有效的约束可能具有挑战性,尤其是对于复杂的设计。最后,调试失败的测试用例可能很困难,因为失败的根本原因可能不会立即显现出来。

Example

我们想要验证 4-bit adder,该加法器添加两个输入 A 和 B,并生成 4 位输出 C。我们希望使用 CRV 生成一组测试用例,这些用例涵盖各种场景并满足以下约束:

  1. 输入值 A 和 B 应在 0-15(4位数字)的范围内。
  2. 输出值 C 应在 0-31(5位数字)的范围内。
  3. 加法器应为有符号和无符号输入正确运行。
  4. 加法器应针对 A 和 B 的所有组合正确运行。

为了生成测试用例,我们将使用 CRV 工具定义约束,例如 SystemVerilog 的 randomize()函数。下面是一个示例代码片段,演示如何在 SystemVerilog 中定义约束:

class Adder;
  
  // Define the inputs and output
  rand bit [3:0] A, B;
  rand bit [4:0] C;

  // Define the constraints
  constraint c_adder { A inside {[0:15]};
                       B inside {[0:15]};
                       C == A + B;
                     }
  function void display();
    $display("A=0x%0h B=0x%0h C=0x%0h", A, B, C);
  endfunction
endclass

module tb;
  initial begin
    Adder m_adder = new();
    
    // Generate A and B randomly with the constraint that A and B cannot be the same 
    m_adder.randomize() with { A != B };
    m_adder.display();
  end
endmodule

在此示例中,我们定义了一个测试台类,其中包含加法器的输入和输出,以及我们想要满足的约束。然后我们创建一个此类的对象并将其随机化。对象内部变量所假定的值将基于其中定义的约束。

使用该测试平台,我们可以快速生成大量随机测试用例,这些测试用例涵盖了广泛的场景,并验证了加法器设计的功能。

局限性

一些潜在的限制是:

  • 复杂性:随着设计变得越来越复杂,可能很难定义完全满足设计要求的约束。在某些情况下,可能需要多次迭代来优化约束,以确保他们涵盖所有可能的方案。
  • 调试:使用随机测试用例,隔离和调试失败的测试可能更加困难。由于输入和输出是随机生成的,因此确定故障的根本原因可能具有挑战性。
  • 覆盖范围:虽然 CRV 会生成随机测试用例,但它并不能保证已涵盖所有场景。在某些情况下,可能需要添加其他的测试用例以确保完全覆盖。
  • 性能:由于 CRV 会生成随机测试用例,因此对于性能关键型设计来说可能效率不高。在这种情况下,定向测试可能更合适。
  • 可扩展性:对于非常大的设计,生成随机测试用例可能会变的计算成本高昂,或者可能需要更大的内存。在这种情况下,形式验证等替代技术可能更合适。

标签:CRV,Constraint,验证,生成,可能,测试用例,Verification,Basic
From: https://www.cnblogs.com/sys-123456/p/18124541

相关文章

  • Verification -- Basic Concepts ~ 3. Directed Verification
    DirectedVerificationDirectedVerification是一种功能验证,其中创建测试用例以执行数字设计的特定特性或功能。测试用例是根据规范的知识和设计的预期行为来设计的。DirectedVerification通常用于验证过程的早期阶段,即在执行随机或压力测试之前,因为他可以帮助快速识别错误并......
  • Verification -- Basic Concepts ~ 2. Verification Stages
    VerificationStagesVerification的不同阶段可能因所使用的特定验证流程或方法而异。但是,Verification中的一些常见阶段包括:规划:在此阶段,定义验证目标、目的和范围,并制定验证计划。测试平台开发:此阶段设计开发一个测试平台环境,该环境可以激发设计并为测试提供适当的输入。......
  • 02-template-basic
    02-TemplateBasic源作者地址:https://github.com/bonfy/go-mega仅个人学习使用学习完第一章之后,我们已经拥有了虽然一个简单,但可以成功运行Web应用本章将沿用这个应用,在此之上,加入模版渲染,使得页面更丰富本章的GitHub链接为:Source,Diff,Zip什么是模板微博应用程序的......
  • Verification -- Basic Concepts ~ 2. Techniques
    VerificationTechniques数字设计验证中使用了多种技术,包括:功能仿真:仿真涉及在计算机或仿真器上运行数字设计以验证其功能。仿真环境可能包括各种输入,例如测试向量,以确保设计按预期运行。形式验证:形式验证涉及使用数学证明来验证设计的正确性。该技术通常用于关键设计,例如安......
  • Verification -- Introduction
    AISC设计流程由几个步骤组成,包括designspecification、designentry、designsynthesis、designverification、physicaldesignanddesignsign-off.Designverification(DV)通常是指使用仿真工具对设计进行功能验证的pre-siliconeffort。Whatisdigitaldesignverific......
  • NSSRound#20 Basic-web专项
    首先是难以评价的web签到。给了个假页面,出题人发了blog可以看看:NSSCTFRound#20Basic真亦假,假亦真CSDN_To_PDFV1.2出题笔记(附wp+源码)-CSDN博客看起来是php,结果是java写的(emmmmmmm....出题人你6,还真是无java不web啊),让我想起了冬季春秋杯有个题,也是php的页面,但是是python写......
  • [NSSRound#19 Basic]bestkasscn的超级简单密码
    题目:fromCrypto.Util.numberimport*importgmpy2fromfunctoolsimportreducefromsecretimportflagp=getPrime(1024)i=0whileTrue:r=p*5+iifisPrime(r):i=0breakelse:i+=1whileTrue:q=p*......
  • vue/react- 报错Unable to authenticate, need: BASIC realm=“Sonatype Nexus Reposi
    问题描述在vue/react(node.js)项目中,node安装依赖install装包时报错:Unabletoauthenticate,need:BASICrealm=“SonatypeNexusRepositoryManager“如果我们报错差不多,就可以完美解决。解决方法这个问题,其实......
  • IfcConversionBasedUnit Basic unit declaration
    IfcConversionBasedUnit  当没有使用实体类型IfcMeasureWithUnit作为属性的数据类型更具体地定义单位时,项目的全局单位分配定义度量值和值的全局单位。项目的全球基本长度、面积、体积和时间单位定义为国际单位制的示例:#1=IFCPROJECT(’00ZhrqZYLBcgy$rVVaiu2A’,$,’Exa......
  • Go-Rod #1 Basic
    这个例子是打开https://github.com/,搜索“git”,然后获取给出git描述的header元素。packagemainimport("fmt""github.com/go-rod/rod""github.com/go-rod/rod/lib/input")funcmain(){//Launchanewbrowserwithdefaultoptions,a......