zoukankan      html  css  js  c++  java
  • systemverilog(3)之Randomize

    what to randomize?

    (1) primary input data <==one data

    (2)encapsulated input data <== muti group data

    (3)protocol exceptions,errors and violations

    (4)delays


    overview

    1.randomization enables users to automatically  generate random input sitimuls for functional verification

    2.systemverilog enable user to specify random constrained (legal) values

    3.random costraint should be specified using OOP


      Randomization in SV

    (1) keyword

        rand bit [1:0] y;

        randc bit [1:0] y;

    (2)simple class with random variables

    class BUS

        rand bit [15:0] addr;

        randc bit [31:0] data;

         constraint range1{

          addr > 1024;

          data<16384;

           }

    endclass

    (3)randomize() function <==启动一个随机约束

    if success return 1

    if failture  return 0

    BUS bus = new();

    repeat(50) begin

       if(bus.randomize() == 1)

          $display(bus.addr.bus.data);

       else

          $display(“randomization failed”);

       end

    (4) constrain solver ===> seed

    the same seed results in the same random value

    (5)constraint blocks

    constraint constraint_indentifier {

                      constraint_statmemts

                        }

    (6)simples expressions

        only one relational operator(< <= > >= …)

    (7)set membership operator:inside

    eg1:   class BUS

               rand bit[15:0] addr;

                randc bit [31:0] data;

                constraint range1{

                addr inside {[0:1000],[1024:16384]};

                 data > 1000;

                 data < 100000;

                  }

               endclass

       eg2:

    integer fives[0:3] = {5,10,15,20};

    rand integer v;

    constraint c3 {v inside fives};

    constraint c4 !{v inside fives};

    (8)weighted distribution:dist

    property1: They are a relational test for test membership

    property2: They specify a statistical distribution function for the result

       :=  <====the same value in the range  every(可以对一个区间也可以对一个独立的数

       /=  <=====to be equally divided by all values     range_weight/n(对一个区间约束)

    cannot be used with a randc

    eg:

    `[A383E~OERH[@NC8WZRCY4

    (9)bidirectional constraints

      not procedural but declarative

      all active at one time

    (10) conditional constraints

       implication operator –>  相当于 if..else

    (11) unconstrainted

       rand bit x ;

       rand bit [1:0] y;

    the same probability

    (12)implication

    class imp1;

    rand bit x;

    rand bit [1:0] y;

    constraint c_xy{

    (x==0) –> (y==0);

    }

    endclass

    (13)implication and bidirectional constraints

    class imp_Bid;

    rand bit x;

    rand bit [1:0] y;

    constraint c_xy{

    y > 0;

    (x==0) –> (y==0);

    }

    endclass

    (14)solve before

    class solvebefore;

    rand bit x;

    rand bit [1:0] y;

    constraint c_xy;

    {

    (x==0) –> y==0;

    solve y before x;

    }

    (15) interative constraints

    allows arrayed variable to be constrained in a parameterized manner using loop variables

    class c;

    rand bye A[4];

    constraint C1

    {

    foreach(A[i])

        A[i] inside{2,4,8,16};

    }

    constraint C2

    {

    foreach (A[j])

        A[j] > 2*j;

    }

    endclass

    (16) functions in constraints

    class B;

    rand int x,y;

    constraint C{x <= F(y);}

    constraint D{y inside{2,4,8};}

    endclass

    1.functions cannot contain output or ref arguments <===ref 相当于inout

    2.functions should be automatic  <===automatic可以立即返回值

    3.functions that appear  in constraint cannot modify the constraint <===只是简单调用而已

    4.functons shall be called before constraints are solved, and their return values shall be treated as state variables

    5.random variables used as function argumets shall establish an implicit variable ordering or priority

    (17)in_line constraints ---xx.randomize()with{constraints_statememt}

    equivalent to adding an extra constraint to any existing one in effect

    (18) disabling  random variables ---rand_mode() <==control a random variable is active or inactive

    class packed;

        rand integer src,dst;

    endclass

    int r;

    packet packect_a=new;

    packet_a.rand_mode(0);

    packet_b.src.rand_mode(1);

    (19)controlling constraints with constraint_mode() <===control a constraints is active or inactive

    class packet;

        rand interger src,dst;

        constraint filter{src>2*dst;}

    endclass

    function integer toggle_rand(packet p);

      if(p.filter.constraint_mode() ==1 )

         p.filter.costraint_mode(0);

    else

       p.filter.constraint_mode(1);

    toggle_rand = p.randomize();

    endfunction

    总结:constraints主要用于transaction中,

  • 相关阅读:
    一些性能查询的SQL 备忘
    Oracle Stream配置详细步骤
    Oracle 一次生产分库,升级,迁移
    Oracle数据文件和临时文件的管理
    db_recovery_file_dest_size 修改大一点及删除归档日志 |转|
    android启动优化
    C++ primer 中文第三版 阅读笔记 第八章
    XMPP通讯开发-好友获取界面设计
    用SHELL与列表处理了件尴尬事
    各种快递查询--Api接口
  • 原文地址:https://www.cnblogs.com/chip/p/3974124.html
Copyright © 2011-2022 走看看