久しぶりにOVMです。
このところVH○Lに襲われていてSVをいじっていません。。汗)
と言うことで内容の薄い書き込みになります。。ごめんなさい今回はcounter_driverを載せよう。。
// 74163 conter driver // $Id class counter_driver extends ovm_driver #(counter_item) ; protected virtual counter_if counter_if0 ; `ovm_component_utils(counter_driver) function new(string name, ovm_component parent) ; super.new(name, parent) ; endfunction : new function void assign_vi(virtual interface counter_if counter_if) ; this.counter_if0 = counter_if ; endfunction : assign_vi task run() ; reset_signals() ; while(1) begin #10 ; seq_item_port.get_next_item(req) ; drive_signals(req) ; req.print ; seq_item_port.item_done() ; end endtask : run virtual protected task reset_signals() ; counter_if0.reset() ; endtask : reset_signals virtual protected task drive_signals(counter_item item) ; counter_if0.interval(item.interval) ; counter_if0.data_load(item.data) ; counter_if0.count(item.enable) ; #10 ; endtask : drive_signals endclass : counter_driver
前回載せたcounter_seq_lib.svの
受け取ったreqをdrive_signalsでカウンタ駆動用の信号に変換して
カウンター(conter_ifの先)を動かす。
`ovm_do(req)で送り出したreqを
seq_item_port.get_next_item(req) ;で受け取る。。
受け取ったreqをdrive_signalsでカウンタ駆動用の信号に変換して
カウンター(conter_ifの先)を動かす。
task run() ; reset_signals() ; while(1) begin #10 ; seq_item_port.get_next_item(req) ;とwhileで無限loopしているのでreqが到着した分だけカウンターを駆動できます。
reqにprintを付けるとreqの内容をフォーマット付きで表示してくれるよ。。
注)この辺がOVM分かりやすい便利機能の一つか。。
詳細はcounter_itemの親ovm_sequence_itemを見てね。(ソースを見るんだよ。。汗)
注)この辺がOVM分かりやすい便利機能の一つか。。
詳細はcounter_itemの親ovm_sequence_itemを見てね。(ソースを見るんだよ。。汗)
systemVerilog OVM LSI検証 回路検証