谈一谈SystemVerilog的randomize

提到systermverilog,最常接触的就是随机,与随机紧密相关的函数就是randomize,但是实际上我们又对randomize知道多少呢?本章节我们就梳理一下randomize()的坑。

一些之前踩过的坑:https://www.cnblogs.com/xuqing125/p/15772001.html

从下面几个例子入手:

例子一:randomize的正常使用。

  • 基类bird有自己的随机变量:src/drc
  • 扩展类parr有单属于自己的随机变量:a/b

仿真结果

例子二:A = B

  • A = B;
  • 仅仅对A.randomize()

仿真结果

  • 基类的句柄A指向的是扩展类的对象B.
  • A.randomize(),从结果来看B(a/b)也进行了随机化.randomize()其实就是类似于virtual的function。

例子三:A= B,A.randomize() with {a ==2 ;};

解决方法:将基类句柄转换成扩展类的类型。

image.png

注意:这个在sequence中需要尤其注意,因为seq中涉及到随机化。

posted on 2022-03-02 10:01  猪肉白菜_125  阅读(507)  评论(0编辑  收藏  举报