Quantcast
Channel: UVM SystemVerilog Discussions Forum RSS Feed
Viewing all articles
Browse latest Browse all 410

Help Required for Scoreboard Code

$
0
0

Rsepected All,

 

I found that there are many senior & well rich (by knowledge) engineers/ scientists exist over here in this forum. So I thought to take a chance to share my doubt in area of UVM as a student.

 

I understand that I may not be even competant upto your level or you may find my doubt as silly. But your guidance & help is highly expected to my studies.

 

A portion of code I have pasted below. Can anybody please guide me that what exactly this code means (especially run phase) ? 

 

I expect that senior/junior fellow in a group will justify my humble request.

 

Thanks,

 

Code :

 

function void ram_scoreboard::memory_write(wr_xtn wd);

           if(wd.write)

          begin

     ref_data[wd.addr] = wd.data;

     end

      endfunction : memory_write

 

       //-------  memory_read() method  -------//

 

      function bit ram_scoreboard::memory_read(ref rd_xtn rd);

            if(rd.read)

             begin

            if(ref_data.exists(rd.addr))

            begin

        rd.data = ref_data[rd.addr] ;

         return(1);

            end

            else

            begin

          return(0);

        end                        

        end

      endfunction : memory_read 

 

 //-----------------  run() phase  -------------------//

 

       task ram_scoreboard::run_phase(uvm_phase phase);

         fork

         forever begin

            fifo_wrh.get(wr_data);

             memory_write(wr_data);

                 end


           forever begin

            fifo_rdh.get(rd_data);

             check_data(rd_data);

                   end

         join

       endtask


        //Explore method check_data

       function void ram_scoreboard::check_data(rd_xtn rd);

            rd_xtn ref_xtn;

            // Copy of read XTN

            $cast( ref_xtn, rd.clone());

      if(mem_read(ref_xtn))

            begin

                  //compare

            if(rd.compare(ref_xtn))

            begin

            `uvm_info(get_type_name(), $sformatf("Scoreboard - Data Match successful"), UVM_MEDIUM)

                       end

            else 

            `uvm_error(get_type_name(), $sformatf("\n Scoreboard Error [Data Mismatch]: \n Received Transaction:\n %s \n Expected Transaction: \n %s",rd.sprint(), ref_xtn.sprint()))

            end

            else

            uvm_report_info(get_type_name(), $psprintf("No Data written in the address=%d \n %s",rd.addr, rd.sprint()));

    endfunction

 


Viewing all articles
Browse latest Browse all 410