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

Logic systemverilog randomize():使用位向量成员的子部分,logic,constraints,system-verilog,Logic,Constraints,System Verilog,我有一个项目: class my_item extends uvm_sequence_item; rand logic [31:0] addr; ... endclass 在我的seq中的某个地方,我想约束addr的一部分: my_item temp_item; temp_item = my_item::type_id::create("temp_my_item"); int mem_

我有一个项目:

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

  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?
    ...
  };

SV
randomize()
能够处理
rand logic
字段的这种子选择吗?

SystemVerilog不关心哪些位受到约束,只是约束表达式必须为真。这就是为什么您应该始终调用
randomize()
,作为测试返回值的条件语句的一部分

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