当前位置: 代码迷 >> 综合 >> [SV]SystemVerilog随机加权决策(分支)--- randcase
  详细解决方案

[SV]SystemVerilog随机加权决策(分支)--- randcase

热度:71   发布时间:2024-03-07 13:38:33.0

                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