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

Subversion Repositories qaz_libs

[/] [qaz_libs/] [trunk/] [avalon_lib/] [sim/] [src/] [amm_monitor/] [altera_avalon_mm_monitor_coverage.sv] - Rev 31

Compare with Previous | Blame | View Log

// (C) 2001-2016 Intel Corporation. All rights reserved.
// Your use of Intel Corporation's design tools, logic functions and other 
// software and tools, and its AMPP partner logic functions, and any output 
// files any of the foregoing (including device programming or simulation 
// files), and any associated documentation or information are expressly subject 
// to the terms and conditions of the Intel Program License Subscription 
// Agreement, Intel MegaCore Function License Agreement, or other applicable 
// license agreement, including, without limitation, that your use is for the 
// sole purpose of programming logic devices manufactured by Intel and sold by 
// Intel or its authorized distributors.  Please refer to the applicable 
// agreement for further details.


// $File: //acds/rel/16.1/ip/sopc/components/verification/altera_avalon_mm_monitor_bfm/altera_avalon_mm_monitor_coverage.sv $
// $Revision: #1 $
// $Date: 2016/08/07 $
//-----------------------------------------------------------------------------
// =head1 NAME
// altera_avalon_mm_monitor_coverage
// =head1 SYNOPSIS
// Memory Mapped Avalon Bus Protocol Checker
//-----------------------------------------------------------------------------
// =head1 DESCRIPTION
// This module implements Avalon MM protocol coverage for simulation.
//-----------------------------------------------------------------------------

`timescale 1ps / 1ps

module altera_avalon_mm_monitor_coverage(
                                         clk,
                                         reset,
                                         tap
                                        );

   // =head1 PARAMETERS
   parameter AV_ADDRESS_W               = 32;   // address width
   parameter AV_SYMBOL_W                = 8;    // default symbol is byte
   parameter AV_NUMSYMBOLS              = 4;    // number of symbols per word
   parameter AV_BURSTCOUNT_W            = 3;    // burst port width
      
   parameter AV_BURST_LINEWRAP          = 0;    // line wrapping addr is set to 1
   parameter AV_BURST_BNDR_ONLY         = 0;    // addr is multiple of burst size
   parameter REGISTER_WAITREQUEST       = 0;    // Waitrequest is registered at the slave
   parameter AV_MAX_PENDING_READS       = 1;    // maximum pending read transfer count
   parameter AV_MAX_PENDING_WRITES      = 0;    // maximum pending write transfer count
   parameter AV_FIX_READ_LATENCY        = 0;    // fixed read latency in cycles

   parameter USE_READ                   = 1;    // use read port
   parameter USE_WRITE                  = 1;    // use write port
   parameter USE_ADDRESS                = 1;    // use address port
   parameter USE_BYTE_ENABLE            = 1;    // use byteenable port
   parameter USE_BURSTCOUNT             = 0;    // use burstcount port
   parameter USE_READ_DATA              = 1;    // use readdata port
   parameter USE_READ_DATA_VALID        = 1;    // use readdatavalid port
   parameter USE_WRITE_DATA             = 1;    // use writedata port
   parameter USE_BEGIN_TRANSFER         = 0;    // use begintransfer port
   parameter USE_BEGIN_BURST_TRANSFER   = 0;    // use begintbursttransfer port
   parameter USE_WAIT_REQUEST           = 1;    // use waitrequest port
   parameter USE_ARBITERLOCK            = 0;    // Use arbiterlock pin on interface
   parameter USE_LOCK                   = 0;    // Use lock pin on interface
   parameter USE_DEBUGACCESS            = 0;    // Use debugaccess pin on interface 
   parameter USE_TRANSACTIONID          = 0;    // Use transactionid interface pin
   parameter USE_WRITERESPONSE          = 0;    // Use write response interface pins
   parameter USE_READRESPONSE           = 0;    // Use read response interface pins
   parameter USE_CLKEN                  = 0;    // Use clken interface pins

   parameter AV_MAX_READ_LATENCY             = 100;   // maximum read latency cycle for coverage
   parameter AV_MAX_WAITREQUESTED_READ       = 100;   // maximum waitrequested read cycle for coverage
   parameter AV_MAX_WAITREQUESTED_WRITE      = 100;   // maximum waitrequested write cycle for coverage
   parameter AV_MAX_CONTINUOUS_READ          = 5;   // maximum continuous read cycle for coverage
   parameter AV_MAX_CONTINUOUS_WRITE         = 5;   // maximum continuous write cycle for coverage
   parameter AV_MAX_CONTINUOUS_WAITREQUEST   = 5;   // maximum continuous waitrequest cycle for coverage
   parameter AV_MAX_CONTINUOUS_READDATAVALID = 5;   // maximum continuous readdatavalid cycle for coverage
   
   parameter AV_READ_WAIT_TIME         = 0;  // Fixed wait time cycles when
   parameter AV_WRITE_WAIT_TIME        = 0;  // USE_WAIT_REQUEST is 0

   localparam AV_DATA_W = AV_SYMBOL_W * AV_NUMSYMBOLS;
   localparam AV_MAX_BURST = USE_BURSTCOUNT ? 2**(lindex(AV_BURSTCOUNT_W)) : 1;
   localparam INT_WIDTH = 32;
   localparam MAX_ID = (AV_MAX_PENDING_READS*AV_MAX_BURST > 100? AV_MAX_PENDING_READS*AV_MAX_BURST:100);
   localparam AV_TRANSACTIONID_W = 8;

   localparam TAP_W = 1 +                                                  // clken
                      1 +                                                  // arbiterlock
                      1 +                                                  // lock
                      1 +                                                  // debugaccess
                      ((AV_TRANSACTIONID_W == 0)? 1:AV_TRANSACTIONID_W) +  // transactionid
                      ((AV_TRANSACTIONID_W == 0)? 1:AV_TRANSACTIONID_W) +  // readid
                      ((AV_TRANSACTIONID_W == 0)? 1:AV_TRANSACTIONID_W) +  // writeid
                      2 +                                                  // response
                      1 +                                                  // writeresponserequest
                      1 +                                                  // writeresponsevalid
                      1 +                                                  // waitrequest
                      1 +                                                  // readdatavalid
                      ((AV_DATA_W == 0)? 1:AV_DATA_W) +                    // readdata
                      1 +                                                  // write
                      1 +                                                  // read
                      ((AV_ADDRESS_W == 0)? 1:AV_ADDRESS_W) +              // address
                      ((AV_NUMSYMBOLS == 0)? 1:AV_NUMSYMBOLS) +            // byteenable
                      ((AV_BURSTCOUNT_W == 0)? 1:AV_BURSTCOUNT_W) +        // burstcount
                      1 +                                                  // beginbursttransfer
                      1 +                                                  // begintransfer
                      ((AV_DATA_W == 0)? 1:AV_DATA_W);                     // writedata

   // =head1 PINS
   // =head2 Clock Interface   
   input                                             clk;
   input                                             reset; 

   // =head2 Avalon Monitor Interface
   // Interface consists of Avalon Memory-Mapped Interface.
   // =cut
   
   // =pod
   input  [TAP_W-1:0]                                tap;
   // =cut 
   
   function int lindex;
      // returns the left index for a vector having a declared width 
      // when width is 0, then the left index is set to 0 rather than -1
      input [31:0] width;
      lindex = (width > 0) ? (width-1) : 0;
   endfunction 
   
   function automatic int __floor1(
      bit [31:0] arg
   );
      __floor1 = (arg <1) ? 1 : arg;
   endfunction
   
   //-------------------------------------------------------------------------- 
   // synthesis translate_off

   import verbosity_pkg::*;
   import avalon_mm_pkg::*;

   typedef bit [lindex(AV_ADDRESS_W):0]                    AvalonAddress_t;
   typedef bit [lindex(AV_BURSTCOUNT_W):0]                 AvalonBurstCount_t;   
   typedef bit [AV_MAX_BURST-1:0][AV_DATA_W-1:0]     AvalonData_t;
   typedef bit [AV_MAX_BURST-1:0][AV_NUMSYMBOLS-1:0] AvalonByteEnable_t;
   typedef bit [AV_MAX_BURST-1:0][INT_WIDTH-1:0]     AvalonLatency_t;
   typedef bit [AV_MAX_BURST-1:0][1:0]               AvalonReadResponseStatus_t;   

   typedef struct packed {
                          Request_t                  request;     
                          AvalonAddress_t            address;     // start address
                          AvalonBurstCount_t         burst_count; // burst length
                          AvalonData_t               data;        // write data
                          AvalonByteEnable_t         byte_enable; // hot encoded  
                          int                        burst_cycle;
                          logic                      write_response_request;
                         } SlaveCommand_t;

   typedef struct packed {
                          Request_t                  request;     
                          AvalonAddress_t            address;     // start addr
                          AvalonBurstCount_t         burst_count; // burst length
                          AvalonData_t               data;        // read data
                          AvalonLatency_t            read_latency;
                          AvalonLatency_t            wait_latency;
                          AvalonReadResponseStatus_t read_response;
                          AvalonResponseStatus_t     write_response;
                         } MasterResponse_t;


   string                        message       = "*unitialized*";

   bit                           covergroup_settings_changed_flag = 0;
   bit [1:0]                     reset_flag = 2'b11;
   bit                           read_transaction_flag = 0;
   bit                           read_without_waitrequest_flag = 0;
   bit                           idle_write_flag = 0;
   logic [MAX_ID:0]              idle_read_flag = 0;
   bit                           idle_in_write_burst_flag = 0;
   logic [MAX_ID:0]              read_latency_start_flag = 0;
   
   bit                           enable_c_read_byteenable = 1;
   bit                           enable_c_write_byteenable = 1;
   bit                           enable_c_read_burstcount = 1;
   bit                           enable_c_write_burstcount = 1;
   bit                           enable_c_pending_read = 1;
   bit                           enable_c_read = 1;
   bit                           enable_c_write = 1;
   bit                           enable_c_b2b_read_read = 1;
   bit                           enable_c_b2b_read_write = 1;
   bit                           enable_c_b2b_write_write = 1;
   bit                           enable_c_b2b_write_read = 1;
   bit                           enable_c_idle_in_write_burst = 1;
   bit                           enable_c_idle_in_read_response = 1;
   bit                           enable_c_read_latency = 1;
   bit                           enable_c_waitrequested_read = 1;
   bit                           enable_c_waitrequested_write = 1;
   bit                           enable_c_continuous_waitrequest_from_idle_to_write = 1;
   bit                           enable_c_continuous_waitrequest_from_idle_to_read = 1;
   bit                           enable_c_waitrequest_without_command = 1;
   bit                           enable_c_idle_before_transaction = 1;
   bit                           enable_c_continuous_read = 1;
   bit                           enable_c_continuous_write = 1;
   bit                           enable_c_continuous_readdatavalid = 1;
   bit                           enable_c_continuous_waitrequest = 1;
   bit                           enable_c_waitrequest_in_write_burst = 1;
   bit                           enable_c_readresponse = 0;
   bit                           enable_c_writeresponse = 0;
   bit                           enable_c_write_after_reset = 1;
   bit                           enable_c_read_after_reset = 1;   
   bit                           enable_c_write_response = 1;
   bit                           enable_c_read_response = 1;
   bit                           enable_c_write_response_transition = 1;
   bit                           enable_c_read_response_transition = 1;

   int                           read_command_while_clken = 0;
   int                           write_command_while_clken = 0;
   int                           waitrequested_command_while_clken = 0;
   int                           write_burst_counter = 0;
   logic [MAX_ID:0][31:0]        read_burst_counter = 0;
   int                           temp_read_burst_counter = 0;
   int                           pending_read_counter = 0;
   int                           fix_read_latency_counter = 0;
   int                           idle_in_read_response = 0;
   logic [MAX_ID:0][31:0]        temp_idle_in_read_response = 0;
   int                           temp_waitrequested_read_counter = 0;
   int                           waitrequested_read_counter = 0;
   int                           temp_waitrequested_write_counter = 0;
   int                           waitrequested_write_counter = 0;
   int                           byteenable_counter = 0;
   logic [MAX_ID:0][31:0]        temp_read_latency_counter = 0;
   int                           read_latency_counter = 0;
   int                           read_id = 0;
   int                           readdatavalid_id = 0;
   bit                           waitrequest_before_waitrequested_read = 0;
   bit                           waitrequest_before_waitrequested_write = 0;
   bit                           waitrequest_before_command = 0;
   bit                           waitrequest_without_command = 0;
   logic                         past_waitrequest = 0;
   logic                         idle_before_burst_transaction = 0;
   logic                         idle_before_burst_transaction_sampled = 0;
   logic                         continuous_read_sampled = 0;
   logic                         continuous_read_start_flag = 0;
   logic [31:0]                  continuous_read = 0;
   logic                         continuous_write_sampled = 0;
   logic                         continuous_write_start_flag = 0;
   logic [31:0]                  continuous_write = 0;
   logic                         continuous_readdatavalid_sampled = 0;
   logic                         continuous_readdatavalid_start_flag = 0;
   logic [31:0]                  continuous_readdatavalid = 0;
   logic                         continuous_waitrequest_sampled = 0;
   logic                         continuous_waitrequest_start_flag = 0;
   logic [31:0]                  continuous_waitrequest = 0;
   logic                         idle_in_write_burst_with_waitrequest = 0;
   logic                         idle_in_write_burst_with_waitrequest_sampled = 0;
   logic                         idle_in_write_burst_start_flag = 0;
   logic                         idle_before_burst_transaction_with_waitrequest = 0;
   logic                         idle_before_burst_transaction_with_waitrequest_sampled = 0;
   logic [31:0]                  waitrequested_before_transaction = 0;
   logic                         write_after_reset = 0;
   logic                         read_after_reset = 0;
   int                           fix_latency_queued[$];
   int                           fix_latency_queued_counter = 0;
   logic                         read_reset_transaction = 0;
   logic                         write_reset_transaction = 0;
   logic                         burst_waitrequested_command = 0;
   logic [31:0]                  readresponse_bit_num = 0;
   logic [31:0]                  writeresponse_bit_num = 0;
   AvalonResponseStatus_t        read_response;
   AvalonResponseStatus_t        write_response;
   logic [3:0]                   write_response_transition = 4'bx;
   logic [3:0]                   read_response_transition = 4'bx;

   logic [3:0]                   b2b_transfer = 4'b1111;
   logic [AV_NUMSYMBOLS-1:0]     check_byteenable = 0;
   logic [AV_NUMSYMBOLS-1:0]     legal_byteenable[(AV_NUMSYMBOLS*2)-1:0];

   logic                         byteenable_1_bit = 1'b1;
   logic [1:0]                   byteenable_2_bit = 2'b11;
   logic [3:0]                   byteenable_4_bit = 4'hf;
   logic [7:0]                   byteenable_8_bit = 8'hff;
   logic [15:0]                  byteenable_16_bit = 16'hffff;
   logic [31:0]                  byteenable_32_bit = 32'hffffffff;
   logic [63:0]                  byteenable_64_bit = 64'hffffffffffffffff;
   logic [127:0]                 byteenable_128_bit = 128'hffffffffffffffffffffffffffffffff;

   //--------------------------------------------------------------------------
   // unpack Avalon bus interface tap into individual port signals

   logic                                  waitrequest;
   logic                                  readdatavalid;
   logic [lindex(AV_DATA_W):0]            readdata;
   logic                                  write;
   logic                                  read;
   logic [lindex(AV_ADDRESS_W):0]         address;
   logic [31:0]                           byteenable;
   logic [lindex(AV_BURSTCOUNT_W):0]      burstcount;
   logic                                  beginbursttransfer;
   logic                                  begintransfer;
   logic [lindex(AV_DATA_W):0]            writedata;
   
   logic                                  arbiterlock;
   logic                                  lock;
   logic                                  debugaccess;
   
   logic [lindex(AV_TRANSACTIONID_W):0]   transactionid;
   logic [lindex(AV_TRANSACTIONID_W):0]   readid;
   logic [lindex(AV_TRANSACTIONID_W):0]   writeid;
   logic [1:0]                            response;
   logic                                  writeresponserequest;
   logic                                  writeresponsevalid;
   logic                                  clken;

   always_comb begin
      clken <= (USE_CLKEN == 1)? 
                      tap[3*(lindex(AV_TRANSACTIONID_W))+2*(lindex(AV_DATA_W))+lindex(AV_BURSTCOUNT_W)+lindex(AV_NUMSYMBOLS)+lindex(AV_ADDRESS_W)+21:
                          3*(lindex(AV_TRANSACTIONID_W))+2*(lindex(AV_DATA_W))+lindex(AV_BURSTCOUNT_W)+lindex(AV_NUMSYMBOLS)+lindex(AV_ADDRESS_W)+21] : 1;
   
      arbiterlock <= (USE_ARBITERLOCK == 1)? 
                      tap[3*(lindex(AV_TRANSACTIONID_W))+2*(lindex(AV_DATA_W))+lindex(AV_BURSTCOUNT_W)+lindex(AV_NUMSYMBOLS)+lindex(AV_ADDRESS_W)+20:
                          3*(lindex(AV_TRANSACTIONID_W))+2*(lindex(AV_DATA_W))+lindex(AV_BURSTCOUNT_W)+lindex(AV_NUMSYMBOLS)+lindex(AV_ADDRESS_W)+20] : 0;
      
      lock <= (USE_LOCK == 1)? 
                      tap[3*(lindex(AV_TRANSACTIONID_W))+2*(lindex(AV_DATA_W))+lindex(AV_BURSTCOUNT_W)+lindex(AV_NUMSYMBOLS)+lindex(AV_ADDRESS_W)+19:
                          3*(lindex(AV_TRANSACTIONID_W))+2*(lindex(AV_DATA_W))+lindex(AV_BURSTCOUNT_W)+lindex(AV_NUMSYMBOLS)+lindex(AV_ADDRESS_W)+19] : 0;
      
      debugaccess <= (USE_DEBUGACCESS == 1)? 
                      tap[3*(lindex(AV_TRANSACTIONID_W))+2*(lindex(AV_DATA_W))+lindex(AV_BURSTCOUNT_W)+lindex(AV_NUMSYMBOLS)+lindex(AV_ADDRESS_W)+18:
                          3*(lindex(AV_TRANSACTIONID_W))+2*(lindex(AV_DATA_W))+lindex(AV_BURSTCOUNT_W)+lindex(AV_NUMSYMBOLS)+lindex(AV_ADDRESS_W)+18] : 0;
      
      transactionid <= (USE_TRANSACTIONID == 1)? 
                      tap[3*(lindex(AV_TRANSACTIONID_W))+2*(lindex(AV_DATA_W))+lindex(AV_BURSTCOUNT_W)+lindex(AV_NUMSYMBOLS)+lindex(AV_ADDRESS_W)+17:
                          2*(lindex(AV_TRANSACTIONID_W))+2*(lindex(AV_DATA_W))+lindex(AV_BURSTCOUNT_W)+lindex(AV_NUMSYMBOLS)+lindex(AV_ADDRESS_W)+17] : 0;
      
      readid <= (USE_READRESPONSE == 1)? 
                      tap[2*(lindex(AV_TRANSACTIONID_W))+2*(lindex(AV_DATA_W))+lindex(AV_BURSTCOUNT_W)+lindex(AV_NUMSYMBOLS)+lindex(AV_ADDRESS_W)+16:
                          lindex(AV_TRANSACTIONID_W)+2*(lindex(AV_DATA_W))+lindex(AV_BURSTCOUNT_W)+lindex(AV_NUMSYMBOLS)+lindex(AV_ADDRESS_W)+16] : 0;
      
      writeid <= (USE_WRITERESPONSE == 1)? 
                      tap[lindex(AV_TRANSACTIONID_W)+2*(lindex(AV_DATA_W))+lindex(AV_BURSTCOUNT_W)+lindex(AV_NUMSYMBOLS)+lindex(AV_ADDRESS_W)+15:
                          2*(lindex(AV_DATA_W))+lindex(AV_BURSTCOUNT_W)+lindex(AV_NUMSYMBOLS)+lindex(AV_ADDRESS_W)+15] : 0;
      
      response <= (USE_WRITERESPONSE == 1 || USE_READRESPONSE == 1)? 
                 tap[2*(lindex(AV_DATA_W))+lindex(AV_BURSTCOUNT_W)+lindex(AV_NUMSYMBOLS)+lindex(AV_ADDRESS_W)+14:
                     2*(lindex(AV_DATA_W))+lindex(AV_BURSTCOUNT_W)+lindex(AV_NUMSYMBOLS)+lindex(AV_ADDRESS_W)+13] : 0;

      writeresponserequest <= (USE_WRITERESPONSE == 1)? 
                      tap[2*(lindex(AV_DATA_W))+lindex(AV_BURSTCOUNT_W)+lindex(AV_NUMSYMBOLS)+lindex(AV_ADDRESS_W)+12:
                          2*(lindex(AV_DATA_W))+lindex(AV_BURSTCOUNT_W)+lindex(AV_NUMSYMBOLS)+lindex(AV_ADDRESS_W)+12] : 0;
      
      writeresponsevalid <= (USE_WRITERESPONSE == 1)? 
                      tap[2*(lindex(AV_DATA_W))+lindex(AV_BURSTCOUNT_W)+lindex(AV_NUMSYMBOLS)+lindex(AV_ADDRESS_W)+11:
                          2*(lindex(AV_DATA_W))+lindex(AV_BURSTCOUNT_W)+lindex(AV_NUMSYMBOLS)+lindex(AV_ADDRESS_W)+11] : 0;
      
      waitrequest <= tap[2*(lindex(AV_DATA_W))+lindex(AV_BURSTCOUNT_W)+lindex(AV_NUMSYMBOLS)+lindex(AV_ADDRESS_W)+10:
                          2*(lindex(AV_DATA_W))+lindex(AV_BURSTCOUNT_W)+lindex(AV_NUMSYMBOLS)+lindex(AV_ADDRESS_W)+10];
      
      readdatavalid <= (USE_READ_DATA_VALID == 1)? 
                        tap[2*(lindex(AV_DATA_W))+lindex(AV_BURSTCOUNT_W)+lindex(AV_NUMSYMBOLS)+lindex(AV_ADDRESS_W)+9:
                            2*(lindex(AV_DATA_W))+lindex(AV_BURSTCOUNT_W)+lindex(AV_NUMSYMBOLS)+lindex(AV_ADDRESS_W)+9] : 0;
      
      readdata <= (USE_READ_DATA == 1)? 
                   tap[2*(lindex(AV_DATA_W))+lindex(AV_BURSTCOUNT_W)+lindex(AV_NUMSYMBOLS)+lindex(AV_ADDRESS_W)+8:
                       lindex(AV_DATA_W)+lindex(AV_BURSTCOUNT_W)+lindex(AV_NUMSYMBOLS)+lindex(AV_ADDRESS_W)+8] : 0;
      
      write <= (USE_WRITE == 1)? 
                tap[lindex(AV_DATA_W)+lindex(AV_BURSTCOUNT_W)+lindex(AV_NUMSYMBOLS)+lindex(AV_ADDRESS_W)+7:
                    lindex(AV_DATA_W)+lindex(AV_BURSTCOUNT_W)+lindex(AV_NUMSYMBOLS)+lindex(AV_ADDRESS_W)+7] : 0;
      
      read <= (USE_READ == 1)? 
               tap[lindex(AV_DATA_W)+lindex(AV_BURSTCOUNT_W)+lindex(AV_NUMSYMBOLS)+lindex(AV_ADDRESS_W)+6:
                   lindex(AV_DATA_W)+lindex(AV_BURSTCOUNT_W)+lindex(AV_NUMSYMBOLS)+lindex(AV_ADDRESS_W)+6] : 0;
      
      address <= (USE_ADDRESS == 1)? 
                  tap[lindex(AV_DATA_W)+lindex(AV_BURSTCOUNT_W)+lindex(AV_NUMSYMBOLS)+lindex(AV_ADDRESS_W)+5:
                      lindex(AV_DATA_W)+lindex(AV_BURSTCOUNT_W)+lindex(AV_NUMSYMBOLS)+5] : 0;
      
      byteenable <= (USE_BYTE_ENABLE == 1)? 
                     tap[lindex(AV_DATA_W)+lindex(AV_BURSTCOUNT_W)+lindex(AV_NUMSYMBOLS)+4:
                         lindex(AV_DATA_W)+lindex(AV_BURSTCOUNT_W)+4] : 0;
      
      burstcount <= (USE_BURSTCOUNT == 1)? 
                     tap[lindex(AV_DATA_W)+lindex(AV_BURSTCOUNT_W)+3: lindex(AV_DATA_W)+3] : 1;
      
      beginbursttransfer <= (USE_BEGIN_BURST_TRANSFER == 1)? 
                             tap[lindex(AV_DATA_W)+2:lindex(AV_DATA_W)+2] : 0;
      
      begintransfer <= (USE_BEGIN_TRANSFER == 1)? tap[lindex(AV_DATA_W)+1:lindex(AV_DATA_W)+1] : 0;
      
      writedata <= (USE_WRITE_DATA == 1)? tap[lindex(AV_DATA_W):0] : 0;
   end

   //--------------------------------------------------------------------------
   // =head1 Public Methods API 
   // This section describes the public methods in the application programming
   // interface (API). In this case the application program is the test bench
   // which instantiates and controls and queries state of this component.
   // Test programs must only use these public access methods and events to 
   // communicate with this BFM component. The API and the module pins
   // are the only interfaces in this component that are guaranteed to be
   // stable. The API will be maintained for the life of the product. 
   // While we cannot prevent a test program from directly accessing internal
   // tasks, functions, or data private to the BFM, there is no guarantee that
   // these will be present in the future. In fact, it is best for the user
   // to assume that the underlying implementation of this component can 
   // and will change.
   // =cut
   //--------------------------------------------------------------------------   

   // Master Coverages API
   function automatic void set_enable_c_read_byteenable( // public
      bit     cover_enable
   );
      // enable or disable c_read_byteenable cover group
   
      enable_c_read_byteenable = cover_enable;
      coverage_settings_check(covergroup_settings_changed_flag, "c_read_byteenable");
   endfunction

   function automatic void set_enable_c_write_byteenable( // public
      bit     cover_enable
   );
      // enable or disable c_write_byteenable cover group
   
      enable_c_write_byteenable = cover_enable;
      coverage_settings_check(covergroup_settings_changed_flag, "c_write_byteenable");
   endfunction

   function automatic void set_enable_c_read_burstcount( // public
      bit     cover_enable
   );
      // enable or disable c_read_burstcount cover group
   
      enable_c_read_burstcount = cover_enable;
      coverage_settings_check(covergroup_settings_changed_flag, "c_read_burstcount");
   endfunction

   function automatic void set_enable_c_write_burstcount( // public
      bit     cover_enable
   );
      // enable or disable c_write_burstcount cover group
   
      enable_c_write_burstcount = cover_enable;
      coverage_settings_check(covergroup_settings_changed_flag, "c_write_burstcount");
   endfunction

   function automatic void set_enable_c_pending_read( // public
      bit     cover_enable
   );
      // enable or disable c_pending_read cover group
   
      enable_c_pending_read = cover_enable;
      coverage_settings_check(covergroup_settings_changed_flag, "c_pending_read");
   endfunction

   function automatic void set_enable_c_read( // public
      bit     cover_enable
   );
      // enable or disable c_read cover group
   
      enable_c_read = cover_enable;
      coverage_settings_check(covergroup_settings_changed_flag, "c_read");
   endfunction

   function automatic void set_enable_c_write( // public
      bit     cover_enable
   );
      // enable or disable c_write cover group
   
      enable_c_write = cover_enable;
      coverage_settings_check(covergroup_settings_changed_flag, "c_write");
   endfunction

   function automatic void set_enable_c_b2b_read_read( // public
      bit     cover_enable
   );
      // enable or disable c_b2b_read_read cover group
   
      enable_c_b2b_read_read = cover_enable;
      coverage_settings_check(covergroup_settings_changed_flag, "c_b2b_read_read");
   endfunction

   function automatic void set_enable_c_b2b_read_write( // public
      bit     cover_enable
   );
      // enable or disable c_b2b_read_write cover group
   
      enable_c_b2b_read_write = cover_enable;
      coverage_settings_check(covergroup_settings_changed_flag, "c_b2b_read_write");
   endfunction

   function automatic void set_enable_c_b2b_write_write( // public
      bit     cover_enable
   );
      // enable or disable c_b2b_write_write cover group
   
      enable_c_b2b_write_write = cover_enable;
      coverage_settings_check(covergroup_settings_changed_flag, "c_b2b_write_write");
   endfunction

   function automatic void set_enable_c_b2b_write_read( // public
      bit     cover_enable
   );
      // enable or disable c_b2b_write_read cover group
   
      enable_c_b2b_write_read = cover_enable;
      coverage_settings_check(covergroup_settings_changed_flag, "c_b2b_write_read");
   endfunction

   function automatic void set_enable_c_idle_in_write_burst( // public
      bit     cover_enable
   );
      // enable or disable c_idle_in_write_burst cover group
   
      enable_c_idle_in_write_burst = cover_enable;
      coverage_settings_check(covergroup_settings_changed_flag, "c_idle_in_write_burst");
   endfunction

   // Slave Coverages API
   function automatic void set_enable_c_idle_in_read_response( // public
      bit     cover_enable
   );
      // enable or disable c_idle_in_read_response cover group
   
      enable_c_idle_in_read_response = cover_enable;
      coverage_settings_check(covergroup_settings_changed_flag, "c_idle_in_read_response");
   endfunction

   function automatic void set_enable_c_read_latency( // public
      bit     cover_enable
   );
      // enable or disable c_read_latency cover group
   
      enable_c_read_latency = cover_enable;
      coverage_settings_check(covergroup_settings_changed_flag, "c_read_latency");
   endfunction

   function automatic void set_enable_c_waitrequested_read( // public
      bit     cover_enable
   );
      // enable or disable c_waitrequested_read cover group
   
      enable_c_waitrequested_read = cover_enable;
      coverage_settings_check(covergroup_settings_changed_flag, "c_waitrequested_read");
   endfunction

   function automatic void set_enable_c_waitrequested_write( // public
      bit     cover_enable
   );
      // enable or disable c_waitrequested_write cover group
   
      enable_c_waitrequested_write = cover_enable;
      coverage_settings_check(covergroup_settings_changed_flag, "c_waitrequested_write");
   endfunction

   function automatic void set_enable_c_continuous_waitrequest_from_idle_to_write( // public
      bit     cover_enable
   );
      // enable or disable c_continuous_waitrequest_from_idle_to_write cover group
   
      enable_c_continuous_waitrequest_from_idle_to_write = cover_enable;
      coverage_settings_check(covergroup_settings_changed_flag, "c_continuous_waitrequest_from_idle_to_write");
   endfunction
   
   function automatic void set_enable_c_continuous_waitrequest_from_idle_to_read( // public
      bit     cover_enable
   );
      // enable or disable c_continuous_waitrequest_from_idle_to_read cover group
   
      enable_c_continuous_waitrequest_from_idle_to_read = cover_enable;
      coverage_settings_check(covergroup_settings_changed_flag, "c_continuous_waitrequest_from_idle_to_read");
   endfunction
   
   function automatic void set_enable_c_waitrequest_without_command( // public
      bit     cover_enable
   );
      // enable or disable c_waitrequest_without_command cover group
   
      enable_c_waitrequest_without_command = cover_enable;
      coverage_settings_check(covergroup_settings_changed_flag, "c_waitrequest_without_command");
   endfunction

   function automatic void set_enable_c_idle_before_transaction( // public
      bit     cover_enable
   );
      // enable or disable c_idle_before_transaction cover group
   
      enable_c_idle_before_transaction = cover_enable;
      coverage_settings_check(covergroup_settings_changed_flag, "c_idle_before_transaction");
   endfunction
   
   function automatic void set_enable_c_continuous_read( // public
      bit     cover_enable
   );
      // enable or disable c_continuous_read cover group
   
      enable_c_continuous_read = cover_enable;
      coverage_settings_check(covergroup_settings_changed_flag, "c_continuous_read");
   endfunction
   
   function automatic void set_enable_c_continuous_write( // public
      bit     cover_enable
   );
      // enable or disable c_continuous_write cover group
   
      enable_c_continuous_write = cover_enable;
      coverage_settings_check(covergroup_settings_changed_flag, "c_continuous_write");
   endfunction
   
   function automatic void set_enable_c_continuous_readdatavalid( // public
      bit     cover_enable
   );
      // enable or disable c_continuous_readdatavalid cover group
   
      enable_c_continuous_readdatavalid = cover_enable;
      coverage_settings_check(covergroup_settings_changed_flag, "c_continuous_readdatavalid");
   endfunction
   
   function automatic void set_enable_c_continuous_waitrequest( // public
      bit     cover_enable
   );
      // enable or disable c_continuous_waitrequest cover group
   
      enable_c_continuous_waitrequest = cover_enable;
      coverage_settings_check(covergroup_settings_changed_flag, "c_continuous_waitrequest");
   endfunction
   
   function automatic void set_enable_c_waitrequest_in_write_burst( // public
      bit     cover_enable
   );
      // enable or disable c_waitrequest_in_write_burst cover group
   
      enable_c_waitrequest_in_write_burst = cover_enable;
      coverage_settings_check(covergroup_settings_changed_flag, "c_waitrequest_in_write_burst");
   endfunction
   
   function automatic void set_enable_c_readresponse( // public
      bit     cover_enable
   );
      // enable or disable c_readresponse cover group
   
      // enable_c_readresponse = cover_enable;
      // coverage_settings_check(covergroup_settings_changed_flag, "c_readresponse");
      
      $sformat(message, "%m: This coverage is no longer supported. Please use c_read_response cover group");
      print(VERBOSITY_WARNING, message);
   endfunction
   
   function automatic void set_enable_c_writeresponse( // public
      bit     cover_enable
   );
      // enable or disable c_writeresponse cover group
   
      // enable_c_writeresponse = cover_enable;
      // coverage_settings_check(covergroup_settings_changed_flag, "c_writeresponse");
      
      $sformat(message, "%m: This coverage is no longer supported. Please use c_write_response cover group");
      print(VERBOSITY_WARNING, message);
   endfunction
   
   function automatic void set_enable_c_write_with_and_without_writeresponserequest( // public
      bit     cover_enable
   );
      // This API is no longer supported.
   
   endfunction
   
   function automatic void set_enable_c_write_after_reset( // public
      bit     cover_enable
   );
      // enable or disable c_write_after_reset cover group
   
      enable_c_write_after_reset = cover_enable;
      coverage_settings_check(covergroup_settings_changed_flag, "c_write_after_reset");
   endfunction
   
   function automatic void set_enable_c_read_after_reset( // public
      bit     cover_enable
   );
      // enable or disable c_read_after_reset cover group
   
      enable_c_read_after_reset = cover_enable;
      coverage_settings_check(covergroup_settings_changed_flag, "c_read_after_reset");
   endfunction
   
   function automatic void coverage_settings_check(
      bit cover_flag,
      string cover_name
   );
      string message;
      if (cover_flag) begin
         $sformat(message, "%m: - Changing %s covergroup settings during run-time will not be reflected",
                  cover_name);
         print(VERBOSITY_WARNING, message);
      end
   endfunction
   
   function automatic void set_enable_c_write_response( // public
      bit     cover_enable
   );
      // enable or disable c_write_response cover group
   
      enable_c_write_response = cover_enable;
      coverage_settings_check(covergroup_settings_changed_flag, "c_write_response");
   endfunction
   
   function automatic void set_enable_c_read_response( // public
      bit     cover_enable
   );
      // enable or disable c_read_response cover group
   
      enable_c_read_response = cover_enable;
      coverage_settings_check(covergroup_settings_changed_flag, "c_read_response");
   endfunction
   
   function automatic void set_enable_c_write_response_transition( // public
      bit     cover_enable
   );
      // enable or disable c_write_response_transition cover group
   
      enable_c_write_response_transition = cover_enable;
      coverage_settings_check(covergroup_settings_changed_flag, "c_write_response_transition");
   endfunction
   
   function automatic void set_enable_c_read_response_transition( // public
      bit     cover_enable
   );
      // enable or disable c_read_response_transition cover group
   
      enable_c_read_response_transition = cover_enable;
      coverage_settings_check(covergroup_settings_changed_flag, "c_read_response_transition");
   endfunction
   
   //-------------------------------------------------------------------------- 
   // =head1 Assertion Checkers and Coverage Monitors
   // The assertion checkers in this module are only executable on simulators 
   // supporting the SystemVerilog Assertion (SVA) language. 
   // Mentor Modelsim AE and SE do not support this.
   // Simulators that are supported include: Synopsys VCS and Mentor questasim.
   // The assertion checking logic in this module must be explicitly enabled
   // so that designs using this module can still be compiled on Modelsim without
   // changes. To disable assertions define the following macro in the testbench
   // or on the command line with: +define+DISABLE_ALTERA_AVALON_SIM_SVA.
   // =cut
   //--------------------------------------------------------------------------
   
   //counter to capture previous cycle waitrequest value
   always @(posedge clk) 
   begin
      if (!reset) begin
         past_waitrequest = waitrequest;
      end
   end
      
   // Counter for general coverage counters
   always @(posedge clk) begin
      if (!USE_CLKEN || clken) begin
         if (idle_in_write_burst_start_flag) begin
            if (waitrequest) begin
               idle_in_write_burst_with_waitrequest = 1;
            end
         end
      
         // ignore the waitrequest effect while reset
         if ((read || write) &&
             reset_flag[1] == 0)
            reset_flag[0] = 0;
         if (($fell(read) || $fell(write) || readdatavalid ||
             $fell(begintransfer) || $fell(beginbursttransfer) || 
             ((read || write) && $fell(waitrequest))) &&
             reset_flag[0] == 0) begin
            reset_flag[1] = 1;
            reset_flag[0] = 1;
         end
         
         // Counter for read latency and readdatavalid_id
         if (!readdatavalid) begin
            read_latency_counter = 0;
         end
         if (read && !waitrequest && !readdatavalid) begin
            if (((!$fell(waitrequest) && !waitrequested_command_while_clken) || $rose(read)) ||
                read_command_while_clken || reset_flag[1] == 0) begin
               read_latency_start_flag[read_id] = 1;
               temp_read_latency_counter[read_id] = 0;
            end else begin
               if (read_id != 0) begin
                  read_latency_start_flag[read_id-1] = 1;
                  temp_read_latency_counter[read_id-1] = 0;
               end else begin
                  read_latency_start_flag[MAX_ID] = 1;
                  temp_read_latency_counter[MAX_ID] = 0;
               end
            end
         end
         if (!read && readdatavalid) begin
               read_latency_counter =
                  temp_read_latency_counter[readdatavalid_id];
            if (read_burst_counter[readdatavalid_id] == 1 ||
                read_burst_counter[readdatavalid_id] == 0) begin
               temp_read_latency_counter[readdatavalid_id] = 0;
               read_latency_start_flag[readdatavalid_id] = 0;
               // increase the id, restart the id from zero to reduce memory usage
               if (readdatavalid_id < (MAX_ID))
                  readdatavalid_id++;
               else
                  readdatavalid_id = 0;
            end
         end
         if (read && readdatavalid) begin
            read_latency_counter =
               temp_read_latency_counter[readdatavalid_id];
            if (!waitrequest) begin
               if (((!$fell(waitrequest) && !waitrequested_command_while_clken) || $rose(read)) ||
                   read_command_while_clken || reset_flag[1] == 0) begin
                  read_latency_start_flag[read_id] = 1;
                  temp_read_latency_counter[read_id] = 0;
               end else begin
                  if (read_id != 0) begin
                     read_latency_start_flag[read_id-1] = 1;
                     temp_read_latency_counter[read_id-1] = 0;
                  end else begin
                     read_latency_start_flag[MAX_ID] = 1;
                     temp_read_latency_counter[MAX_ID] = 0;
                  end
               end
            end
            if (read_burst_counter[readdatavalid_id] == 1 ||
                read_burst_counter[readdatavalid_id] == 0) begin
               temp_read_latency_counter[readdatavalid_id] = 0;
               read_latency_start_flag[readdatavalid_id] = 0;
               if (readdatavalid_id < (MAX_ID))
                  readdatavalid_id++;
               else
                  readdatavalid_id = 0;
            end
         end
         
         // new burst write transaction started
         if (((write && (!waitrequest || $rose(waitrequest)) &&
             ((!$fell(waitrequest) && !waitrequested_command_while_clken) || 
             reset_flag[1] == 0)) || write_command_while_clken || ($rose(write))) &&
             write_burst_counter == 0) begin
            if (burstcount > 0)
               write_burst_counter = burstcount;
            idle_write_flag = 1;
            idle_in_write_burst_start_flag = 1;
            idle_before_burst_transaction_sampled = 1;
         end

         if (write && (write_burst_counter == 1)) begin
            idle_in_write_burst_start_flag = 0;
            idle_in_write_burst_with_waitrequest_sampled = 1;
         end
         
         // decrease the write_burst_counter while write asserted
         if (write && !waitrequest && write_burst_counter > 0) begin
            write_burst_counter--;
         end
         
         // new read transaction asserted
         if (((read && (!waitrequest || $rose(waitrequest)) &&
               ((!$fell(waitrequest) && !waitrequested_command_while_clken) || 
               reset_flag[1] == 0)) || read_command_while_clken || $rose(read) ||
              (read_transaction_flag && waitrequest &&
               read_without_waitrequest_flag && read))) begin
            read_transaction_flag = 1;
            idle_before_burst_transaction_sampled = 1;
            if (continuous_read >= 2)
               continuous_read++;
            if (continuous_read_start_flag) begin
               if (continuous_read == 0)
                  continuous_read = 2;
            end
            continuous_read_start_flag = 1;
            continuous_read_sampled = 0;
         end else begin
            read_transaction_flag = 0;
            if (read) begin
               continuous_read_start_flag = 1;
               continuous_read_sampled = 0;
            end else begin
               continuous_read_start_flag = 0;
               continuous_read_sampled = 1;
            end
         end
         
         // new read transaction without previous read response(readdatavalid) returned at same cycle
         if (((read && (!waitrequest || $rose(waitrequest)) &&
            ((!$fell(waitrequest) && !waitrequested_command_while_clken) || 
            reset_flag[1] == 0)) || read_command_while_clken || $rose(read) ||
            (read_transaction_flag && waitrequest &&
            read_without_waitrequest_flag && read)) &&
            !readdatavalid) begin
            if (burstcount > 0) begin
               read_burst_counter[read_id] = burstcount;
               temp_read_burst_counter = burstcount;
            end

            if (!waitrequest)
               read_without_waitrequest_flag = 1;
            else
               read_without_waitrequest_flag = 0;
            idle_write_flag = 0;
            idle_read_flag[read_id] = 1;
            pending_read_counter++;
            if (read_id < (MAX_ID))
               read_id++;
            else
               read_id = 0;
         end
         
         // previous read response(readdatavalid) returned while no new read transaction asserted
         if ((readdatavalid ||
            (fix_latency_queued_counter != 0 &&
            fix_latency_queued_counter == AV_FIX_READ_LATENCY &&
            !USE_READ_DATA_VALID)) &&
            (!read_transaction_flag || !read) && pending_read_counter > 0) begin
            if ((readdatavalid_id == 0) && (read_burst_counter[MAX_ID] == 0)) begin
               if (read_burst_counter[readdatavalid_id] > 0) begin
                  if (read_burst_counter[readdatavalid_id] == 1) begin
                     pending_read_counter--;
                  end
                  read_burst_counter[readdatavalid_id]--;
               end
            end else if (read_id >= ((readdatavalid_id == 0)?MAX_ID-1:readdatavalid_id-1)) begin
               for (int i=0; i<=MAX_ID; i++) begin
                  if (read_burst_counter[i] > 0) begin
                     if (read_burst_counter[i] == 1) begin
                        pending_read_counter--;
                     end
                     read_burst_counter[i]--;
                     i=MAX_ID+1;
                  end
               end
            end else begin
               for (int i=((readdatavalid_id == 0)?MAX_ID-1:readdatavalid_id-1); i<=MAX_ID; i++) begin
                  if (read_burst_counter[i] > 0) begin
                     if (read_burst_counter[i] == 1) begin
                        pending_read_counter--;
                     end
                     read_burst_counter[i]--;
                     i=MAX_ID+1;
                  end
               end
            end
         end

         // new read transaction with previous read response(readdatavalid) returned at same cycle
         if (((read && (!waitrequest || $rose(waitrequest)) &&
            ((!$fell(waitrequest) && !waitrequested_command_while_clken) || 
            reset_flag[1] == 0)) || read_command_while_clken || $rose(read) ||
            (read_transaction_flag && waitrequest &&
            read_without_waitrequest_flag && read)) &&
            (readdatavalid ||
            (fix_latency_queued_counter != 0 &&
            fix_latency_queued_counter == AV_FIX_READ_LATENCY &&
            !USE_READ_DATA_VALID)) &&
            pending_read_counter > 0) begin
            if ((readdatavalid_id == 0) && (read_burst_counter[MAX_ID] == 0)) begin
               if (read_burst_counter[readdatavalid_id] > 0) begin
                  if (read_burst_counter[readdatavalid_id] == 1) begin
                     pending_read_counter--;
                  end
                  read_burst_counter[readdatavalid_id]--;
               end
            end else if (read_id >= ((readdatavalid_id == 0)?MAX_ID-1:readdatavalid_id-1)) begin
               for (int i=0; i<=MAX_ID; i++) begin
                  if (read_burst_counter[i] > 0) begin
                     if (read_burst_counter[i] == 1) begin
                        pending_read_counter--;
                     end
                     read_burst_counter[i]--;
                     i=MAX_ID+1;
                  end
               end
            end else begin
               for (int i=((readdatavalid_id == 0)?MAX_ID-1:readdatavalid_id-1); i<=MAX_ID; i++) begin
                  if (read_burst_counter[i] > 0) begin
                     if (read_burst_counter[i] == 1) begin
                        pending_read_counter--;
                     end
                     read_burst_counter[i]--;
                     i=MAX_ID+1;
                  end 
               end
            end
            if (burstcount > 0) begin
               read_burst_counter[read_id] = burstcount;
               temp_read_burst_counter = burstcount;
            end
            if (!waitrequest)
               read_without_waitrequest_flag = 1;
            else
               read_without_waitrequest_flag = 0;
            idle_write_flag = 0;
            idle_read_flag[read_id] = 1;
            pending_read_counter++;
            if (read_id < (MAX_ID))
               read_id++;
            else
               read_id = 0;
         end
         
         // counter for read latency
         if (pending_read_counter > 0) begin
            if (!USE_READ_DATA_VALID) begin
               fix_read_latency_counter++;
               if (fix_read_latency_counter >
                   AV_FIX_READ_LATENCY)
                  fix_read_latency_counter = 0;
            end else begin
               for (int i=0; i<=MAX_ID; i++) begin
                  if (i != read_id) begin
                     if (read_latency_start_flag[i]) begin
                        temp_read_latency_counter[i]++;
                     end
                  end
               end
            end
         end
         
         // counter for idle_in_write_burst
         if (idle_in_write_burst_flag) begin
            idle_write_flag = 0;
            idle_in_write_burst_flag = 0;
         end
         if (!write && idle_write_flag &&
             write_burst_counter < burstcount &&
             write_burst_counter != 0)
            idle_in_write_burst_flag = 1;
         
         // counter for idle_in_read_response
         if (idle_in_read_response == 1)
            idle_in_read_response = 0;
         if (!readdatavalid && !waitrequest &&
             idle_read_flag[readdatavalid_id] &&
             read_burst_counter[readdatavalid_id] <= 
             temp_read_burst_counter) begin
            temp_idle_in_read_response[readdatavalid_id]++;
            idle_in_read_response =
               temp_idle_in_read_response[readdatavalid_id];
         end
         
         // counter for waitrequested command
         if (read && waitrequest)
            temp_waitrequested_read_counter++;
         if (!read || !waitrequest) begin
            waitrequested_read_counter =
               temp_waitrequested_read_counter;
            temp_waitrequested_read_counter = 0;
         end
         if (write && waitrequest) begin
            temp_waitrequested_write_counter++;
         end
         if (!write || !waitrequest) begin
            waitrequested_write_counter =
               temp_waitrequested_write_counter;
            temp_waitrequested_write_counter = 0;
         end

         // fix latency counter
         if (read && !waitrequest) begin
            fix_latency_queued.push_front(0);
         end
         
         if (fix_latency_queued.size() > 0) begin
            foreach(fix_latency_queued[size]) begin
               fix_latency_queued[size]++;
               if (fix_latency_queued[size] > AV_FIX_READ_LATENCY) begin
                  void'(fix_latency_queued.pop_back());
               end
            end
            fix_latency_queued_counter <= fix_latency_queued[$];
         end
         waitrequested_command_while_clken = 0;
         write_command_while_clken = 0;
         read_command_while_clken = 0;
      end else begin
         if (($rose(waitrequest) && read) || ($rose(read))) begin
            read_command_while_clken = 1;
         end
         if (($rose(waitrequest) && write) || $rose(write)) begin
            write_command_while_clken = 1;
         end
         
         if ($fell(waitrequest) && (read || write)) begin
            waitrequested_command_while_clken = 1;
         end
      end
   end
   
   // counter for waitrequest before command asserted
   always @(posedge clk) begin
      if (!reset) begin
         if (!USE_CLKEN || clken) begin
            if (waitrequest && !write && !read) begin
               waitrequest_before_command = 1;
               waitrequested_before_transaction = 1;
            end else begin
               if (read || write) begin
                  waitrequested_before_transaction = 0;
               end
            end
           
            if (waitrequest && (read || write)) begin
               if (write_burst_counter == 0)
                  burst_waitrequested_command = 1;
            end
           
            if (waitrequest_before_command) begin
               if (write && waitrequest) begin
                  waitrequest_before_waitrequested_write = 1;
               end else if (read && waitrequest) begin
                  waitrequest_before_waitrequested_read = 1;
               end
               
               if(!waitrequest) begin
                  if (!waitrequest_before_waitrequested_write && !waitrequest_before_waitrequested_read) begin
                     waitrequest_without_command = 1;
                  end else begin
                     waitrequest_without_command = 0;
                  end
                  waitrequest_before_command = 0;
               end
            end else begin
               waitrequest_before_waitrequested_write = 0;
               waitrequest_before_waitrequested_read = 0;
            end
            
            if (!waitrequest) begin
               waitrequest_before_command = 0;
            end
            
            if (!read && ! write && !waitrequest) begin
               if (write_burst_counter == 0) begin
                  idle_before_burst_transaction = 1;
                  idle_before_burst_transaction_sampled = 0;
               end
            end 
            
            if (waitrequested_before_transaction) begin
               if (idle_before_burst_transaction) begin
                  idle_before_burst_transaction_with_waitrequest = 1;
                  idle_before_burst_transaction_with_waitrequest_sampled = 0;
               end
            end else begin
               if ((burst_waitrequested_command) && (idle_before_burst_transaction)) begin
                  idle_before_burst_transaction_with_waitrequest = 1;
               end
               if (write_burst_counter == 0) begin
                  idle_before_burst_transaction_with_waitrequest_sampled = 1;
               end else begin
                  idle_before_burst_transaction_with_waitrequest_sampled = 0;
               end
            end
         end
      end
   end
   
   // Counter for continuous write, readdatavalid
   always@(posedge clk) begin
      if (!reset) begin
         if (!USE_CLKEN || clken) begin
            if ((write && (!waitrequest))) begin
               if (continuous_write >= 2)
                  continuous_write++;
               if (continuous_write_start_flag) begin
                  if (continuous_write == 0)
                     continuous_write = 2;
               end else begin
                  continuous_write_start_flag = 1;
               end

               continuous_write_start_flag = 1;
               continuous_write_sampled = 0;
            end else begin
               if (write) begin
                  continuous_write_sampled = 0;
               end else begin
                  continuous_write_sampled = 1;
                  continuous_write_start_flag = 0;
               end
            end
            
            if (readdatavalid) begin
               if (continuous_readdatavalid >= 2)
                  continuous_readdatavalid++;
               if(continuous_readdatavalid_start_flag == 1) begin
                  if (continuous_readdatavalid == 0)
                     continuous_readdatavalid = 2;
               end
               continuous_readdatavalid_sampled = 0;
               continuous_readdatavalid_start_flag = 1;
            end else begin
               continuous_readdatavalid_start_flag = 0;
               continuous_readdatavalid_sampled = 1;
            end
            
            if (waitrequest) begin
               if (continuous_waitrequest >= 1)
                     continuous_waitrequest++;
               if(continuous_waitrequest_start_flag == 1) begin
                  if (continuous_waitrequest == 0) begin
                     continuous_waitrequest = 2;
                  end
               end
               continuous_waitrequest_sampled = 0;
               continuous_waitrequest_start_flag = 1;
            end else begin
               continuous_waitrequest_start_flag = 0;
               continuous_waitrequest_sampled = 1;
            end
         end
      end
   end
   
   // Counter for generating legal byteenable
   initial begin
      legal_byteenable[(AV_NUMSYMBOLS*2)-1] = 0;
      check_byteenable = byteenable_1_bit;
      for (int i=0; i<AV_NUMSYMBOLS; i++) begin
         legal_byteenable[i] = check_byteenable;
         check_byteenable = check_byteenable << 1;
         byteenable_counter = i;
      end
      if (AV_NUMSYMBOLS > 1) begin
         check_byteenable = byteenable_2_bit;
         for (int i=0; i<AV_NUMSYMBOLS; i=i+2) begin
            byteenable_counter++;
            legal_byteenable[byteenable_counter] = check_byteenable;
            check_byteenable = check_byteenable << 2;
         end
      end
      if (AV_NUMSYMBOLS > 2) begin
         check_byteenable = byteenable_4_bit;
         for (int i=0; i<AV_NUMSYMBOLS; i=i+4) begin
            byteenable_counter++;
            legal_byteenable[byteenable_counter] = check_byteenable;
            check_byteenable = check_byteenable << 4;
         end
      end
      if (AV_NUMSYMBOLS > 4) begin
         check_byteenable = byteenable_8_bit;
         for (int i=0; i<AV_NUMSYMBOLS; i=i+8) begin
            byteenable_counter++;
            legal_byteenable[byteenable_counter] = check_byteenable;
            check_byteenable = check_byteenable << 8;
         end
      end
      if (AV_NUMSYMBOLS > 8) begin
         check_byteenable = byteenable_16_bit;
         for (int i=0; i<AV_NUMSYMBOLS; i=i+16) begin
            byteenable_counter++;
            legal_byteenable[byteenable_counter] = check_byteenable;
            check_byteenable = check_byteenable << 16;
         end
      end
      if (AV_NUMSYMBOLS > 16) begin
         check_byteenable = byteenable_32_bit;
         for (int i=0; i<AV_NUMSYMBOLS; i=i+32) begin
            byteenable_counter++;
            legal_byteenable[byteenable_counter] = check_byteenable;
            check_byteenable = check_byteenable << 32;
         end
      end
      if (AV_NUMSYMBOLS > 32) begin
         check_byteenable = byteenable_64_bit;
         for (int i=0; i<AV_NUMSYMBOLS; i=i+64) begin
            byteenable_counter++;
            legal_byteenable[byteenable_counter] = check_byteenable;
            check_byteenable = check_byteenable << 64;
         end
      end
      if (AV_NUMSYMBOLS > 64) begin
         byteenable_counter++;
         legal_byteenable[byteenable_counter] = byteenable_128_bit;
      end
   end

   // Counter for back to back transfers
   always @(posedge clk) begin
      if (!USE_CLKEN || clken) begin
         if ((!read && !write) || waitrequest) begin
            b2b_transfer[3] = 1;
            b2b_transfer[2] = 0;
         end else begin
            if (read && !waitrequest) begin
               if (!b2b_transfer[3] && !b2b_transfer[2])
                  b2b_transfer[1] = b2b_transfer[0];
               if (b2b_transfer[3]) begin
                  b2b_transfer[3] = 0;
                  b2b_transfer[2] = 1;
                  b2b_transfer[1] = 0;
               end else begin
                  b2b_transfer[0] = 0;
                  if (b2b_transfer[2])
                     b2b_transfer[2] = 0;
               end
            end
            if (write && !waitrequest) begin
               if (!b2b_transfer[3] && !b2b_transfer[2])
                  b2b_transfer[1] = b2b_transfer[0];
               if (b2b_transfer[3]) begin
                  b2b_transfer[3] = 0;
                  b2b_transfer[2] = 1;
                  b2b_transfer[1] = 1;
               end else begin
                  b2b_transfer[0] = 1;
                  if (b2b_transfer[2])
                     b2b_transfer[2] = 0;
               end
            end
         end
      end
   end
   
   // Counter for write response transition
   always @(posedge clk) begin
      if (!USE_CLKEN || clken) begin
         if (writeresponsevalid) begin
            write_response_transition[3:2] = write_response_transition[1:0];
            write_response_transition[1:0] = write_response;
         end
      end
   end

   // Counter for read response transition
   always @(posedge clk) begin
      if (!USE_CLKEN || clken) begin
         if ((USE_READ_DATA_VALID && readdatavalid) || 
               (!USE_READ_DATA_VALID && fix_latency_queued_counter == AV_FIX_READ_LATENCY && fix_latency_queued_counter != 0)) begin
            read_response_transition[3:2] = read_response_transition[1:0];
            read_response_transition[1:0] = read_response;
         end
      end
   end
   // Counter for reset
   always @(posedge clk) begin
      if (reset) begin
         fix_latency_queued = {};
         idle_write_flag = 0;
         idle_read_flag = 0;
         read_latency_start_flag = 0;
         read_burst_counter = 0;
         temp_read_burst_counter = 0;
         temp_idle_in_read_response = 0;
         temp_read_latency_counter = 0;
         fix_latency_queued_counter = 0;
         read_transaction_flag = 0;
         read_without_waitrequest_flag = 0;
         idle_in_write_burst_flag = 0;
         write_burst_counter = 0;
         pending_read_counter = 0;
         fix_read_latency_counter = 0;
         idle_in_read_response = 0;
         temp_waitrequested_read_counter = 0;
         waitrequested_read_counter = 0;
         temp_waitrequested_write_counter = 0;
         waitrequested_write_counter = 0;
         byteenable_counter = 0;
         read_latency_counter = 0;
         read_id = 0;
         readdatavalid_id = 0;
         b2b_transfer = 4'b1111;
         check_byteenable = 0;
         reset_flag[1] = 0;
         reset_flag[0] = 1;
         write_after_reset = 1;
         read_after_reset = 1;
         read_reset_transaction = 1;
         write_reset_transaction = 1;
         waitrequest_before_waitrequested_read = 0;
         waitrequest_before_waitrequested_write = 0;
         waitrequest_before_command = 0;
         waitrequest_without_command = 0;
         past_waitrequest = 0;
         idle_before_burst_transaction = 0;
         idle_before_burst_transaction_sampled = 0;
         continuous_read_sampled = 0;
         continuous_read_start_flag = 0;
         continuous_read = 0;
         continuous_write_sampled = 0;
         continuous_write_start_flag = 0;
         continuous_write = 0;
         continuous_readdatavalid_sampled = 0;
         continuous_readdatavalid_start_flag = 0;
         continuous_readdatavalid = 0;
         continuous_waitrequest_sampled = 0;
         continuous_waitrequest_start_flag = 0;
         continuous_waitrequest = 0;
         idle_in_write_burst_with_waitrequest = 0;
         idle_in_write_burst_with_waitrequest_sampled = 0;
         idle_in_write_burst_start_flag = 0;
         idle_before_burst_transaction_with_waitrequest = 0;
         idle_before_burst_transaction_with_waitrequest_sampled = 0;
         waitrequested_before_transaction = 0;
         burst_waitrequested_command = 0;
         write_command_while_clken = 0;
         read_command_while_clken = 0;
         waitrequested_command_while_clken = 0;
      end 
   end

   // Flag for initial coverage settings
   initial begin
      #1 covergroup_settings_changed_flag = 1;
   end


   `ifdef DISABLE_ALTERA_AVALON_SIM_SVA
   // SVA coverage code is disabled when this macro is defined

   `else
   //--------------------------------------------------------------------------
   // COVERAGE CODE BEGIN
   //--------------------------------------------------------------------------

   //---------------------------------------------------------------------------
   // =head2 Master Coverages
   // The following are the cover group code focus on Master component coverage
   //-------------------------------------------------------------------------------

   //-------------------------------------------------------------------------------
   // =head3 c_read_byteenable
   // This cover group covers the different byteenable during read transfers.
   // This cover group does not support byteenable value larger than
   // 1073741824.
   //-------------------------------------------------------------------------------

   covergroup cg_read_byteenable(logic [63:0] byteenable_max);
      cp_byteenable: coverpoint byteenable
      {
         bins cg_read_byteenable_cp_byteenable [] = {[0:4],
                                                     8,
                                                     12,
                                                     15,
                                                     16,
                                                     32,
                                                     48,
                                                     64,
                                                     128,
                                                     192,
                                                     255,
                                                     256,
                                                     512,
                                                     768,
                                                     1024,
                                                     2048,
                                                     3072,
                                                     3840,
                                                     4096,
                                                     8192,
                                                     12288,
                                                     16384,
                                                     32768,
                                                     49152,
                                                     65280,
                                                     65535,
                                                     65536,
                                                     131072,
                                                     196608,
                                                     262144,
                                                     524288,
                                                     786432,
                                                     1048576,
                                                     2097152,
                                                     3145728,
                                                     4194304,
                                                     8388608,
                                                     12582912,
                                                     16711680,
                                                     16777216,
                                                     33554432,
                                                     50331648,
                                                     67108864,
                                                     134217728,
                                                     201326592,
                                                     268435456,
                                                     536870912,
                                                     805306368,
                                                     1073741824};

         ignore_bins cg_read_byteenable_cp_byteenable_ignore = {[byteenable_max+1:$]};
      }
      option.per_instance = 1;
   endgroup

   cg_read_byteenable c_read_byteenable;

   initial begin
      #1 if (enable_c_read_byteenable && USE_BYTE_ENABLE && USE_READ) begin
         if (AV_NUMSYMBOLS >= 32)
            c_read_byteenable = new(1073741825);
         else
            c_read_byteenable = new((2**AV_NUMSYMBOLS)-1);
      end
   end

   always @(posedge clk && !reset) begin
      if (enable_c_read_byteenable && USE_BYTE_ENABLE && USE_READ) begin
         if (read && !waitrequest && clken) begin
            c_read_byteenable.sample();
         end
      end
   end

   // -------------------------------------------------------------------------------
   // =head3 c_write_byteenable
   // This cover group covers the different byteenable during write transfers.
   // This cover group does not support byteenable value larger than
   // 1073741824.
   // -------------------------------------------------------------------------------

   covergroup cg_write_byteenable(logic [31:0] byteenable_max);
      cp_byteenable: coverpoint byteenable
      {
         bins cg_write_byteenable_cp_byteenable [] = {[0:4],
                                                     8,
                                                     12,
                                                     15,
                                                     16,
                                                     32,
                                                     48,
                                                     64,
                                                     128,
                                                     192,
                                                     255,
                                                     256,
                                                     512,
                                                     768,
                                                     1024,
                                                     2048,
                                                     3072,
                                                     3840,
                                                     4096,
                                                     8192,
                                                     12288,
                                                     16384,
                                                     32768,
                                                     49152,
                                                     65280,
                                                     65535,
                                                     65536,
                                                     131072,
                                                     196608,
                                                     262144,
                                                     524288,
                                                     786432,
                                                     1048576,
                                                     2097152,
                                                     3145728,
                                                     4194304,
                                                     8388608,
                                                     12582912,
                                                     16711680,
                                                     16777216,
                                                     33554432,
                                                     50331648,
                                                     67108864,
                                                     134217728,
                                                     201326592,
                                                     268435456,
                                                     536870912,
                                                     805306368,
                                                     1073741824};
         ignore_bins cg_write_byteenable_cp_byteenable_ignore = {[byteenable_max+1:$]};
      }
      option.per_instance = 1;
   endgroup

   cg_write_byteenable c_write_byteenable;

   initial begin
      #1 if (enable_c_write_byteenable && USE_BYTE_ENABLE && USE_WRITE) begin
         if (AV_NUMSYMBOLS >= 32)
            c_write_byteenable = new(1073741825);
         else
            c_write_byteenable = new((2**AV_NUMSYMBOLS)-1);
      end
   end

   always @(posedge clk && !reset) begin
      if (enable_c_write_byteenable && USE_BYTE_ENABLE && USE_WRITE) begin
         if (write && !waitrequest && clken) begin
            c_write_byteenable.sample();
         end
      end
   end

   //-------------------------------------------------------------------------------
   // =head3 c_read_burstcount
   // This cover group covers the different sizes of burstcount during read
   // burst transfers
   //-------------------------------------------------------------------------------

   covergroup cg_read_burstcount;
      cp_burstcount: coverpoint burstcount
      {
         bins cg_read_burstcount_cp_burstcount_low = {1};
         bins cg_read_burstcount_cp_burstcount_mid =
            {[(AV_MAX_BURST < 3? 1:2):
              (AV_MAX_BURST < 3? 1:AV_MAX_BURST-1)]};
         bins cg_read_burstcount_cp_burstcount_high =
            {(AV_MAX_BURST < 2? 1:AV_MAX_BURST)};
      }
      option.per_instance = 1;
   endgroup

   cg_read_burstcount c_read_burstcount;

   initial begin
      #1 if (enable_c_read_burstcount && USE_BURSTCOUNT && USE_READ) begin
         c_read_burstcount = new();
      end
   end

   always @(posedge clk && !reset) begin
      if (enable_c_read_burstcount && USE_BURSTCOUNT && USE_READ) begin
         if (read && !waitrequest && clken) begin
            c_read_burstcount.sample();
            #1;
         end
      end
   end

   //-------------------------------------------------------------------------------
   // =head3 c_write_burstcount
   // This cover group covers the different sizes of burstcount during write
   // burst transfers
   //-------------------------------------------------------------------------------

   covergroup cg_write_burstcount;
      cp_burstcount: coverpoint burstcount
      {
         bins cg_write_burstcount_cp_burstcount_low = {1};
         bins cg_write_burstcount_cp_burstcount_mid =
            {[(AV_MAX_BURST < 3? 1:2):
              (AV_MAX_BURST < 3? 1:AV_MAX_BURST-1)]};
         bins cg_write_burstcount_cp_burstcount_high =
            {(AV_MAX_BURST < 2? 1:AV_MAX_BURST)};
      }
      option.per_instance = 1;
   endgroup

   cg_write_burstcount c_write_burstcount;

   initial begin
      #1 if (enable_c_write_burstcount && USE_BURSTCOUNT && USE_WRITE) begin
         c_write_burstcount = new();
      end
   end

   always @(posedge clk && !reset) begin
      if (enable_c_write_burstcount && USE_BURSTCOUNT && USE_WRITE) begin
         if (write && write_burst_counter == 0 && clken) begin
            c_write_burstcount.sample();
            #1;
         end
      end
   end

   //-------------------------------------------------------------------------------
   // =head3 c_pending_read
   // This cover group covers the different number of pending read transfers
   //-------------------------------------------------------------------------------

   covergroup cg_pending_read;
      cp_pending_read_count: coverpoint pending_read_counter
      {
         bins cg_pending_read_cp_pending_read_count[] =
           {[1:(AV_MAX_PENDING_READS < 2? 1:AV_MAX_PENDING_READS)]};
      }
      option.per_instance = 1;
   endgroup

   cg_pending_read c_pending_read;

   initial begin
      #1 if (enable_c_pending_read && USE_READ && USE_READ_DATA_VALID && AV_MAX_PENDING_READS > 0) begin
         c_pending_read = new();
      end
   end

   always @(posedge clk && !reset) begin
      if (enable_c_pending_read && USE_READ && USE_READ_DATA_VALID && AV_MAX_PENDING_READS > 0) begin
         if (read_transaction_flag && clken) begin
            c_pending_read.sample();
            #1;
         end
      end
   end

   //-------------------------------------------------------------------------------
   // =head3 c_read
   // This cover group covers read transfers
   //-------------------------------------------------------------------------------

   covergroup cg_read;
      cp_read: coverpoint read
      {
         bins cg_read_cp_read = {1};
         option.comment = "This cover group covers read transfers";
      }
      option.per_instance = 1;
      option.comment = "This cover group covers how many read transfers happen";
   endgroup

   cg_read c_read;

   initial begin
      #1 if (enable_c_read && USE_READ) begin
         c_read = new();
      end
   end

   always @(posedge clk && !reset) begin
      if (enable_c_read && USE_READ && clken) begin
         if (read && !waitrequest) begin
            c_read.sample();
            #1;
         end
      end
   end

   //-------------------------------------------------------------------------------
   // =head3 c_write
   // This cover group covers write transfers
   //-------------------------------------------------------------------------------

   covergroup cg_write;
      cp_write: coverpoint write
      {
         bins cg_write_cp_write = {1};
      }
      option.per_instance = 1;
   endgroup

   cg_write c_write;

   initial begin
      #1 if (enable_c_write && USE_WRITE) begin
         c_write = new();
      end
   end

   always @(posedge clk && !reset) begin
      if (enable_c_write && USE_WRITE && clken) begin
         if (write && write_burst_counter == 0) begin
            c_write.sample();
            #1;
         end
      end
   end

   //-------------------------------------------------------------------------------
   // =head3 c_b2b_read_read
   // This cover group covers back to back read to read transfers
   //-------------------------------------------------------------------------------

   covergroup cg_b2b_read_read;
      cp_b2b_read_read: coverpoint b2b_transfer
      {
         bins cp_b2b_read_read_cp_b2b_read_read = {4'b0000};
      }
      option.per_instance = 1;
   endgroup

   cg_b2b_read_read c_b2b_read_read;

   initial begin
      #1 if (enable_c_b2b_read_read && USE_READ) begin
         c_b2b_read_read = new();
      end
   end

   always @(posedge clk && !reset) begin
      if (enable_c_b2b_read_read && USE_READ && clken) begin
         c_b2b_read_read.sample();
         #1;
      end
   end

   //-------------------------------------------------------------------------------
   // =head3 c_b2b_read_write
   // This cover group covers back to back read to write transfers
   //-------------------------------------------------------------------------------

   covergroup cg_b2b_read_write;
      cp_b2b_read_write: coverpoint b2b_transfer
      {
         bins cg_b2b_read_write_cp_b2b_read_write = {4'b0001};
      }
      option.per_instance = 1;
   endgroup

   cg_b2b_read_write c_b2b_read_write;

   initial begin
      #1 if (enable_c_b2b_read_write && USE_READ && USE_WRITE) begin
         c_b2b_read_write = new();
      end
   end

   always @(posedge clk && !reset) begin
      if (enable_c_b2b_read_write && USE_READ && USE_WRITE && clken) begin
         c_b2b_read_write.sample();
         #1;
      end
   end

   //-------------------------------------------------------------------------------
   // =head3 c_b2b_write_write
   // This cover group covers back to back write to write transfers
   //-------------------------------------------------------------------------------

   covergroup cg_b2b_write_write;
      cp_b2b_write_write: coverpoint b2b_transfer
      {
         bins cg_b2b_write_write_cp_b2b_write_write = {4'b0011};
      }
      option.per_instance = 1;
   endgroup

   cg_b2b_write_write c_b2b_write_write;

   initial begin
      #1 if (enable_c_b2b_write_write && USE_WRITE) begin
         c_b2b_write_write = new();
      end
   end

   always @(posedge clk && !reset) begin
      if (enable_c_b2b_write_write && USE_WRITE && clken) begin
         c_b2b_write_write.sample();
         #1;
      end
   end

   //-------------------------------------------------------------------------------
   // =head3 c_b2b_write_read
   // This cover group covers back to back write to read transfers
   //-------------------------------------------------------------------------------

   covergroup cg_b2b_write_read;
      cp_b2b_write_read: coverpoint b2b_transfer
      {
         bins cg_b2b_write_read_cp_b2b_write_read = {4'b0010};
      }
      option.per_instance = 1;
   endgroup

   cg_b2b_write_read c_b2b_write_read;

   initial begin
      #1 if (enable_c_b2b_write_read && USE_READ && USE_WRITE) begin
         c_b2b_write_read = new();
      end
   end

   always @(posedge clk && !reset) begin
      if (enable_c_b2b_write_read && USE_READ && USE_WRITE && clken) begin
         c_b2b_write_read.sample();
         #1;
      end
   end

   //-------------------------------------------------------------------------------
   // =head3 c_idle_in_write_burst
   // This cover group covers idle cycles during write burst transfers
   //-------------------------------------------------------------------------------

   covergroup cg_idle_in_write_burst;
      cp_idle_in_write_burst: coverpoint idle_in_write_burst_flag
      {
         bins cg_idle_in_write_burst_cp_idle_in_write_burst_count = {1};
      }
      option.per_instance = 1;
   endgroup

   cg_idle_in_write_burst c_idle_in_write_burst;

   initial begin
      #1 if (enable_c_idle_in_write_burst && USE_BURSTCOUNT && USE_WRITE &&
             AV_MAX_BURST > 1) begin
         c_idle_in_write_burst = new();
      end
   end

   always @(posedge clk && !reset) begin
      if (enable_c_idle_in_write_burst && USE_BURSTCOUNT && USE_WRITE &&
          AV_MAX_BURST > 1 && clken) begin
         c_idle_in_write_burst.sample();
         #1;
      end
   end

   //-------------------------------------------------------------------------------
   // =head3 c_idle_before_transaction
   // This cover group covers different cycle numbers of idle before read/write 
   // transaction.
   //-------------------------------------------------------------------------------

   covergroup cg_idle_before_transaction;
      cp_idle_before_transaction: coverpoint idle_before_burst_transaction
      {
         bins cg_idle_before_transaction_cp_idle_before_transaction = {1};
      }
      option.per_instance = 1;
   endgroup

   cg_idle_before_transaction c_idle_before_transaction;

   initial begin
      #1 if (enable_c_idle_before_transaction) begin
         c_idle_before_transaction = new();
      end
   end

   always @(posedge clk && !reset) begin
      if (idle_before_burst_transaction_sampled == 1 && clken) begin
         if (enable_c_idle_before_transaction) begin
            c_idle_before_transaction.sample();
            #1;
         end
         idle_before_burst_transaction = 0;
      end
   end

   //-------------------------------------------------------------------------------
   // =head3 c_continuous_read
   // This cover group covers the different cycle numbers of continuous read 
   // asserted from 2 until AV_MAX_CONTINUOUS_READ. For the continuous read cycles 
   // more than AV_MAX_CONTINUOUS_READ will go to another bin.
   //-------------------------------------------------------------------------------

   covergroup cg_continuous_read;
      cp_continuous_read: coverpoint continuous_read
      {
         bins cg_continuous_read_cp_continuous_read [] = 
            {[2:(AV_MAX_CONTINUOUS_READ < 2) ? 2:AV_MAX_CONTINUOUS_READ]};
         bins cg_continuous_read_cp_continuous_read_high = 
            {[AV_MAX_CONTINUOUS_READ+1:$]};
      }
      option.per_instance = 1;
   endgroup

   cg_continuous_read c_continuous_read;

   initial begin
      #1 if (enable_c_continuous_read && USE_READ) begin
         c_continuous_read = new();
      end
   end

   always @(posedge clk && !reset) begin
      if (enable_c_continuous_read && USE_READ && clken) begin
         if (continuous_read_sampled == 1) begin
            c_continuous_read.sample();
            continuous_read = 0;
            #1;
         end
      end
   end
   
   //-------------------------------------------------------------------------------
   // =head3 c_continuous_write
   // This cover group covers the different cycle numbers of continuous write 
   // asserted from 2 until AV_MAX_CONTINUOUS_WRITE. For the continuous write cycles 
   // more than AV_MAX_CONTINUOUS_WRITE will go to another bin.
   //-------------------------------------------------------------------------------

   covergroup cg_continuous_write;
      cp_continuous_write: coverpoint continuous_write
      {
         bins cg_continuous_write_cp_continuous_write [] = 
            {[2:(AV_MAX_CONTINUOUS_WRITE) < 2 ? 2:AV_MAX_CONTINUOUS_WRITE]};
         bins cg_continuous_write_cp_continuous_write_high = 
            {[AV_MAX_CONTINUOUS_WRITE+1:$]};
      }
      option.per_instance = 1;
   endgroup

   cg_continuous_write c_continuous_write;

   initial begin
      #1 if (enable_c_continuous_write && USE_WRITE) begin
         c_continuous_write = new();
      end
   end

   always @(posedge clk && !reset) begin
      if (enable_c_continuous_write && USE_WRITE && clken) begin
         if (continuous_write_sampled == 1) begin
            c_continuous_write.sample();
            continuous_write = 0;
            #1;
         end
      end
   end
      
   //-------------------------------------------------------------------------------
   // =head3 c_write_after_reset
   // This cover group covers write transaction right after reset
   //-------------------------------------------------------------------------------

   covergroup cg_write_after_reset;
      cp_write_after_reset: coverpoint write_after_reset
      {
         bins cg_write_after_reset_cp_write_after_reset = {1};
      }
      option.per_instance = 1;
   endgroup

   cg_write_after_reset c_write_after_reset;

   initial begin
      #1 if (enable_c_write_after_reset && USE_WRITE) begin
         c_write_after_reset = new();
      end
   end

   always @(posedge clk) begin
      if (enable_c_write_after_reset && USE_WRITE && !reset && clken) begin
         if (write) begin
            c_write_after_reset.sample();
            #1;
         end
         if (write_reset_transaction == 0) begin
            write_after_reset = 0;
         end
         write_reset_transaction = 0;
      end
   end
   
   //-------------------------------------------------------------------------------
   // =head3 c_read_after_reset
   // This cover group covers read transaction right after reset
   // =cut
   //-------------------------------------------------------------------------------

   covergroup cg_read_after_reset;
      cp_read_after_reset: coverpoint read_after_reset
      {
         bins cg_read_after_reset_cp_read_after_reset = {1};
      }
      option.per_instance = 1;
   endgroup

   cg_read_after_reset c_read_after_reset;

   initial begin
      #1 if (enable_c_read_after_reset && USE_READ) begin
         c_read_after_reset = new();
      end
   end

   always @(posedge clk) begin
      if (enable_c_read_after_reset && USE_READ && !reset && clken) begin
         if (read) begin
            c_read_after_reset.sample();
            #1;
         end
         if (read_reset_transaction == 0) begin
            read_after_reset = 0;
         end
         read_reset_transaction = 0;
      end
   end
   
   //-------------------------------------------------------------------------------
   // =head2 Slave Coverages
   // The following are the cover group code focus on Slave component coverage
   //-------------------------------------------------------------------------------

   //-------------------------------------------------------------------------------
   // =head3 c_idle_in_read_response
   // This cover group covers idle cycles during read response
   //-------------------------------------------------------------------------------

   covergroup cg_idle_in_read_response;
      cp_idle_in_read_response: coverpoint idle_in_read_response
      {
         bins cg_idle_in_read_response_cp_idle_in_read_response_count = {1};
      }
      option.per_instance = 1;
   endgroup

   cg_idle_in_read_response c_idle_in_read_response;

   initial begin
      #1 if (enable_c_idle_in_read_response && USE_BURSTCOUNT && USE_READ &&
             USE_READ_DATA_VALID) begin
         c_idle_in_read_response = new();
      end
   end

   always @(posedge clk && !reset) begin
      if (enable_c_idle_in_read_response && USE_BURSTCOUNT && USE_READ &&
          USE_READ_DATA_VALID && clken) begin
         c_idle_in_read_response.sample();
         #1;
      end
   end

   //-------------------------------------------------------------------------------
   // =head3 c_read_latency
   // This cover group covers different read latency cycles
   //-------------------------------------------------------------------------------

   covergroup cg_read_latency;
      cp_read_latency: coverpoint read_latency_counter
      {
         bins cg_read_latency_cp_read_latency_count_low = {1};
         bins cg_read_latency_cp_read_latency_count_high =
            {[(AV_MAX_READ_LATENCY < 2? 1:2):
              (AV_MAX_READ_LATENCY < 2? 1:AV_MAX_READ_LATENCY)]};
      }
      option.per_instance = 1;
   endgroup

   cg_read_latency c_read_latency;

   initial begin
      #1 if (enable_c_read_latency && USE_READ && USE_READ_DATA_VALID &&
             AV_MAX_READ_LATENCY > 0) begin
         c_read_latency = new();
      end
   end

   always @(posedge clk && !reset) begin
      if (enable_c_read_latency && USE_READ && USE_READ_DATA_VALID &&
          AV_MAX_READ_LATENCY > 0 && clken) begin
         c_read_latency.sample();
         #1;
      end
   end

   //-------------------------------------------------------------------------------
   // =head3 c_waitrequested_read
   // This cover group covers different waitrequested read cycles
   //-------------------------------------------------------------------------------

   covergroup cg_waitrequested_read;
      cp_waitrequested_read_cycle: coverpoint waitrequested_read_counter
      {
         bins cg_waitrequested_read_cp_waitrequested_read_cycle_low = {1};
         bins cg_waitrequested_read_cp_waitrequested_read_cycle_high =
            {[(AV_MAX_WAITREQUESTED_READ < 2? 1:2):
              (AV_MAX_WAITREQUESTED_READ < 2? 1:AV_MAX_WAITREQUESTED_READ)]};
      }
      option.per_instance = 1;
   endgroup

   cg_waitrequested_read c_waitrequested_read;

   initial begin
      #1 if (enable_c_waitrequested_read && USE_WAIT_REQUEST && USE_READ &&
             AV_MAX_WAITREQUESTED_READ > 0) begin
         c_waitrequested_read = new();
      end
   end

   always @(posedge clk && !reset) begin
      if (enable_c_waitrequested_read && USE_WAIT_REQUEST && USE_READ &&
          AV_MAX_WAITREQUESTED_READ > 0 && clken) begin
         if (temp_waitrequested_read_counter == 0) begin
            c_waitrequested_read.sample();
            #1;
         end
      end
   end

   //-------------------------------------------------------------------------------
   // =head3 c_waitrequested_write
   // This cover group covers different waitrequested write cycles
   //-------------------------------------------------------------------------------

   covergroup cg_waitrequested_write;
      cp_waitrequested_write_cycle: coverpoint waitrequested_write_counter
      {
         bins cg_waitrequested_write_cp_waitrequested_write_cycle_low = {1};
         bins cg_waitrequested_write_cp_waitrequested_write_cycle_high =
            {[(AV_MAX_WAITREQUESTED_WRITE < 2? 1:2):
              (AV_MAX_WAITREQUESTED_WRITE < 2? 1:AV_MAX_WAITREQUESTED_WRITE)]};
      }
      option.per_instance = 1;
   endgroup

   cg_waitrequested_write c_waitrequested_write;

   initial begin
      #1 if (enable_c_waitrequested_write && USE_WAIT_REQUEST && USE_WRITE &&
             AV_MAX_WAITREQUESTED_WRITE > 0) begin
         c_waitrequested_write = new();
      end
   end

   always @(posedge clk && !reset) begin
      if (enable_c_waitrequested_write && USE_WAIT_REQUEST && USE_WRITE &&
          AV_MAX_WAITREQUESTED_WRITE > 0 && clken) begin
         if (temp_waitrequested_write_counter == 0) begin
            c_waitrequested_write.sample();
            #1;
         end
      end
   end

   //-------------------------------------------------------------------------------
   // =head3 c_continuous_waitrequest_from_idle_to_write
   // This cover group covers waitrequest is asserted before waitrequested write.
   //-------------------------------------------------------------------------------

   covergroup cg_continuous_waitrequest_from_idle_to_write;
      cp_continuous_waitrequest_from_idle_to_write: coverpoint waitrequest_before_waitrequested_write
      {
         bins cg_continuous_waitrequest_from_idle_to_write_cp_continuous_waitrequest_from_idle_to_write = {1};
      }
      option.per_instance = 1;
   endgroup

   cg_continuous_waitrequest_from_idle_to_write c_continuous_waitrequest_from_idle_to_write;

   initial begin
      #1 if (enable_c_continuous_waitrequest_from_idle_to_write && USE_WAIT_REQUEST && USE_WRITE &&
             AV_MAX_WAITREQUESTED_WRITE > 0) begin
         c_continuous_waitrequest_from_idle_to_write = new();
      end
   end

   always @(posedge clk && !reset) begin
      if (!waitrequest && clken) begin
         if (enable_c_continuous_waitrequest_from_idle_to_write && USE_WAIT_REQUEST && USE_WRITE &&
             AV_MAX_WAITREQUESTED_WRITE > 0) begin
            c_continuous_waitrequest_from_idle_to_write.sample();
            #1;
         end
         waitrequest_before_waitrequested_write = 0;
      end
   end
   
   //-------------------------------------------------------------------------------
   // =head3 c_continuous_waitrequest_from_idle_to_read
   // This cover group covers waitrequest is asserted before waitrequested read.
   //-------------------------------------------------------------------------------

   covergroup cg_continuous_waitrequest_from_idle_to_read;
      cp_continuous_waitrequest_from_idle_to_read: coverpoint waitrequest_before_waitrequested_read
      {
         bins cg_continuous_waitrequest_from_idle_to_read_cp_continuous_waitrequest_from_idle_to_read = {1};
      }
      option.per_instance = 1;
   endgroup

   cg_continuous_waitrequest_from_idle_to_read c_continuous_waitrequest_from_idle_to_read;

   initial begin
      #1 if (enable_c_continuous_waitrequest_from_idle_to_read && USE_WAIT_REQUEST && USE_READ &&
             AV_MAX_WAITREQUESTED_READ > 0) begin
         c_continuous_waitrequest_from_idle_to_read = new();
      end
   end

   always @(posedge clk && !reset) begin
      if (!waitrequest && clken) begin
         if (enable_c_continuous_waitrequest_from_idle_to_read && USE_WAIT_REQUEST && USE_READ &&
             AV_MAX_WAITREQUESTED_READ > 0) begin
            c_continuous_waitrequest_from_idle_to_read.sample();
            #1;
         end
         waitrequest_before_waitrequested_read = 0;
      end
   end
   
   //-------------------------------------------------------------------------------
   // =head3 c_waitrequest_without_command
   // This cover group covers no command has been asserted for the period 
   // waitrequest is asserted and then deasserted.
   //-------------------------------------------------------------------------------

   covergroup cg_waitrequest_without_command;
      cp_waitrequest_without_command: coverpoint waitrequest_without_command
      {
         bins cg_waitrequest_without_command_cp_waitrequest_without_command = {1};
      }
      option.per_instance = 1;
   endgroup

   cg_waitrequest_without_command c_waitrequest_without_command;

   initial begin
      #1 if (enable_c_waitrequest_without_command && USE_WAIT_REQUEST) begin
         c_waitrequest_without_command = new();
      end
   end

   always @(posedge clk && !reset) begin
      if (enable_c_waitrequest_without_command && USE_WAIT_REQUEST && clken) begin
         c_waitrequest_without_command.sample();
         waitrequest_without_command = 0;
         #1;
      end
   end
   
   //-------------------------------------------------------------------------------
   // =head3 c_continuous_readdatavalid
   // This cover group covers the different cycle numbers of continuous 
   // readdatavalid asserted from 2 until AV_MAX_CONTINUOUS_READDATAVALID. For the 
   // continuous readdatavalid cycles more than AV_MAX_CONTINUOUS_READDATAVALID will
   // go to another bin.
   //-------------------------------------------------------------------------------

   covergroup cg_continuous_readdatavalid;
      cp_continuous_readdatavalid: coverpoint continuous_readdatavalid
      {
         bins cg_continuous_readdatavalid_cp_continuous_readdatavalid [] = 
            {[2:(AV_MAX_CONTINUOUS_READDATAVALID < 2) ? 2:AV_MAX_CONTINUOUS_READDATAVALID]};
         bins cg_continuous_readdatavalid_cp_continuous_readdatavalid_high = 
            {[AV_MAX_CONTINUOUS_READDATAVALID+1:$]};
      }
      option.per_instance = 1;
   endgroup

   cg_continuous_readdatavalid c_continuous_readdatavalid;

   initial begin
      #1 if (enable_c_continuous_readdatavalid && USE_READ_DATA_VALID) begin
         c_continuous_readdatavalid = new();
      end
   end

   always @(posedge clk && !reset) begin
      if (enable_c_continuous_readdatavalid && USE_READ_DATA_VALID && clken) begin
         if (continuous_readdatavalid_sampled == 1) begin
            c_continuous_readdatavalid.sample();
            continuous_readdatavalid = 0;
            #1;
         end
      end
   end
   
   //-------------------------------------------------------------------------------
   // =head3 c_continuous_waitrequest
   // This cover group covers the different cycle numbers of continuous waitrequest
   // asserted from 2 until AV_MAX_CONTINUOUS_WAITREQUEST. For the continuous 
   // waitrequest cycles more than AV_MAX_CONTINUOUS_WAITREQUEST will go to another 
   // bin.
   //-------------------------------------------------------------------------------

   covergroup cg_continuous_waitrequest;
      cp_continuous_waitrequest: coverpoint continuous_waitrequest
      {
         bins cg_continuous_waitrequest_cp_continuous_waitrequest [] = 
            {[2:(AV_MAX_CONTINUOUS_WAITREQUEST < 2) ? 2:AV_MAX_CONTINUOUS_WAITREQUEST]};
         bins cg_continuous_waitrequest_cp_continuous_waitrequest_high = 
            {[AV_MAX_CONTINUOUS_WAITREQUEST+1:$]};
      }
      option.per_instance = 1;
   endgroup

   cg_continuous_waitrequest c_continuous_waitrequest;

   initial begin
      #1 if (enable_c_continuous_waitrequest && USE_WAIT_REQUEST) begin
         c_continuous_waitrequest = new();
      end
   end

   always @(posedge clk && !reset) begin
      if (enable_c_continuous_waitrequest && USE_WAIT_REQUEST && clken) begin
         if (continuous_waitrequest_sampled == 1) begin
            c_continuous_waitrequest.sample();
            continuous_waitrequest = 0;
            #1;
         end
      end
   end
   
   //-------------------------------------------------------------------------------
   // =head3 c_waitrequest_in_write_burst
   // This cover group covers the different number of cycles for idle cycle during 
   // write burst transaction with different number of cycles for waitrequest.
   //-------------------------------------------------------------------------------

   covergroup cg_waitrequest_in_write_burst;
      cp_waitrequest_in_write_burst: coverpoint idle_in_write_burst_with_waitrequest
      {
         bins cg_waitrequest_in_write_burst_cp_waitrequest_in_write_burst = {1};
      }
      option.per_instance = 1;
   endgroup

   cg_waitrequest_in_write_burst c_waitrequest_in_write_burst;

   initial begin
      #1 if (enable_c_waitrequest_in_write_burst && USE_WAIT_REQUEST && USE_WRITE && USE_BURSTCOUNT && (AV_BURSTCOUNT_W > 1)) begin
         c_waitrequest_in_write_burst = new();
      end
   end

   always @(posedge clk && !reset) begin
      if (enable_c_waitrequest_in_write_burst && USE_WAIT_REQUEST && USE_BURSTCOUNT && USE_WRITE && (AV_BURSTCOUNT_W > 1)) begin
         if (idle_in_write_burst_with_waitrequest_sampled == 1 && clken) begin
            c_waitrequest_in_write_burst.sample();
            idle_in_write_burst_with_waitrequest = 0;
            idle_in_write_burst_with_waitrequest_sampled = 0;
            #1;
         end
      end
   end
   
   //-------------------------------------------------------------------------------
   // =head3 c_readresponse 
   // This cover group covers each bits of the valid readresponse which represent 
   // different status.
   //-------------------------------------------------------------------------------

   // covergroup cg_readresponse;
      // cp_readresponse: coverpoint readresponse_bit_num
      // {
         // bins cg_readresponse_cp_readresponse [] = {[0:(AV_READRESPONSE_W-1)]};
      // }
      // option.per_instance = 1;
   // endgroup

   // cg_readresponse c_readresponse;
   
   // initial begin
      // #1 if (enable_c_readresponse && USE_READRESPONSE && USE_READ) begin
           // c_readresponse = new();
      // end
   // end
   
   // always @(posedge clk && !reset) begin
      // if (enable_c_readresponse && USE_READRESPONSE && USE_READ && clken) begin
         // if ((USE_READ_DATA_VALID && readdatavalid) || (!USE_READ_DATA_VALID)) begin
            // for (int i=0; i<AV_READRESPONSE_W; i++) begin
               // if (readresponse[i] == 1)
                  // readresponse_bit_num = i;
               // else
                  // readresponse_bit_num = AV_READRESPONSE_W;
               // c_readresponse.sample();
            // end
         // end
         // #1;
      // end
   // end
   
   //-------------------------------------------------------------------------------
   // =head3 c_writeresponse 
   // This cover group covers each bits of the valid writeresponse which represent 
   // different status.
   //-------------------------------------------------------------------------------

   // covergroup cg_writeresponse;
      // cp_writeresponse : coverpoint writeresponse_bit_num
      // {
         // bins cg_writeresponse_cp_writeresponse [] = {[0:(AV_WRITERESPONSE_W-1)]};
      // }
      // option.per_instance = 1;
   // endgroup

   // cg_writeresponse c_writeresponse;

   // initial begin
      // #1 if (enable_c_writeresponse && USE_WRITERESPONSE && USE_WRITE) begin
         // c_writeresponse = new();
      // end
   // end
   
   // always @(posedge clk && !reset) begin
      // if (enable_c_writeresponse && USE_WRITERESPONSE && USE_WRITE  && clken) begin
         // if (writeresponsevalid) begin
            // for (int i=0; i<AV_WRITERESPONSE_W; i++) begin
               // if (writeresponse[i] == 1)
                  // writeresponse_bit_num = i;
               // else
                  // writeresponse_bit_num = AV_WRITERESPONSE_W;
               // c_writeresponse.sample();
            // end
         // end
         // #1;
      // end
   // end
   
   //-------------------------------------------------------------------------------
   // =head3 c_write_response 
   // This cover group covers the value of write response
   //-------------------------------------------------------------------------------

   covergroup cg_write_response;
      cp_write_response : coverpoint write_response
      {
         bins cg_write_response_cp_write_response [] = {AV_OKAY, AV_DECODE_ERROR, AV_SLAVE_ERROR};
      }
   endgroup

   cg_write_response c_write_response;

   initial begin
      #1 if (enable_c_write_response && USE_WRITERESPONSE && USE_WRITE) begin
         c_write_response = new();
      end
   end
   
   always @(posedge clk && !reset) begin
      if (enable_c_write_response && USE_WRITERESPONSE && USE_WRITE  && clken) begin
         if (writeresponsevalid) begin
            if (!$cast(write_response, response))
               begin
                  $sformat(message, "%m: Response value is not valid when write response is valid");
                  print(VERBOSITY_FAILURE, message);
               end
            c_write_response.sample();
         end
         #1;
      end
   end
   
   //-------------------------------------------------------------------------------
   // =head3 c_read_response 
   // This cover group covers the value of read response
   //-------------------------------------------------------------------------------
   
   covergroup cg_read_response;
      cp_read_response : coverpoint read_response
      {
         bins cg_read_response_cp_read_response [] = {AV_OKAY, AV_DECODE_ERROR, AV_SLAVE_ERROR};
      }
   endgroup

   cg_read_response c_read_response;

   initial begin
      #1 if (enable_c_read_response && USE_READRESPONSE && USE_READ) begin
         c_read_response = new();
      end
   end
   
   always @(posedge clk && !reset) begin
      if (enable_c_read_response && USE_READRESPONSE && USE_READ && clken) begin
         if ((USE_READ_DATA_VALID && readdatavalid) || 
               (!USE_READ_DATA_VALID && fix_latency_queued_counter == AV_FIX_READ_LATENCY && fix_latency_queued_counter != 0)) begin
            
            if (!$cast(read_response, response))
               begin
                  $sformat(message, "%m: Response value is not valid when read response is valid");
                  print(VERBOSITY_FAILURE, message);
               end
            c_read_response.sample();
         end
         #1;
      end
   end
   
   //-------------------------------------------------------------------------------
   // =head3 c_write_response_transition
   // This cover group covers the value of write response
   //-------------------------------------------------------------------------------

   covergroup cg_write_response_transition;
      cp_write_response_transition : coverpoint write_response_transition
      {
         bins cg_write_response_transition_cp_write_response_transition_OKAY_TO_OKAY                  = {4'b0000};
         bins cg_write_response_transition_cp_write_response_transition_OKAY_TO_SLAVE_ERROR           = {4'b0010};
         bins cg_write_response_transition_cp_write_response_transition_OKAY_TO_DECODE_ERROR          = {4'b0011};
         bins cg_write_response_transition_cp_write_response_transition_SLAVE_ERROR_TO_OKAY           = {4'b1000};
         bins cg_write_response_transition_cp_write_response_transition_SLAVE_ERROR_TO_SLAVE_ERROR    = {4'b1010};
         bins cg_write_response_transition_cp_write_response_transition_SLAVE_ERROR_TO_DECODE_ERROR   = {4'b1011};
         bins cg_write_response_transition_cp_write_response_transition_DECODE_ERROR_TO_OKAY          = {4'b1100};
         bins cg_write_response_transition_cp_write_response_transition_DECODE_ERROR_TO_SLAVE_ERROR   = {4'b1110};
         bins cg_write_response_transition_cp_write_response_transition_DECODE_ERROR_TO_DECODE_ERROR  = {4'b1111};
      }
   endgroup

   cg_write_response_transition c_write_response_transition;

   initial begin
      #1 if (enable_c_write_response_transition && USE_WRITERESPONSE && USE_WRITE) begin
         c_write_response_transition = new();
      end
   end
   
   always @(posedge clk && !reset) begin
      if (enable_c_write_response_transition && USE_WRITERESPONSE && USE_WRITE  && clken) begin
         if (writeresponsevalid) begin            
            c_write_response_transition.sample();
         end
         #1;
      end
   end
   
   //-------------------------------------------------------------------------------
   // =head3 c_read_response_transition
   // This cover group covers the value of read response
   //-------------------------------------------------------------------------------

   covergroup cg_read_response_transition;
      cp_read_response_transition : coverpoint read_response_transition
      {
         bins cg_read_response_transition_cp_read_response_transition_OKAY_TO_OKAY                  = {4'b0000};
         bins cg_read_response_transition_cp_read_response_transition_OKAY_TO_SLAVE_ERROR           = {4'b0010};
         bins cg_read_response_transition_cp_read_response_transition_OKAY_TO_DECODE_ERROR          = {4'b0011};
         bins cg_read_response_transition_cp_read_response_transition_SLAVE_ERROR_TO_OKAY           = {4'b1000};
         bins cg_read_response_transition_cp_read_response_transition_SLAVE_ERROR_TO_SLAVE_ERROR    = {4'b1010};
         bins cg_read_response_transition_cp_read_response_transition_SLAVE_ERROR_TO_DECODE_ERROR   = {4'b1011};
         bins cg_read_response_transition_cp_read_response_transition_DECODE_ERROR_TO_OKAY          = {4'b1100};
         bins cg_read_response_transition_cp_read_response_transition_DECODE_ERROR_TO_SLAVE_ERROR   = {4'b1110};
         bins cg_read_response_transition_cp_read_response_transition_DECODE_ERROR_TO_DECODE_ERROR  = {4'b1111};
      }
   endgroup

   cg_read_response_transition c_read_response_transition;

   initial begin
      #1 if (enable_c_read_response_transition && USE_READRESPONSE && USE_READ) begin
         c_read_response_transition = new();
      end
   end
   
   always @(posedge clk && !reset) begin
      if (enable_c_read_response_transition && USE_READRESPONSE && USE_READ  && clken) begin
         if ((USE_READ_DATA_VALID && readdatavalid) || 
               (!USE_READ_DATA_VALID && fix_latency_queued_counter == AV_FIX_READ_LATENCY && fix_latency_queued_counter != 0)) begin
            c_read_response_transition.sample();
         end
         #1;
      end
   end
      
   //--------------------------------------------------------------------------
   // COVERAGE CODE END
   //--------------------------------------------------------------------------   
   `endif

   // synthesis translate_on

endmodule 

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

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