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 / 1psmodule altera_avalon_mm_monitor_coverage(clk,reset,tap);// =head1 PARAMETERSparameter AV_ADDRESS_W = 32; // address widthparameter AV_SYMBOL_W = 8; // default symbol is byteparameter AV_NUMSYMBOLS = 4; // number of symbols per wordparameter AV_BURSTCOUNT_W = 3; // burst port widthparameter AV_BURST_LINEWRAP = 0; // line wrapping addr is set to 1parameter AV_BURST_BNDR_ONLY = 0; // addr is multiple of burst sizeparameter REGISTER_WAITREQUEST = 0; // Waitrequest is registered at the slaveparameter AV_MAX_PENDING_READS = 1; // maximum pending read transfer countparameter AV_MAX_PENDING_WRITES = 0; // maximum pending write transfer countparameter AV_FIX_READ_LATENCY = 0; // fixed read latency in cyclesparameter USE_READ = 1; // use read portparameter USE_WRITE = 1; // use write portparameter USE_ADDRESS = 1; // use address portparameter USE_BYTE_ENABLE = 1; // use byteenable portparameter USE_BURSTCOUNT = 0; // use burstcount portparameter USE_READ_DATA = 1; // use readdata portparameter USE_READ_DATA_VALID = 1; // use readdatavalid portparameter USE_WRITE_DATA = 1; // use writedata portparameter USE_BEGIN_TRANSFER = 0; // use begintransfer portparameter USE_BEGIN_BURST_TRANSFER = 0; // use begintbursttransfer portparameter USE_WAIT_REQUEST = 1; // use waitrequest portparameter USE_ARBITERLOCK = 0; // Use arbiterlock pin on interfaceparameter USE_LOCK = 0; // Use lock pin on interfaceparameter USE_DEBUGACCESS = 0; // Use debugaccess pin on interfaceparameter USE_TRANSACTIONID = 0; // Use transactionid interface pinparameter USE_WRITERESPONSE = 0; // Use write response interface pinsparameter USE_READRESPONSE = 0; // Use read response interface pinsparameter USE_CLKEN = 0; // Use clken interface pinsparameter AV_MAX_READ_LATENCY = 100; // maximum read latency cycle for coverageparameter AV_MAX_WAITREQUESTED_READ = 100; // maximum waitrequested read cycle for coverageparameter AV_MAX_WAITREQUESTED_WRITE = 100; // maximum waitrequested write cycle for coverageparameter AV_MAX_CONTINUOUS_READ = 5; // maximum continuous read cycle for coverageparameter AV_MAX_CONTINUOUS_WRITE = 5; // maximum continuous write cycle for coverageparameter AV_MAX_CONTINUOUS_WAITREQUEST = 5; // maximum continuous waitrequest cycle for coverageparameter AV_MAX_CONTINUOUS_READDATAVALID = 5; // maximum continuous readdatavalid cycle for coverageparameter AV_READ_WAIT_TIME = 0; // Fixed wait time cycles whenparameter AV_WRITE_WAIT_TIME = 0; // USE_WAIT_REQUEST is 0localparam 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 + // clken1 + // arbiterlock1 + // lock1 + // 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) + // writeid2 + // response1 + // writeresponserequest1 + // writeresponsevalid1 + // waitrequest1 + // readdatavalid((AV_DATA_W == 0)? 1:AV_DATA_W) + // readdata1 + // write1 + // 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) + // burstcount1 + // beginbursttransfer1 + // begintransfer((AV_DATA_W == 0)? 1:AV_DATA_W); // writedata// =head1 PINS// =head2 Clock Interfaceinput clk;input reset;// =head2 Avalon Monitor Interface// Interface consists of Avalon Memory-Mapped Interface.// =cut// =podinput [TAP_W-1:0] tap;// =cutfunction 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 -1input [31:0] width;lindex = (width > 0) ? (width-1) : 0;endfunctionfunction automatic int __floor1(bit [31:0] arg);__floor1 = (arg <1) ? 1 : arg;endfunction//--------------------------------------------------------------------------// synthesis translate_offimport 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 addressAvalonBurstCount_t burst_count; // burst lengthAvalonData_t data; // write dataAvalonByteEnable_t byte_enable; // hot encodedint burst_cycle;logic write_response_request;} SlaveCommand_t;typedef struct packed {Request_t request;AvalonAddress_t address; // start addrAvalonBurstCount_t burst_count; // burst lengthAvalonData_t data; // read dataAvalonLatency_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 signalslogic 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 beginclken <= (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 APIfunction automatic void set_enable_c_read_byteenable( // publicbit cover_enable);// enable or disable c_read_byteenable cover groupenable_c_read_byteenable = cover_enable;coverage_settings_check(covergroup_settings_changed_flag, "c_read_byteenable");endfunctionfunction automatic void set_enable_c_write_byteenable( // publicbit cover_enable);// enable or disable c_write_byteenable cover groupenable_c_write_byteenable = cover_enable;coverage_settings_check(covergroup_settings_changed_flag, "c_write_byteenable");endfunctionfunction automatic void set_enable_c_read_burstcount( // publicbit cover_enable);// enable or disable c_read_burstcount cover groupenable_c_read_burstcount = cover_enable;coverage_settings_check(covergroup_settings_changed_flag, "c_read_burstcount");endfunctionfunction automatic void set_enable_c_write_burstcount( // publicbit cover_enable);// enable or disable c_write_burstcount cover groupenable_c_write_burstcount = cover_enable;coverage_settings_check(covergroup_settings_changed_flag, "c_write_burstcount");endfunctionfunction automatic void set_enable_c_pending_read( // publicbit cover_enable);// enable or disable c_pending_read cover groupenable_c_pending_read = cover_enable;coverage_settings_check(covergroup_settings_changed_flag, "c_pending_read");endfunctionfunction automatic void set_enable_c_read( // publicbit cover_enable);// enable or disable c_read cover groupenable_c_read = cover_enable;coverage_settings_check(covergroup_settings_changed_flag, "c_read");endfunctionfunction automatic void set_enable_c_write( // publicbit cover_enable);// enable or disable c_write cover groupenable_c_write = cover_enable;coverage_settings_check(covergroup_settings_changed_flag, "c_write");endfunctionfunction automatic void set_enable_c_b2b_read_read( // publicbit cover_enable);// enable or disable c_b2b_read_read cover groupenable_c_b2b_read_read = cover_enable;coverage_settings_check(covergroup_settings_changed_flag, "c_b2b_read_read");endfunctionfunction automatic void set_enable_c_b2b_read_write( // publicbit cover_enable);// enable or disable c_b2b_read_write cover groupenable_c_b2b_read_write = cover_enable;coverage_settings_check(covergroup_settings_changed_flag, "c_b2b_read_write");endfunctionfunction automatic void set_enable_c_b2b_write_write( // publicbit cover_enable);// enable or disable c_b2b_write_write cover groupenable_c_b2b_write_write = cover_enable;coverage_settings_check(covergroup_settings_changed_flag, "c_b2b_write_write");endfunctionfunction automatic void set_enable_c_b2b_write_read( // publicbit cover_enable);// enable or disable c_b2b_write_read cover groupenable_c_b2b_write_read = cover_enable;coverage_settings_check(covergroup_settings_changed_flag, "c_b2b_write_read");endfunctionfunction automatic void set_enable_c_idle_in_write_burst( // publicbit cover_enable);// enable or disable c_idle_in_write_burst cover groupenable_c_idle_in_write_burst = cover_enable;coverage_settings_check(covergroup_settings_changed_flag, "c_idle_in_write_burst");endfunction// Slave Coverages APIfunction automatic void set_enable_c_idle_in_read_response( // publicbit cover_enable);// enable or disable c_idle_in_read_response cover groupenable_c_idle_in_read_response = cover_enable;coverage_settings_check(covergroup_settings_changed_flag, "c_idle_in_read_response");endfunctionfunction automatic void set_enable_c_read_latency( // publicbit cover_enable);// enable or disable c_read_latency cover groupenable_c_read_latency = cover_enable;coverage_settings_check(covergroup_settings_changed_flag, "c_read_latency");endfunctionfunction automatic void set_enable_c_waitrequested_read( // publicbit cover_enable);// enable or disable c_waitrequested_read cover groupenable_c_waitrequested_read = cover_enable;coverage_settings_check(covergroup_settings_changed_flag, "c_waitrequested_read");endfunctionfunction automatic void set_enable_c_waitrequested_write( // publicbit cover_enable);// enable or disable c_waitrequested_write cover groupenable_c_waitrequested_write = cover_enable;coverage_settings_check(covergroup_settings_changed_flag, "c_waitrequested_write");endfunctionfunction automatic void set_enable_c_continuous_waitrequest_from_idle_to_write( // publicbit cover_enable);// enable or disable c_continuous_waitrequest_from_idle_to_write cover groupenable_c_continuous_waitrequest_from_idle_to_write = cover_enable;coverage_settings_check(covergroup_settings_changed_flag, "c_continuous_waitrequest_from_idle_to_write");endfunctionfunction automatic void set_enable_c_continuous_waitrequest_from_idle_to_read( // publicbit cover_enable);// enable or disable c_continuous_waitrequest_from_idle_to_read cover groupenable_c_continuous_waitrequest_from_idle_to_read = cover_enable;coverage_settings_check(covergroup_settings_changed_flag, "c_continuous_waitrequest_from_idle_to_read");endfunctionfunction automatic void set_enable_c_waitrequest_without_command( // publicbit cover_enable);// enable or disable c_waitrequest_without_command cover groupenable_c_waitrequest_without_command = cover_enable;coverage_settings_check(covergroup_settings_changed_flag, "c_waitrequest_without_command");endfunctionfunction automatic void set_enable_c_idle_before_transaction( // publicbit cover_enable);// enable or disable c_idle_before_transaction cover groupenable_c_idle_before_transaction = cover_enable;coverage_settings_check(covergroup_settings_changed_flag, "c_idle_before_transaction");endfunctionfunction automatic void set_enable_c_continuous_read( // publicbit cover_enable);// enable or disable c_continuous_read cover groupenable_c_continuous_read = cover_enable;coverage_settings_check(covergroup_settings_changed_flag, "c_continuous_read");endfunctionfunction automatic void set_enable_c_continuous_write( // publicbit cover_enable);// enable or disable c_continuous_write cover groupenable_c_continuous_write = cover_enable;coverage_settings_check(covergroup_settings_changed_flag, "c_continuous_write");endfunctionfunction automatic void set_enable_c_continuous_readdatavalid( // publicbit cover_enable);// enable or disable c_continuous_readdatavalid cover groupenable_c_continuous_readdatavalid = cover_enable;coverage_settings_check(covergroup_settings_changed_flag, "c_continuous_readdatavalid");endfunctionfunction automatic void set_enable_c_continuous_waitrequest( // publicbit cover_enable);// enable or disable c_continuous_waitrequest cover groupenable_c_continuous_waitrequest = cover_enable;coverage_settings_check(covergroup_settings_changed_flag, "c_continuous_waitrequest");endfunctionfunction automatic void set_enable_c_waitrequest_in_write_burst( // publicbit cover_enable);// enable or disable c_waitrequest_in_write_burst cover groupenable_c_waitrequest_in_write_burst = cover_enable;coverage_settings_check(covergroup_settings_changed_flag, "c_waitrequest_in_write_burst");endfunctionfunction automatic void set_enable_c_readresponse( // publicbit 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);endfunctionfunction automatic void set_enable_c_writeresponse( // publicbit 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);endfunctionfunction automatic void set_enable_c_write_with_and_without_writeresponserequest( // publicbit cover_enable);// This API is no longer supported.endfunctionfunction automatic void set_enable_c_write_after_reset( // publicbit cover_enable);// enable or disable c_write_after_reset cover groupenable_c_write_after_reset = cover_enable;coverage_settings_check(covergroup_settings_changed_flag, "c_write_after_reset");endfunctionfunction automatic void set_enable_c_read_after_reset( // publicbit cover_enable);// enable or disable c_read_after_reset cover groupenable_c_read_after_reset = cover_enable;coverage_settings_check(covergroup_settings_changed_flag, "c_read_after_reset");endfunctionfunction 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);endendfunctionfunction automatic void set_enable_c_write_response( // publicbit cover_enable);// enable or disable c_write_response cover groupenable_c_write_response = cover_enable;coverage_settings_check(covergroup_settings_changed_flag, "c_write_response");endfunctionfunction automatic void set_enable_c_read_response( // publicbit cover_enable);// enable or disable c_read_response cover groupenable_c_read_response = cover_enable;coverage_settings_check(covergroup_settings_changed_flag, "c_read_response");endfunctionfunction automatic void set_enable_c_write_response_transition( // publicbit cover_enable);// enable or disable c_write_response_transition cover groupenable_c_write_response_transition = cover_enable;coverage_settings_check(covergroup_settings_changed_flag, "c_write_response_transition");endfunctionfunction automatic void set_enable_c_read_response_transition( // publicbit cover_enable);// enable or disable c_read_response_transition cover groupenable_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 valuealways @(posedge clk)beginif (!reset) beginpast_waitrequest = waitrequest;endend// Counter for general coverage countersalways @(posedge clk) beginif (!USE_CLKEN || clken) beginif (idle_in_write_burst_start_flag) beginif (waitrequest) beginidle_in_write_burst_with_waitrequest = 1;endend// ignore the waitrequest effect while resetif ((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) beginreset_flag[1] = 1;reset_flag[0] = 1;end// Counter for read latency and readdatavalid_idif (!readdatavalid) beginread_latency_counter = 0;endif (read && !waitrequest && !readdatavalid) beginif (((!$fell(waitrequest) && !waitrequested_command_while_clken) || $rose(read)) ||read_command_while_clken || reset_flag[1] == 0) beginread_latency_start_flag[read_id] = 1;temp_read_latency_counter[read_id] = 0;end else beginif (read_id != 0) beginread_latency_start_flag[read_id-1] = 1;temp_read_latency_counter[read_id-1] = 0;end else beginread_latency_start_flag[MAX_ID] = 1;temp_read_latency_counter[MAX_ID] = 0;endendendif (!read && readdatavalid) beginread_latency_counter =temp_read_latency_counter[readdatavalid_id];if (read_burst_counter[readdatavalid_id] == 1 ||read_burst_counter[readdatavalid_id] == 0) begintemp_read_latency_counter[readdatavalid_id] = 0;read_latency_start_flag[readdatavalid_id] = 0;// increase the id, restart the id from zero to reduce memory usageif (readdatavalid_id < (MAX_ID))readdatavalid_id++;elsereaddatavalid_id = 0;endendif (read && readdatavalid) beginread_latency_counter =temp_read_latency_counter[readdatavalid_id];if (!waitrequest) beginif (((!$fell(waitrequest) && !waitrequested_command_while_clken) || $rose(read)) ||read_command_while_clken || reset_flag[1] == 0) beginread_latency_start_flag[read_id] = 1;temp_read_latency_counter[read_id] = 0;end else beginif (read_id != 0) beginread_latency_start_flag[read_id-1] = 1;temp_read_latency_counter[read_id-1] = 0;end else beginread_latency_start_flag[MAX_ID] = 1;temp_read_latency_counter[MAX_ID] = 0;endendendif (read_burst_counter[readdatavalid_id] == 1 ||read_burst_counter[readdatavalid_id] == 0) begintemp_read_latency_counter[readdatavalid_id] = 0;read_latency_start_flag[readdatavalid_id] = 0;if (readdatavalid_id < (MAX_ID))readdatavalid_id++;elsereaddatavalid_id = 0;endend// new burst write transaction startedif (((write && (!waitrequest || $rose(waitrequest)) &&((!$fell(waitrequest) && !waitrequested_command_while_clken) ||reset_flag[1] == 0)) || write_command_while_clken || ($rose(write))) &&write_burst_counter == 0) beginif (burstcount > 0)write_burst_counter = burstcount;idle_write_flag = 1;idle_in_write_burst_start_flag = 1;idle_before_burst_transaction_sampled = 1;endif (write && (write_burst_counter == 1)) beginidle_in_write_burst_start_flag = 0;idle_in_write_burst_with_waitrequest_sampled = 1;end// decrease the write_burst_counter while write assertedif (write && !waitrequest && write_burst_counter > 0) beginwrite_burst_counter--;end// new read transaction assertedif (((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))) beginread_transaction_flag = 1;idle_before_burst_transaction_sampled = 1;if (continuous_read >= 2)continuous_read++;if (continuous_read_start_flag) beginif (continuous_read == 0)continuous_read = 2;endcontinuous_read_start_flag = 1;continuous_read_sampled = 0;end else beginread_transaction_flag = 0;if (read) begincontinuous_read_start_flag = 1;continuous_read_sampled = 0;end else begincontinuous_read_start_flag = 0;continuous_read_sampled = 1;endend// new read transaction without previous read response(readdatavalid) returned at same cycleif (((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) beginif (burstcount > 0) beginread_burst_counter[read_id] = burstcount;temp_read_burst_counter = burstcount;endif (!waitrequest)read_without_waitrequest_flag = 1;elseread_without_waitrequest_flag = 0;idle_write_flag = 0;idle_read_flag[read_id] = 1;pending_read_counter++;if (read_id < (MAX_ID))read_id++;elseread_id = 0;end// previous read response(readdatavalid) returned while no new read transaction assertedif ((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) beginif ((readdatavalid_id == 0) && (read_burst_counter[MAX_ID] == 0)) beginif (read_burst_counter[readdatavalid_id] > 0) beginif (read_burst_counter[readdatavalid_id] == 1) beginpending_read_counter--;endread_burst_counter[readdatavalid_id]--;endend else if (read_id >= ((readdatavalid_id == 0)?MAX_ID-1:readdatavalid_id-1)) beginfor (int i=0; i<=MAX_ID; i++) beginif (read_burst_counter[i] > 0) beginif (read_burst_counter[i] == 1) beginpending_read_counter--;endread_burst_counter[i]--;i=MAX_ID+1;endendend else beginfor (int i=((readdatavalid_id == 0)?MAX_ID-1:readdatavalid_id-1); i<=MAX_ID; i++) beginif (read_burst_counter[i] > 0) beginif (read_burst_counter[i] == 1) beginpending_read_counter--;endread_burst_counter[i]--;i=MAX_ID+1;endendendend// new read transaction with previous read response(readdatavalid) returned at same cycleif (((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) beginif ((readdatavalid_id == 0) && (read_burst_counter[MAX_ID] == 0)) beginif (read_burst_counter[readdatavalid_id] > 0) beginif (read_burst_counter[readdatavalid_id] == 1) beginpending_read_counter--;endread_burst_counter[readdatavalid_id]--;endend else if (read_id >= ((readdatavalid_id == 0)?MAX_ID-1:readdatavalid_id-1)) beginfor (int i=0; i<=MAX_ID; i++) beginif (read_burst_counter[i] > 0) beginif (read_burst_counter[i] == 1) beginpending_read_counter--;endread_burst_counter[i]--;i=MAX_ID+1;endendend else beginfor (int i=((readdatavalid_id == 0)?MAX_ID-1:readdatavalid_id-1); i<=MAX_ID; i++) beginif (read_burst_counter[i] > 0) beginif (read_burst_counter[i] == 1) beginpending_read_counter--;endread_burst_counter[i]--;i=MAX_ID+1;endendendif (burstcount > 0) beginread_burst_counter[read_id] = burstcount;temp_read_burst_counter = burstcount;endif (!waitrequest)read_without_waitrequest_flag = 1;elseread_without_waitrequest_flag = 0;idle_write_flag = 0;idle_read_flag[read_id] = 1;pending_read_counter++;if (read_id < (MAX_ID))read_id++;elseread_id = 0;end// counter for read latencyif (pending_read_counter > 0) beginif (!USE_READ_DATA_VALID) beginfix_read_latency_counter++;if (fix_read_latency_counter >AV_FIX_READ_LATENCY)fix_read_latency_counter = 0;end else beginfor (int i=0; i<=MAX_ID; i++) beginif (i != read_id) beginif (read_latency_start_flag[i]) begintemp_read_latency_counter[i]++;endendendendend// counter for idle_in_write_burstif (idle_in_write_burst_flag) beginidle_write_flag = 0;idle_in_write_burst_flag = 0;endif (!write && idle_write_flag &&write_burst_counter < burstcount &&write_burst_counter != 0)idle_in_write_burst_flag = 1;// counter for idle_in_read_responseif (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) begintemp_idle_in_read_response[readdatavalid_id]++;idle_in_read_response =temp_idle_in_read_response[readdatavalid_id];end// counter for waitrequested commandif (read && waitrequest)temp_waitrequested_read_counter++;if (!read || !waitrequest) beginwaitrequested_read_counter =temp_waitrequested_read_counter;temp_waitrequested_read_counter = 0;endif (write && waitrequest) begintemp_waitrequested_write_counter++;endif (!write || !waitrequest) beginwaitrequested_write_counter =temp_waitrequested_write_counter;temp_waitrequested_write_counter = 0;end// fix latency counterif (read && !waitrequest) beginfix_latency_queued.push_front(0);endif (fix_latency_queued.size() > 0) beginforeach(fix_latency_queued[size]) beginfix_latency_queued[size]++;if (fix_latency_queued[size] > AV_FIX_READ_LATENCY) beginvoid'(fix_latency_queued.pop_back());endendfix_latency_queued_counter <= fix_latency_queued[$];endwaitrequested_command_while_clken = 0;write_command_while_clken = 0;read_command_while_clken = 0;end else beginif (($rose(waitrequest) && read) || ($rose(read))) beginread_command_while_clken = 1;endif (($rose(waitrequest) && write) || $rose(write)) beginwrite_command_while_clken = 1;endif ($fell(waitrequest) && (read || write)) beginwaitrequested_command_while_clken = 1;endendend// counter for waitrequest before command assertedalways @(posedge clk) beginif (!reset) beginif (!USE_CLKEN || clken) beginif (waitrequest && !write && !read) beginwaitrequest_before_command = 1;waitrequested_before_transaction = 1;end else beginif (read || write) beginwaitrequested_before_transaction = 0;endendif (waitrequest && (read || write)) beginif (write_burst_counter == 0)burst_waitrequested_command = 1;endif (waitrequest_before_command) beginif (write && waitrequest) beginwaitrequest_before_waitrequested_write = 1;end else if (read && waitrequest) beginwaitrequest_before_waitrequested_read = 1;endif(!waitrequest) beginif (!waitrequest_before_waitrequested_write && !waitrequest_before_waitrequested_read) beginwaitrequest_without_command = 1;end else beginwaitrequest_without_command = 0;endwaitrequest_before_command = 0;endend else beginwaitrequest_before_waitrequested_write = 0;waitrequest_before_waitrequested_read = 0;endif (!waitrequest) beginwaitrequest_before_command = 0;endif (!read && ! write && !waitrequest) beginif (write_burst_counter == 0) beginidle_before_burst_transaction = 1;idle_before_burst_transaction_sampled = 0;endendif (waitrequested_before_transaction) beginif (idle_before_burst_transaction) beginidle_before_burst_transaction_with_waitrequest = 1;idle_before_burst_transaction_with_waitrequest_sampled = 0;endend else beginif ((burst_waitrequested_command) && (idle_before_burst_transaction)) beginidle_before_burst_transaction_with_waitrequest = 1;endif (write_burst_counter == 0) beginidle_before_burst_transaction_with_waitrequest_sampled = 1;end else beginidle_before_burst_transaction_with_waitrequest_sampled = 0;endendendendend// Counter for continuous write, readdatavalidalways@(posedge clk) beginif (!reset) beginif (!USE_CLKEN || clken) beginif ((write && (!waitrequest))) beginif (continuous_write >= 2)continuous_write++;if (continuous_write_start_flag) beginif (continuous_write == 0)continuous_write = 2;end else begincontinuous_write_start_flag = 1;endcontinuous_write_start_flag = 1;continuous_write_sampled = 0;end else beginif (write) begincontinuous_write_sampled = 0;end else begincontinuous_write_sampled = 1;continuous_write_start_flag = 0;endendif (readdatavalid) beginif (continuous_readdatavalid >= 2)continuous_readdatavalid++;if(continuous_readdatavalid_start_flag == 1) beginif (continuous_readdatavalid == 0)continuous_readdatavalid = 2;endcontinuous_readdatavalid_sampled = 0;continuous_readdatavalid_start_flag = 1;end else begincontinuous_readdatavalid_start_flag = 0;continuous_readdatavalid_sampled = 1;endif (waitrequest) beginif (continuous_waitrequest >= 1)continuous_waitrequest++;if(continuous_waitrequest_start_flag == 1) beginif (continuous_waitrequest == 0) begincontinuous_waitrequest = 2;endendcontinuous_waitrequest_sampled = 0;continuous_waitrequest_start_flag = 1;end else begincontinuous_waitrequest_start_flag = 0;continuous_waitrequest_sampled = 1;endendendend// Counter for generating legal byteenableinitial beginlegal_byteenable[(AV_NUMSYMBOLS*2)-1] = 0;check_byteenable = byteenable_1_bit;for (int i=0; i<AV_NUMSYMBOLS; i++) beginlegal_byteenable[i] = check_byteenable;check_byteenable = check_byteenable << 1;byteenable_counter = i;endif (AV_NUMSYMBOLS > 1) begincheck_byteenable = byteenable_2_bit;for (int i=0; i<AV_NUMSYMBOLS; i=i+2) beginbyteenable_counter++;legal_byteenable[byteenable_counter] = check_byteenable;check_byteenable = check_byteenable << 2;endendif (AV_NUMSYMBOLS > 2) begincheck_byteenable = byteenable_4_bit;for (int i=0; i<AV_NUMSYMBOLS; i=i+4) beginbyteenable_counter++;legal_byteenable[byteenable_counter] = check_byteenable;check_byteenable = check_byteenable << 4;endendif (AV_NUMSYMBOLS > 4) begincheck_byteenable = byteenable_8_bit;for (int i=0; i<AV_NUMSYMBOLS; i=i+8) beginbyteenable_counter++;legal_byteenable[byteenable_counter] = check_byteenable;check_byteenable = check_byteenable << 8;endendif (AV_NUMSYMBOLS > 8) begincheck_byteenable = byteenable_16_bit;for (int i=0; i<AV_NUMSYMBOLS; i=i+16) beginbyteenable_counter++;legal_byteenable[byteenable_counter] = check_byteenable;check_byteenable = check_byteenable << 16;endendif (AV_NUMSYMBOLS > 16) begincheck_byteenable = byteenable_32_bit;for (int i=0; i<AV_NUMSYMBOLS; i=i+32) beginbyteenable_counter++;legal_byteenable[byteenable_counter] = check_byteenable;check_byteenable = check_byteenable << 32;endendif (AV_NUMSYMBOLS > 32) begincheck_byteenable = byteenable_64_bit;for (int i=0; i<AV_NUMSYMBOLS; i=i+64) beginbyteenable_counter++;legal_byteenable[byteenable_counter] = check_byteenable;check_byteenable = check_byteenable << 64;endendif (AV_NUMSYMBOLS > 64) beginbyteenable_counter++;legal_byteenable[byteenable_counter] = byteenable_128_bit;endend// Counter for back to back transfersalways @(posedge clk) beginif (!USE_CLKEN || clken) beginif ((!read && !write) || waitrequest) beginb2b_transfer[3] = 1;b2b_transfer[2] = 0;end else beginif (read && !waitrequest) beginif (!b2b_transfer[3] && !b2b_transfer[2])b2b_transfer[1] = b2b_transfer[0];if (b2b_transfer[3]) beginb2b_transfer[3] = 0;b2b_transfer[2] = 1;b2b_transfer[1] = 0;end else beginb2b_transfer[0] = 0;if (b2b_transfer[2])b2b_transfer[2] = 0;endendif (write && !waitrequest) beginif (!b2b_transfer[3] && !b2b_transfer[2])b2b_transfer[1] = b2b_transfer[0];if (b2b_transfer[3]) beginb2b_transfer[3] = 0;b2b_transfer[2] = 1;b2b_transfer[1] = 1;end else beginb2b_transfer[0] = 1;if (b2b_transfer[2])b2b_transfer[2] = 0;endendendendend// Counter for write response transitionalways @(posedge clk) beginif (!USE_CLKEN || clken) beginif (writeresponsevalid) beginwrite_response_transition[3:2] = write_response_transition[1:0];write_response_transition[1:0] = write_response;endendend// Counter for read response transitionalways @(posedge clk) beginif (!USE_CLKEN || clken) beginif ((USE_READ_DATA_VALID && readdatavalid) ||(!USE_READ_DATA_VALID && fix_latency_queued_counter == AV_FIX_READ_LATENCY && fix_latency_queued_counter != 0)) beginread_response_transition[3:2] = read_response_transition[1:0];read_response_transition[1:0] = read_response;endendend// Counter for resetalways @(posedge clk) beginif (reset) beginfix_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;endend// Flag for initial coverage settingsinitial 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;endgroupcg_read_byteenable c_read_byteenable;initial begin#1 if (enable_c_read_byteenable && USE_BYTE_ENABLE && USE_READ) beginif (AV_NUMSYMBOLS >= 32)c_read_byteenable = new(1073741825);elsec_read_byteenable = new((2**AV_NUMSYMBOLS)-1);endendalways @(posedge clk && !reset) beginif (enable_c_read_byteenable && USE_BYTE_ENABLE && USE_READ) beginif (read && !waitrequest && clken) beginc_read_byteenable.sample();endendend// -------------------------------------------------------------------------------// =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;endgroupcg_write_byteenable c_write_byteenable;initial begin#1 if (enable_c_write_byteenable && USE_BYTE_ENABLE && USE_WRITE) beginif (AV_NUMSYMBOLS >= 32)c_write_byteenable = new(1073741825);elsec_write_byteenable = new((2**AV_NUMSYMBOLS)-1);endendalways @(posedge clk && !reset) beginif (enable_c_write_byteenable && USE_BYTE_ENABLE && USE_WRITE) beginif (write && !waitrequest && clken) beginc_write_byteenable.sample();endendend//-------------------------------------------------------------------------------// =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;endgroupcg_read_burstcount c_read_burstcount;initial begin#1 if (enable_c_read_burstcount && USE_BURSTCOUNT && USE_READ) beginc_read_burstcount = new();endendalways @(posedge clk && !reset) beginif (enable_c_read_burstcount && USE_BURSTCOUNT && USE_READ) beginif (read && !waitrequest && clken) beginc_read_burstcount.sample();#1;endendend//-------------------------------------------------------------------------------// =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;endgroupcg_write_burstcount c_write_burstcount;initial begin#1 if (enable_c_write_burstcount && USE_BURSTCOUNT && USE_WRITE) beginc_write_burstcount = new();endendalways @(posedge clk && !reset) beginif (enable_c_write_burstcount && USE_BURSTCOUNT && USE_WRITE) beginif (write && write_burst_counter == 0 && clken) beginc_write_burstcount.sample();#1;endendend//-------------------------------------------------------------------------------// =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;endgroupcg_pending_read c_pending_read;initial begin#1 if (enable_c_pending_read && USE_READ && USE_READ_DATA_VALID && AV_MAX_PENDING_READS > 0) beginc_pending_read = new();endendalways @(posedge clk && !reset) beginif (enable_c_pending_read && USE_READ && USE_READ_DATA_VALID && AV_MAX_PENDING_READS > 0) beginif (read_transaction_flag && clken) beginc_pending_read.sample();#1;endendend//-------------------------------------------------------------------------------// =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";endgroupcg_read c_read;initial begin#1 if (enable_c_read && USE_READ) beginc_read = new();endendalways @(posedge clk && !reset) beginif (enable_c_read && USE_READ && clken) beginif (read && !waitrequest) beginc_read.sample();#1;endendend//-------------------------------------------------------------------------------// =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;endgroupcg_write c_write;initial begin#1 if (enable_c_write && USE_WRITE) beginc_write = new();endendalways @(posedge clk && !reset) beginif (enable_c_write && USE_WRITE && clken) beginif (write && write_burst_counter == 0) beginc_write.sample();#1;endendend//-------------------------------------------------------------------------------// =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;endgroupcg_b2b_read_read c_b2b_read_read;initial begin#1 if (enable_c_b2b_read_read && USE_READ) beginc_b2b_read_read = new();endendalways @(posedge clk && !reset) beginif (enable_c_b2b_read_read && USE_READ && clken) beginc_b2b_read_read.sample();#1;endend//-------------------------------------------------------------------------------// =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;endgroupcg_b2b_read_write c_b2b_read_write;initial begin#1 if (enable_c_b2b_read_write && USE_READ && USE_WRITE) beginc_b2b_read_write = new();endendalways @(posedge clk && !reset) beginif (enable_c_b2b_read_write && USE_READ && USE_WRITE && clken) beginc_b2b_read_write.sample();#1;endend//-------------------------------------------------------------------------------// =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;endgroupcg_b2b_write_write c_b2b_write_write;initial begin#1 if (enable_c_b2b_write_write && USE_WRITE) beginc_b2b_write_write = new();endendalways @(posedge clk && !reset) beginif (enable_c_b2b_write_write && USE_WRITE && clken) beginc_b2b_write_write.sample();#1;endend//-------------------------------------------------------------------------------// =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;endgroupcg_b2b_write_read c_b2b_write_read;initial begin#1 if (enable_c_b2b_write_read && USE_READ && USE_WRITE) beginc_b2b_write_read = new();endendalways @(posedge clk && !reset) beginif (enable_c_b2b_write_read && USE_READ && USE_WRITE && clken) beginc_b2b_write_read.sample();#1;endend//-------------------------------------------------------------------------------// =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;endgroupcg_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) beginc_idle_in_write_burst = new();endendalways @(posedge clk && !reset) beginif (enable_c_idle_in_write_burst && USE_BURSTCOUNT && USE_WRITE &&AV_MAX_BURST > 1 && clken) beginc_idle_in_write_burst.sample();#1;endend//-------------------------------------------------------------------------------// =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;endgroupcg_idle_before_transaction c_idle_before_transaction;initial begin#1 if (enable_c_idle_before_transaction) beginc_idle_before_transaction = new();endendalways @(posedge clk && !reset) beginif (idle_before_burst_transaction_sampled == 1 && clken) beginif (enable_c_idle_before_transaction) beginc_idle_before_transaction.sample();#1;endidle_before_burst_transaction = 0;endend//-------------------------------------------------------------------------------// =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;endgroupcg_continuous_read c_continuous_read;initial begin#1 if (enable_c_continuous_read && USE_READ) beginc_continuous_read = new();endendalways @(posedge clk && !reset) beginif (enable_c_continuous_read && USE_READ && clken) beginif (continuous_read_sampled == 1) beginc_continuous_read.sample();continuous_read = 0;#1;endendend//-------------------------------------------------------------------------------// =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;endgroupcg_continuous_write c_continuous_write;initial begin#1 if (enable_c_continuous_write && USE_WRITE) beginc_continuous_write = new();endendalways @(posedge clk && !reset) beginif (enable_c_continuous_write && USE_WRITE && clken) beginif (continuous_write_sampled == 1) beginc_continuous_write.sample();continuous_write = 0;#1;endendend//-------------------------------------------------------------------------------// =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;endgroupcg_write_after_reset c_write_after_reset;initial begin#1 if (enable_c_write_after_reset && USE_WRITE) beginc_write_after_reset = new();endendalways @(posedge clk) beginif (enable_c_write_after_reset && USE_WRITE && !reset && clken) beginif (write) beginc_write_after_reset.sample();#1;endif (write_reset_transaction == 0) beginwrite_after_reset = 0;endwrite_reset_transaction = 0;endend//-------------------------------------------------------------------------------// =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;endgroupcg_read_after_reset c_read_after_reset;initial begin#1 if (enable_c_read_after_reset && USE_READ) beginc_read_after_reset = new();endendalways @(posedge clk) beginif (enable_c_read_after_reset && USE_READ && !reset && clken) beginif (read) beginc_read_after_reset.sample();#1;endif (read_reset_transaction == 0) beginread_after_reset = 0;endread_reset_transaction = 0;endend//-------------------------------------------------------------------------------// =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;endgroupcg_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) beginc_idle_in_read_response = new();endendalways @(posedge clk && !reset) beginif (enable_c_idle_in_read_response && USE_BURSTCOUNT && USE_READ &&USE_READ_DATA_VALID && clken) beginc_idle_in_read_response.sample();#1;endend//-------------------------------------------------------------------------------// =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;endgroupcg_read_latency c_read_latency;initial begin#1 if (enable_c_read_latency && USE_READ && USE_READ_DATA_VALID &&AV_MAX_READ_LATENCY > 0) beginc_read_latency = new();endendalways @(posedge clk && !reset) beginif (enable_c_read_latency && USE_READ && USE_READ_DATA_VALID &&AV_MAX_READ_LATENCY > 0 && clken) beginc_read_latency.sample();#1;endend//-------------------------------------------------------------------------------// =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;endgroupcg_waitrequested_read c_waitrequested_read;initial begin#1 if (enable_c_waitrequested_read && USE_WAIT_REQUEST && USE_READ &&AV_MAX_WAITREQUESTED_READ > 0) beginc_waitrequested_read = new();endendalways @(posedge clk && !reset) beginif (enable_c_waitrequested_read && USE_WAIT_REQUEST && USE_READ &&AV_MAX_WAITREQUESTED_READ > 0 && clken) beginif (temp_waitrequested_read_counter == 0) beginc_waitrequested_read.sample();#1;endendend//-------------------------------------------------------------------------------// =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;endgroupcg_waitrequested_write c_waitrequested_write;initial begin#1 if (enable_c_waitrequested_write && USE_WAIT_REQUEST && USE_WRITE &&AV_MAX_WAITREQUESTED_WRITE > 0) beginc_waitrequested_write = new();endendalways @(posedge clk && !reset) beginif (enable_c_waitrequested_write && USE_WAIT_REQUEST && USE_WRITE &&AV_MAX_WAITREQUESTED_WRITE > 0 && clken) beginif (temp_waitrequested_write_counter == 0) beginc_waitrequested_write.sample();#1;endendend//-------------------------------------------------------------------------------// =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;endgroupcg_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) beginc_continuous_waitrequest_from_idle_to_write = new();endendalways @(posedge clk && !reset) beginif (!waitrequest && clken) beginif (enable_c_continuous_waitrequest_from_idle_to_write && USE_WAIT_REQUEST && USE_WRITE &&AV_MAX_WAITREQUESTED_WRITE > 0) beginc_continuous_waitrequest_from_idle_to_write.sample();#1;endwaitrequest_before_waitrequested_write = 0;endend//-------------------------------------------------------------------------------// =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;endgroupcg_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) beginc_continuous_waitrequest_from_idle_to_read = new();endendalways @(posedge clk && !reset) beginif (!waitrequest && clken) beginif (enable_c_continuous_waitrequest_from_idle_to_read && USE_WAIT_REQUEST && USE_READ &&AV_MAX_WAITREQUESTED_READ > 0) beginc_continuous_waitrequest_from_idle_to_read.sample();#1;endwaitrequest_before_waitrequested_read = 0;endend//-------------------------------------------------------------------------------// =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;endgroupcg_waitrequest_without_command c_waitrequest_without_command;initial begin#1 if (enable_c_waitrequest_without_command && USE_WAIT_REQUEST) beginc_waitrequest_without_command = new();endendalways @(posedge clk && !reset) beginif (enable_c_waitrequest_without_command && USE_WAIT_REQUEST && clken) beginc_waitrequest_without_command.sample();waitrequest_without_command = 0;#1;endend//-------------------------------------------------------------------------------// =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;endgroupcg_continuous_readdatavalid c_continuous_readdatavalid;initial begin#1 if (enable_c_continuous_readdatavalid && USE_READ_DATA_VALID) beginc_continuous_readdatavalid = new();endendalways @(posedge clk && !reset) beginif (enable_c_continuous_readdatavalid && USE_READ_DATA_VALID && clken) beginif (continuous_readdatavalid_sampled == 1) beginc_continuous_readdatavalid.sample();continuous_readdatavalid = 0;#1;endendend//-------------------------------------------------------------------------------// =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;endgroupcg_continuous_waitrequest c_continuous_waitrequest;initial begin#1 if (enable_c_continuous_waitrequest && USE_WAIT_REQUEST) beginc_continuous_waitrequest = new();endendalways @(posedge clk && !reset) beginif (enable_c_continuous_waitrequest && USE_WAIT_REQUEST && clken) beginif (continuous_waitrequest_sampled == 1) beginc_continuous_waitrequest.sample();continuous_waitrequest = 0;#1;endendend//-------------------------------------------------------------------------------// =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;endgroupcg_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)) beginc_waitrequest_in_write_burst = new();endendalways @(posedge clk && !reset) beginif (enable_c_waitrequest_in_write_burst && USE_WAIT_REQUEST && USE_BURSTCOUNT && USE_WRITE && (AV_BURSTCOUNT_W > 1)) beginif (idle_in_write_burst_with_waitrequest_sampled == 1 && clken) beginc_waitrequest_in_write_burst.sample();idle_in_write_burst_with_waitrequest = 0;idle_in_write_burst_with_waitrequest_sampled = 0;#1;endendend//-------------------------------------------------------------------------------// =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};}endgroupcg_write_response c_write_response;initial begin#1 if (enable_c_write_response && USE_WRITERESPONSE && USE_WRITE) beginc_write_response = new();endendalways @(posedge clk && !reset) beginif (enable_c_write_response && USE_WRITERESPONSE && USE_WRITE && clken) beginif (writeresponsevalid) beginif (!$cast(write_response, response))begin$sformat(message, "%m: Response value is not valid when write response is valid");print(VERBOSITY_FAILURE, message);endc_write_response.sample();end#1;endend//-------------------------------------------------------------------------------// =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};}endgroupcg_read_response c_read_response;initial begin#1 if (enable_c_read_response && USE_READRESPONSE && USE_READ) beginc_read_response = new();endendalways @(posedge clk && !reset) beginif (enable_c_read_response && USE_READRESPONSE && USE_READ && clken) beginif ((USE_READ_DATA_VALID && readdatavalid) ||(!USE_READ_DATA_VALID && fix_latency_queued_counter == AV_FIX_READ_LATENCY && fix_latency_queued_counter != 0)) beginif (!$cast(read_response, response))begin$sformat(message, "%m: Response value is not valid when read response is valid");print(VERBOSITY_FAILURE, message);endc_read_response.sample();end#1;endend//-------------------------------------------------------------------------------// =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};}endgroupcg_write_response_transition c_write_response_transition;initial begin#1 if (enable_c_write_response_transition && USE_WRITERESPONSE && USE_WRITE) beginc_write_response_transition = new();endendalways @(posedge clk && !reset) beginif (enable_c_write_response_transition && USE_WRITERESPONSE && USE_WRITE && clken) beginif (writeresponsevalid) beginc_write_response_transition.sample();end#1;endend//-------------------------------------------------------------------------------// =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};}endgroupcg_read_response_transition c_read_response_transition;initial begin#1 if (enable_c_read_response_transition && USE_READRESPONSE && USE_READ) beginc_read_response_transition = new();endendalways @(posedge clk && !reset) beginif (enable_c_read_response_transition && USE_READRESPONSE && USE_READ && clken) beginif ((USE_READ_DATA_VALID && readdatavalid) ||(!USE_READ_DATA_VALID && fix_latency_queued_counter == AV_FIX_READ_LATENCY && fix_latency_queued_counter != 0)) beginc_read_response_transition.sample();end#1;endend//--------------------------------------------------------------------------// COVERAGE CODE END//--------------------------------------------------------------------------`endif// synthesis translate_onendmodule
