Académique Documents
Professionnel Documents
Culture Documents
Stimulating Creativity:
Using the VMM Scenario Generator
Jonathan Bromley
Doulos Ltd, Ringwood, UK
jonathan.bromley@doulos.com
Outline
Introduction: motivation for scenarios
The VMM Standard Library scenario generator
Motivation for hierarchical scenarios
Prototype VMM-compatible hierarchical scenarios
Further opportunities and future work
Summary
Constraints;
directed tests
Generator
Self Check
High level
transactions
Atomic
transactions
Checker
Monitor
Transactor
Driver
Properties
DUT
Checker
Monitor
Functional
Coverage
Outline
Introduction: motivation for scenarios
The VMM Standard Library scenario generator
Motivation for hierarchical scenarios
Prototype VMM-compatible hierarchical scenarios
Further opportunities and future work
Summary
Creates...
class
class XYZ_data_scenario
XYZ_data_scenario
class
class XYZ_data_atomic_scenario
XYZ_data_atomic_scenario
class
class XYZ_data_scenario_election
XYZ_data_scenario_election
class
class XYZ_data_scenario_gen
XYZ_data_scenario_gen
burst
items
[1] burst
[2] RMW
copies of items
generator's output channel
Downstream transactor
SystemVerilog queue
10
What's in a Scenario?
rand
rand data_class
data_class items[$];
items[$];
11
12
13
reference to generator's
output channel
allows generator to
count transactions
14
Outline
Introduction: motivation for scenarios
The VMM Standard Library scenario generator
Motivation for hierarchical scenarios
Prototype VMM-compatible hierarchical scenarios
Further opportunities and future work
Summary
15
16
Outline
Introduction: motivation for scenarios
The VMM Standard Library scenario generator
Motivation for hierarchical scenarios
Prototype VMM-compatible hierarchical scenarios
Further opportunities and future work
Summary
17
burst
items
[1] burst
[2] RMW
copies of items
generator's output channel
Downstream transactor
18
Hierarchical Scenario
Verification
Verification environment
environment
Scenario generator
scenario_set
burst
items
[0] atomic
select_scenario
select
[1] burst
[2] RMW
[3]
burst8RMW0
burst8-RMW0
child
RMW
items
9
10
Downstream transactor
19
Problems to solve
Hierarchical scenario must do most things that
the generator currently does...
choose a scenario
randomize it
deliver its items to the output channel
20
Structuring a solution
Hierarchical scenario must do most things that
the generator currently does...
choose a scenario
randomize it
deliver its items to the output channel
this.randomize
this.apply
parent_generator
parent_generator == pg;
pg;
endfunction
endfunction
scenario has reference to its generator
...
...
21
22
23
Custom constrainer
Provides a convenient way to do randomize() with {...}
class
class apb_burst8
apb_burst8 extends
extends apb_data_HS_constrainer;
apb_data_HS_constrainer;
virtual
virtual function
function void
void do_randomize(
do_randomize( apb_data_scenario
apb_data_scenario it
it );
);
apb_RMW_burst_scenario
apb_RMW_burst_scenario s;
s;
assert
assert (( $cast(s,
$cast(s, it)
it) )) else
else $error("Bad
$error("Bad constrainer");
constrainer");
s.randomize()
s.randomize() with
with {{
Only one function to override!
scenario_kind
scenario_kind ==
== APB_BURST;
APB_BURST;
length
length ==
== 8;
8;
virtual
virtual task
task perform
perform ((
);
);
apb_data_channel
apb_data_channel channel,
channel,
endfunction
endfunction
ref
ref int
int unsigned
unsigned n_insts,
n_insts,
endclass
endclass
apb_data_HS_constrainer
apb_data_HS_constrainer cc == null
null );
);
if
if (c
(c ==
== null)
null)
this.randomize();
this.randomize();
scenario
else
else
c.do_randomize(
c.do_randomize( this
this );
);
this.apply(
this.apply( channel,
channel, n_insts
n_insts );
);
endtask
endtask
24
Choosing a Scenario
Expose generator's choice mechanism
scenario calls this to choose a child scenario
class
class apb_data_HS_gen
apb_data_HS_gen extends
extends apb_data_scenario_gen;
apb_data_scenario_gen;
virtual
virtual function
function apb_data_scenario
apb_data_scenario choose
choose allows user control of
(( apb_data_HS_chooser
choice strategy
apb_data_HS_chooser cc == null
null );
);
if
if (c
(c ==
== null)
null)
default: same as
this.select_scenario.randomize();
this.select_scenario.randomize(); standard generator
else
else
chooser class
c.choose(this.select_scenario);
c.choose(this.select_scenario);
customizes choice
return
return this.scenario_set[this.select_scenario.select];
this.scenario_set[this.select_scenario.select];
endfunction
endfunction
return a reference to chosen
member of scenario set
...
...
endclass
endclass
25
custom constraints
26
Outline
Introduction: motivation for scenarios
The VMM Standard Library scenario generator
Motivation for hierarchical scenarios
Prototype VMM-compatible hierarchical scenarios
Further opportunities and future work
Summary
27
Future work
Better integration with existing VMM infrastructure
Notifications, callbacks, logging
Re-entrancy
define scenarios in terms of themselves with different
constraints
28
Further possibilities
Co-ordinated parallel scenarios
Each scenario can now choose to which channel
it sends its sub-scenarios (argument to perform)
A scenario can generate multiple scenarios in parallel
virtual
virtual task
task apply
apply (...);
(...);
...
...
apb_data_HS
apb_data_HS s_main
s_main == parent_generator.choose(...);
parent_generator.choose(...);
apb_data_HS
apb_data_HS s_intrpt
s_intrpt == parent_generator.choose(...);
parent_generator.choose(...);
fork
fork
s_main.perform(main_gen.out_chan,
s_main.perform(main_gen.out_chan, ...);
...);
s_intrpt.perform(irq_gen.out_chan,
s_intrpt.perform(irq_gen.out_chan, ...);
...);
join
join
endtask
endtask
29
Outline
Introduction: motivation for scenarios
The VMM Standard Library scenario generator
Motivation for hierarchical scenarios
Prototype VMM-compatible hierarchical scenarios
Further opportunities and future work
Summary
30
Summary
Standard VMM scenarios are easy to use
but customization can be laborious