本文共 721 字,大约阅读时间需要 2 分钟。
1.再向uvm_reg 加入uvm_reg_field时,将加入的uvm_reg_field 定义为rand 类型:
2.再将uvm_reg 加入uvm_reg_block时,同样定义为rand:
3.可以判断对register_model 来说,支持randomize操作。可以在uvm_reg_block,uvm_reg,uvm_reg_field级别调用:
4.要使某个field 随机化,只定义为rand 类型是不够的。在每个reg_field 加入uvm_reg时,调用其configure 函数:
第八个参数绝对是否随机化。但即使为1,也不一定随机化。当一个field没有写时,此参数设置无效。
5.只有此参数为RW、WRC、WRS、WO、W1、WO1 才有效。
6.要避免一个field 被随机化,以下3种方式中任选其一:
1)uvm_reg 中定义此field时,不要设置为rand 类型。
2)调用此field 的configure是,第八个设置为0
3)field 类型设置为RO、RC、RS、WC、WS、W1C、W1S、W1T、W0C、W0S、W0T、W1SRC、W1CRS、W0SRC、W0CRS、WSRC、WCRS、WOC、WOS 中的一种。
第一种方式也适用于关闭某个uvm_reg 或某个uvm_reg_block 的randomize 功能。
7,可以为他们定义constraint:
要设置到value这一层。
8.randomize 会更新寄存器模型中的预期值:
与set 函数类似。可以在randomize 完成后调用update任务,将随机化后的参数更新到DUT中。适用于在仿真开始时随机化并配置参数。