Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
System verilog 大型SystemVerilog约束的示例_System Verilog - Fatal编程技术网

System verilog 大型SystemVerilog约束的示例

System verilog 大型SystemVerilog约束的示例,system-verilog,System Verilog,你能举一个大而复杂的SystemVerilog约束的例子吗?越大越好,最好是现实的。也许一些地址计算也依赖于一些其他变量 我正在评估将我们的IP转换为使用SystemVerilog约束,我的管理层希望了解创建/理解SystemVerilog约束有多容易/难。这里有一个示例,可能不太大也不复杂,但它应该让您了解如何使用约束。在这里,您将看到使用了以下概念: 随机数和随机数-循环和非循环随机变量 两种类型的分布式约束 使用蕴涵运算符在约束内使用if条件。。。根据另一个变量计算的地址 约束顺序求解器

你能举一个大而复杂的SystemVerilog约束的例子吗?越大越好,最好是现实的。也许一些地址计算也依赖于一些其他变量


我正在评估将我们的IP转换为使用SystemVerilog约束,我的管理层希望了解创建/理解SystemVerilog约束有多容易/难。

这里有一个示例,可能不太大也不复杂,但它应该让您了解如何使用约束。在这里,您将看到使用了以下概念:

  • 随机数和随机数-循环和非循环随机变量
  • 两种类型的分布式约束
  • 使用蕴涵运算符在约束内使用if条件。。。根据另一个变量计算的地址
  • 约束顺序求解器
  • 约束构造函数中随机变量的默认范围
  • 在约束中使用枚举类型
  • 希望这有助于。。。并注意在线评论:

    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
    

    由于我无法对上一篇文章发表评论,并且我建议的编辑被拒绝,我只能添加看起来像新答案但不是的内容。唉

    下面是Subbdue的示例,该示例经过编辑以修复以下语法错误:

  • SV
    typedef枚举{…}与OpenVera相反的语法<代码>枚举{…}语法
  • 使用
    结束枚举声明
  • 声明变量
    channelNumber
  • ipVersion
    声明为
    rand
  • SV
    在{[:]}
    语法中,与{min:max}
    语法中的OpenVera
    相反
  • 结束
    约束中的表达式
    s
  • SV
    ->
    语法与OpenVera
    =>
    语法相反
  • 修复打字错误
    solver
    ->
    solve
  • 修复键入
    IPVx
    ->
    IPVx
  • 固定示例:

    class RandomConstraints;
        typedef enum {IPV4=2, IPV6, IPVX} IpVersionType;
    
        //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 [3:0] channelNumber;
        rand bit [7:0]  var1;
        rand bit [7:0]  var2;
        rand 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 inside { [ minPacketLength : maxPacketLength ] };
        }
        constraint cChannelNumber {
            channelNumber inside {[0:1]};
        }
        // Assuming total weight adds up to 100
        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 inside {[0:200]};
                sourceAddress inside {[201:400]};
            }
            (channelNumber == 1) -> {
                destAddress inside {[201:400]};
                sourceAddress inside {[0:200]};
            }
        }
        //Controlling order of constraints solved using a constraint solver
        constraint order_solver {
            solve channelNumber before destAddress;
            solve 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
    

    干得好看起来,我需要2千分才能有资格审查建议的编辑(即使是在我自己的帖子上:)。。既然你煞费苦心地写了一篇新文章,我就不写了。