UVM RAL:在寄存器模型中随机化寄存器

ngu*_*rie 3 system-verilog uvm

我有一个用RAL建模的大型寄存器映射,我想随机化一些寄存器.如果我想单独约束寄存器那么这很简单:

reg_model.register_a.randomize() with {value > 5;}
reg_model.register_b.randomize() with {value < 2;}
reg_model.update(status);
Run Code Online (Sandbox Code Playgroud)

但是,如果我想要写两个值之间的关系,我想我必须在整个寄存器模型中添加一个约束:

reg_model.randomize() with {register_a.value > register_b.value;}
reg_model.register_a.update(status);
reg_model.register_b.update(status);
Run Code Online (Sandbox Code Playgroud)

这里的问题是模型中的其他254个寄存器也将被随机化.我可以只更新我想要随机化的两个寄存器,但镜像将与硬件不匹配.如果我有后门访问工作,我可以刷新镜像,但我没有,我当然不想通过前门读回254寄存器.

有没有办法随机化这两个寄存器但仍然有约束求解器维持它们之间的关系?

dav*_*_59 6

你可以做到

reg_model.randomize(register_a,register_b) with {register_a.value > register_b.value;}
Run Code Online (Sandbox Code Playgroud)

然后只有寄存器a和b将被随机化.