Code Browser Pages:
Files in
vmm_switch_6.tar



Driver.sv
Current file: Environment.sv
filelist
Globals.sv
interface.sv
Packet.sv
README.txt
rtl.sv
testcase.sv
top.sv



////////////////////////////////////////////////
////s~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~s////
////s           www.testbench.in           s////
////s                                      s////
////s             VMM Tutorial             s////
////s           gopi@testbench.in          s////
////s~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~s////
////////////////////////////////////////////////
`ifndef GUARD_ENV
`define GUARD_ENV

class Environment extends vmm_env;

  virtual mem_interface.MEM    mem_intf      ;
  virtual input_interface.IP  input_intf     ;
  virtual output_interface.OP output_intf[4] ;

  Packet_atomic_gen atomic_gen;
  Driver drvr;
  Packet_channel gen2drvr_chan;
  Packet_channel drvr2sb_chan;
function new(virtual mem_interface.MEM    mem_intf_new       ,
             virtual input_interface.IP  input_intf_new     ,
             virtual output_interface.OP output_intf_new[4] );
  super.new("Environemnt");
  this.mem_intf      = mem_intf_new    ;
  this.input_intf    = input_intf_new  ;
  this.output_intf   = output_intf_new ;

  `vmm_note(this.log, "Created env object");
endfunction : new


  virtual function void gen_cfg();
            super.gen_cfg();
            `vmm_note(this.log,"Start of gen_cfg() method ");
            `vmm_note(this.log,"End of gen_cfg() method ");
          endfunction

  virtual function void build();
            super.build();
            `vmm_note(this.log,"Start of build() method ");
            gen2drvr_chan = new("gen2drvr","chan");
            drvr2sb_chan = new("drvr2sb","chan");
            atomic_gen = new("atomic_gen",0,gen2drvr_chan);
            atomic_gen.stop_after_n_insts = 10;
            drvr = new("Drvr",0,input_intf,gen2drvr_chan,drvr2sb_chan);
            `vmm_note(this.log,"End of build() method ");
          endfunction

  virtual task reset_dut();
            super.reset_dut();
            `vmm_note(this.log,"Start of reset_dut() method ");
              mem_intf.cb.mem_data      <= 0;
              mem_intf.cb.mem_add       <= 0;
              mem_intf.cb.mem_en        <= 0;
              mem_intf.cb.mem_rd_wr     <= 0;
              input_intf.cb.data_in     <= 0;
              input_intf.cb.data_status <= 0;
              output_intf[0].cb.read    <= 0;
              output_intf[1].cb.read    <= 0;
              output_intf[2].cb.read    <= 0;
              output_intf[3].cb.read    <= 0;

              // Reset the DUT
              input_intf.reset       <= 1;
              repeat (4) @ input_intf.clock;
              input_intf.reset       <= 0;

            `vmm_note(this.log,"End of reset_dut() method ");
          endtask

  virtual task cfg_dut();
            super.cfg_dut();
            `vmm_note(this.log,"Start of cfg_dut() method ");
            mem_intf.cb.mem_en <= 1;
            @(posedge mem_intf.clock);
            mem_intf.cb.mem_rd_wr <= 1;

            @(posedge mem_intf.clock);
            mem_intf.cb.mem_add  <= 8'h0;
            mem_intf.cb.mem_data <= `P0;
            `vmm_note(this.log ,$psprintf(" Port 0 Address %h ",`P0));

            @(posedge mem_intf.clock);
            mem_intf.cb.mem_add  <= 8'h1;
            mem_intf.cb.mem_data <= `P1;
            `vmm_note(this.log ,$psprintf(" Port 1 Address %h ",`P1));

            @(posedge mem_intf.clock);
            mem_intf.cb.mem_add  <= 8'h2;
            mem_intf.cb.mem_data <= `P2;
            `vmm_note(this.log ,$psprintf(" Port 2 Address %h ",`P2));

            @(posedge mem_intf.clock);
            mem_intf.cb.mem_add  <= 8'h3;
            mem_intf.cb.mem_data <= `P3;
            `vmm_note(this.log ,$psprintf(" Port 3 Address %h ",`P3));

            @(posedge mem_intf.clock);
            mem_intf.cb.mem_en    <=0;
            mem_intf.cb.mem_rd_wr <= 0;
            mem_intf.cb.mem_add   <= 0;
            mem_intf.cb.mem_data  <= 0;

            `vmm_note(this.log,"End of cfg_dut() method ");
          endtask

  virtual task start();
            super.start();
            `vmm_note(this.log,"Start of start() method ");
            atomic_gen.start_xactor();
            drvr.start_xactor();
            `vmm_note(this.log,"End of start() method ");
          endtask

  virtual task wait_for_end();
            super.wait_for_end();
            `vmm_note(this.log,"Start of  wait_for_end() method ");
             repeat(1000) @(input_intf.clock);
            `vmm_note(this.log,"End of  wait_for_end() method ");
          endtask

  virtual task stop();
            super.stop();
            `vmm_note(this.log,"Start of stop() method ");
            atomic_gen.stop_xactor();
            drvr.stop_xactor();
            `vmm_note(this.log,"End of stop() method ");
          endtask

  virtual task cleanup();
            super.cleanup();
            `vmm_note(this.log,"Start of cleanup() method ");
            `vmm_note(this.log,"End of cleanup() method ");
          endtask

  virtual task report();
            `vmm_note(this.log,"Start of report() method \n\n\n");
            $display("---------------------------------------------------------------------");
            super.report();
            $display("---------------------------------------------------------------------");
             $display("\n\n");
            `vmm_note(this.log,"End of report() method");
          endtask

endclass
`endif