systemverilog randomize():使用位向量成员的子部分

时间:2018-07-28 02:54:26

标签: logic constraints system-verilog

我有一个项目:

gulp.task('qr-task', gulp.series('md-task', 'js-task', function(done) {
  gulp.src(src + '/*.qr')
    .pipe(plugin())
    .pipe(gulp.dest(dist));
  done();
}));

在我的序列中的某个地方,我想约束class my_item extends uvm_sequence_item; rand logic [31:0] addr; ... endclass 的一部分:

addr

SV my_item temp_item; temp_item = my_item::type_id::create("temp_my_item"); int mem_end_addr = 0x1234_5678; temp_item.randomize() with { ... addr[15:8] > mem_end_addr[15:8]; //---->>> does this work? ... }; 能够处理randomize()字段的这种子选择吗?

2 个答案:

答案 0 :(得分:0)

SystemVerilog并不关心哪些位被约束,只是约束表达式必须为true。这就是为什么您应该始终在测试返回值的条件语句中调用randomize()的原因。

答案 1 :(得分:0)

是的,应该可以。由于您仅对位[15:8]有限制,因此将相应地生成那些位,而其他位将尽可能地是随机的。