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

Subversion Repositories uart2bus_testbench

[/] [uart2bus_testbench/] [trunk/] [tb/] [agent/] [coverage/] [uart_coverage.svh] - Diff between revs 14 and 18

Show entire file | Details | Blame | View Log

Rev 14 Rev 18
Line 18... Line 18...
//-------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------
// ALL COPYRIGHTS ARE RESERVED FOR THE PRODUCER ONLY .THIS FILE IS PRODUCED FOR OPENCORES MEMBERS
// ALL COPYRIGHTS ARE RESERVED FOR THE PRODUCER ONLY .THIS FILE IS PRODUCED FOR OPENCORES MEMBERS
// ONLY AND IT IS PROHIBTED TO USE THIS MATERIAL WITHOUT THE CREATOR'S PERMISSION
// ONLY AND IT IS PROHIBTED TO USE THIS MATERIAL WITHOUT THE CREATOR'S PERMISSION
//-------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------
 
 
 
struct {command cmd1; command cmd2;} twoburstscmd;
 
 
class uart_coverage extends uvm_subscriber#(uart_transaction);
class uart_coverage extends uvm_subscriber#(uart_transaction);
 
 
  `uvm_component_utils(uart_coverage)
  `uvm_component_utils(uart_coverage)
 
 
  uart_transaction        trans,_trans;
  uart_transaction        trans,_trans;
 
  uart_transaction        trans_o1,trans_o2,trans_o3;
 
 
 
   uart_dashboard          dashboard;
 
 
 
 
  covergroup trans_attrib;
  covergroup trans_attrib;
    communication_mode:
    communication_mode:
      coverpoint trans._mode{
      coverpoint trans._mode{
        bins valid_mode         = {text,binary};
        bins valid_mode         = {text,binary};
        illegal_bins invalid_mode       = {wrong_mode_text,wrong_mode_bin};
        ignore_bins invalid_mode       = {wrong_mode_text,wrong_mode_bin};
      }
      }
    address:
    address:
      coverpoint trans.address;
      coverpoint trans.address;
 
 
  endgroup:trans_attrib
  endgroup:trans_attrib
 
 
  covergroup text_mode_cov;
  covergroup text_mode_cov;
    command:
    command:
      coverpoint trans._command{
      coverpoint trans._command{
        bins          valid_command  ={read,2};
        bins          valid_command  ={read,2};
        illegal_bins  invalid_command={nop,invalid_read,invalid_write};
        ignore_bins  invalid_command={nop,invalid_read,invalid_write};
      }
      }
    first_white_space_field:
    first_white_space_field:
      coverpoint trans._spacetype1{bins         validspace   ={single,tab};
      coverpoint trans._spacetype1{bins         validspace   ={single,tab};
                                   illegal_bins invalidspace ={wrong_space};}
                                   ignore_bins invalidspace ={wrong_space};}
    second_white_space_field:
    second_white_space_field:
      coverpoint trans._spacetype2{bins         validspace   ={single,tab};
      coverpoint trans._spacetype2{bins         validspace   ={single,tab};
                                   illegal_bins invalidspace ={wrong_space};}
                                   ignore_bins invalidspace ={wrong_space};}
    end_of_line_field:
    end_of_line_field:
      coverpoint trans._eoltype{bins         valideol={cr,lf};
      coverpoint trans._eoltype{bins         valideol={cr,lf};
                                illegal_bins eol ={wrong_eol};}
                                ignore_bins eol ={wrong_eol};}
    prefix_character_type:
    prefix_character_type:
      coverpoint trans._chartype;
      coverpoint trans._chartype;
 
 
 
    white_spaces_x:
 
      cross first_white_space_field,second_white_space_field,end_of_line_field;
 
 
 
    pref_x_command:
 
      cross command,prefix_character_type;
 
 
  endgroup:text_mode_cov
  endgroup:text_mode_cov
 
 
  covergroup binary_mode_cov;
  covergroup binary_mode_cov;
    command:
    command:
      coverpoint trans._command{
      coverpoint trans._command{
        bins normal_command={read,2,nop};
        bins normal_command={read,2,nop};
        illegal_bins wrong_command ={invalid_read,invalid_write};
        ignore_bins wrong_command ={invalid_read,invalid_write};
      }
      }
    acknowledge_requirement:
    acknowledge_requirement:
      coverpoint trans._reqack;
      coverpoint trans._reqack;
    incremental_address_requirement:
    incremental_address_requirement:
      coverpoint trans._reqinc;
      coverpoint trans._reqinc;
Line 74... Line 85...
        bins valid          = {[1:256]};
        bins valid          = {[1:256]};
        illegal_bins invalid= {[257:$]};
        illegal_bins invalid= {[257:$]};
      }
      }
  endgroup:binary_mode_cov
  endgroup:binary_mode_cov
 
 
 
  covergroup two_bursts ;
 
     command: coverpoint trans._command{
 
        bins nop_write = (nop=>2);
 
        bins nop_read  = (nop=>read);
 
        bins nop_nop   = (nop=>nop);
 
        bins write_write = (2=>2);
 
        bins write_read  = (2=>read);
 
        bins write_nop   = (2=>nop);
 
        bins read_write = (read=>2);
 
        bins read_read  = (read=>read);
 
        bins read_nop   = (read=>nop);
 
     }
 
     mode_trans: coverpoint trans._mode
 
       {
 
        bins text_bin  = (text=>binary);
 
        bins bin_text  = (binary=>text);
 
        bins bin_bin   = (binary=>binary);
 
        bins text_text = (text=>text);
 
        }
 
     mode_x_cmd: cross command,mode_trans
 
       {
 
        illegal_bins text_nop1 = binsof(command.nop_write) && (binsof(mode_trans.text_bin) || binsof(mode_trans.text_text) );
 
        illegal_bins text_nop2 = binsof(command.nop_read)  && (binsof(mode_trans.text_bin) || binsof(mode_trans.text_text) );
 
        illegal_bins text_nop3 = binsof(command.nop_nop)   && (binsof(mode_trans.text_bin) || binsof(mode_trans.text_text) ||
 
                                                               binsof(mode_trans.bin_text));
 
        illegal_bins text_nop4 = binsof(command.write_nop) && (binsof(mode_trans.bin_text) || binsof(mode_trans.text_text) );
 
        illegal_bins text_nop5 = binsof(command.read_nop)  && (binsof(mode_trans.bin_text) || binsof(mode_trans.text_text) );
 
     }
 
 
 
  endgroup // two_bursts
 
 
 
   covergroup four_bursts ;
 
      command: coverpoint trans._command
 
        {
 
         bins nop_read_write_nop = (nop=>read=>2=>nop);
 
         bins read_write_read_write = (read=>2=>read=>2);
 
         bins read_read_write_read  = (read=>read=>2=>read);
 
         bins write_read_read_write = (2=>read=>read=>2);
 
         bins write_write_read_write= (2=>2=>read=>2);
 
         bins write_write_write_write=(2=>2=>2=>2);
 
         bins read_read_read_read   = (read=>read=>read=>read);
 
         bins nop_nop_nop_nop       = (nop=>nop=>nop=>nop);
 
      }
 
 
 
   endgroup
 
 
  function new (string name, uvm_component parent);
  function new (string name, uvm_component parent);
    super.new(name,parent);
    super.new(name,parent);
 
 
    trans_attrib    = new();
    trans_attrib    = new();
    text_mode_cov   = new();
    text_mode_cov   = new();
    binary_mode_cov = new();
    binary_mode_cov = new();
 
    two_bursts      = new();
 
    four_bursts     = new();
  endfunction:new
  endfunction:new
 
 
  extern function void build_phase(uvm_phase phase);
  extern function void build_phase(uvm_phase phase);
 
 
  extern function void connect_phase (uvm_phase phase);
  extern function void connect_phase (uvm_phase phase);
 
 
  extern task run_phase (uvm_phase);
  extern task run_phase (uvm_phase);
 
 
  extern function void write (uart_transaction t);
  extern function void write (uart_transaction t);
 
 
 
  extern function void update_cov ();
 
 
endclass:uart_coverage
endclass:uart_coverage
 
 
 
 
function void uart_coverage::build_phase (uvm_phase phase);
function void uart_coverage::build_phase (uvm_phase phase);
  super.build_phase(phase);
  super.build_phase(phase);
 
 
 
 
  trans  = uart_transaction::type_id::create("trans");
  trans  = uart_transaction::type_id::create("trans");
  _trans = uart_transaction::type_id::create("_trans");
   dashboard = uvm_resource_db#(uart_dashboard)::get_by_name("shared_cloud","dashboard").read();
 
 
endfunction:build_phase
endfunction:build_phase
 
 
function void uart_coverage::connect_phase(uvm_phase phase);
function void uart_coverage::connect_phase(uvm_phase phase);
endfunction:connect_phase
endfunction:connect_phase
 
 
Line 113... Line 170...
endtask:run_phase
endtask:run_phase
 
 
function void uart_coverage::write(uart_transaction t);
function void uart_coverage::write(uart_transaction t);
   $cast(trans,t.clone());
   $cast(trans,t.clone());
   trans_attrib.sample();
   trans_attrib.sample();
   uvm_resource_db#(int)::write_by_name("coverage_cloud","general_coverage",trans_attrib.get_coverage());
 
    if(trans._mode == text)
    if(trans._mode == text)
      begin
      begin
      text_mode_cov.sample();
      text_mode_cov.sample();
      uvm_resource_db#(int)::write_by_name("coverage_cloud","text_coverage",text_mode_cov.get_coverage());
 
      end
      end
    else if (trans._mode == binary)
    else if (trans._mode == binary)
      begin
      begin
      binary_mode_cov.sample();
      binary_mode_cov.sample();
      uvm_resource_db#(int)::write_by_name("coverage_cloud","binary_coverage",binary_mode_cov.get_coverage());
 
      end
      end
 
   four_bursts.sample();
 
   two_bursts.sample();
 
   update_cov();
endfunction // write
endfunction // write
 
 
 
function void uart_coverage::update_cov();
 
   dashboard.trans_attribute_cov=trans_attrib.get_coverage();
 
   dashboard.text_mode_cov = text_mode_cov.get_coverage();
 
   dashboard.binary_mode_cov = binary_mode_cov.get_coverage();
 
   dashboard.two_binary_bursts_cov=two_bursts.get_coverage();
 
   dashboard.four_bursts_cov=four_bursts.get_coverage();
 
   dashboard.evaluate_coverage();
 
endfunction // update_cov

powered by: WebSVN 2.1.0

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