Constraints 使用权重数组的systemverilog约束距离
我需要能够使用64种不同的可变权重设置约束距离: 我需要随机选择一个范围为0~63的指数,当每个指数都有自己的权重/概率可供选择时 我可以这样写: 约束拾取通道约束{拾取通道距离{ 0:=通道权重[0],1:=通道权重[1],2:=通道权重[2], 3:=通道权重[3],4:=通道权重[4],5:=通道权重[5], 6:=通道权重[6],7:=通道权重[7],8:=通道权重[8], 9:=通道权重[9],10:=通道权重[10],11:=通道权重[11], 12:=通道权重[12],13:=通道权重[13], 14:=通道重量[14] 通道数/1:=通道重量[通道数/1]} 显然,这是一个糟糕的写作和想法,原因有二: 没有灵活性-如果更改了更改的数量,我需要更改代码 它又长又丑,几乎不可读 有什么想法吗 谢谢§18.5.4分发显示距离列表需要是Constraints 使用权重数组的systemverilog约束距离,constraints,distribution,system-verilog,Constraints,Distribution,System Verilog,我需要能够使用64种不同的可变权重设置约束距离: 我需要随机选择一个范围为0~63的指数,当每个指数都有自己的权重/概率可供选择时 我可以这样写: 约束拾取通道约束{拾取通道距离{ 0:=通道权重[0],1:=通道权重[1],2:=通道权重[2], 3:=通道权重[3],4:=通道权重[4],5:=通道权重[5], 6:=通道权重[6],7:=通道权重[7],8:=通道权重[8], 9:=通道权重[9],10:=通道权重[10],11:=通道权重[11], 12:=通道权重[12],13:=通道
dist\u项目的列表
s,dist\u项目
定义为值范围[dist\u权重]
。换句话说,需要列出分布情况
您可以创建队列数组(§7.10队列),然后使用洗牌方法(§7.12.2数组排序方法),而不是使用约束。例如:
int channel_weight [64];
int pick_channel;
int weight_chain [$];
weight_chain.delete(); // make sure it is empty
foreach (channel_weight[i]) begin
repeat (channel_weight[i]) begin
weight_chain.push_back(i);
end
end
weight_chain.shuffle(); // randomize order
assert( weight_chain.size() > 0) else $error("all channel_weights are 0");
pick_channel = weight_chain[0];
§18.5.4分布显示,距离列表需要是dist\u项目的列表,dist\u项目
定义为value\u范围[dist\u权重]
。换句话说,需要列出分布情况
您可以创建队列数组(§7.10队列),然后使用洗牌方法(§7.12.2数组排序方法),而不是使用约束。例如:
int channel_weight [64];
int pick_channel;
int weight_chain [$];
weight_chain.delete(); // make sure it is empty
foreach (channel_weight[i]) begin
repeat (channel_weight[i]) begin
weight_chain.push_back(i);
end
end
weight_chain.shuffle(); // randomize order
assert( weight_chain.size() > 0) else $error("all channel_weights are 0");
pick_channel = weight_chain[0];