OpenCores
URL https://opencores.org/ocsvn/i2c_master_slave_core/i2c_master_slave_core/trunk

Subversion Repositories i2c_master_slave_core

[/] [i2c_master_slave_core/] [trunk/] [i2c_master_slave_core/] [i2c_master_slave_core/] [svtb/] [vmm_svtb/] [vmm_i2c_stimulus_packet.sv] - Rev 6

Compare with Previous | Blame | View Log

//////////////////////////////////////////////////////////////////////////////////////////
//                                                                                                                                                                              //
//      Verification Engineer:  Atish Jaiswal                                                                                           //
//      Company Name             :      TooMuch Semiconductor Solutions Pvt Ltd.                                        //
//                                                                                                                                                                              //
//  Description of the Source File:                                                                                                             //
//  This file defines Stimulus packet class for Scenario Generator.                                     //
//      The Packet Randomizes intr_en to enable/disable interrupt, byte_count to transfer       //
//  Random no. of data_bytes, register_address and data for register testcase. It also  //
//  randomize slave address. Other fields get assigned in Scenario generator class.             //
//  Constraint block called reg_add is used to contrain randomized fields.                              //
//                                                                                                                                                                              //
//                                                                                                                                                                              //
//////////////////////////////////////////////////////////////////////////////////////////

`include "vmm.sv"

class stimulus_packet extends vmm_data; 
 
        vmm_log log;

        rand bit intr_en ;                      // 1 for Interrupt enable and 0 for disable
        rand int byte_count;                    // no. of bytes to be transfered
    rand bit [7:0] register_data;       // to check register read/write
    rand bit [7:0] register_addr;       // to select the address of internal register
        rand bit [6:0] slave_address;   // slave address to be checked
        bit [7:0] data_packet[];                // data packets to be transfered
        bit master_slave;                               // 1 for master and 0 for slave
        bit tr;                                                 // 1 for trasmit and 0 for receive
        bit register_check;                             // 1 to check registers writing and 0 for not.
        bit reset_check;                                // 1 to check reset test and 0 for not.
        int temp_count; 

        constraint reg_add {
        register_addr inside {8'h02, 8'h04, 8'h0A, 8'h0C, 8'h0E};
                byte_count inside {[2:10]};
                slave_address < 7'b111_1111;
                intr_en dist {0 := 1, 1 :=1};
    }
        
        
        function new();
                super.new(this.log);
                this.log = new("Stimulus Data", "class");       
        endfunction 

        function void display();
                this.log.start_msg(vmm_log::NOTE_TYP);
                void'(this.log.text($psprintf("Master/Slave mode is = %b\n", master_slave)));
                void'(this.log.text($psprintf("tr = %d\n", tr)));
                void'(this.log.text($psprintf("register_check = %b\n", register_check)));
                void'(this.log.text($psprintf("reset_check = %b\n", reset_check)));
                void'(this.log.text($psprintf("Interrupt Enable is = %b\n", intr_en)));
                void'(this.log.text($psprintf("byte_count = %d\n", byte_count)));
                void'(this.log.text($psprintf("register_addr = %b\n", register_addr)));
                void'(this.log.text($psprintf("register_data = %b\n", register_data)));
                void'(this.log.text($psprintf("slave_address = %b\n", slave_address)));
                this.log.end_msg();
                temp_count = byte_count;
        endfunction     


        function vmm_data copy(vmm_data to = null);
                copy = new this;
        endfunction
        
endclass
`vmm_channel(stimulus_packet)         // This macro defined in VMM Methodology creates channel named stimulus_packet_channel

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.