⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wb_chk_coverage.sv

📁 VMM 文档加源码, synopsys公司很好的验证资料
💻 SV
字号:
// // -------------------------------------------------------------//    Copyright 2004-2008 Synopsys, Inc.//    All Rights Reserved Worldwide// //    Licensed under the Apache License, Version 2.0 (the//    "License"); you may not use this file except in//    compliance with the License.  You may obtain a copy of//    the License at// //        http://www.apache.org/licenses/LICENSE-2.0// //    Unless required by applicable law or agreed to in//    writing, software distributed under the License is//    distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR//    CONDITIONS OF ANY KIND, either express or implied.  See//    the License for the specific language governing//    permissions and limitations under the License.// -------------------------------------------------------------// interface wb_chk_coverage_if( not_resetting,             wb_clk, wb_ack, wb_cyc, wb_err,              wb_lock, wb_rty, wb_stb, wb_we);      input wire not_resetting;     input wire wb_clk;      input wire wb_ack;      input wire wb_cyc;      input wire wb_err;      input wire wb_lock;      input wire wb_rty;      input wire wb_stb;      input wb_we;      parameter int max_burst_blocks = 1024; // 1k      parameter int slave_latency = 16; //16 clk cycles     parameter int master_latency = 16; //16 clk cycles     parameter int coverage_level_1 = -1;     parameter int coverage_level_2 = 0;     parameter int coverage_level_3 = 0;     wire valid_cycle = wb_cyc && wb_stb;     wire valid_response = wb_ack && wb_stb;     generate        if( ( coverage_level_1&1) != 0) begin : cov_level_1_0          cover_single_reads : cover property(            @ ( posedge wb_clk)                ( ( not_resetting && wb_cyc && !wb_we ) throughout(                   $rose ( wb_cyc) ##1 (valid_response)[=1])) ##1 !wb_cyc);        end           if( ( coverage_level_1&2) != 0) begin : cov_level_1_1          cover_single_writes : cover property(            @ ( posedge wb_clk)                ( ( not_resetting && wb_cyc && wb_we ) throughout(                   $rose ( wb_cyc) ##1 ( valid_response)[=1])) ##1 !wb_cyc);        end              if( ( coverage_level_1&4) != 0) begin : cov_level_1_2          cover_block_reads : cover property(            @ ( posedge wb_clk)                ( ( not_resetting && wb_cyc && !wb_we ) throughout(                   $rose ( wb_cyc) ##1 valid_response[=2:$])) ##1 !wb_cyc);        end           if( ( coverage_level_1&8) != 0) begin : cov_level_1_3          cover_block_writes : cover property(            @ ( posedge wb_clk)                ( ( not_resetting && wb_cyc && wb_we ) throughout(                   $rose ( wb_cyc) ##1 valid_response[=2:$])) ##1 !wb_cyc);        end           if( ( coverage_level_1&16) != 0) begin : cov_level_1_4          cover_rmw_cycles : cover property(            @ ( posedge wb_clk)                ( ( not_resetting && wb_cyc) throughout(                   $rose ( wb_cyc) ##0 ( ( valid_response && !wb_we) [->1]) ##1                      ( ( valid_response)&&wb_we[=1]))) ##1 !wb_cyc);        end           if( ( coverage_level_1&32) != 0) begin : cov_level_1_5          cover_abnormal_terminations : cover property(            @ ( posedge wb_clk)                ( not_resetting && valid_cycle && wb_err));        end           if( ( coverage_level_1&64) != 0) begin : cov_level_1_6          cover_normal_terminations : cover property(            @ ( posedge wb_clk)                ( not_resetting && valid_cycle && wb_ack));        end        if( ( coverage_level_1&128) != 0) begin : cov_level_1_7          cover_nb_of_retry : cover property(            @ ( posedge wb_clk)                ( not_resetting && valid_cycle && wb_rty));        end         /*  if( coverage_level_2 > 0) begin : cov_level_2              clocking wb_cg_clk @ ( posedge wb_clk)              input not_resetting            endclocking              covergroup wb_range_cov ( bit not_resetting , event clk,                           int min_value, int max_value, int data,                           string msg) @( clk);              coverpoint data iff( not_resetting) {                 bins good[] : {[min_value : max_value]};                 bins bad[]  : default;              }               option.per_instance = 1;              option.comment      = msg;           endgroup              function int f_get_block_size( int block_size);              f_get_block_size = block_size;           endfunction                         sequence detect_block_size( sig);             int cnt;             @ ( posedge wb_clk)                not_resetting throughout(                  ( ( wb_cyc && sig ) throughout(                    $rose ( wb_cyc), cnt = 0 ##1 ( valid_cycle[->1], cnt=cnt+1)[*1:$]))                      ##1 (!wb_cyc)[->], f_get_block_size( cnt));           endsequence              sequence detect_slave_resp_delay( sig);             int cnt;             @ ( posedge wb_clk)                ( not_resetting  && wb_cyc) throughout(                   ( $rose ( wb_stb) || ( wb_ack && wb_stb)), cnt = 1 ##1                      (  ( wb_stb) throughout( ( (!sig),cnt=cnt+1)*[0:$] ##1                                         sig, f_get_block_size( cnt))));                                endsequence            sequence detect_master_resp_delay;             int cnt;             @ ( posedge wb_clk)                ( not_resetting  && wb_cyc) throughout(                  $rose ( wb_cyc), cnt = 1 ##1                     ( (!wb_stb),cnt=cnt+1)*[0:$] ##1                         wb_stb, f_get_block_size( cnt));                                endsequence               if( ( coverage_level_2&1) != 0) begin : 0              wb_range_cov cover_blocks_transferred_during_read = new(                               wb_cg_clk.not_resetting,                               detect_block_size( !wb_we).ended,                               1,                               max_burst_blocks,                               f_get_block_size,                               "No of blocks transferred during read");           end              if( ( coverage_level_2&2) != 0) begin : 1              wb_range_cov cover_blocks_transferred_during_read = new(                               wb_cg_clk.not_resetting,                               detect_block_size( wb_we).ended,                               1,                               max_burst_blocks,                               f_get_block_size,                               "No of blocks transferred during write");           end              if( ( coverage_level_2&4) != 0) begin : 2              wb_range_cov cover_ack_delay = new(                               wb_cg_clk.not_resetting,                               detect_slave_resp_delay( wb_ack).ended,                               1,                               slave_latency,                               f_get_block_size,                               "Observed delay between STB and ACK");           end              if( ( coverage_level_2&8) != 0) begin : 3              wb_range_cov cover_ack_delay = new(                               wb_cg_clk.not_resetting,                               detect_slave_resp_delay( wb_err).ended,                               1,                               slave_latency,                               f_get_block_size,                               "Observed delay between STB and ERR");           end              if( ( coverage_level_2&16) != 0) begin : 4              wb_range_cov cover_rty_delay = new(                               wb_cg_clk.not_resetting,                               detect_slave_resp_delay( wb_rty).ended,                               1,                               slave_latency,                               f_get_block_size,                               "Observed delay between STB and RTY");           end           if( ( coverage_level_2&32) != 0) begin : 5              wb_range_cov cover_rty_delay = new(                               wb_cg_clk.not_resetting,                               detect_master_resp_delay.ended,                               1,                               master_latency,                               f_get_block_size,                               "Observed delay between CYC and STB");           end           if( ( coverage_level_2&64) != 0) begin : 6              int cyc_cnt;              always @ ( posedge clk) begin                  if( $fell( wb_cyc)) begin                    cyc_cnt <= 1;                 else                    cyc_cnt <= cyc_cnt+1;              end                 wb_range_cov cover_rty_delay = new(                               wb_cg_clk.not_resetting,                               $rose( wb_cyc),                               1,                               32'hffffffff,                               f_get_block_size,                               "Observed delay between negedge CYC_O and posedge CYC_O");           end        end  */           if( ( coverage_level_3&1) != 0) begin : cov_level_3_0          cover_read_block_transfer_exactly_max_blocks : cover property(            @ ( posedge wb_clk)                not_resetting throughout(                  ( wb_cyc && !wb_we ) throughout(                    $rose ( wb_cyc) ##1                     valid_cycle[=max_burst_blocks])));        end           if( ( coverage_level_3&2) != 0) begin : cov_level_3_1          cover_read_block_transfer_exactly_max_blocks : cover property(            @ ( posedge wb_clk)                ( not_resetting && wb_cyc && wb_we ) throughout(                    $rose ( wb_cyc) ##1                     valid_cycle[=max_burst_blocks]));        end           if( ( coverage_level_3&4) != 0) begin : cov_level_3_2          cover_slave_response_exactly_at_slave_resp_delay : cover property(             @ ( posedge wb_clk)                ( not_resetting  && wb_cyc) throughout(                   ( $rose ( wb_stb) || ( wb_ack && wb_stb)) ##1                     (!( wb_ack || wb_rty || wb_err))[*(slave_latency-1)] ##1                        ( wb_ack || wb_rty || wb_err)));        end        if( ( coverage_level_3&8) != 0) begin : cov_level_3_3          cover_master_response_exactly_at_master_resp_delay : cover property(             @ ( posedge wb_clk)                ( not_resetting  && wb_cyc) throughout(                   ( $rose( wb_cyc) ##0 ( !wb_stb)[*master_latency] ##1                       wb_stb)));        end     endgenerate   endinterface

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -