|HOME |ABOUT |ARTICLES |ACK |FEEDBACK |TOC |LINKS |BLOG |JOBS |


Tutorials



PHASE 8 COVERAGE




In this phase we will write the functional coverage for switch protocol. Functional coverage is written in Coverage.sv file. After running simulation, you will analyze the coverage results and find out if some test scenarios have not been exercised and write tests to exercise them.

The points which we need to cover are
1) Cover all the port address configurations.
2) Cover all the packet lengths.
3) Cover all correct and incorrect length fields.
4) Cover good and bad FCS.
5) Cover all the above combinations.

1) Define a cover group with following cover points.

a) All packet lengths:


length : coverpoint pkt.length;


b) All port address:


da : coverpoint pkt.da {
bins p0 = { `P0 };
bins p1 = { `P1 };
bins p2 = { `P2 };
bins p3 = { `P3 }; }


c) Correct and incorrect Length field types:


length_kind : coverpoint pkt.length_kind;


d) Good and Bad FCS:


fcs_kind : coverpoint pkt.fcs_kind;


5) Cross product of all the above cover points:


all_cross: cross length,da,length_kind,fcs_kind;


2) In constructor method, construct the cover group


function new();
switch_coverage = new();
endfunction : new


3) Write task which calls the sample method to cover the points.


task sample(packet pkt);
this.pkt = pkt;
switch_coverage.sample();
endtask:sample


Source Code Of Coverage Class:


`ifndef GUARD_COVERAGE
`define GUARD_COVERAGE

class coverage;
packet pkt;

covergroup switch_coverage;

length : coverpoint pkt.length;
da : coverpoint pkt.da {
bins p0 = { `P0 };
bins p1 = { `P1 };
bins p2 = { `P2 };
bins p3 = { `P3 }; }
length_kind : coverpoint pkt.length_kind;
fcs_kind : coverpoint pkt.fcs_kind;

all_cross: cross length,da,length_kind,fcs_kind;
endgroup

function new();
switch_coverage = new();
endfunction : new

task sample(packet pkt);
this.pkt = pkt;
switch_coverage.sample();
endtask:sample

endclass

`endif



Now we will use this coverage class instance in scoreboard.

1) Take an instance of coverage class and construct it in scoreboard class.


coverage cov = new();


2) Call the sample method and pass the exp_pkt to the sample method.


cov.sample(pkt_exp);

Source Code Of The Scoreboard Class:


`ifndef GUARD_SCOREBOARD
`define GUARD_SCOREBOARD

class Scoreboard;

mailbox drvr2sb;
mailbox rcvr2sb;

coverage cov = new();

function new(mailbox drvr2sb,mailbox rcvr2sb);
this.drvr2sb = drvr2sb;
this.rcvr2sb = rcvr2sb;
endfunction:new


task start();
packet pkt_rcv,pkt_exp;
forever
begin
rcvr2sb.get(pkt_rcv);
$display(" %0d : Scorebooard : Scoreboard received a packet from receiver ",$time);
drvr2sb.get(pkt_exp);
if(pkt_rcv.compare(pkt_exp))
begin
$display(" %0d : Scoreboardd :Packet Matched ",$time);

cov.sample(pkt_exp);

end
else
$root.error++;
end
endtask : start

endclass

`endif


(S)Download the phase 8 score code:


switch_8.tar
Browse the code in switch_8.tar


(S)Run the simulation:
vcs -sverilog -f filelist -R -ntb_opts dtm
urg -dir simv.cm

Index
Introduction
Specification
Verification Plan
Phase 1 Top
Phase 2 Environment
Phase 3 Reset
Phase 4 Packet
Phase 5 Driver
Phase 6 Receiver
Phase 7 Scoreboard
Phase 8 Coverage
Phase 9 Testcase

Report a Bug or Comment on This section - Your input is what keeps Testbench.in improving with time!





<< PREVIOUS PAGE

TOP

NEXT PAGE >>

copyright © 2007-2017 :: all rights reserved www.testbench.in::Disclaimer