代码之家  ›  专栏  ›  技术社区  ›  Krishna

Verilog系统中基于运行时数据的加权随机化

  •  0
  • Krishna  · 技术社区  · 7 年前

    在基于运行时数据的系统Verilog中,是否有一种加权随机化的方法。例如,我有一个整数队列和一个权重队列(无符号整数),并希望根据第二个队列中的权重从第一个队列中选择一个随机整数。

    int data[$] = '{10, 20, 30};
    uint_t weights[$] = '{100, 200, 300};
    

    constraint range { Var dist { [0:1] := 50 , [2:7] := 50 }; } 
    

    但在我的例子中,我需要从未知数量的元素中选择一个元素。

    PS:假设元素的数量和权重总是相同的。

    1 回复  |  直到 7 年前
        1
  •  1
  •   dave_59    7 年前

    dist

    我能想到的两种方法是

    1. 使用权重作为重复计数,将每个数据值推入队列。在您的示例中,您将得到一个包含600个值的队列。在队列中随机选取一个索引。所选元素具有所需的分布。举了一个例子 here
    2. 为每个权重创建一个范围数组。例如,数组 uint_t ranges[][2]'{{0,99},{100,299},{300,599}}

      index inside {[0:weights.sum()-1]}; foreach (data[ii]) index inside {[ranges[ii][0]:ranges[ii][1]} -> value == date[ii];

    推荐文章