SV-随机化问题(芯原)

1、原题

SV-随机化问题(芯原)_第1张图片

 2、代码

class packet;
    bit [3:0] address;
    rand bit [2:0] command;
    rand bit [7:0] payload;
    rand bit parity;

    function new(bit [3:0] a); //构造函数里的形式变量不要与类变量名字相同
        address = a;
    endfunction

    constraint c_command{
        (address==4'hF)->(command!=3'h2);
        (address==4'hF)->(command!=3'h5);
    };

    constraint c_payload{
        (command==3'h7)->(payload inside {[0:0],[8'h3F+1'b1:8'hFF]}); 
    };

    constraint c_parity{
        if (((^address)+(^payload)+(^command))%2==0) parity == 1'b0;  //利用异或缩减运算符去得到1出现次数是奇是偶
        else parity == 1'b1;
        };


endclass

program verisilicon_test();
        initial begin
                packet p;
                p = new(4'h3);
                assert(p.randomize())
                else $fatal(0,"packet::randomize failed");
                $display("p.address=%0h,p.command=%0h,p.payload=%0h,p.parity=%0h",
                                    p.address,p.command,p.payload,p.parity);

end

 

你可能感兴趣的:(SV-随机化问题(芯原))