是否有一种方法可以基于运行时数据在System Verilog中进行加权随机化。假设我有一个整数队列和一个权重队列(无符号整数),并希望根据第二个队列中的权重从第一个队列中选择一个随机整数。
int data[$] = '{10, 20, 30};
uint_t weights[$] = '{100, 200, 300};
任何随机构造都希望权重按照以下方式硬编码
constraint range { Var dist { [0:1] := 50 , [2:7] := 50 }; }
但就我而言,我需要从数量未知的元素中选择一个元素。
PS:假定元素的数量和权重始终相同。
答案 0 :(得分:1)
不幸的是,dist
约束只允许您从固定数量的值中进行选择。
我能想到的两种方法
为每个重量创建一个范围数组。对于您的示例,数组为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];