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

Subversion Repositories wisbone_2_ahb

[/] [wisbone_2_ahb/] [tags/] [t3/] [svtb/] [avm_svtb/] [wb_ahb_scoreboard.svh] - Blame information for rev 8

Go to most recent revision | 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_scoreboard.svh
6 8 toomuch
//Designer              :       Ravi S Gupta
7
//Date                  :       4 Sept, 2007
8 5 toomuch
//Description           :       Stimulus Generation for WISHBONE_AHB Bridge
9
//Revision              :       1.0
10
 
11
//******************************************************************************************************
12
 
13
// scoreboard class
14
import avm_pkg::*;
15
import global::*;
16
 
17
class wb_ahb_scoreboard extends avm_threaded_component;
18
 
19
analysis_fifo#(monitor_pkt) ap_fifo; // analysis port fifo
20
analysis_if#(monitor_pkt) ap_if; // analysis port  interface
21
// local variables
22 8 toomuch
 
23
logic [AWIDTH-1:0]adr1; //WB ADDR
24
logic [DWIDTH-1:0]dat1; //WB DATA
25
logic [AWIDTH-1:0]adr2; //AHB ADDR
26
logic [DWIDTH-1:0]dat2; //WB DATA
27
 
28 5 toomuch
// monitor packet
29
monitor_pkt m_pkt;
30
 
31
virtual ahb_wb_if pin_if;
32
 
33
        function new(string name ,avm_named_component parent);
34
                super.new(name,parent);
35
                ap_fifo  =new("ap_fifo",this);
36
                ap_if =null;
37
                pin_if =null;
38
        endfunction
39
 
40 8 toomuch
// connecting analysis fifo to the analysis interface
41 5 toomuch
function void export_connections();
42
        ap_if = ap_fifo.analysis_export;
43
endfunction
44
 
45
task run;
46 8 toomuch
forever
47 5 toomuch
        begin
48
        ap_fifo.get(m_pkt);
49 8 toomuch
                if(m_pkt.stb && m_pkt.ack)  //No wait state
50 5 toomuch
                        if(m_pkt.wr) //write mode
51 8 toomuch
                                if(m_pkt.flag1) // first clock comparison only between addresses
52
                                begin
53 5 toomuch
                                        adr1=m_pkt.adr1;
54 8 toomuch
                                        dat1=m_pkt.dat1;
55
                                        adr2=m_pkt.adr2;
56 5 toomuch
                                        if(m_pkt.flag2) // first clock after after wait state
57
                                        begin
58 8 toomuch
                                                if((( adr1==m_pkt.adr1) && (dat1==m_pkt.dat1)  && (adr2==m_pkt.adr2)  && (dat2==m_pkt.dat2))|| (( m_pkt.adr1 === m_pkt.adr2 ) && (m_pkt.dat1 === dat2)));
59
 
60 5 toomuch
                                                        //avm_report_message("Scoreboard: Write Passed","after wait state");
61
                                                else
62
                                                        avm_report_warning("Scoreboard: Error in write after wait state",display_pkt(m_pkt));
63 8 toomuch
                                                adr1=m_pkt.adr1; // Holding the previous WB address
64
                                                dat1=m_pkt.dat1; // Holding the previous WB data
65
                                                adr2=m_pkt.adr2; // Holding the previous AHB Addr
66
 
67 5 toomuch
                                        end
68
                                        else
69 8 toomuch
                                                begin
70
                                                if(( m_pkt.adr1 === m_pkt.adr2 ) && (m_pkt.dat1 === dat2));
71 5 toomuch
                                                        //avm_report_message("Scoreboard: Write Passed","without wait state");
72 8 toomuch
                                                else
73 5 toomuch
                                                        avm_report_warning("Scoreboard: Error in write without wait state",display_pkt(m_pkt));
74
                                                end
75 8 toomuch
                                        end
76
                        else //READ Mode
77
                                if(m_pkt.flag1) // first clock comaprison between addresses
78
                                begin
79
                                        adr1=m_pkt.adr1;// Holding the previous WB address
80
                                        adr2=m_pkt.adr2;// Holding the previous AHB Addr
81 5 toomuch
                                        if(m_pkt.flag2) // first clock after after wait state
82
                                        begin
83 8 toomuch
                                                if((( adr1==m_pkt.adr1) && (dat1==m_pkt.dat1)  && (adr2==m_pkt.adr2)  && (dat2==m_pkt.dat2))|| (( adr1 === m_pkt.adr2 ) && (m_pkt.dat1 === m_pkt.dat2)));
84 5 toomuch
                                                        //avm_report_message("Scoreboard: Read Passed","after wait state");
85
                                                else
86 8 toomuch
 
87 5 toomuch
                                                        avm_report_warning("Scoreboard: Error in read after wait state",display_pkt(m_pkt));
88 8 toomuch
                                                adr1=m_pkt.adr1;
89
                                                adr2=m_pkt.adr2;
90 5 toomuch
                                        end
91 8 toomuch
                                        else
92 5 toomuch
                                        begin
93
                                                if(( adr1 === m_pkt.adr2 ) && (m_pkt.dat1 === m_pkt.dat2)); // comparing unknown values too
94
                                                        //avm_report_message("Scoreboard: Read Passed","without wait state");
95
                                                else
96
                                                        avm_report_warning("Scoreboard: Error in read without wait state",display_pkt(m_pkt));
97 8 toomuch
                                                adr1=m_pkt.adr1;
98
                                                adr2=m_pkt.adr2;
99 5 toomuch
                                        end
100 8 toomuch
                                end
101
                else // wait state by slave or master
102
                begin
103 5 toomuch
                        if(m_pkt.flag2) // latch the value
104
                        begin
105
                                adr1=m_pkt.adr1;
106
                                dat1=m_pkt.dat1;
107
                                adr2=m_pkt.adr2;
108
                                dat2=m_pkt.dat2;
109
                        end
110
                        else
111 8 toomuch
                        begin
112 5 toomuch
                                if(( adr1==m_pkt.adr1) && (dat1==m_pkt.dat1)  && (adr2==m_pkt.adr2)  && (dat2==m_pkt.dat2));
113
                                        //avm_report_message("Scoreboard: Passed","with wait state");
114
                                else
115
                                        avm_report_warning("Scoreboard: Error in with wait state",display_pkt(m_pkt));
116 8 toomuch
                        end
117
                end
118 5 toomuch
 
119
        end
120
endtask
121
 
122 8 toomuch
 
123
// function to display values at any instant
124 5 toomuch
function string display_pkt(input monitor_pkt m);
125
        string s;
126
                $sformat(s,"current_adr1=%0d,adr1=%0d,adr2=%0d,dat1=%0d,dat2=%0d,wr=%0b,stb=%0b,f1=%b,f2=%b",adr1,m.adr1,m.adr2,m.dat1,m.dat2,m.wr,m.stb,m.flag1,m.flag2);
127
                return s;
128
endfunction
129
 
130
 
131
endclass
132
 
133
 
134
 
135
 
136
 
137
 
138
 

powered by: WebSVN 2.1.0

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