Vengineerの妄想

人生を妄想しています。

OVM 2.0 :ovm_driver

Verification Engineerの戯言

ovm_driverクラスの実装がちょっと変わりました。
親クラスがovm_componentクラスになったのは、
ovm_threaded_componentクラスがDeprecatedになったため!
seq_item_portが追加され、互換性のためにseq_item_prod_ifが残っています。
OVM 1.1の実装

virtual class ovm_driver extends ovm_threaded_component;

  ovm_seq_item_prod_if seq_item_prod_if;

  function new (string name, ovm_component parent);
    super.new(name, parent);
    $cast(seq_item_prod_if, create_component("ovm_seq_item_prod_if", 
         "seq_item_prod_if"));
  endfunction

endclass

OVM 2.0の実装

class ovm_driver #(type REQ = ovm_sequence_item,
                   type RSP = REQ) extends ovm_component;

  ovm_seq_item_pull_port #(REQ, RSP) seq_item_port;
  ovm_seq_item_pull_port #(REQ, RSP) seq_item_prod_if;

  ovm_analysis_port #(RSP) rsp_port;

  REQ req;
  RSP rsp;

  function new (string name, ovm_component parent);
    super.new(name, parent);
    seq_item_port    = new("sqr_pull_port", this);
    seq_item_prod_if = seq_item_port;
    rsp_port    = new("rsp_port", this);
  endfunction // new

  task run();
    return;
  endtask // run

endclass

それからアナリシスポート(rsp_port)も追加されました。次のようにシーケンサと接続します。
    driver.rsp_port.connect(sequencer.rsp_export);

2つのパラメータ(REQ/RSP)を持つことになり、ovm_driverクラスを継承したとき、シーケンスアイテムをパラメータで指定できるようになりました
下記のようにパラメータで指定したsimple_itemがrunタスクで使っているreqのクラスになります。
OVM 1.1では、reqsimple_driverクラスのメンバーとする必要がありました。
OVM 1.1 : examples/sequence/simple_driver.sv

class simple_driver extends ovm_driver;

  ovm_sequence_item item;

  // 省略

  task run ();
    while(1) begin
      #10;
      seq_item_prod_if.get_next_item(item);
      ovm_report_info("Driver", "Printing received item :");
      item.print();
      seq_item_prod_if.item_done();
    end
  endtask: run

endclass : simple_driver
OVM 2.0 : examples/sequence/simple/simple_driver.sv

class simple_driver extends ovm_driver #(simple_item);

  // 省略

  task run ();
    while(1) begin
      #10;
      seq_item_port.get_next_item(req);
      ovm_report_info("Driver", "Printing received item :");
      req.print();
      seq_item_port.item_done();
    end
  endtask: run

endclass : simple_driver
seq_item_portは、get_next_itemitem_doneの他に、TLMとおなじget/put/peekもサポートしています。

検証、Verification、SystemVerilog、OVM、Open Verification Methodology