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

Subversion Repositories wisbone_2_ahb

[/] [wisbone_2_ahb/] [tags/] [t2/] [svtb/] [avm_svtb/] [wb_ahb_monitor.svh] - Blame information for rev 11

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 5 toomuch
//******************************************************************************************************
2
// Copyright (c) 2007 TooMuch Semiconductor Solutions Pvt Ltd.
3
 
4
 
5
//File name             :       wb_ahb_monitor.svh
6
//Date                  :        Aug, 2007
7
//Description           :       Monitor for WISHBONE_AHB Bridge
8
//Revision              :       1.0
9
 
10
//******************************************************************************************************
11
 
12
// monitor class
13
import avm_pkg::*;
14
import global::*;
15
class wb_ahb_monitor extends avm_threaded_component;
16
 
17
avm_analysis_port#(monitor_pkt) ap_sb; // analysis port for Score board
18
monitor_pkt m_pkt;  // instance of packet
19
 
20
local bit flag1;
21
local bit flag2;
22
 
23
virtual wb_ahb_if pin_if;
24
 
25
        function new(string name ,avm_named_component parent);
26
                super.new(name,parent);
27
                ap_sb = new("ap_sb",this);
28
                pin_if =null;
29
        endfunction
30
// task to monitor event on read/write signal
31
task rdwr;
32
        forever
33
                begin
34
                @(pin_if.monitor.we_i);
35
                $display("Event on Read/Write");
36
                flag1='b1;
37
                end
38
endtask
39
// task to monitor event on ack_o or stb_i (wait state)
40
task wait_ms;
41
        forever
42
                begin
43
                @(pin_if.monitor.stb_i or pin_if.monitor.ack_o);
44
                flag2='b1;
45
                end
46
endtask
47
 
48
task main_run;
49
        forever
50
        begin
51
                @(posedge pin_if.monitor.clk_i);
52
                $display("At %0d,Values at ahb :%0d, %0d",$time,pin_if.monitor.haddr,pin_if.monitor.hwdata);
53
                if(pin_if.monitor.stb_i)//No wait state
54
                   begin
55
                    if(pin_if.monitor.we_i) //write mode
56
                        begin
57
                                if(flag1) // first clock
58
                                begin
59
                                        m_pkt.adr1=pin_if.monitor.addr_i;
60
                                        m_pkt.wr='b1;
61
                                        m_pkt.stb=pin_if.monitor.stb_i;
62
                                        m_pkt.flag1='b1;
63
                                        // write packet to scoreboard
64
                                        ap_sb.write(m_pkt);
65
                                        flag1='b0;
66
                                end
67
                                else
68
                                begin
69
                                        m_pkt.adr1=pin_if.monitor.addr_i;
70
                                        m_pkt.dat1=pin_if.monitor.data_i;
71
                                        m_pkt.adr2=pin_if.monitor.haddr;
72
                                        m_pkt.dat2=pin_if.monitor.hwdata;
73
                                        m_pkt.wr='b1;
74
                                        m_pkt.stb=pin_if.monitor.stb_i;
75
                                        m_pkt.flag1='b0;
76
                                        m_pkt.flag2=flag2;
77
                                        ap_sb.write(m_pkt);
78
                                end
79
                        end
80
                        else// read mode
81
                        begin
82
                                if(flag1) // first clock
83
                                begin
84
                                        m_pkt.adr1=pin_if.monitor.addr_i;
85
                                        m_pkt.wr='b0;
86
                                        m_pkt.stb=pin_if.monitor.stb_i;
87
                                        m_pkt.flag1='b1;
88
                                        //write packet to scoreboard
89
                                        ap_sb.write(m_pkt);
90
                                        flag1='b0;
91
                                end
92
                                else
93
                                begin
94
                                        m_pkt.adr1=pin_if.monitor.addr_i;
95
                                        m_pkt.dat1=pin_if.monitor.data_i;
96
                                        m_pkt.adr2=pin_if.monitor.haddr;
97
                                        m_pkt.dat2=pin_if.monitor.hrdata;
98
                                        m_pkt.wr='b0;
99
                                        m_pkt.stb=pin_if.monitor.stb_i;
100
                                        m_pkt.flag1='b0;
101
                                        m_pkt.flag2=flag2;
102
                                        // write packet to scoreboard
103
                                        ap_sb.write(m_pkt);
104
                                end
105
                        end
106
                end
107
                else // wait state by slave or master
108
                begin
109
                        if(pin_if.monitor.we_i) // write mode
110
                        begin
111
                                if(flag2) // latch the value
112
                                begin
113
                                        m_pkt.adr1=pin_if.monitor.addr_i;
114
                                        m_pkt.dat1=pin_if.monitor.data_i;
115
                                        m_pkt.adr2=pin_if.monitor.haddr;
116
                                        m_pkt.dat2=pin_if.monitor.hwdata;
117
                                        m_pkt.wr='b1;
118
                                        m_pkt.stb=pin_if.monitor.stb_i;
119
                                        m_pkt.flag2='b1;
120
                                        ap_sb.write(m_pkt);
121
                                        flag2='b0;
122
                                end
123
                                else
124
                                begin
125
                                        m_pkt.adr1=pin_if.monitor.addr_i;
126
                                        m_pkt.dat1=pin_if.monitor.data_i;
127
                                        m_pkt.adr2=pin_if.monitor.haddr;
128
                                        m_pkt.dat2=pin_if.monitor.hwdata;
129
                                        m_pkt.wr='b1;
130
                                        m_pkt.stb=pin_if.monitor.stb_i;
131
                                        m_pkt.flag2='b0;
132
                                        ap_sb.write(m_pkt);
133
                                end
134
                        end
135
                        else
136
                        begin
137
                                if(flag2) // latch the value
138
                                begin
139
                                        m_pkt.adr1=pin_if.monitor.addr_i;
140
                                        m_pkt.dat1=pin_if.monitor.data_o;
141
                                        m_pkt.adr2=pin_if.monitor.haddr;
142
                                        m_pkt.dat2=pin_if.monitor.hrdata;
143
                                        m_pkt.wr='b0;
144
                                        m_pkt.stb=pin_if.monitor.stb_i;
145
                                        m_pkt.flag2='b1;
146
                                        ap_sb.write(m_pkt);
147
                                        flag2='b0;
148
                                end
149
                                else
150
                                begin
151
                                        m_pkt.adr1=pin_if.monitor.addr_i;
152
                                        m_pkt.dat1=pin_if.monitor.data_o;
153
                                        m_pkt.adr2=pin_if.monitor.haddr;
154
                                        m_pkt.dat2=pin_if.monitor.hrdata;
155
                                        m_pkt.wr='b0;
156
                                        m_pkt.stb=pin_if.monitor.stb_i;
157
                                        m_pkt.flag2='b0;
158
                                        ap_sb.write(m_pkt);
159
                                end
160
                        end
161
                end
162
        end
163
endtask
164
 
165
// run all task simultaneously
166
task run;
167
        fork
168
                rdwr();
169
                wait_ms();
170
                main_run();
171
        join
172
endtask
173
 
174
endclass
175
 
176
 

powered by: WebSVN 2.1.0

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