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_env.sv] - Blame information for rev 6

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 4 toomuch
//////////////////////////////////////////////////////////////////////////////////////////
2
//                                                                                                                                                                              //
3
//      Verification Engineer:  Atish Jaiswal                                                                                           //
4
//      Company Name             :      TooMuch Semiconductor Solutions Pvt Ltd.                                        //
5
//                                                                                                                                                                              //
6
//  Description of the Source File:                                                                                                             //
7
//      This source code Creates VMM Environment of the I2C M/S Core.                                           //
8
//                                                                                                                                                                              //
9
//                                                                                                                                                                              //
10
//                                                                                                                                                                              //
11
//////////////////////////////////////////////////////////////////////////////////////////
12
 
13
`include "vmm.sv"
14
`include "config.sv"
15
`include "vmm_i2c_interface.sv"
16
//`include "debug_if.sv"
17
`include "vmm_i2c_sb_pkt.sv"
18
`include "vmm_i2c_mon_pkt.sv"
19
`include "vmm_i2c_reg_pkt.sv"
20
`include "vmm_i2c_scenario_packet.sv"
21
`include "vmm_i2c_stimulus_packet.sv"
22
`include "vmm_i2c_data_packet.sv"
23
`include "vmm_i2c_scenario_generator.sv"
24
`include "sb_callback.sv"
25
`include "vmm_i2c_driver.sv"
26
`include "vmm_i2c_slave_driver.sv"
27
 
28
class i2c_env extends vmm_env;
29
 
30
        vmm_log log = new("log", "ENV");
31
        virtual i2c_pin_if pif;                                                         // Virtual Interface
32
        i2c_scenario_generator sc_gen;                                          // Scenario Generator
33
        configuration cfg;                                                                      // Configuration Class
34
        stimulus_packet_channel m_stim_req_chan;                        // Scenarion_gen to W/B Driver Channel
35
        stimulus_packet_channel s_stim_req_chan;                        // Scenarion_gen to I2C M/S Driver Channel
36
        i2c_master_driver m_driver_xactor;                                      // W/B Driver Xactor
37
        i2c_slave_driver s_driver_xactor;                                       // I2C Driver Xactor
38
        i2c_scoreboard i2c_sb;                                                          // Scoreboard
39
        sb_callback sb_c;                                                                       // Sb_Callback
40
        i2c_coverage i2c_cov;                                                           // Coverage_Module
41
        i2c_monitor i2c_mon;                                                            // Monitor
42
 
43
        bit rand_tran = 1'b0;                                                           // Rand_mode
44
        integer transaction_count;                                                      // No. of Transaction
45
 
46
// Class Constructor
47
        function new(virtual i2c_pin_if pif);
48
                super.new("MY_ENV");
49
                this.pif = pif;
50
//              this.d_if = d_if;
51
                $value$plusargs("transaction_count=%d",transaction_count);
52
                $value$plusargs("rand_trans=%b",rand_tran);
53
                cfg = new();
54
        endfunction
55
 
56
 
57
//Gen Config Function. If rand_trans is 1 then this will randomize trasaction_count in config class
58
        virtual function void gen_cfg();
59
                super.gen_cfg();
60
                `vmm_note(log, "inside gen_cfg");
61
                if(rand_tran)
62
                begin
63
                        if(!cfg.randomize())
64
                                `vmm_error(log,"Configuration Randomization Failed");
65
                        transaction_count = cfg.transaction_count;
66
                end
67
        endfunction
68
 
69
// Build function to all Connections Initializaion
70
        virtual function void build();
71
                super.build();
72
                m_stim_req_chan = new("master_stimulus_packet_channel", "m_stim_req_chan");
73
                s_stim_req_chan = new("slave_stimulus_packet_channel", "s_stim_req_chan");
74
                sc_gen = new("scenario_generator", "generator", m_stim_req_chan, s_stim_req_chan);
75
                m_driver_xactor = new("i2c_master_driver", "m_driver_xactor", this.pif, m_stim_req_chan);
76
                s_driver_xactor = new("i2c_slave_driver", "s_driver_xactor", this.pif, s_stim_req_chan);
77
                sc_gen.transaction_count = transaction_count;
78
                i2c_sb = new("I2C_Scoreboard", "SCOREBOARD");
79
                i2c_cov = new("I2C_Coverage", "COVERAGE");
80
                i2c_mon = new("I2C_Monitor", "MONITOR",this.pif);
81
                sb_c = new(i2c_sb, i2c_cov, i2c_mon);
82
                m_driver_xactor.append_callback(sb_c);
83
                s_driver_xactor.append_callback(sb_c);
84
                i2c_mon.append_callback(sb_c);
85
        endfunction
86
 
87
// Reset DUT task. It will reset dut for 5 system clk cycle
88
        virtual task reset_dut();
89
                super.reset_dut();
90
                m_driver_xactor.set_enable_signals;
91
                pif.rst = 1;
92
                repeat(5)
93
                begin
94
                        @(posedge pif.clk);
95
                        pif.rst = 0;
96
                end
97
                `vmm_note(log, "inside reset_dut");
98
        endtask
99
 
100
// cfg dut task for configuration of DUT.
101
        virtual task cfg_dut();
102
                super.cfg_dut();
103
                `vmm_note(log, "inside cfg_dut");
104
        endtask
105
 
106
// Start Transactor task. This will start all transactor in the Environment.
107
        virtual task start();
108
                super.start();
109
                sc_gen.start_xactor();
110
        m_driver_xactor.start_xactor();
111
                s_driver_xactor.start_xactor();
112
                i2c_mon.start_xactor();
113
                `vmm_note(log, "inside start");
114
        endtask
115
 
116
// Wait for end task. It will wait for Done signal from Scenario Generartor.
117
        virtual task wait_for_end();
118
                super.wait_for_end();
119
                `vmm_note(log, "inside wait_for_end");
120
                `vmm_note(log, "inside wait_for_end: before wait for done");
121
                this.sc_gen.notify.wait_for(this.sc_gen.DONE);
122
                `vmm_note(log, "inside wait_for_end: Affter wait for done");
123
        endtask
124
 
125
// Report Task
126
        virtual task report();
127
                super.report();
128
//              i2c_sb.sb_display();
129
                `vmm_note(log, "inside report");
130
        endtask
131
 
132
// Clean-up task
133
        virtual task cleanup();
134
                super.cleanup();
135
                `vmm_note(log, "inside cleanup");
136
        endtask
137
 
138
endclass
139
 
140
 
141
 
142
 
143
 
144
 
145
 
146
 
147
 
148
 
149
 
150
 
151
 
152
 
153
 
154
 
155
 
156
 
157
 
158
 
159
 
160
 
161
 
162
 
163
 
164
 
165
 
166
 
167
 
168
 
169
 
170
 
171
 
172
 
173
 
174
 
175
 
176
 
177
 
178
 
179
 
180
 
181
 
182
 
183
 
184
 
185
 
186
 
187
 

powered by: WebSVN 2.1.0

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