Code Browser Pages:
| /////////////////////////////////////// /////////////////////////////////////// //// //// //// VMM 1.2 example //// //// //// //// For more vmm examples //// //// visit www.testbench.in //// //// //// /////////////////////////////////////// /////////////////////////////////////// //----------------------------------------------------------------------------- // Dummy rtl driver-xactor Class //----------------------------------------------------------------------------- // driver callback class typedef class my_driver_callbacks; // Scoreboard typedef class my_sb; class my_driver extends vmm_xactor; // dummy rtl transacion channel packet_channel get_data_chan; // dummy rtl interface virtual dut_if.driver drv_if; //----------------------------------------------------------------------------- // new() - Constructor //----------------------------------------------------------------------------- function new(string inst, int unsigned stream_id = -1, virtual dut_if.driver drv_if, packet_channel in_chan = null ); super.new("MY_DRIVER", inst, stream_id); this.drv_if = drv_if; this.get_data_chan = in_chan; endfunction : new //----------------------------------------------------------------------------- // reset_xactor () //----------------------------------------------------------------------------- virtual function void reset_xactor(reset_e rst_typ = SOFT_RST); super.reset_xactor(rst_typ); `vmm_note(log,"reset_xactor() - Inside "); this.drv_if.address <= 0; this.drv_if.o_data <= 0; this.drv_if.rdwr <= packet::READ; this.drv_if.en <= packet::nEN; this.get_data_chan.flush(); `vmm_note(log,"reset_xactor() - Exiting "); endfunction : reset_xactor //----------------------------------------------------------------------------- // main () //----------------------------------------------------------------------------- protected virtual task main(); fork super.main(); get_data(); join_none endtask : main //----------------------------------------------------------------------------- // get_data () //----------------------------------------------------------------------------- virtual task get_data(); while(1) begin packet p1; this.wait_if_stopped_or_empty(this.get_data_chan); this.get_data_chan.get(p1); `vmm_note(log,"get_data() - Packet took from the channel "); `vmm_callback(my_driver_callbacks, pre_packet_tx(this, p1)); drive_data(p1); `vmm_callback(my_driver_callbacks, post_packet_tx(this, p1)); end endtask : get_data //----------------------------------------------------------------------------- // drive_data () //----------------------------------------------------------------------------- virtual task drive_data(ref packet p1); `vmm_note(log,"drive_data() - Inside "); @(posedge this.drv_if.clk); this.drv_if.address <= p1.address; this.drv_if.o_data <= p1.data ; drv_if.rdwr <= (p1.rdwr == packet::WRITE) ? 1'b1 : 1'b0; this.drv_if.en <= (p1.en == packet::EN) ? 1'b1 : 1'b0 ; if(p1.rdwr == packet::WRITE) $display ("[%0t] :: DRIVER :: ENABLE = TYPE = - ADDRESS = %0h - DATA = %0h",$realtime, p1.en.name, p1.rdwr.name, p1.address, p1.data); else $display ("[%0t] :: DRIVER :: ENABLE = TYPE = - ADDRESS = %0h ",$realtime, p1.en.name, p1.rdwr.name, p1.address); `vmm_note(log,"drive_data() - Exiting "); endtask : drive_data endclass : my_driver //----------------------------------------------------------------------------- // Dummy rtl driver-xactor callback Class //----------------------------------------------------------------------------- class my_driver_callbacks extends vmm_xactor_callbacks; my_sb scbd; static vmm_log log = new("DRIVER_CALLBACKS", "Class"); function new(my_sb scbd); this.scbd = scbd; endfunction : new // Callbacks before a transaction is started virtual task pre_packet_tx(my_driver drv, packet p); // Empty endtask : pre_packet_tx // Callback after a transaction is completed virtual task post_packet_tx(my_driver drv, packet p); int stream = 1; `vmm_note(log,"post_packet_tx() - Inside "); p.data = (p.rdwr == 1'b1) ? p.data : 8'h0 ; scbd.insert(p, vmm_sb_ds::INPUT, stream); `vmm_note(log,"post_packet_tx() - Exiting "); endtask : post_packet_tx endclass : my_driver_callbacks //----------------------------------------------------------------------------- // end of file //----------------------------------------------------------------------------- |