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] - Diff between revs 5 and 8

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 5 Rev 8
Line 1... Line 1...
//******************************************************************************************************
//******************************************************************************************************
// Copyright (c) 2007 TooMuch Semiconductor Solutions Pvt Ltd.
// Copyright (c) 2007 TooMuch Semiconductor Solutions Pvt Ltd.
 
 
 
 
//File name             :       wb_ahb_scoreboard.svh
//File name             :       wb_ahb_scoreboard.svh
//Date                  :        Aug, 2007
//Designer              :       Ravi S Gupta
 
//Date                  :       4 Sept, 2007
//Description           :       Stimulus Generation for WISHBONE_AHB Bridge
//Description           :       Stimulus Generation for WISHBONE_AHB Bridge
//Revision              :       1.0
//Revision              :       1.0
 
 
//******************************************************************************************************
//******************************************************************************************************
 
 
Line 16... Line 17...
class wb_ahb_scoreboard extends avm_threaded_component;
class wb_ahb_scoreboard extends avm_threaded_component;
 
 
analysis_fifo#(monitor_pkt) ap_fifo; // analysis port fifo
analysis_fifo#(monitor_pkt) ap_fifo; // analysis port fifo
analysis_if#(monitor_pkt) ap_if; // analysis port  interface
analysis_if#(monitor_pkt) ap_if; // analysis port  interface
// local variables
// local variables
logic [AWIDTH-1:0]adr1;
 
logic [AWIDTH-1:0]adr2;
logic [AWIDTH-1:0]adr1; //WB ADDR
logic [DWIDTH-1:0]dat1;
logic [DWIDTH-1:0]dat1; //WB DATA
logic [DWIDTH-1:0]dat2;
logic [AWIDTH-1:0]adr2; //AHB ADDR
 
logic [DWIDTH-1:0]dat2; //WB DATA
 
 
// monitor packet
// monitor packet
monitor_pkt m_pkt;
monitor_pkt m_pkt;
 
 
virtual ahb_wb_if pin_if;
virtual ahb_wb_if pin_if;
 
 
Line 41... Line 44...
 
 
task run;
task run;
        forever
        forever
        begin
        begin
        ap_fifo.get(m_pkt);
        ap_fifo.get(m_pkt);
                if(m_pkt.stb)  //No wait state
                if(m_pkt.stb && m_pkt.ack)  //No wait state
                        if(m_pkt.wr) //write mode
                        if(m_pkt.wr) //write mode
                                if(m_pkt.flag1) // first clock no comaprison only sampling the values
                                if(m_pkt.flag1) // first clock comparison only between addresses
 
                                begin
                                        adr1=m_pkt.adr1;
                                        adr1=m_pkt.adr1;
                                else
                                        dat1=m_pkt.dat1;
 
                                        adr2=m_pkt.adr2;
                                        if(m_pkt.flag2) // first clock after after wait state
                                        if(m_pkt.flag2) // first clock after after wait state
                                        begin
                                        begin
                                                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)));
                                                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)));
 
 
                                                        //avm_report_message("Scoreboard: Write Passed","after wait state");
                                                        //avm_report_message("Scoreboard: Write Passed","after wait state");
                                                else
                                                else
                                                        avm_report_warning("Scoreboard: Error in write after wait state",display_pkt(m_pkt));
                                                        avm_report_warning("Scoreboard: Error in write after wait state",display_pkt(m_pkt));
                                        adr1=m_pkt.adr1; // Holding the previous address
                                                adr1=m_pkt.adr1; // Holding the previous WB address
 
                                                dat1=m_pkt.dat1; // Holding the previous WB data
 
                                                adr2=m_pkt.adr2; // Holding the previous AHB Addr
 
 
                                        end
                                        end
                                        else
                                        else
 
 
                                        begin
                                        begin
                                                if(( adr1 === m_pkt.adr2 ) && (m_pkt.dat1 === m_pkt.dat2));
                                                if(( m_pkt.adr1 === m_pkt.adr2 ) && (m_pkt.dat1 === dat2));
                                                        //avm_report_message("Scoreboard: Write Passed","without wait state");
                                                        //avm_report_message("Scoreboard: Write Passed","without wait state");
                                                else
                                                else
                                                begin
 
                                                        avm_report_warning("Scoreboard: Error in write without wait state",display_pkt(m_pkt));
                                                        avm_report_warning("Scoreboard: Error in write without wait state",display_pkt(m_pkt));
                                                end
                                                end
                                        adr1=m_pkt.adr1;
 
                                        end
                                        end
                        else// read mode
                        else //READ Mode
                                if(m_pkt.flag1) // first clock no comaprison only sampling the values
                                if(m_pkt.flag1) // first clock comaprison between addresses
                                        adr1=m_pkt.adr1;
                                begin
                                else
                                        adr1=m_pkt.adr1;// Holding the previous WB address
 
                                        adr2=m_pkt.adr2;// Holding the previous AHB Addr
                                        if(m_pkt.flag2) // first clock after after wait state
                                        if(m_pkt.flag2) // first clock after after wait state
                                        begin
                                        begin
                                                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)));
                                                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)));
                                                        //avm_report_message("Scoreboard: Read Passed","after wait state");
                                                        //avm_report_message("Scoreboard: Read Passed","after wait state");
                                                else
                                                else
 
 
                                                        avm_report_warning("Scoreboard: Error in read after wait state",display_pkt(m_pkt));
                                                        avm_report_warning("Scoreboard: Error in read after wait state",display_pkt(m_pkt));
                                        adr1=m_pkt.adr1;
                                        adr1=m_pkt.adr1;
 
                                                adr2=m_pkt.adr2;
                                        end
                                        end
 
 
                                        else
                                        else
                                        begin
                                        begin
                                                if(( adr1 === m_pkt.adr2 ) && (m_pkt.dat1 === m_pkt.dat2)); // comparing unknown values too
                                                if(( adr1 === m_pkt.adr2 ) && (m_pkt.dat1 === m_pkt.dat2)); // comparing unknown values too
                                                        //avm_report_message("Scoreboard: Read Passed","without wait state");
                                                        //avm_report_message("Scoreboard: Read Passed","without wait state");
                                                else
                                                else
                                                begin
 
                                                        avm_report_warning("Scoreboard: Error in read without wait state",display_pkt(m_pkt));
                                                        avm_report_warning("Scoreboard: Error in read without wait state",display_pkt(m_pkt));
                                                end
 
                                        adr1=m_pkt.adr1;
                                        adr1=m_pkt.adr1;
 
                                                adr2=m_pkt.adr2;
 
                                        end
                                        end
                                        end
                else // wait state by slave or master
                else // wait state by slave or master
 
                begin
                        if(m_pkt.flag2) // latch the value
                        if(m_pkt.flag2) // latch the value
                        begin
                        begin
                                adr1=m_pkt.adr1;
                                adr1=m_pkt.adr1;
                                dat1=m_pkt.dat1;
                                dat1=m_pkt.dat1;
                                adr2=m_pkt.adr2;
                                adr2=m_pkt.adr2;
                                dat2=m_pkt.dat2;
                                dat2=m_pkt.dat2;
                        end
                        end
                        else
                        else
 
                        begin
                                if(( adr1==m_pkt.adr1) && (dat1==m_pkt.dat1)  && (adr2==m_pkt.adr2)  && (dat2==m_pkt.dat2));
                                if(( adr1==m_pkt.adr1) && (dat1==m_pkt.dat1)  && (adr2==m_pkt.adr2)  && (dat2==m_pkt.dat2));
                                        //$display("Passed wait");
 
                                        //avm_report_message("Scoreboard: Passed","with wait state");
                                        //avm_report_message("Scoreboard: Passed","with wait state");
                                else
                                else
                                        begin
 
                                        avm_report_warning("Scoreboard: Error in with wait state",display_pkt(m_pkt));
                                        avm_report_warning("Scoreboard: Error in with wait state",display_pkt(m_pkt));
                                        end
                                        end
 
                end
 
 
        end
        end
endtask
endtask
 
 
// function to display values at any instant :
 
 
// function to display values at any instant
function string display_pkt(input monitor_pkt m);
function string display_pkt(input monitor_pkt m);
        string s;
        string s;
                $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);
                $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);
                return s;
                return s;
endfunction
endfunction

powered by: WebSVN 2.1.0

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