0

我已经在定序器上启动了一个 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
4

1 回答 1

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 状态类型的初始值)。

于 2014-03-10T09:10:23.180 回答