SlideShare a Scribd company logo
Tutorial
SystemVerilog Assertions
Verification with SVAUnit
Andra Radu Ionu Ciocîrlanț
SVAUnit tutorial topics
• Introduction to SystemVerilog Assertions (SVAs)
• Planning SVA development
• Implementation
• SVA verification using SVAUnit
• SVA test patterns
2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 2
Introduction to SystemVerilog
Assertions
(SVAs)
2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 3
Assertions and properties
• What is an assertion?
• What is a property?
2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 4
assert (a |-> b)
else $error("Assertion failed!")
property p_example;
a |-> b
endproperty
Simple assertion example
2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 5
property req_to_rise_p;
@(posedge clk)
$rose(req) |-> ##[1:3] $rose(ack);
endproperty
ASSERT_LABEL: assert property (req_to_rise_p)
else `uvm_error(“ERR", "Assertion failed")
Types of SystemVerilog
Assertions
• Immediate
• Concurrent
2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 6
assert (expression) pass_statement
[else fail_statement]
Assertions are used
• In a verification component
• In a formal proof kit
• In RTL generation
“Revisiting Regular Expressions in SyntHorus2: from PSL SEREs to
Hardware” (Fatemeh (Negin) Javaheri, Katell Morin-Allory, Dominique
Borrione)
• For test patterns generation
“Towards a Toolchain for Assertion-Driven Test Sequence Generation” (Laurence
PIERRE)
2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 7
SVAs advantages
•Fast
•Non-instrusive
•Flexible
•Coverable
2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 8
Planning SVA development
2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 9
Identify design characteristics
• Defined in a document (design specification)
• Known or specified by the designer
• The most common format is of the form cause and
effect: antecedent |-> consequent
• Antecedent:
• Consequent:
2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 10
$rose(req)
##[1:3] $rose(ack)
Keep it simple. Partition!
• Complex assertions are typically constructed from
complex sequences and properties.
2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 11
a ##1 b[*1:2] |=> c ##1 d[*1:2] |=> $fell(a)
sequence seq(arg1, arg2);
arg1 ##1 arg2[*1:2];
endsequence
seq(a, b) |=> seq(c, d) |=> $fell(a)
Implementation
2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 12
Coding guidelines
• Avoid duplicating design logic in assertions
• Avoid infinite assertions
• Reset considerations
• Mind the sampling clock
2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 13
Coding guidelines (contd.)
• Always check for unknown condition (‘X’)
• Assertion naming
• Detailed assertion messages
• Assertion encapsulation
2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 14
Best practices
• Review the SVA with the designer to avoid DS
misinterpretation
• Use strong in assertions that may never complete:
• Properties should not hold under certain conditions
(reset, enable switch)
2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 15
assert property ( req |-> strong(##[1:$] ack));
assert property (
@(posedge clk) disable iff (!setup || !rst_n)
req |-> strong(##[1:$] ack)
);
Best practices (contd.)
• Avoid overlapping assertions that contradict each
other
CPU_0:
CPU_1:
2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 16
assert property (WRITE |=> ERROR);
assert property (WRITE |=> !ERROR);
assert property (WRITE and CPU==0 |=> ERROR);
assert property (WRITE and CPU==1 |=> !ERROR);
Best practices (contd.)
• Use the $sampled() function in action blocks
2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 17
Active
Inactive
NBA
Observed
Re-active
Re-inactive
Postponed
Preponed
Previous timeslot
Next timeslot
assert property ( @(posedge clk) ack == 0 )
else
`uvm_error("ERROR", $sformatf("Assertion
failed. ack is %d", $sampled(ack)));
Assertion example
• AMBA APB protocol specification:
The bus only remains in the SETUP state for one clock
cycle and always moves to the ACCESS state on the
next rising edge of the clock.
2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 18
Assertion example (contd.)
• Antecedent (the SETUP phase)
• Consequent (the ACCESS phase)
2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 19
sequence setup_phase_s;
$rose(psel) and $rose(pwrite)
and (!penable) and (!pready);
endsequence
sequence access_phase_s;
$rose(penable) and $rose(pready) and
$stable(pwrite) and $stable(pwdata)and
$stable(paddr) and $stable(psel);
endsequence
Assertion example (contd.)
• The property can be expressed as:
• The assertion will look like:
2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 20
property access_to_setup_p;
@(posedge clk) disable iff (reset)
setup_phase_s |=> access_phase_s;
endproperty
assert property (access_to_setup_p)
else `uvm_error("ERR", "Assertion failed")
Does it work as intended?
2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 21
SVA Verification with SVAUnit
2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 22
SVA Verification Challenges
2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 23
Clear separation between
validation and SVA
definition code
Easy to:
-Update
-Enhance
-Disable
Results should be:
- Deterministic
-Repeatable
Self-contained
Adaptable
Predictable
Introducing SVAUnit
• Structured framework for Unit Testing for SVAs
• Allows the user to decouple the SVA definition from its
validation code
• UVM compliant package written in SystemVerilog
• Encapsulate each SVA testing scenario inside an unit
test
• Easily controlled and supervised using a simple API
2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 24
SVAUnit Infrastructure
2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 25
SVAUnit Testbench
SVAUnit Test Suite
SVAUnit Unit Test
SVAUnit Test
test()
SVA interface handle
Interface
containing
SVA
Interface
containing
SVA
SVAUnit Test
SVAUnit Test Suite
Reports
Reports
Reports
Reports
• SVAUnit Testbench
- Enables SVAUnit
- Instantiates SVA
interface
- Starts test
• SVAUnit Test
- Contains the SVA scenario
• SVAUnit Test Suite
- Test and test suite
container
Example specification
• AMBA APB protocol specification:
The bus only remains in the SETUP state for one clock
cycle and always moves to the ACCESS state on the
next rising edge of the clock.
2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 26
Example APB interface
2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 27
interface apb_if (input pclk);
logic psel;
logic pwrite;
logic penable;
logic pready;
logic [`ADDR_WIDTH-1 :0] paddr;
logic [`WDATA_WIDTH-1:0] pwdata;
endinterface
APB sequences definitions
APB property definition
APB assertion definition
APB sequences definitions
• Antecedent (the SETUP phase)
• Consequent (the ACCESS phase)
2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 28
sequence setup_phase_s;
$rose(psel) and $rose(pwrite)
and (!penable) and (!pready);
endsequence
sequence access_phase_s;
$rose(penable) and $rose(pready) and
$stable(pwrite) and $stable(pwdata)and
$stable(paddr) and $stable(psel);
endsequence
APB property & assertion
definitions
• The property can be expressed as:
• The assertion will look like:
2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 29
property access_to_setup_p;
@(posedge clk) disable iff (reset)
setup_phase_s |=> access_phase_s;
endproperty
assert property (access_to_setup_p)
else `uvm_error("ERR", "Assertion failed")
Example of SVAUnit
Testbench
2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 30
module top;
// Instantiate the SVAUnit framework
`SVAUNIT_UTILS
...
// APB interface with the SVA we want to test
apb_if an_apb_if(.clk(clock));
initial begin
// Register interface with the uvm_config_db
uvm_config_db#(virtual an_if)::
set(uvm_root::get(), "*", “VIF", an_apb_if);
// Start the scenarios
run_test();
end
...
endmodule
Example of SVAUnit Test
2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 31
class ut1 extends svaunit_test;
// The virtual interface used to drive the signals
virtual apb_if apb_vif;
function void build_phase(input uvm_phase phase);
// Retrieve the interface handle from the uvm_config_db
if (!uvm_config_db#(virtual an_if)::get(this, "", “VIF", apb_vif))
`uvm_fatal(“UT1_NO_VIF_ERR", "SVA interface is not set!")
// Test will run by default;
disable_test();
endfunction
task test();
// Initialize signals
// Create scenarios for SVA verification
endtask
endclass
APB – SVAUnit test steps
2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 32
Enable the APB SVA
Initialize the interface signals
Generate setup phase stimuli
Generate access phase stimuli
SVA checks based on generated stimuli
Enable SVA and initialize
signals
2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 33
...
// Enable the APB SVA
vpiw.disable_all_assertions();
vpiw.enable_assertion("APB_PHASES");
// Initialize signals
task initialize_signals();
apb_vif.paddr <= 32'b0;
apb_vif.pwdata <= 32'b0;
apb_vif.pwrite <= 1'b0;
apb_vif.penable <= 1'b0;
apb_vif.psel <= 1'b0;
endtask
...
Generate setup phase stimuli
2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 34
...
task generate_setup_phase_stimuli(bit valid);
...
// Stimuli for valid SVA scenario
valid == 1 ->
pwrite == 1 && psel == 1 && penable == 0 && pready ==
0;
// Stimuli for invalid SVA scenario
valid == 0 ->
pwrite != 1 || psel != 1 || penable != 0 || pready !=
0;
...
endtask
...
Generate access phase
stimuli
2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 35
...
task generate_access_phase_stimuli(bit valid);
...
// Constrained stimuli for valid SVA scenario
valid == 1 ->
pwdata == apb_vif.pwdata && paddr == apb_vif.paddr &&
pwrite == 1 && psel == 1 && penable == 1 && pready == 1;
// Constrained stimuli for invalid SVA scenario
valid == 0 ->
pwdata != apb_vif.pwdata || paddr != apb_vif.paddr ||
pwrite != 1 || psel != 1 || penable != 1 || pready != 1;
...
endtask
...
SVA state checking
2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 36
...
if (valid_setup_phase)
if (valid_access_phase)
vpiw.fail_if_sva_not_succeeded("APB_PHASES",
"The assertion should have succeeded!");
else
vpiw.fail_if_sva_succeeded("APB_PHASES",
"The assertion should have failed!");
else
vpiw.pass_if_sva_not_started("APB_PHASES",
"The assertion should not have started!");
...
Example of SVAUnit Test
Suite
2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 37
class uts extends svaunit_test_suite;
// Instantiate the SVAUnit tests
ut1 ut1;
...
ut10 ut10;
function void build_phase(input uvm_phase phase);
// Create the tests using UVM factory
ut1 = ut1::type_id::create("ut1", this);
...
ut10 = ut10::type_id::create("ut10", this);
// Register tests in suite
`add_test(ut1);
...
`add_test(ut10);
endfunction
endclass
SVAUnit Test API
2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 38
SVAUnit Flow
2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 39
Instantiate test in Test Suite
Create an SVAUnit Test Suite
Register tests in test suite
Scan report
Simulate
Create SVAUnit Testbench
Create an SVAUnit Test
Implement test() task
Error reporting
2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 40
Name of SVAUnit
check
Custom error
message
Name of SVA under
test
SVAUnit test path
Hierarchy report
2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 41
Test scenarios exercised
2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 42
SVAs and checks exercised
2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 43
SVA test patterns
2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 44
Simple implication test
2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 45
• a and b |=> c
repeat (test_loop_count) begin
randomize(stimuli_for_a, stimuli_for_b, stimuli_for_c);
interface.a <= stimuli_for_a;
interface.b <= stimuli_for_b;
@(posedge an_vif.clk);
interface.c <= stimuli_for_c;
@(posedge interface.clk);
@(posedge interface.clk);
if (stimuli_for_a == 1 && stimuli_for_b == 1)
if (stimuli_for_c == 1)
vpiw.fail_if_sva_not_succeeded("IMPLICATION_ASSERT",
"The assertion should have succeeded!");
else
vpiw.fail_if_sva_succeeded("IMPLICATION_ASSERT",
"The assertion should have failed!");
else
vpiw.pass_if_sva_not_started("IMPLICATION_ASSERT",
"The assertion should not have started!");
end
Multi-thread
antecedent/consequent
2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 46
• $rose(a) ##[1:4] b |-> ##[1:3] c
repeat (test_loop_count) begin
// Generate valid delays for asserting b and c signals
randomize(delay_for_b inside {[1:4]}, delay_for_c inside {[1:3]});
interface.a <= 1;
repeat (delay_for_b)
@(posedge interface.clk);
interface.b <= 1;
vpiw.pass_if_sva_started_but_not_finished("MULTITHREAD_ASSERT",
"The assertion should have started but not finished!");
repeat (delay_for_c)
@(posedge interface.clk);
interface.c <= 1;
vpiw.pass_if_sva_succeeded("MULTITHREAD_ASSERT",
"The assertion should have succeeded!");
end
Multi-thread
antecedent/consequent (contd.)
2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 47
• $rose(a) ##[1:4] b |-> ##[1:3] c
repeat (test_loop_count) begin
// Generate invalid delays for asserting b and c signals
randomize(delay_for_b inside {[0:10]}, delay_for_c inside {0,[4:10]});
interface.a <= 1;
repeat (delay_for_b)
@(posedge interface.clk);
interface.b <= 1;
vpiw.pass_if_sva_not_succeeded("MULTITHREAD_ASSERT",
"The assertion should have failed!");
repeat (delay_for_c)
@(posedge interface.clk);
interface.c <= 1;
if (delay_for_b < 5)
vpiw.fail_if_sva_succeeded("MULTITHREAD_ASSERT",
"The assertion should have failed!");
end
Consecutive repetition
2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 48
• a |-> b[*1:2] ##1 c
repeat (test_loop_count) begin
randomize(stimuli_for_a, stimuli_for_c, number_of_b_cycles <= 2);
interface.a <= stimuli_for_a;
repeat (number_of_b_cycles) begin
randomize(stimuli_for_b)
interface.b <= stimuli_for_b;
if (stimuli_for_b == 1) number_of_b_assertions += 1;
@(posedge interface.clk);
end
if (stimuli_for_a == 1 && number_of_b_assertions == number_of_b_cycles &&
number_of_b_assertions > 0)
vpiw.pass_if_sva_started_but_not_finished("IMPLICATION_ASSERT",
"The assertion should have started but not finished!");
@(posedge interface.clk);
... // (continued on the next slide)
Consecutive repetition
(contd.)
2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 49
• a |-> b[*1:2] ##1 c
...
// (continued from previous slide)
interface.c <= stimuli_for_c;
@(posedge interface.clk);
if (stimuli_for_a == 1)
if (number_of_b_assertions != number_of_b_cycles ||
number_of_b_assertions == 0 ||
stimuli_for_c == 0)
vpiw.fail_if_sva_succeeded("IMPLICATION_ASSERT",
"The assertion should have failed!");
else
vpiw.fail_if_sva_not_succeeded("IMPLICATION_ASSERT",
"The assertion should have succeeded!");
end // end of test repeat loop
Repetition range with zero
2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 50
• a |-> b[*0:2] ##1 c
Repetition range with zero
(contd.)
2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 51
• a |-> b[*0:2] ##1 c
Sequence disjunction
2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 52
• a |=> (b ##1 c) or (d ##1 e)
repeat (test_loop_count) begin
randomize(stimuli_for_a, stimuli_for_b, stimuli_for_c, stimuli_for_d, stimuli_for_e);
interface.a <= stimuli_for_a;
@(posedge interface.clk);
fork
begin
end
begin
end
join
end
Stimuli for branch: (b ##1 c)
SVA state check based on branch stimuli
Stimuli for branch: (c ##1 d)
SVA state check based on branch stimuli
Sequence disjunction
(contd.)
2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 53
• a |=> (b ##1 c) or (d ##1 e)
...
// Stimuli for branch (b ##1 c)
fork
begin
interface.b <= stimuli_for_b;
@(posedge interface.clk);
interface.c <= stimuli_for_c;
@(posedge interface.clk);
@(posedge interface.clk);
// SVA state check based on branch stimuli
sva_check_phase(interface.a, interface.b, interface.c);
end
join
Sequence disjunction
(contd.)
2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 54
• a |=> (b ##1 c) or (d ##1 e)
...
// Stimuli for branch (d ##1 e)
fork
begin
interface.b <= stimuli_for_d;
@(posedge interface.clk);
interface.c <= stimuli_for_e;
@(posedge interface.clk);
@(posedge interface.clk);
// SVA state check based on branch stimuli
sva_check_phase(interface.a, interface.d, interface.e);
end
join
Sequence disjunction
(contd.)
2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 55
• a |=> (b ##1 c) or (d ##1 e)
// SVA state checking task used in each fork branch
task sva_check_phase(bit stimuli_a, bit stimuli_b, bit stimuli_c);
if (stimuli_a)
if (stimuli_b && stimuli_c)
vpiw.pass_if_sva_succeeded("DISJUNCTION_ASSERT",
"The assertion should have succeeded");
else
vpiw.fail_if_sva_succeeded("DISJUNCTION_ASSERT",
"The assertion should have failed");
endtask
Tools integration
2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 56
Simulator independent!
Availability
2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 57
• SVAUnit is an open-source package released by
AMIQ Consulting
• We provide:
- SystemVerilog and simulator integration codes
- AMBA-APB assertion package
- Code templates and examples
- HTML documentation for API
https://github.com/amiq-consulting/svaunit
Conclusions
• SVAUnit decouples the checking logic from SVA
definition code
• Safety net for eventual code refactoring
• Can also be used as self-checking documentation on
how SVAs work
• Quick learning curve
• Easy-to-use and flexible API
• Speed up verification closure
• Boost verification quality
2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 58
Q & A
?
2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 59
Thank you!
2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 60
Ad

More Related Content

What's hot (20)

Ral by pushpa
Ral by pushpa Ral by pushpa
Ral by pushpa
Pushpa Yakkala
 
Session 9 advance_verification_features
Session 9 advance_verification_featuresSession 9 advance_verification_features
Session 9 advance_verification_features
Nirav Desai
 
How to create SystemVerilog verification environment?
How to create SystemVerilog verification environment?How to create SystemVerilog verification environment?
How to create SystemVerilog verification environment?
Sameh El-Ashry
 
system verilog
system verilogsystem verilog
system verilog
Vinchipsytm Vlsitraining
 
Session 6 sv_randomization
Session 6 sv_randomizationSession 6 sv_randomization
Session 6 sv_randomization
Nirav Desai
 
Axi
AxiAxi
Axi
Azad Mishra
 
AMBA Ahb 2.0
AMBA Ahb 2.0AMBA Ahb 2.0
AMBA Ahb 2.0
Akhil Srivastava
 
Uvm presentation dac2011_final
Uvm presentation dac2011_finalUvm presentation dac2011_final
Uvm presentation dac2011_final
sean chen
 
System verilog verification building blocks
System verilog verification building blocksSystem verilog verification building blocks
System verilog verification building blocks
Nirav Desai
 
Design And Verification of AMBA APB Protocol
Design And Verification of AMBA APB ProtocolDesign And Verification of AMBA APB Protocol
Design And Verification of AMBA APB Protocol
IJERA Editor
 
UVM Methodology Tutorial
UVM Methodology TutorialUVM Methodology Tutorial
UVM Methodology Tutorial
Arrow Devices
 
axi protocol
axi protocolaxi protocol
axi protocol
Azad Mishra
 
Axi protocol
Axi protocolAxi protocol
Axi protocol
Azad Mishra
 
APB protocol v1.0
APB protocol v1.0APB protocol v1.0
APB protocol v1.0
Azad Mishra
 
PCIe
PCIePCIe
PCIe
ChiaYang Tsai
 
AMBA3.0 james_20110801
AMBA3.0 james_20110801AMBA3.0 james_20110801
AMBA3.0 james_20110801
James Chang
 
Uvm dac2011 final_color
Uvm dac2011 final_colorUvm dac2011 final_color
Uvm dac2011 final_color
Jamal EL HAITOUT
 
AMBA AHB 5
AMBA AHB 5AMBA AHB 5
AMBA AHB 5
SUNODH GARLAPATI
 
Creating Your Own PCI Express System Using FPGAs: Embedded World 2010
Creating Your Own PCI Express System Using FPGAs: Embedded World 2010Creating Your Own PCI Express System Using FPGAs: Embedded World 2010
Creating Your Own PCI Express System Using FPGAs: Embedded World 2010
Altera Corporation
 
Advance Peripheral Bus
Advance Peripheral Bus Advance Peripheral Bus
Advance Peripheral Bus
SIVA NAGENDRA REDDY
 
Session 9 advance_verification_features
Session 9 advance_verification_featuresSession 9 advance_verification_features
Session 9 advance_verification_features
Nirav Desai
 
How to create SystemVerilog verification environment?
How to create SystemVerilog verification environment?How to create SystemVerilog verification environment?
How to create SystemVerilog verification environment?
Sameh El-Ashry
 
Session 6 sv_randomization
Session 6 sv_randomizationSession 6 sv_randomization
Session 6 sv_randomization
Nirav Desai
 
Uvm presentation dac2011_final
Uvm presentation dac2011_finalUvm presentation dac2011_final
Uvm presentation dac2011_final
sean chen
 
System verilog verification building blocks
System verilog verification building blocksSystem verilog verification building blocks
System verilog verification building blocks
Nirav Desai
 
Design And Verification of AMBA APB Protocol
Design And Verification of AMBA APB ProtocolDesign And Verification of AMBA APB Protocol
Design And Verification of AMBA APB Protocol
IJERA Editor
 
UVM Methodology Tutorial
UVM Methodology TutorialUVM Methodology Tutorial
UVM Methodology Tutorial
Arrow Devices
 
APB protocol v1.0
APB protocol v1.0APB protocol v1.0
APB protocol v1.0
Azad Mishra
 
AMBA3.0 james_20110801
AMBA3.0 james_20110801AMBA3.0 james_20110801
AMBA3.0 james_20110801
James Chang
 
Creating Your Own PCI Express System Using FPGAs: Embedded World 2010
Creating Your Own PCI Express System Using FPGAs: Embedded World 2010Creating Your Own PCI Express System Using FPGAs: Embedded World 2010
Creating Your Own PCI Express System Using FPGAs: Embedded World 2010
Altera Corporation
 

Viewers also liked (20)

Upgrading to SystemVerilog for FPGA Designs - FPGA Camp Bangalore, 2010
Upgrading to SystemVerilog for FPGA Designs - FPGA Camp Bangalore, 2010Upgrading to SystemVerilog for FPGA Designs - FPGA Camp Bangalore, 2010
Upgrading to SystemVerilog for FPGA Designs - FPGA Camp Bangalore, 2010
FPGA Central
 
VLSI
VLSIVLSI
VLSI
Himanshu Gome
 
Design and Implementation of AMBA ASB APB Bridge
Design and Implementation of AMBA ASB APB BridgeDesign and Implementation of AMBA ASB APB Bridge
Design and Implementation of AMBA ASB APB Bridge
Manu BN
 
Amba bus
Amba busAmba bus
Amba bus
rohitlinux
 
Apb Work
Apb WorkApb Work
Apb Work
lorraineforsyth
 
Apb
ApbApb
Apb
Azad Mishra
 
memcached Binary Protocol in a Nutshell
memcached Binary Protocol in a Nutshellmemcached Binary Protocol in a Nutshell
memcached Binary Protocol in a Nutshell
Toru Maesaka
 
Concurrency 2010
Concurrency 2010Concurrency 2010
Concurrency 2010
敬倫 林
 
Systemc overview 2010
Systemc overview 2010Systemc overview 2010
Systemc overview 2010
敬倫 林
 
C++ process new
C++ process newC++ process new
C++ process new
敬倫 林
 
MixedSignal UVM Demo CDNLive
MixedSignal UVM Demo CDNLiveMixedSignal UVM Demo CDNLive
MixedSignal UVM Demo CDNLive
Robert O. Peruzzi, PhD, PE, DFE
 
Track c-High speed transaction-based hw-sw coverification -eve
Track c-High speed transaction-based hw-sw coverification -eveTrack c-High speed transaction-based hw-sw coverification -eve
Track c-High speed transaction-based hw-sw coverification -eve
chiportal
 
Week1 Electronic System-level ESL Design and SystemC Begin
Week1 Electronic System-level ESL Design and SystemC BeginWeek1 Electronic System-level ESL Design and SystemC Begin
Week1 Electronic System-level ESL Design and SystemC Begin
敬倫 林
 
Thread and method_2010
Thread and method_2010Thread and method_2010
Thread and method_2010
敬倫 林
 
Channel 2010
Channel 2010Channel 2010
Channel 2010
敬倫 林
 
Top five reasons why every DV engineer will love the latest systemverilog 201...
Top five reasons why every DV engineer will love the latest systemverilog 201...Top five reasons why every DV engineer will love the latest systemverilog 201...
Top five reasons why every DV engineer will love the latest systemverilog 201...
Srinivasan Venkataramanan
 
SystemC Ports
SystemC PortsSystemC Ports
SystemC Ports
敬倫 林
 
A Systematic Approach to Creating Behavioral Models (white paper) v1.0
A Systematic Approach to Creating Behavioral Models (white paper) v1.0A Systematic Approach to Creating Behavioral Models (white paper) v1.0
A Systematic Approach to Creating Behavioral Models (white paper) v1.0
Robert O. Peruzzi, PhD, PE, DFE
 
Esl basics
Esl basicsEsl basics
Esl basics
敬倫 林
 
SystemVerilog Assertions (SVA) in the Design/Verification Process
SystemVerilog Assertions (SVA) in the Design/Verification ProcessSystemVerilog Assertions (SVA) in the Design/Verification Process
SystemVerilog Assertions (SVA) in the Design/Verification Process
DVClub
 
Upgrading to SystemVerilog for FPGA Designs - FPGA Camp Bangalore, 2010
Upgrading to SystemVerilog for FPGA Designs - FPGA Camp Bangalore, 2010Upgrading to SystemVerilog for FPGA Designs - FPGA Camp Bangalore, 2010
Upgrading to SystemVerilog for FPGA Designs - FPGA Camp Bangalore, 2010
FPGA Central
 
Design and Implementation of AMBA ASB APB Bridge
Design and Implementation of AMBA ASB APB BridgeDesign and Implementation of AMBA ASB APB Bridge
Design and Implementation of AMBA ASB APB Bridge
Manu BN
 
memcached Binary Protocol in a Nutshell
memcached Binary Protocol in a Nutshellmemcached Binary Protocol in a Nutshell
memcached Binary Protocol in a Nutshell
Toru Maesaka
 
Concurrency 2010
Concurrency 2010Concurrency 2010
Concurrency 2010
敬倫 林
 
Systemc overview 2010
Systemc overview 2010Systemc overview 2010
Systemc overview 2010
敬倫 林
 
C++ process new
C++ process newC++ process new
C++ process new
敬倫 林
 
Track c-High speed transaction-based hw-sw coverification -eve
Track c-High speed transaction-based hw-sw coverification -eveTrack c-High speed transaction-based hw-sw coverification -eve
Track c-High speed transaction-based hw-sw coverification -eve
chiportal
 
Week1 Electronic System-level ESL Design and SystemC Begin
Week1 Electronic System-level ESL Design and SystemC BeginWeek1 Electronic System-level ESL Design and SystemC Begin
Week1 Electronic System-level ESL Design and SystemC Begin
敬倫 林
 
Thread and method_2010
Thread and method_2010Thread and method_2010
Thread and method_2010
敬倫 林
 
Top five reasons why every DV engineer will love the latest systemverilog 201...
Top five reasons why every DV engineer will love the latest systemverilog 201...Top five reasons why every DV engineer will love the latest systemverilog 201...
Top five reasons why every DV engineer will love the latest systemverilog 201...
Srinivasan Venkataramanan
 
A Systematic Approach to Creating Behavioral Models (white paper) v1.0
A Systematic Approach to Creating Behavioral Models (white paper) v1.0A Systematic Approach to Creating Behavioral Models (white paper) v1.0
A Systematic Approach to Creating Behavioral Models (white paper) v1.0
Robert O. Peruzzi, PhD, PE, DFE
 
SystemVerilog Assertions (SVA) in the Design/Verification Process
SystemVerilog Assertions (SVA) in the Design/Verification ProcessSystemVerilog Assertions (SVA) in the Design/Verification Process
SystemVerilog Assertions (SVA) in the Design/Verification Process
DVClub
 
Ad

Similar to SystemVerilog Assertions verification with SVAUnit - DVCon US 2016 Tutorial (20)

SVA Advanced Topics- SVAUnit and Assertions for Introduction to SystemVerilog...
SVA Advanced Topics- SVAUnit and Assertions for Introduction to SystemVerilog...SVA Advanced Topics- SVAUnit and Assertions for Introduction to SystemVerilog...
SVA Advanced Topics- SVAUnit and Assertions for Introduction to SystemVerilog...
SamHoney6
 
SiriusCon2016 - Modelling Spacecraft On-board Software with Sirius
SiriusCon2016 - Modelling Spacecraft On-board Software with SiriusSiriusCon2016 - Modelling Spacecraft On-board Software with Sirius
SiriusCon2016 - Modelling Spacecraft On-board Software with Sirius
Obeo
 
Advanced enterprise campus design. routed access (2015 milan)
Advanced enterprise campus design. routed access (2015 milan)Advanced enterprise campus design. routed access (2015 milan)
Advanced enterprise campus design. routed access (2015 milan)
slide_site
 
Cisco: Care and Feeding of Smart Licensing
Cisco: Care and Feeding of Smart LicensingCisco: Care and Feeding of Smart Licensing
Cisco: Care and Feeding of Smart Licensing
daxtindavon
 
A Jouney Through Wonderland - Jimdo
A Jouney Through Wonderland - JimdoA Jouney Through Wonderland - Jimdo
A Jouney Through Wonderland - Jimdo
Johann Paulus Almeida
 
Evaluating software vulnerabilities using fuzzing methods
Evaluating software vulnerabilities using fuzzing methodsEvaluating software vulnerabilities using fuzzing methods
Evaluating software vulnerabilities using fuzzing methods
Victor Ionel
 
CI/CD and TDD in deploying kamailio
CI/CD and TDD in deploying kamailioCI/CD and TDD in deploying kamailio
CI/CD and TDD in deploying kamailio
Aleksandar Sosic
 
Simplescalar Overview- a Superscalar.ppt
Simplescalar Overview- a Superscalar.pptSimplescalar Overview- a Superscalar.ppt
Simplescalar Overview- a Superscalar.ppt
MirxaTahaHassan
 
CloudStack UI
CloudStack UICloudStack UI
CloudStack UI
ShapeBlue
 
Bitworks CloudStack UI - CSEUUG 08 August 2017
Bitworks CloudStack UI - CSEUUG 08 August 2017Bitworks CloudStack UI - CSEUUG 08 August 2017
Bitworks CloudStack UI - CSEUUG 08 August 2017
Ivan Kudryavtsev
 
Azure Quantum with IBM Qiskit and IonQ QPU
Azure Quantum with IBM Qiskit and IonQ QPUAzure Quantum with IBM Qiskit and IonQ QPU
Azure Quantum with IBM Qiskit and IonQ QPU
Vijayananda Mohire
 
Automated Testing for SQL Injection Vulnerabilities: An Input Mutation Approach
Automated Testing for SQL Injection Vulnerabilities: An Input Mutation ApproachAutomated Testing for SQL Injection Vulnerabilities: An Input Mutation Approach
Automated Testing for SQL Injection Vulnerabilities: An Input Mutation Approach
Lionel Briand
 
VM Job Queues in CloudStack
VM Job Queues in CloudStackVM Job Queues in CloudStack
VM Job Queues in CloudStack
ShapeBlue
 
XP Days Ukraine 2016 Building CD Pipeline in Azure
XP Days Ukraine 2016 Building CD Pipeline in AzureXP Days Ukraine 2016 Building CD Pipeline in Azure
XP Days Ukraine 2016 Building CD Pipeline in Azure
Sergii Kryshtop
 
Follow your code: Node tracing
Follow your code: Node tracingFollow your code: Node tracing
Follow your code: Node tracing
Gireesh Punathil
 
Sprint 126
Sprint 126Sprint 126
Sprint 126
ManageIQ
 
DevOps with Serverless
DevOps with ServerlessDevOps with Serverless
DevOps with Serverless
Yan Cui
 
Model-based Development for Vehicular Embedded Systems
Model-based Development for Vehicular Embedded SystemsModel-based Development for Vehicular Embedded Systems
Model-based Development for Vehicular Embedded Systems
Alessio Bucaioni
 
Mentor vlsi lab btech_4_1
Mentor vlsi lab btech_4_1Mentor vlsi lab btech_4_1
Mentor vlsi lab btech_4_1
Vijay Kannamalla
 
More Data, More Problems: Scaling Kafka Mirroring Pipelines at LinkedIn
More Data, More Problems: Scaling Kafka Mirroring Pipelines at LinkedInMore Data, More Problems: Scaling Kafka Mirroring Pipelines at LinkedIn
More Data, More Problems: Scaling Kafka Mirroring Pipelines at LinkedIn
Celia Kung
 
SVA Advanced Topics- SVAUnit and Assertions for Introduction to SystemVerilog...
SVA Advanced Topics- SVAUnit and Assertions for Introduction to SystemVerilog...SVA Advanced Topics- SVAUnit and Assertions for Introduction to SystemVerilog...
SVA Advanced Topics- SVAUnit and Assertions for Introduction to SystemVerilog...
SamHoney6
 
SiriusCon2016 - Modelling Spacecraft On-board Software with Sirius
SiriusCon2016 - Modelling Spacecraft On-board Software with SiriusSiriusCon2016 - Modelling Spacecraft On-board Software with Sirius
SiriusCon2016 - Modelling Spacecraft On-board Software with Sirius
Obeo
 
Advanced enterprise campus design. routed access (2015 milan)
Advanced enterprise campus design. routed access (2015 milan)Advanced enterprise campus design. routed access (2015 milan)
Advanced enterprise campus design. routed access (2015 milan)
slide_site
 
Cisco: Care and Feeding of Smart Licensing
Cisco: Care and Feeding of Smart LicensingCisco: Care and Feeding of Smart Licensing
Cisco: Care and Feeding of Smart Licensing
daxtindavon
 
Evaluating software vulnerabilities using fuzzing methods
Evaluating software vulnerabilities using fuzzing methodsEvaluating software vulnerabilities using fuzzing methods
Evaluating software vulnerabilities using fuzzing methods
Victor Ionel
 
CI/CD and TDD in deploying kamailio
CI/CD and TDD in deploying kamailioCI/CD and TDD in deploying kamailio
CI/CD and TDD in deploying kamailio
Aleksandar Sosic
 
Simplescalar Overview- a Superscalar.ppt
Simplescalar Overview- a Superscalar.pptSimplescalar Overview- a Superscalar.ppt
Simplescalar Overview- a Superscalar.ppt
MirxaTahaHassan
 
CloudStack UI
CloudStack UICloudStack UI
CloudStack UI
ShapeBlue
 
Bitworks CloudStack UI - CSEUUG 08 August 2017
Bitworks CloudStack UI - CSEUUG 08 August 2017Bitworks CloudStack UI - CSEUUG 08 August 2017
Bitworks CloudStack UI - CSEUUG 08 August 2017
Ivan Kudryavtsev
 
Azure Quantum with IBM Qiskit and IonQ QPU
Azure Quantum with IBM Qiskit and IonQ QPUAzure Quantum with IBM Qiskit and IonQ QPU
Azure Quantum with IBM Qiskit and IonQ QPU
Vijayananda Mohire
 
Automated Testing for SQL Injection Vulnerabilities: An Input Mutation Approach
Automated Testing for SQL Injection Vulnerabilities: An Input Mutation ApproachAutomated Testing for SQL Injection Vulnerabilities: An Input Mutation Approach
Automated Testing for SQL Injection Vulnerabilities: An Input Mutation Approach
Lionel Briand
 
VM Job Queues in CloudStack
VM Job Queues in CloudStackVM Job Queues in CloudStack
VM Job Queues in CloudStack
ShapeBlue
 
XP Days Ukraine 2016 Building CD Pipeline in Azure
XP Days Ukraine 2016 Building CD Pipeline in AzureXP Days Ukraine 2016 Building CD Pipeline in Azure
XP Days Ukraine 2016 Building CD Pipeline in Azure
Sergii Kryshtop
 
Follow your code: Node tracing
Follow your code: Node tracingFollow your code: Node tracing
Follow your code: Node tracing
Gireesh Punathil
 
Sprint 126
Sprint 126Sprint 126
Sprint 126
ManageIQ
 
DevOps with Serverless
DevOps with ServerlessDevOps with Serverless
DevOps with Serverless
Yan Cui
 
Model-based Development for Vehicular Embedded Systems
Model-based Development for Vehicular Embedded SystemsModel-based Development for Vehicular Embedded Systems
Model-based Development for Vehicular Embedded Systems
Alessio Bucaioni
 
More Data, More Problems: Scaling Kafka Mirroring Pipelines at LinkedIn
More Data, More Problems: Scaling Kafka Mirroring Pipelines at LinkedInMore Data, More Problems: Scaling Kafka Mirroring Pipelines at LinkedIn
More Data, More Problems: Scaling Kafka Mirroring Pipelines at LinkedIn
Celia Kung
 
Ad

Recently uploaded (20)

Cybersecurity Identity and Access Solutions using Azure AD
Cybersecurity Identity and Access Solutions using Azure ADCybersecurity Identity and Access Solutions using Azure AD
Cybersecurity Identity and Access Solutions using Azure AD
VICTOR MAESTRE RAMIREZ
 
Quantum Computing Quick Research Guide by Arthur Morgan
Quantum Computing Quick Research Guide by Arthur MorganQuantum Computing Quick Research Guide by Arthur Morgan
Quantum Computing Quick Research Guide by Arthur Morgan
Arthur Morgan
 
AI and Data Privacy in 2025: Global Trends
AI and Data Privacy in 2025: Global TrendsAI and Data Privacy in 2025: Global Trends
AI and Data Privacy in 2025: Global Trends
InData Labs
 
Increasing Retail Store Efficiency How can Planograms Save Time and Money.pptx
Increasing Retail Store Efficiency How can Planograms Save Time and Money.pptxIncreasing Retail Store Efficiency How can Planograms Save Time and Money.pptx
Increasing Retail Store Efficiency How can Planograms Save Time and Money.pptx
Anoop Ashok
 
Procurement Insights Cost To Value Guide.pptx
Procurement Insights Cost To Value Guide.pptxProcurement Insights Cost To Value Guide.pptx
Procurement Insights Cost To Value Guide.pptx
Jon Hansen
 
Generative Artificial Intelligence (GenAI) in Business
Generative Artificial Intelligence (GenAI) in BusinessGenerative Artificial Intelligence (GenAI) in Business
Generative Artificial Intelligence (GenAI) in Business
Dr. Tathagat Varma
 
Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...
Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...
Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...
Impelsys Inc.
 
Cyber Awareness overview for 2025 month of security
Cyber Awareness overview for 2025 month of securityCyber Awareness overview for 2025 month of security
Cyber Awareness overview for 2025 month of security
riccardosl1
 
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdfThe Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
Abi john
 
Build Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For DevsBuild Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For Devs
Brian McKeiver
 
Dev Dives: Automate and orchestrate your processes with UiPath Maestro
Dev Dives: Automate and orchestrate your processes with UiPath MaestroDev Dives: Automate and orchestrate your processes with UiPath Maestro
Dev Dives: Automate and orchestrate your processes with UiPath Maestro
UiPathCommunity
 
HCL Nomad Web – Best Practices and Managing Multiuser Environments
HCL Nomad Web – Best Practices and Managing Multiuser EnvironmentsHCL Nomad Web – Best Practices and Managing Multiuser Environments
HCL Nomad Web – Best Practices and Managing Multiuser Environments
panagenda
 
TrsLabs - Fintech Product & Business Consulting
TrsLabs - Fintech Product & Business ConsultingTrsLabs - Fintech Product & Business Consulting
TrsLabs - Fintech Product & Business Consulting
Trs Labs
 
How analogue intelligence complements AI
How analogue intelligence complements AIHow analogue intelligence complements AI
How analogue intelligence complements AI
Paul Rowe
 
Linux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdfLinux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdf
RHCSA Guru
 
Heap, Types of Heap, Insertion and Deletion
Heap, Types of Heap, Insertion and DeletionHeap, Types of Heap, Insertion and Deletion
Heap, Types of Heap, Insertion and Deletion
Jaydeep Kale
 
Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...
Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...
Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...
BookNet Canada
 
Noah Loul Shares 5 Steps to Implement AI Agents for Maximum Business Efficien...
Noah Loul Shares 5 Steps to Implement AI Agents for Maximum Business Efficien...Noah Loul Shares 5 Steps to Implement AI Agents for Maximum Business Efficien...
Noah Loul Shares 5 Steps to Implement AI Agents for Maximum Business Efficien...
Noah Loul
 
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In France
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In FranceManifest Pre-Seed Update | A Humanoid OEM Deeptech In France
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In France
chb3
 
Drupalcamp Finland – Measuring Front-end Energy Consumption
Drupalcamp Finland – Measuring Front-end Energy ConsumptionDrupalcamp Finland – Measuring Front-end Energy Consumption
Drupalcamp Finland – Measuring Front-end Energy Consumption
Exove
 
Cybersecurity Identity and Access Solutions using Azure AD
Cybersecurity Identity and Access Solutions using Azure ADCybersecurity Identity and Access Solutions using Azure AD
Cybersecurity Identity and Access Solutions using Azure AD
VICTOR MAESTRE RAMIREZ
 
Quantum Computing Quick Research Guide by Arthur Morgan
Quantum Computing Quick Research Guide by Arthur MorganQuantum Computing Quick Research Guide by Arthur Morgan
Quantum Computing Quick Research Guide by Arthur Morgan
Arthur Morgan
 
AI and Data Privacy in 2025: Global Trends
AI and Data Privacy in 2025: Global TrendsAI and Data Privacy in 2025: Global Trends
AI and Data Privacy in 2025: Global Trends
InData Labs
 
Increasing Retail Store Efficiency How can Planograms Save Time and Money.pptx
Increasing Retail Store Efficiency How can Planograms Save Time and Money.pptxIncreasing Retail Store Efficiency How can Planograms Save Time and Money.pptx
Increasing Retail Store Efficiency How can Planograms Save Time and Money.pptx
Anoop Ashok
 
Procurement Insights Cost To Value Guide.pptx
Procurement Insights Cost To Value Guide.pptxProcurement Insights Cost To Value Guide.pptx
Procurement Insights Cost To Value Guide.pptx
Jon Hansen
 
Generative Artificial Intelligence (GenAI) in Business
Generative Artificial Intelligence (GenAI) in BusinessGenerative Artificial Intelligence (GenAI) in Business
Generative Artificial Intelligence (GenAI) in Business
Dr. Tathagat Varma
 
Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...
Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...
Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...
Impelsys Inc.
 
Cyber Awareness overview for 2025 month of security
Cyber Awareness overview for 2025 month of securityCyber Awareness overview for 2025 month of security
Cyber Awareness overview for 2025 month of security
riccardosl1
 
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdfThe Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
Abi john
 
Build Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For DevsBuild Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For Devs
Brian McKeiver
 
Dev Dives: Automate and orchestrate your processes with UiPath Maestro
Dev Dives: Automate and orchestrate your processes with UiPath MaestroDev Dives: Automate and orchestrate your processes with UiPath Maestro
Dev Dives: Automate and orchestrate your processes with UiPath Maestro
UiPathCommunity
 
HCL Nomad Web – Best Practices and Managing Multiuser Environments
HCL Nomad Web – Best Practices and Managing Multiuser EnvironmentsHCL Nomad Web – Best Practices and Managing Multiuser Environments
HCL Nomad Web – Best Practices and Managing Multiuser Environments
panagenda
 
TrsLabs - Fintech Product & Business Consulting
TrsLabs - Fintech Product & Business ConsultingTrsLabs - Fintech Product & Business Consulting
TrsLabs - Fintech Product & Business Consulting
Trs Labs
 
How analogue intelligence complements AI
How analogue intelligence complements AIHow analogue intelligence complements AI
How analogue intelligence complements AI
Paul Rowe
 
Linux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdfLinux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdf
RHCSA Guru
 
Heap, Types of Heap, Insertion and Deletion
Heap, Types of Heap, Insertion and DeletionHeap, Types of Heap, Insertion and Deletion
Heap, Types of Heap, Insertion and Deletion
Jaydeep Kale
 
Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...
Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...
Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...
BookNet Canada
 
Noah Loul Shares 5 Steps to Implement AI Agents for Maximum Business Efficien...
Noah Loul Shares 5 Steps to Implement AI Agents for Maximum Business Efficien...Noah Loul Shares 5 Steps to Implement AI Agents for Maximum Business Efficien...
Noah Loul Shares 5 Steps to Implement AI Agents for Maximum Business Efficien...
Noah Loul
 
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In France
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In FranceManifest Pre-Seed Update | A Humanoid OEM Deeptech In France
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In France
chb3
 
Drupalcamp Finland – Measuring Front-end Energy Consumption
Drupalcamp Finland – Measuring Front-end Energy ConsumptionDrupalcamp Finland – Measuring Front-end Energy Consumption
Drupalcamp Finland – Measuring Front-end Energy Consumption
Exove
 

SystemVerilog Assertions verification with SVAUnit - DVCon US 2016 Tutorial

  • 1. Tutorial SystemVerilog Assertions Verification with SVAUnit Andra Radu Ionu Ciocîrlanț
  • 2. SVAUnit tutorial topics • Introduction to SystemVerilog Assertions (SVAs) • Planning SVA development • Implementation • SVA verification using SVAUnit • SVA test patterns 2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 2
  • 3. Introduction to SystemVerilog Assertions (SVAs) 2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 3
  • 4. Assertions and properties • What is an assertion? • What is a property? 2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 4 assert (a |-> b) else $error("Assertion failed!") property p_example; a |-> b endproperty
  • 5. Simple assertion example 2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 5 property req_to_rise_p; @(posedge clk) $rose(req) |-> ##[1:3] $rose(ack); endproperty ASSERT_LABEL: assert property (req_to_rise_p) else `uvm_error(“ERR", "Assertion failed")
  • 6. Types of SystemVerilog Assertions • Immediate • Concurrent 2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 6 assert (expression) pass_statement [else fail_statement]
  • 7. Assertions are used • In a verification component • In a formal proof kit • In RTL generation “Revisiting Regular Expressions in SyntHorus2: from PSL SEREs to Hardware” (Fatemeh (Negin) Javaheri, Katell Morin-Allory, Dominique Borrione) • For test patterns generation “Towards a Toolchain for Assertion-Driven Test Sequence Generation” (Laurence PIERRE) 2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 7
  • 8. SVAs advantages •Fast •Non-instrusive •Flexible •Coverable 2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 8
  • 9. Planning SVA development 2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 9
  • 10. Identify design characteristics • Defined in a document (design specification) • Known or specified by the designer • The most common format is of the form cause and effect: antecedent |-> consequent • Antecedent: • Consequent: 2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 10 $rose(req) ##[1:3] $rose(ack)
  • 11. Keep it simple. Partition! • Complex assertions are typically constructed from complex sequences and properties. 2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 11 a ##1 b[*1:2] |=> c ##1 d[*1:2] |=> $fell(a) sequence seq(arg1, arg2); arg1 ##1 arg2[*1:2]; endsequence seq(a, b) |=> seq(c, d) |=> $fell(a)
  • 12. Implementation 2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 12
  • 13. Coding guidelines • Avoid duplicating design logic in assertions • Avoid infinite assertions • Reset considerations • Mind the sampling clock 2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 13
  • 14. Coding guidelines (contd.) • Always check for unknown condition (‘X’) • Assertion naming • Detailed assertion messages • Assertion encapsulation 2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 14
  • 15. Best practices • Review the SVA with the designer to avoid DS misinterpretation • Use strong in assertions that may never complete: • Properties should not hold under certain conditions (reset, enable switch) 2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 15 assert property ( req |-> strong(##[1:$] ack)); assert property ( @(posedge clk) disable iff (!setup || !rst_n) req |-> strong(##[1:$] ack) );
  • 16. Best practices (contd.) • Avoid overlapping assertions that contradict each other CPU_0: CPU_1: 2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 16 assert property (WRITE |=> ERROR); assert property (WRITE |=> !ERROR); assert property (WRITE and CPU==0 |=> ERROR); assert property (WRITE and CPU==1 |=> !ERROR);
  • 17. Best practices (contd.) • Use the $sampled() function in action blocks 2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 17 Active Inactive NBA Observed Re-active Re-inactive Postponed Preponed Previous timeslot Next timeslot assert property ( @(posedge clk) ack == 0 ) else `uvm_error("ERROR", $sformatf("Assertion failed. ack is %d", $sampled(ack)));
  • 18. Assertion example • AMBA APB protocol specification: The bus only remains in the SETUP state for one clock cycle and always moves to the ACCESS state on the next rising edge of the clock. 2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 18
  • 19. Assertion example (contd.) • Antecedent (the SETUP phase) • Consequent (the ACCESS phase) 2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 19 sequence setup_phase_s; $rose(psel) and $rose(pwrite) and (!penable) and (!pready); endsequence sequence access_phase_s; $rose(penable) and $rose(pready) and $stable(pwrite) and $stable(pwdata)and $stable(paddr) and $stable(psel); endsequence
  • 20. Assertion example (contd.) • The property can be expressed as: • The assertion will look like: 2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 20 property access_to_setup_p; @(posedge clk) disable iff (reset) setup_phase_s |=> access_phase_s; endproperty assert property (access_to_setup_p) else `uvm_error("ERR", "Assertion failed")
  • 21. Does it work as intended? 2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 21
  • 22. SVA Verification with SVAUnit 2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 22
  • 23. SVA Verification Challenges 2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 23 Clear separation between validation and SVA definition code Easy to: -Update -Enhance -Disable Results should be: - Deterministic -Repeatable Self-contained Adaptable Predictable
  • 24. Introducing SVAUnit • Structured framework for Unit Testing for SVAs • Allows the user to decouple the SVA definition from its validation code • UVM compliant package written in SystemVerilog • Encapsulate each SVA testing scenario inside an unit test • Easily controlled and supervised using a simple API 2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 24
  • 25. SVAUnit Infrastructure 2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 25 SVAUnit Testbench SVAUnit Test Suite SVAUnit Unit Test SVAUnit Test test() SVA interface handle Interface containing SVA Interface containing SVA SVAUnit Test SVAUnit Test Suite Reports Reports Reports Reports • SVAUnit Testbench - Enables SVAUnit - Instantiates SVA interface - Starts test • SVAUnit Test - Contains the SVA scenario • SVAUnit Test Suite - Test and test suite container
  • 26. Example specification • AMBA APB protocol specification: The bus only remains in the SETUP state for one clock cycle and always moves to the ACCESS state on the next rising edge of the clock. 2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 26
  • 27. Example APB interface 2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 27 interface apb_if (input pclk); logic psel; logic pwrite; logic penable; logic pready; logic [`ADDR_WIDTH-1 :0] paddr; logic [`WDATA_WIDTH-1:0] pwdata; endinterface APB sequences definitions APB property definition APB assertion definition
  • 28. APB sequences definitions • Antecedent (the SETUP phase) • Consequent (the ACCESS phase) 2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 28 sequence setup_phase_s; $rose(psel) and $rose(pwrite) and (!penable) and (!pready); endsequence sequence access_phase_s; $rose(penable) and $rose(pready) and $stable(pwrite) and $stable(pwdata)and $stable(paddr) and $stable(psel); endsequence
  • 29. APB property & assertion definitions • The property can be expressed as: • The assertion will look like: 2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 29 property access_to_setup_p; @(posedge clk) disable iff (reset) setup_phase_s |=> access_phase_s; endproperty assert property (access_to_setup_p) else `uvm_error("ERR", "Assertion failed")
  • 30. Example of SVAUnit Testbench 2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 30 module top; // Instantiate the SVAUnit framework `SVAUNIT_UTILS ... // APB interface with the SVA we want to test apb_if an_apb_if(.clk(clock)); initial begin // Register interface with the uvm_config_db uvm_config_db#(virtual an_if):: set(uvm_root::get(), "*", “VIF", an_apb_if); // Start the scenarios run_test(); end ... endmodule
  • 31. Example of SVAUnit Test 2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 31 class ut1 extends svaunit_test; // The virtual interface used to drive the signals virtual apb_if apb_vif; function void build_phase(input uvm_phase phase); // Retrieve the interface handle from the uvm_config_db if (!uvm_config_db#(virtual an_if)::get(this, "", “VIF", apb_vif)) `uvm_fatal(“UT1_NO_VIF_ERR", "SVA interface is not set!") // Test will run by default; disable_test(); endfunction task test(); // Initialize signals // Create scenarios for SVA verification endtask endclass
  • 32. APB – SVAUnit test steps 2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 32 Enable the APB SVA Initialize the interface signals Generate setup phase stimuli Generate access phase stimuli SVA checks based on generated stimuli
  • 33. Enable SVA and initialize signals 2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 33 ... // Enable the APB SVA vpiw.disable_all_assertions(); vpiw.enable_assertion("APB_PHASES"); // Initialize signals task initialize_signals(); apb_vif.paddr <= 32'b0; apb_vif.pwdata <= 32'b0; apb_vif.pwrite <= 1'b0; apb_vif.penable <= 1'b0; apb_vif.psel <= 1'b0; endtask ...
  • 34. Generate setup phase stimuli 2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 34 ... task generate_setup_phase_stimuli(bit valid); ... // Stimuli for valid SVA scenario valid == 1 -> pwrite == 1 && psel == 1 && penable == 0 && pready == 0; // Stimuli for invalid SVA scenario valid == 0 -> pwrite != 1 || psel != 1 || penable != 0 || pready != 0; ... endtask ...
  • 35. Generate access phase stimuli 2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 35 ... task generate_access_phase_stimuli(bit valid); ... // Constrained stimuli for valid SVA scenario valid == 1 -> pwdata == apb_vif.pwdata && paddr == apb_vif.paddr && pwrite == 1 && psel == 1 && penable == 1 && pready == 1; // Constrained stimuli for invalid SVA scenario valid == 0 -> pwdata != apb_vif.pwdata || paddr != apb_vif.paddr || pwrite != 1 || psel != 1 || penable != 1 || pready != 1; ... endtask ...
  • 36. SVA state checking 2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 36 ... if (valid_setup_phase) if (valid_access_phase) vpiw.fail_if_sva_not_succeeded("APB_PHASES", "The assertion should have succeeded!"); else vpiw.fail_if_sva_succeeded("APB_PHASES", "The assertion should have failed!"); else vpiw.pass_if_sva_not_started("APB_PHASES", "The assertion should not have started!"); ...
  • 37. Example of SVAUnit Test Suite 2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 37 class uts extends svaunit_test_suite; // Instantiate the SVAUnit tests ut1 ut1; ... ut10 ut10; function void build_phase(input uvm_phase phase); // Create the tests using UVM factory ut1 = ut1::type_id::create("ut1", this); ... ut10 = ut10::type_id::create("ut10", this); // Register tests in suite `add_test(ut1); ... `add_test(ut10); endfunction endclass
  • 38. SVAUnit Test API 2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 38
  • 39. SVAUnit Flow 2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 39 Instantiate test in Test Suite Create an SVAUnit Test Suite Register tests in test suite Scan report Simulate Create SVAUnit Testbench Create an SVAUnit Test Implement test() task
  • 40. Error reporting 2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 40 Name of SVAUnit check Custom error message Name of SVA under test SVAUnit test path
  • 41. Hierarchy report 2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 41
  • 42. Test scenarios exercised 2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 42
  • 43. SVAs and checks exercised 2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 43
  • 44. SVA test patterns 2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 44
  • 45. Simple implication test 2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 45 • a and b |=> c repeat (test_loop_count) begin randomize(stimuli_for_a, stimuli_for_b, stimuli_for_c); interface.a <= stimuli_for_a; interface.b <= stimuli_for_b; @(posedge an_vif.clk); interface.c <= stimuli_for_c; @(posedge interface.clk); @(posedge interface.clk); if (stimuli_for_a == 1 && stimuli_for_b == 1) if (stimuli_for_c == 1) vpiw.fail_if_sva_not_succeeded("IMPLICATION_ASSERT", "The assertion should have succeeded!"); else vpiw.fail_if_sva_succeeded("IMPLICATION_ASSERT", "The assertion should have failed!"); else vpiw.pass_if_sva_not_started("IMPLICATION_ASSERT", "The assertion should not have started!"); end
  • 46. Multi-thread antecedent/consequent 2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 46 • $rose(a) ##[1:4] b |-> ##[1:3] c repeat (test_loop_count) begin // Generate valid delays for asserting b and c signals randomize(delay_for_b inside {[1:4]}, delay_for_c inside {[1:3]}); interface.a <= 1; repeat (delay_for_b) @(posedge interface.clk); interface.b <= 1; vpiw.pass_if_sva_started_but_not_finished("MULTITHREAD_ASSERT", "The assertion should have started but not finished!"); repeat (delay_for_c) @(posedge interface.clk); interface.c <= 1; vpiw.pass_if_sva_succeeded("MULTITHREAD_ASSERT", "The assertion should have succeeded!"); end
  • 47. Multi-thread antecedent/consequent (contd.) 2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 47 • $rose(a) ##[1:4] b |-> ##[1:3] c repeat (test_loop_count) begin // Generate invalid delays for asserting b and c signals randomize(delay_for_b inside {[0:10]}, delay_for_c inside {0,[4:10]}); interface.a <= 1; repeat (delay_for_b) @(posedge interface.clk); interface.b <= 1; vpiw.pass_if_sva_not_succeeded("MULTITHREAD_ASSERT", "The assertion should have failed!"); repeat (delay_for_c) @(posedge interface.clk); interface.c <= 1; if (delay_for_b < 5) vpiw.fail_if_sva_succeeded("MULTITHREAD_ASSERT", "The assertion should have failed!"); end
  • 48. Consecutive repetition 2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 48 • a |-> b[*1:2] ##1 c repeat (test_loop_count) begin randomize(stimuli_for_a, stimuli_for_c, number_of_b_cycles <= 2); interface.a <= stimuli_for_a; repeat (number_of_b_cycles) begin randomize(stimuli_for_b) interface.b <= stimuli_for_b; if (stimuli_for_b == 1) number_of_b_assertions += 1; @(posedge interface.clk); end if (stimuli_for_a == 1 && number_of_b_assertions == number_of_b_cycles && number_of_b_assertions > 0) vpiw.pass_if_sva_started_but_not_finished("IMPLICATION_ASSERT", "The assertion should have started but not finished!"); @(posedge interface.clk); ... // (continued on the next slide)
  • 49. Consecutive repetition (contd.) 2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 49 • a |-> b[*1:2] ##1 c ... // (continued from previous slide) interface.c <= stimuli_for_c; @(posedge interface.clk); if (stimuli_for_a == 1) if (number_of_b_assertions != number_of_b_cycles || number_of_b_assertions == 0 || stimuli_for_c == 0) vpiw.fail_if_sva_succeeded("IMPLICATION_ASSERT", "The assertion should have failed!"); else vpiw.fail_if_sva_not_succeeded("IMPLICATION_ASSERT", "The assertion should have succeeded!"); end // end of test repeat loop
  • 50. Repetition range with zero 2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 50 • a |-> b[*0:2] ##1 c
  • 51. Repetition range with zero (contd.) 2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 51 • a |-> b[*0:2] ##1 c
  • 52. Sequence disjunction 2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 52 • a |=> (b ##1 c) or (d ##1 e) repeat (test_loop_count) begin randomize(stimuli_for_a, stimuli_for_b, stimuli_for_c, stimuli_for_d, stimuli_for_e); interface.a <= stimuli_for_a; @(posedge interface.clk); fork begin end begin end join end Stimuli for branch: (b ##1 c) SVA state check based on branch stimuli Stimuli for branch: (c ##1 d) SVA state check based on branch stimuli
  • 53. Sequence disjunction (contd.) 2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 53 • a |=> (b ##1 c) or (d ##1 e) ... // Stimuli for branch (b ##1 c) fork begin interface.b <= stimuli_for_b; @(posedge interface.clk); interface.c <= stimuli_for_c; @(posedge interface.clk); @(posedge interface.clk); // SVA state check based on branch stimuli sva_check_phase(interface.a, interface.b, interface.c); end join
  • 54. Sequence disjunction (contd.) 2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 54 • a |=> (b ##1 c) or (d ##1 e) ... // Stimuli for branch (d ##1 e) fork begin interface.b <= stimuli_for_d; @(posedge interface.clk); interface.c <= stimuli_for_e; @(posedge interface.clk); @(posedge interface.clk); // SVA state check based on branch stimuli sva_check_phase(interface.a, interface.d, interface.e); end join
  • 55. Sequence disjunction (contd.) 2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 55 • a |=> (b ##1 c) or (d ##1 e) // SVA state checking task used in each fork branch task sva_check_phase(bit stimuli_a, bit stimuli_b, bit stimuli_c); if (stimuli_a) if (stimuli_b && stimuli_c) vpiw.pass_if_sva_succeeded("DISJUNCTION_ASSERT", "The assertion should have succeeded"); else vpiw.fail_if_sva_succeeded("DISJUNCTION_ASSERT", "The assertion should have failed"); endtask
  • 56. Tools integration 2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 56 Simulator independent!
  • 57. Availability 2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 57 • SVAUnit is an open-source package released by AMIQ Consulting • We provide: - SystemVerilog and simulator integration codes - AMBA-APB assertion package - Code templates and examples - HTML documentation for API https://github.com/amiq-consulting/svaunit
  • 58. Conclusions • SVAUnit decouples the checking logic from SVA definition code • Safety net for eventual code refactoring • Can also be used as self-checking documentation on how SVAs work • Quick learning curve • Easy-to-use and flexible API • Speed up verification closure • Boost verification quality 2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 58
  • 59. Q & A ? 2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 59
  • 60. Thank you! 2/29/2016 Andra Radu - AMIQ Consulting Ionu Ciocîrlan - AMIQ Consultingț 60