Formal Verification:: Too Good To Miss
Formal Verification:: Too Good To Miss
SECTION 1:
PROMISE AND PLANNING
X Propagation
Clock Domain Crossing And so on … with apps working across the flow
SoC Connectivity
• AKA "bounded"
Undetermined • Valuable
• Validate depth by analysis?
• Can be quick
Can we simplify
by modeling?
SECTION 2: DELIVERING
SLAVE N-1
RESPONDER
s_valid[N-1]
b_valid FIFO s_data[N-1]
b_ready
s_ready[N-1]
b_id
clock
PAYLOAD A B C D
VALID
READY
transfer A B C D
endmodule
module dut_sva_TB #(parameter A = ...)
(input ... , input ...);
endmodule
Vertical reuse is trivially easy
© Accellera Systems Initiative and Verilab 26
Testbench structure
• Formal TB has only input ports
– Input ports are free to take any value at any time …
– … assumptions act as constraints, not drivers
• Inside-out structure unaltered works in simulation
– assumptions act as assertions
• FV tools allow for scripted addition of
– properties
– stopats
– modules
– …
SV-2009 keyword,
required for some tools
Failure shown in
assertions list
• Flawed assertion
“no duplicate ID in flight”
sample_written && !sample_responded
|->
(!(w_hsk && (w_id == sample_id)))
||
(b_hsk && (w_id == sample_id))
DUT errors
assert False fails
• Cross-check missed
– by assume-guarantee
Some DUT fails
– or by simulation assume behaviours because of
not exercised bad input
asm_fixed_but_arbitrary_cfg:
assume property (
disable iff (~areset_n) @(posedge clock)
$stable(cfg)
);
• Event-has-happened recording
always @(posedge clock or negedge areset_n)
if (~areset_n)
push_seen <= 0;
else if (push)
push_seen <= 1;
X Propagation
Clock Domain Crossing And so on … with apps working across the flow
SoC Connectivity
CONCLUSIONS
[email protected]
[email protected]
Any Questions?