SystemVerilog随机加权决策(分支)--- randcase
一、Randcase syntax
randcaserandcase_item : statement;...
endcase
1.1. randcase的权重为常数
关键字randcase引入了一个case语句,该语句随机选择它的一个分支。randcase_item表达式是组成分支权重的非负整数值。一个项目的权重(randcase_item)除以所有权重的总和就得到了这个分支的概率。例如:
randcase3 : x = 1;1 : x = 2;4 : x = 3;
endcase
- 所有权重之和为8;因此,取第一个分支的概率是0.375,取第二个分支的概率是0.125,取第三个分支的概率是0.5
- x取1的权重为3,取2的权重为1,取3的权重为4
- x取到1的概率为3/(3+1+4) = 3/8;取到2的概率为1/(3+1+4) = 1/8;取到3的概率为4/(3+1+4) = 4/8
- 如果一个分支指定了零权重,那么该分支将不会被使用。
- 如果所有randcase_items指定的权重为零,那么就不会执行分支,并且会发出警告。
1.2.randcase的权重可以是任意表达式:
byte a, b;randcasea + b : x = 1;a - b : x = 2;a ^ ~b : x = 3;12'h800 : x = 4;
endcase