OVMを使って74163-counterのテスト環境を作ってみた。③

久しぶりに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の
      `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を見てね。(ソースを見るんだよ。。汗)

systemVerilog OVM LSI検証 回路検証