2

大規模で複雑な SystemVerilog 制約の例を教えてください。大きいほど良く、できれば現実的です。おそらく、他のいくつかの変数にも依存するアドレス計算です。

SystemVerilog 制約を使用するように IP を切り替えることを検討しています。経営陣は、SystemVerilog 制約を作成/理解することがいかに簡単/難しいかを知りたがっています。

4

2 に答える 2

3

以下に例を示します。おそらく大規模で複雑なものではありませんが、制約の使用方法について現実的なアイデアが得られるはずです。ここでは、次の概念が使用されていることがわかります。

  1. randc および rand - 巡回および非巡回確率変数
  2. 2 種類の分散制約
  3. 含意演算子を使用した制約内の if 条件の使用...別の変数に応じて計算されるアドレス
  4. 制約次数ソルバー
  5. コンストラクターで確率変数のデフォルト範囲を制限する
  6. 制約で列挙型を使用する

これがお役に立てば幸いです...そしてインラインのコメントを見てください:

class RandomConstraints;
    enum IpVersionType {IPV4=2, IPV6, IPVx}

    //Randomly iterate over values without repetition
    randc bit [7:0] cyclicCounter;
    //Regular random variables
    rand bit [15:0] destAddress;
    rand bit [15:0] sourceAddress;
    rand bit [15:0] numberOfPackets;
    rand bit [15:0] packetLength;
    rand bit [7:0]  var1;
    rand bit [7:0]  var2;
    IpVersionType ipVersion;

    //Non-random variables that can be used to control constraints
    bit [15:0] minNumberOfPackets, maxNumberOfPackets;
    bit [15:0] minPacketLength, maxPacketLength;
    integer IPV4Weight, IPV6Weight;

    constraint cPacketLength {
        packetLength in { minPacketLength : maxPacketLength }
    }
    constraint cChannelNumber {
        channelNumber in {0:1}
    }
    constraint cIPVersionType {
        ipVersion dist { IPV4 := IPV4Weight, IPV6 := IPV6Weight, IPVX := (100 - IPV4Weight - IPV6Weight) }
    }
    //Probability of var1 being 1,2,3,4,5 in the ratio 1,2,4,4,4
    constraint cDist1 {
        var1 dist { 1 := 1, 2 := 2, [3:4] := 4 }
    }
    //Probability of var2 being 1,2,3,4,5 is in the ratio 1,2,4/3,4/3,4/3 
    constraint cDist2 {
        var2 dist { 1 := 1, 2 := 2, [3:5] :/ 4 }
    }       
    //Implication constraint - if(channelNum == i) then { ... }
    constraint cImplication {
        (channelNumber == 0) => {
            destAddress in {0:200};
            sourceAddress in {201:400};
        }
        (channelNumber == 1) => {
            destAddress in {201:400};
            sourceAddress in {0:200};
        }
    }
    //Controlling order of constraints solved using a constraint solver
    constraint order_solver {
        solver channelNumber before destAddress;
        solver channelNumber before sourceAddress;
    }

    function new();
        //Setting default min/max packets and min/max packet length
        minNumberOfPackets = 100;
        maxNumberOfPackets = 1000;
        minPacketLength = 128;
        maxPacketLength = 256;
        IPV4Weight = 50;
        IPV6Weight = 30;
    endfunction
endclass
于 2012-11-02T05:46:16.217 に答える