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 値ロジックのみを処理できると述べています。これは、クラス内の初期化されていない 4 ステート ロジック タイプが原因で X があることを意味します。これが私が意味することの例です:

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 に答える