SV 随机化(Randomization)

  • Coverage Driver Verification
  • 可约束的随机化验证,用于测试的值可以再一定范围内进行随机,具体的范围可以进行约束,比如可以跑100次,然后查看覆盖率,可以通过覆盖率进行度量验证的进度

内容

  • 随机化的变量往往需要添加一定的约束,通过添加约束让值在一定的范围内进行随机

随机化验证策略

  • 首先先验证一些正常的testcase
  • 验证一些异常的值
  • 验证一些边界值
  • 定向测试:测试的值都是定死的,debug的时候可以使用定向测试,定向测试不能检查一些隐形的错误
  • 随机测试:测试的值都是随机的,随机化验证策略可以检测设计中的不可预期的错误和隐形的错误

随机内容有哪些


  • 容错处理,给出一定超出规定范围的值,看DUT是不是能够进行处理

SystemVerilog的随机化

  • 验证组件的基本单元都是class,所以在class中进行随机化

class Bus
  rand bit[15:0] addr;
  randc bit[31:0] data;

  constraint range1{
  addr > 1024;
  addr <16384;
  };
endclass



  • 同一个随机种子下随机数的值是一样的

随机化的约束



data inside {[1001,9999]}

随机化的约束:权重分布


随机化约束:双向约束

随机化约束:条件约束

随机化约束的结果的可能性



  • 上面的约束条件是并行执行的
  • solve y before x - 先找y的取值再找x的取值

随机化约束:foreach

![]
(https://img2024.cnblogs.com/blog/3077491/202401/3077491-20240123224529767-2039412941.png)

  • foreach - 对于数组中每个元素进行随机约束

随机化约束:function

随机化约束:约束保护

激活或者关闭随机变量



练习

补充知识

pre_randomize and post_randomize

  • 在调用randomize的时候同时会调用pre_randomize和post_randomize
  • 先执行pre_randomize,再指向randomize,再执行post_randomize,调用randomize函数的时候,会调用三个函数


with

std::randomize()

$urandom

$urandom_range

  • 相同种子下的随机数是一样的
posted @ 2024-01-23 23:17  Icer_Newer  阅读(392)  评论(0编辑  收藏  举报