Verification Engineerの戯言
ovm_driverクラスの実装がちょっと変わりました。
親クラスがovm_componentクラスになったのは、
ovm_threaded_componentクラスがDeprecatedになったため!
seq_item_portが追加され、互換性のためにseq_item_prod_ifが残っています。
親クラスが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
2つのパラメータ(REQ/RSP)を持つことになり、ovm_driverクラスを継承したとき、シーケンスアイテムをパラメータで指定できるようになりました
下記のようにパラメータで指定したsimple_itemがrunタスクで使っているreqのクラスになります。
OVM 1.1では、reqをsimple_driverクラスのメンバーとする必要がありました。
下記のようにパラメータで指定したsimple_itemがrunタスクで使っているreqのクラスになります。
OVM 1.1では、reqをsimple_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_driverseq_item_portは、get_next_itemとitem_doneの他に、TLMとおなじget/put/peekもサポートしています。
検証、Verification、SystemVerilog、OVM、Open Verification Methodology