SV Part2 Final

Embed Size (px)

Citation preview

  • 7/29/2019 SV Part2 Final

    1/55

    System VerilogPart II

  • 7/29/2019 SV Part2 Final

    2/55

    Random Constraints

  • 7/29/2019 SV Part2 Final

    3/55

    Constraint-driven test generation allows usersto automatically generate tests for functionalverification.

    Random verification is more effective ascompared to traditional directed methodology

    By specifying constraint one can easily creates

    testcase that are hard to reach

  • 7/29/2019 SV Part2 Final

    4/55

    class Bus;

    rand bit[15:0] addr;

    rand bit[31:0] data;

    constraint word_align {addr[1:0] == 2b0;}

    endclass

  • 7/29/2019 SV Part2 Final

    5/55

  • 7/29/2019 SV Part2 Final

    6/55

    Constraint Block

    class XYPair;

    rand integer x, y;

    constraint c;

    endclass

    // external constraint body declaration

    constraint XYPair::c { x < y; } XYPair object1;

    object1.randomize() both x and y

    object1.randomize(x) will only randomize x

  • 7/29/2019 SV Part2 Final

    7/55

    Constraint block with inheritance

    class A;

    rand integer x;

    constraint c { x < 0; }

    endclass

    class B extends A;

    constraint c { x > 0; }endclass

    Randomize is avirtual function;

    So nomatters what

    handle is the handleof the object ,constraint blockspecific to instance

    will be used

  • 7/29/2019 SV Part2 Final

    8/55

    Distribution

    x dist {100 := 1, 200 := 2, 300 := 5}

    x is equal to 100, 200, or 300 with weightedratio of 1-2-5.

    x inside { 5, 10, 15, 20 }; x dist { [100:102] :/ 1, 200 := 2, 300 := 5}

    A dist operation shall not be applied to randc

    variables. A dist expression requires that expression

    contain at least one rand variable.

  • 7/29/2019 SV Part2 Final

    9/55

  • 7/29/2019 SV Part2 Final

    10/55

    Iterative Constraints

    class C;

    rand byte A[] ;

    constraint C1 { foreach ( A [ i ] ) A[i] inside{2,4,8,16}; }

    constraint C2 { foreach ( A [ j ] ) A[j] > 2 * j; }

    endclass

  • 7/29/2019 SV Part2 Final

    11/55

    Variable Ordering

    class B;

    rand bit s;

    rand bit [31:0] d;

    constraint c { s -> d == 0; }

    constraint order { solve s before d; }

    endclas

  • 7/29/2019 SV Part2 Final

    12/55

    Restriction of value ordering

    Only random variables are allowed, that is, theymust be rand.

    randc variables are not allowed. randc variables

    are always solved before any other. The variables must be integral values.

    A constraint block can contain both regular

    value constraints and ordering constraints. There must be no circular dependencies in the

    ordering, such as solve a before b combinedwith solve b before a.

  • 7/29/2019 SV Part2 Final

    13/55

    In line constraints

    class SimpleSum

    rand bit [7:0] x, y, z;

    constraint c {z == x + y;}

    endclass

    task InlineConstraintDemo(SimpleSum p);

    int success;success = p.randomize() with {x < y;};

    endtask

  • 7/29/2019 SV Part2 Final

    14/55

    pre_randomize() andpost_randomize()

    They are automatically called with randomize()

    pre_randomize();

    $display(Starting Randomization);

    post_randomize();

    $display(Randomization done);

  • 7/29/2019 SV Part2 Final

    15/55

    Rand_mode & constraint_mode

    rand_mode is used to define the random modeof particular variable, by default is ON, It can beput into off mode with.rand_mode(0)

    Simlerly constraint mode is used for constraint

    .constraint_mode(0)

  • 7/29/2019 SV Part2 Final

    16/55

    System tasks for randomization

    $urandom

    addr=$urandom();

    $urandom_range

    Addr= $urandom_range(1000,2000)

  • 7/29/2019 SV Part2 Final

    17/55

    Clocking Block

    specify any timing disciplines, synchronizationrequirements, or clocking paradigms.

    clocking bus @(posedge clock1);

    default input #10ns output #2ns;

    input data, ready, enable = top.mem1.enable;

    output negedge ack;

    input #1step addr;

    endclocking

  • 7/29/2019 SV Part2 Final

    18/55

    Interface and clocking block

    interface A_Bus( input bit clk );

    wire req, gnt;wire [7:0] addr, data;

    clocking sb @(posedge clk);

    input gnt; output req, addr; inout data;

    endclocking

    modport DUT ( input clk, req, addr, outputgnt, inout data );

    modport STB ( clocking sb );

    modport TB ( input gnt, output req, addr, inoutdata ; endinterface

  • 7/29/2019 SV Part2 Final

    19/55

    AHB PROTOCOL

    Two phases: Addr phase, Data Phase

    Both phases are latched by Hready , Hsel beginhigh

  • 7/29/2019 SV Part2 Final

    20/55

  • 7/29/2019 SV Part2 Final

    21/55

    Transactions with wait states

  • 7/29/2019 SV Part2 Final

    22/55

    Multiple transfers

  • 7/29/2019 SV Part2 Final

    23/55

  • 7/29/2019 SV Part2 Final

    24/55

    Hsize tells bout the size of one beat and hbursttells bout the no of beats with Transaction type(INCC/WRAP)

    Start addr=32'h00000000 hburst=INCR4 Hsize=0 , beat address will be 0,1,2,3

    Hsize=1, beat address will be 0,2,4,6

    Hsize=2 beat address will be 0,4,8,C

  • 7/29/2019 SV Part2 Final

    25/55

    Example for writing constraint

    Class ahb_trans;

    rand bit [31:0] addr;bit [31:0] hwdata,hrdata;bit [1:0] hsize;

    rand bit [2:0] hburst,htrans;

    constraint basic;

    constraint additional;

    constraint additional0, additional1,additional2;

    endclass

  • 7/29/2019 SV Part2 Final

    26/55

    Constraint for word alighned address

    Addr[1:0] ==2'b00

    Constraint for generating transaction only with

    hsize 2'b00 hsize==2'b00

    Constraint solver fails

    hsize==2'b00 hsize==2'b10

  • 7/29/2019 SV Part2 Final

    27/55

    Basic Constraint

    Constraint ahb_htrans:: basic {

    Hsize inside {2'b00, 2'b01,2'b10,2'b11};

    Hburst inside {3'b000, 3'b001, 3'b010, 3'b011,

    3'b100, 3'b101, 3'b110, 3'b111}; }

  • 7/29/2019 SV Part2 Final

    28/55

    Constraint additional0{

    addr inside

    { [32'h00000000:32'h0000F000]}

    }

    Constraint additional0{

    addr inside

    { [32'h0000F000:32'h0001F000]}

    }

    Both constraints can not be on at the same timeahb_trans_object.additional0.constraint_mode(0);ahb_trans_object.additional1.constraint_mode(1);

  • 7/29/2019 SV Part2 Final

    29/55

    Parameterised classes

    class vector #(int size = 1);

    bit [size-1:0] a;

    endclass

    class stack #(type T = int);

    local T items[];

    task push( T a ); ... endtask

    task pop( ref T a ); ... endtask

    endclass

  • 7/29/2019 SV Part2 Final

    30/55

    stack is;

    stack#(bit[1:10]) bs;

    stack#(real) rs;

  • 7/29/2019 SV Part2 Final

    31/55

    Assertion

    Immediate assertions follow simulation eventsemantics for their execution

    assert_foo : assert(foo) $display("%m passed");else $display("%m failed");

    Concurrent assertions are based on clocksemantics and use sampled values of variables

  • 7/29/2019 SV Part2 Final

    32/55

    Property

    property pr1;

    @(posedge clk) !reset_n |-> !req; //whenreset_n is asserted (0),keep req 0

    endproperty property pr2;

    @(posedge clk) ack |=> !req; // one cycle after

    ack, req must be de-assertedendproperty

  • 7/29/2019 SV Part2 Final

    33/55

    Sequence

    sequence s;

    a ##1 b ##1 c;

    endsequence

    sequence rule;

    @(posedge sysclk)

    trans ##1 start_trans ##1 s ##1 end_trans;

    endsequence

  • 7/29/2019 SV Part2 Final

    34/55

    Repitition in sequence

    Consecutive repitition (a ##2 b ##1 a ##2 b ##1 a ##2 b ##1 a ##2 b

    ##1 a ##2 b)

    (a ##2 b)[*5]

  • 7/29/2019 SV Part2 Final

    35/55

    (a ##2 b) or (a ##2 b ##1 a ##2 b)

    or (a ##2 b ##1 a ##2 b ##1 a ##2 b)

    or (a ##2 b ##1 a ##2 b ##1 a ##2 b ##1 a ##2b)

    is equivalent to

    (a ##2 b)[*1:4]

  • 7/29/2019 SV Part2 Final

    36/55

    a[*0:3] ##1 b ##1 c) (b ##1 c)

    or (a ##1 b ##1 c)

    or (a ##1 a ##1 b ##1 c)

    or (a ##1 a ##1 a ##1 b ##1 c)

  • 7/29/2019 SV Part2 Final

    37/55

    Sequence operations

    te1 adn te2 are two sequences Matches if te1 and te2 match

    The end time is the end time of either te1 or te2

    which matches last

  • 7/29/2019 SV Part2 Final

    38/55

    Sampled value function

    $rose Detects signal gets from 0 to 1

    $fell

    Detects signal goes from 1 to 0

    $stable

    Detects the valus has not changes sinsce last

    clk

    Manipulating data in a sequence

  • 7/29/2019 SV Part2 Final

    39/55

    Manipulating data in a sequence

    property e;

    int x;

    (valid_in,(x = pipe_in)) |-> ##5 (pipe_out1 ==

    (x+1));

    endproperty

  • 7/29/2019 SV Part2 Final

    40/55

    assert,assume,cover

    The assert statement is used to enforce aproperty as a checker

    The purpose of the assume statement is to

    allow properties to be considered asassumptions for formal analysis as well as fordynamic simulation tools.

    Cover is used to monitor sequences and other

    behavioral aspects of the design for coverage

    C lli Th d

  • 7/29/2019 SV Part2 Final

    41/55

    Controlling Threads

    Concurrency: Thread running in parallal concurrency is essential for verification

    Th d

  • 7/29/2019 SV Part2 Final

    42/55

    Threads

  • 7/29/2019 SV Part2 Final

    43/55

    If there are multiple threads ready to execute ata given simulation time the order of execution isindetermine;

    Execution order of threads scheduled at thesame time can be manipulated within the codeusing delays and semaphore

    M ilb

  • 7/29/2019 SV Part2 Final

    44/55

    Mailbox

    Exchange message objects between otwothreads

    Features:

    FIFO with no size limit get/put are atomic operator, no possible race

    condition

    Can suspend a process

    Default mailbox has no data

  • 7/29/2019 SV Part2 Final

    45/55

    mailbox mbx; // Declare a mail box

    mbx = new(); //allocate mailbox

    mbx.put(p) ; // put p object into mailbox

    mbx.get(p);// object is removed from FIFO

    Success = mbx.try_get(); //non blocking version

    mbx.peek(p) ; //look but dont remove

    count = mbx.num(); // no of elements in mbx

    Class generator; Class Driver;

  • 7/29/2019 SV Part2 Final

    46/55

    g ;

    Transaction t;

    task main;repeat (10) begin

    t =new();

    assert(randomize());

    mbx.put(t);

    end

    endtask

    endclass

    ;

    Transaction t;

    task main;repeat (10) begin

    mbx.get(t);

    @(posedge clk)

    ....

    end

    endtask

    endclass

    Program mbx ex( );

  • 7/29/2019 SV Part2 Final

    47/55

    Program mbx_ex(..);

    Mailbox mbx =new();

    Generator g = new ()

    Driver d =new();

    Initial begin

    Forkg.main();

    d.main();

    Join

    End

    endprogram

    Semaphore

  • 7/29/2019 SV Part2 Final

    48/55

    Semaphore

    Used for mutual exclusion and synchronization Variable no of keys can be put and removed

    Controlled access to a shared object

    Syntax

    Semaphore sem;

    Semaphore = new(optional_initial_keycount=0);

    sem.get(optional_num_key=1);

    sem.put(optional_num_key=1);

  • 7/29/2019 SV Part2 Final

    49/55

    Program test;

    semaphore sem; Initial begin

    sem=new(1);

    forksequencer();

    sequenceer()

    join

    end

    ...

    Task sequencer();

    repeat ($random()%10) @bus.cb;

    sendTrans();endtask

    Task sendTrans();sem.get(1);

    ...

    sem.put(1);

    endtask

    Events

  • 7/29/2019 SV Part2 Final

    50/55

    Events

    Program test;Event start, check,done;

    initial begin#10 -> start;

    #2000 -> done;

    #10; -> check;

    end

    //generatortask main();

    wait(start);

    start_traffic();

    wait(done);

    stop_traffic();

    wait(check);

    check_result();

  • 7/29/2019 SV Part2 Final

    51/55

    Interface

    Interface

  • 7/29/2019 SV Part2 Final

    52/55

    Interface

    An interface encapsulates the connectioninformation

    An interface can be:

    Connected at compile time Connected at run time (Virtual interface)

  • 7/29/2019 SV Part2 Final

    53/55

    Interface simple_if (input bit clk);logic grant, request,reset;

    Clocking cb @(posedge clk);

    Input grant; output request; endclocking

    Modport TB (clocking cb,output reset);

    endinterface

    Program block

  • 7/29/2019 SV Part2 Final

    54/55

    Program block

    Program test(simple_if.TB s_if);initial begin

    s_if.reset

  • 7/29/2019 SV Part2 Final

    55/55

    Top block

    Module top;Bit clk;test t1 (.*);

    simple_if s_if(clk);

    dut d1;

    always #50

    clk = !clk;

    endmodule