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

Subversion Repositories ahb2wishbone

[/] [ahb2wishbone/] [trunk/] [svtb/] [avm_svtb/] [ahb_wb_scoreboard.svh] - Blame information for rev 10

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 5 toomuch
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2
//*****************************************************************************************************************
3
// Copyright (c) 2007 TooMuch Semiconductor Solutions Pvt Ltd.
4
//
5
//File name             :       ahb_wb_scoreboard.svh
6
//Designer              :       Sanjay kumar
7
//Date                  :       3rd Aug'2007
8 7 toomuch
//Description           :       ahb_wb_scoreboard:Class to receive monitor packet from the publisher(monitor) and check for
9 5 toomuch
//                              protocol matching.
10
//Revision              :       1.0
11
//*****************************************************************************************************************
12
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
13
 
14
import avm_pkg::*;
15
import global::*;
16
 
17
class ahb_wb_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
logic [AWIDTH-1:0]adr1;
23
logic [AWIDTH-1:0]adr2;
24
logic [DWIDTH-1:0]dat1;
25
logic [DWIDTH-1:0]dat2;
26
// monitor packet
27
monitor_pkt m_pkt;
28
 
29
virtual ahb_wb_if pin_if;
30
 
31
        function new(string name ,avm_named_component parent);
32
                super.new(name,parent);
33
                ap_fifo  =new("ap_fifo",this);
34
                ap_if =null;
35
                pin_if =null;
36
                //avm_report_severity_action(MESSAGE,NO_ACTION);
37
        endfunction
38
 
39
// connecting analysis fifo  to the analysis interface
40
function void export_connections();
41
        ap_if = ap_fifo.analysis_export;
42
endfunction
43
 
44
 
45
task run;
46
        forever
47
        begin
48
        ap_fifo.get(m_pkt);
49
                if(m_pkt.sel && (m_pkt.mode == 'b10))  //No wait state
50
                        if(m_pkt.wr) //write mode
51
                                if(m_pkt.flag1) // first clock no comaprison only sampling the values
52
                                        adr1=m_pkt.adr1;
53
                                else
54
                                        if(m_pkt.flag2) // first clock after after wait state
55
                                        begin
56
                                                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)));
57
                                                        //avm_report_message("Scoreboard: Write Passed","after wait state");
58
                                                else
59
                                                        avm_report_warning("Scoreboard: Error in write after wait state",display_pkt(m_pkt));
60
                                        adr1=m_pkt.adr1; // Holding the previous address
61
                                        end
62
                                        else
63
 
64
                                        begin
65
                                                if(( adr1 === m_pkt.adr2 ) && (m_pkt.dat1 === m_pkt.dat2));
66
                                                        //avm_report_message("Scoreboard: Write Passed","without wait state");
67
                                                else
68
                                                begin
69
                                                        avm_report_warning("Scoreboard: Error in write without wait state",display_pkt(m_pkt));
70
                                                end
71
                                        adr1=m_pkt.adr1;
72
                                        end
73
                        else// read mode
74
                                if(m_pkt.flag1) // first clock no comaprison only sampling the values
75
                                        adr1=m_pkt.adr1;
76
                                else
77
                                        if(m_pkt.flag2) // first clock after after wait state
78
                                        begin
79
                                                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)));
80
                                                        //avm_report_message("Scoreboard: Read Passed","after wait state");
81
                                                else
82
                                                        avm_report_warning("Scoreboard: Error in read after wait state",display_pkt(m_pkt));
83
                                        adr1=m_pkt.adr1;
84
                                        end
85
 
86
                                        else
87
                                        begin
88
                                                if(( adr1 === m_pkt.adr2 ) && (m_pkt.dat1 === m_pkt.dat2)); // comparing unknown values too
89
                                                        //avm_report_message("Scoreboard: Read Passed","without wait state");
90
                                                else
91
                                                begin
92
                                                        avm_report_warning("Scoreboard: Error in read without wait state",display_pkt(m_pkt));
93
                                                end
94
                                        adr1=m_pkt.adr1;
95
                                        end
96
                else // wait state by slave or master
97
                        if(m_pkt.flag2) // latch the value
98
                        begin
99
                                adr1=m_pkt.adr1;
100
                                dat1=m_pkt.dat1;
101
                                adr2=m_pkt.adr2;
102
                                dat2=m_pkt.dat2;
103
                        end
104
                        else
105
                                if(( adr1==m_pkt.adr1) && (dat1==m_pkt.dat1)  && (adr2==m_pkt.adr2)  && (dat2==m_pkt.dat2));
106
                                        //$display("Passed wait");
107
                                        //avm_report_message("Scoreboard: Passed","with wait state");
108
                                else
109
                                        begin
110
                                        avm_report_warning("Scoreboard: Error in with wait state",display_pkt(m_pkt));
111
                                        end
112
 
113
        end
114
endtask
115
 
116
// function to display values at any instant :)
117
function string display_pkt(input monitor_pkt m);
118
        string s;
119
                $sformat(s,"current_adr1=%0d,adr1=%0d,adr2=%0d,dat1=%0d,dat2=%0d,wr=%0b,mode=%0b,sel=%0b,f1=%b,f2=%b",adr1,m.adr1,m.adr2,m.dat1,m.dat2,m.wr,m.mode,m.sel,m.flag1,m.flag2);
120
                return s;
121
endfunction
122
 
123
 
124
endclass
125
 
126
 
127
 

powered by: WebSVN 2.1.0

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