生成“X”或未知值的序列项

时间:2014-03-10 05:57:27

标签: system-verilog uvm

我已经在sequencer上启动了一个seq项来生成具有随机约束的seq项,但是生成的项有很多" X"值。这背后的原因可能是什么?

以下是代码:

virtual task run_phase(uvm_phase phase);
begin
  uvm_test_done.raise_objection(this,"started sequence");
  `uvm_info(get_type_name(),"inside run_phase of base test:\n", UVM_LOW)
  fork
    #10;
    spi_m_seq.start(spi_env_inst.spi_master.spi_sequencer);
     #300;
  join
  uvm_test_done.drop_objection(this,"sequence finished");
end
endtask:run_phase

1 个答案:

答案 0 :(得分:2)

SystemVerilog LRM声明约束求解只能处理2值逻辑。这意味着您拥有的任何X都是由于您的类中未初始化的4态逻辑类型。这是我的意思和例子:

package some_package;

  class some_class;
    rand logic[15:0] field1;
         logic[15:0] field2;

    function void print();
      $display("field1 = %x", field1);
      $display("field2 = %x", field2);
    endfunction
  endclass
endpackage

module top;
  import some_package::*;

  initial begin
    some_class my_obj = new();
    my_obj.randomize();
    my_obj.print();
  end

endmodule

在上面的示例中,两个字段都是逻辑类型(4状态),但只有field1声明为rand。这意味着当my_obj随机化时,约束求解器仅分配此字段。 field2的值将保持16'bx(4状态类型的初始值)。