SlideShare a Scribd company logo
1 of 60
Download to read offline
SVA Advanced Topics: SVAUnit
and Assertions for Formal
SystemVerilog Assertions
Verification with SVAUnit
Andra Radu Ionuț Ciocîrlan
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 3
Introduction to SystemVerilog
Assertions
(SVAs)
2/29/2016 Andra Radu - AMIQ Consulting Ionuț Ciocîrlan - AMIQ Consulting 4
Assertions and Properties
• What is an assertion?
• What is a property?
2/29/2016 Andra Radu - AMIQ Consulting Ionuț Ciocîrlan - AMIQ Consulting 5
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 6
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 7
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 8
SVAs Advantages
• Fast
• Non-intrusive
• Flexible
• Coverable
2/29/2016 Andra Radu - AMIQ Consulting Ionuț Ciocîrlan - AMIQ Consulting 9
Planning SVA Development
2/29/2016 Andra Radu - AMIQ Consulting Ionuț Ciocîrlan - AMIQ Consulting 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 11
$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 12
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 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 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 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 16
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 17
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 18
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 19
Assertion Example (contd.)
• Antecedent (the SETUP phase)
• Consequent (the ACCESS phase)
2/29/2016 Andra Radu - AMIQ Consulting Ionuț Ciocîrlan - AMIQ Consulting 20
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 21
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 22
SVA Verification with SVAUnit
2/29/2016 Andra Radu - AMIQ Consulting Ionuț Ciocîrlan - AMIQ Consulting 23
SVA Verification Challenges
2/29/2016 Andra Radu - AMIQ Consulting Ionuț Ciocîrlan - AMIQ Consulting 24
Clear separation between
validation and SVA definition
code
Easy to:
- Update
- Enhance
- Disable
Results should be:
- Deterministic
- Repeatable
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 25
SVAUnit Infrastructure
2/29/2016 Andra Radu - AMIQ Consulting Ionuț Ciocîrlan - AMIQ Consulting 26
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 27
Example APB Interface
2/29/2016 Andra Radu - AMIQ Consulting Ionuț Ciocîrlan - AMIQ Consulting 28
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 29
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 30
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 31
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 32
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 33
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 34
...
// 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 35
...
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 36
...
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 37
...
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 38
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 39
• disable_all_assertions();
• enable_assertion(sva_name);
• enable_all_assertions();
. . .
CONTROL
• fail_if_sva_does_not_exists(sva_name, error_msg);
• pass_if_sva_not_succeeded(sva_name, error_msg);
• pass/fail_if(expression, error_msg);
. . .
CHECK
• print_status();
• print_sva();
• print_report();
. . .
REPORT
SVAUnit Flow
2/29/2016 Andra Radu - AMIQ Consulting Ionuț Ciocîrlan - AMIQ Consulting 40
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 41
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 42
Test Scenarios Exercised
2/29/2016 Andra Radu - AMIQ Consulting Ionuț Ciocîrlan - AMIQ Consulting 43
SVAs and Checks Exercised
2/29/2016 Andra Radu - AMIQ Consulting Ionuț Ciocîrlan - AMIQ Consulting 44
SVA Test Patterns
2/29/2016 Andra Radu - AMIQ Consulting Ionuț Ciocîrlan - AMIQ Consulting 45
Simple Implication Test
2/29/2016 Andra Radu - AMIQ Consulting Ionuț Ciocîrlan - AMIQ Consulting 46
• 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 47
• $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 48
• $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 49
• 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 50
• 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 51
• a |-> b[*0: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)
Repetition Range with Zero
(contd.)
2/29/2016 Andra Radu - AMIQ Consulting Ionuț Ciocîrlan - AMIQ Consulting 52
• a |-> b[*0: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("REPETITION_RANGE0_ASSERT",
"The assertion should have failed!");
else
vpiw.fail_if_sva_not_succeeded("REPETITION_RANGE0_ASSERT",
"The assertion should have succeeded!");
end // end of test repeat loop
Sequence Disjunction
2/29/2016 Andra Radu - AMIQ Consulting Ionuț Ciocîrlan - AMIQ Consulting 53
• 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: (d ##1 e)
SVA state check based on branch stimuli
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 (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 55
• 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 56
• 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 57
Simulator independent!
Availability
2/29/2016 Andra Radu - AMIQ Consulting Ionuț Ciocîrlan - AMIQ Consulting 58
• 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 59
Thank you!
2/29/2016 Andra Radu - AMIQ Consulting Ionuț Ciocîrlan - AMIQ Consulting 60

More Related Content

Similar to SVA Advanced Topics- SVAUnit and Assertions for Introduction to SystemVerilog Assertions (SVAs) • Planning SVA development • Implementation • SVA verification using SVAUnit.pdf

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 2017Ivan Kudryavtsev
 
Sprint 126
Sprint 126Sprint 126
Sprint 126ManageIQ
 
Quadratisch. Praktisch. Gut. K8s-native Quality Assurance mit Testkube @ Java...
Quadratisch. Praktisch. Gut. K8s-native Quality Assurance mit Testkube @ Java...Quadratisch. Praktisch. Gut. K8s-native Quality Assurance mit Testkube @ Java...
Quadratisch. Praktisch. Gut. K8s-native Quality Assurance mit Testkube @ Java...QAware GmbH
 
Evaluating software vulnerabilities using fuzzing methods
Evaluating software vulnerabilities using fuzzing methodsEvaluating software vulnerabilities using fuzzing methods
Evaluating software vulnerabilities using fuzzing methodsVictor 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 kamailioAleksandar Sosic
 
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 AzureSergii Kryshtop
 
Quality in a Square. K8s-native Quality Assurance of Microservices with Testkube
Quality in a Square. K8s-native Quality Assurance of Microservices with TestkubeQuality in a Square. K8s-native Quality Assurance of Microservices with Testkube
Quality in a Square. K8s-native Quality Assurance of Microservices with TestkubeQAware GmbH
 
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 SystemsAlessio Bucaioni
 
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 ApproachLionel Briand
 
Qa in CI/CD
Qa in CI/CDQa in CI/CD
Qa in CI/CDAdsmurai
 
Portfolio control version sn_v5
Portfolio control version sn_v5Portfolio control version sn_v5
Portfolio control version sn_v5Samuel Narcisse
 
Incquery Suite Models 2020 Conference by István Ráth, CEO of IncQuery Labs
Incquery Suite Models 2020 Conference by István Ráth, CEO of IncQuery LabsIncquery Suite Models 2020 Conference by István Ráth, CEO of IncQuery Labs
Incquery Suite Models 2020 Conference by István Ráth, CEO of IncQuery LabsIncQuery Labs
 
Understanding How is that Adaptive Cursor Sharing (ACS) produces multiple Opt...
Understanding How is that Adaptive Cursor Sharing (ACS) produces multiple Opt...Understanding How is that Adaptive Cursor Sharing (ACS) produces multiple Opt...
Understanding How is that Adaptive Cursor Sharing (ACS) produces multiple Opt...Carlos Sierra
 
Tech Days 2015: Model Based Development with QGen
Tech Days 2015: Model Based Development with QGenTech Days 2015: Model Based Development with QGen
Tech Days 2015: Model Based Development with QGenAdaCore
 
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 LinkedInCelia Kung
 
Follow your code: Node tracing
Follow your code: Node tracingFollow your code: Node tracing
Follow your code: Node tracingGireesh Punathil
 
Francisco Javier Ramirez Urea - Hopla - OSL19
Francisco Javier Ramirez Urea - Hopla - OSL19Francisco Javier Ramirez Urea - Hopla - OSL19
Francisco Javier Ramirez Urea - Hopla - OSL19marketingsyone
 
Continuous Deployment To The Cloud @DevoxxPL 2017
Continuous Deployment To The Cloud @DevoxxPL 2017 Continuous Deployment To The Cloud @DevoxxPL 2017
Continuous Deployment To The Cloud @DevoxxPL 2017 Marcin Grzejszczak
 

Similar to SVA Advanced Topics- SVAUnit and Assertions for Introduction to SystemVerilog Assertions (SVAs) • Planning SVA development • Implementation • SVA verification using SVAUnit.pdf (20)

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
 
Sprint 126
Sprint 126Sprint 126
Sprint 126
 
Quadratisch. Praktisch. Gut. K8s-native Quality Assurance mit Testkube @ Java...
Quadratisch. Praktisch. Gut. K8s-native Quality Assurance mit Testkube @ Java...Quadratisch. Praktisch. Gut. K8s-native Quality Assurance mit Testkube @ Java...
Quadratisch. Praktisch. Gut. K8s-native Quality Assurance mit Testkube @ Java...
 
A Jouney Through Wonderland - Jimdo
A Jouney Through Wonderland - JimdoA Jouney Through Wonderland - Jimdo
A Jouney Through Wonderland - Jimdo
 
Evaluating software vulnerabilities using fuzzing methods
Evaluating software vulnerabilities using fuzzing methodsEvaluating software vulnerabilities using fuzzing methods
Evaluating software vulnerabilities using fuzzing methods
 
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
 
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
 
Quality in a Square. K8s-native Quality Assurance of Microservices with Testkube
Quality in a Square. K8s-native Quality Assurance of Microservices with TestkubeQuality in a Square. K8s-native Quality Assurance of Microservices with Testkube
Quality in a Square. K8s-native Quality Assurance of Microservices with Testkube
 
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
 
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
 
Qa in CI/CD
Qa in CI/CDQa in CI/CD
Qa in CI/CD
 
Portfolio control version sn_v5
Portfolio control version sn_v5Portfolio control version sn_v5
Portfolio control version sn_v5
 
Incquery Suite Models 2020 Conference by István Ráth, CEO of IncQuery Labs
Incquery Suite Models 2020 Conference by István Ráth, CEO of IncQuery LabsIncquery Suite Models 2020 Conference by István Ráth, CEO of IncQuery Labs
Incquery Suite Models 2020 Conference by István Ráth, CEO of IncQuery Labs
 
Understanding How is that Adaptive Cursor Sharing (ACS) produces multiple Opt...
Understanding How is that Adaptive Cursor Sharing (ACS) produces multiple Opt...Understanding How is that Adaptive Cursor Sharing (ACS) produces multiple Opt...
Understanding How is that Adaptive Cursor Sharing (ACS) produces multiple Opt...
 
Tech Days 2015: Model Based Development with QGen
Tech Days 2015: Model Based Development with QGenTech Days 2015: Model Based Development with QGen
Tech Days 2015: Model Based Development with QGen
 
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
 
Paper-review: A Parallel Test Pattern Generation Algorithm to Meet Multiple Q...
Paper-review: A Parallel Test Pattern Generation Algorithm to Meet Multiple Q...Paper-review: A Parallel Test Pattern Generation Algorithm to Meet Multiple Q...
Paper-review: A Parallel Test Pattern Generation Algorithm to Meet Multiple Q...
 
Follow your code: Node tracing
Follow your code: Node tracingFollow your code: Node tracing
Follow your code: Node tracing
 
Francisco Javier Ramirez Urea - Hopla - OSL19
Francisco Javier Ramirez Urea - Hopla - OSL19Francisco Javier Ramirez Urea - Hopla - OSL19
Francisco Javier Ramirez Urea - Hopla - OSL19
 
Continuous Deployment To The Cloud @DevoxxPL 2017
Continuous Deployment To The Cloud @DevoxxPL 2017 Continuous Deployment To The Cloud @DevoxxPL 2017
Continuous Deployment To The Cloud @DevoxxPL 2017
 

More from SamHoney6

eetop.cn_UVM_REG_workshop.--------------pdf
eetop.cn_UVM_REG_workshop.--------------pdfeetop.cn_UVM_REG_workshop.--------------pdf
eetop.cn_UVM_REG_workshop.--------------pdfSamHoney6
 
Cadence GenusTutorial------------ .pdf.pdf
Cadence GenusTutorial------------ .pdf.pdfCadence GenusTutorial------------ .pdf.pdf
Cadence GenusTutorial------------ .pdf.pdfSamHoney6
 
snug07_Verilog Gotchas for Verification.pdf
snug07_Verilog Gotchas for Verification.pdfsnug07_Verilog Gotchas for Verification.pdf
snug07_Verilog Gotchas for Verification.pdfSamHoney6
 
04+ECETEMT092-+WDT+APB+UVM.pdf
04+ECETEMT092-+WDT+APB+UVM.pdf04+ECETEMT092-+WDT+APB+UVM.pdf
04+ECETEMT092-+WDT+APB+UVM.pdfSamHoney6
 
14-Bill-Tiffany-SigmaSense-VF2023.pdf
14-Bill-Tiffany-SigmaSense-VF2023.pdf14-Bill-Tiffany-SigmaSense-VF2023.pdf
14-Bill-Tiffany-SigmaSense-VF2023.pdfSamHoney6
 
RF-Transceiver.pdf
RF-Transceiver.pdfRF-Transceiver.pdf
RF-Transceiver.pdfSamHoney6
 
inf5430_sv_randomization.pdf
inf5430_sv_randomization.pdfinf5430_sv_randomization.pdf
inf5430_sv_randomization.pdfSamHoney6
 
FAC14_Vlach.pdf
FAC14_Vlach.pdfFAC14_Vlach.pdf
FAC14_Vlach.pdfSamHoney6
 
vip-shielding.pdf
vip-shielding.pdfvip-shielding.pdf
vip-shielding.pdfSamHoney6
 
UVM_TB_20220621_slides-1.pdf
UVM_TB_20220621_slides-1.pdfUVM_TB_20220621_slides-1.pdf
UVM_TB_20220621_slides-1.pdfSamHoney6
 
Web Template Mechanisms in SOC Verification - DVCon.pdf
Web Template Mechanisms in SOC Verification - DVCon.pdfWeb Template Mechanisms in SOC Verification - DVCon.pdf
Web Template Mechanisms in SOC Verification - DVCon.pdfSamHoney6
 
cupdf.com_chapter-11-system-level-verification-issues-the-importance-of-verif...
cupdf.com_chapter-11-system-level-verification-issues-the-importance-of-verif...cupdf.com_chapter-11-system-level-verification-issues-the-importance-of-verif...
cupdf.com_chapter-11-system-level-verification-issues-the-importance-of-verif...SamHoney6
 
UVM-based RISC-V processor Verification Paltform ---.pdf
UVM-based RISC-V processor Verification Paltform ---.pdfUVM-based RISC-V processor Verification Paltform ---.pdf
UVM-based RISC-V processor Verification Paltform ---.pdfSamHoney6
 

More from SamHoney6 (14)

eetop.cn_UVM_REG_workshop.--------------pdf
eetop.cn_UVM_REG_workshop.--------------pdfeetop.cn_UVM_REG_workshop.--------------pdf
eetop.cn_UVM_REG_workshop.--------------pdf
 
Cadence GenusTutorial------------ .pdf.pdf
Cadence GenusTutorial------------ .pdf.pdfCadence GenusTutorial------------ .pdf.pdf
Cadence GenusTutorial------------ .pdf.pdf
 
snug07_Verilog Gotchas for Verification.pdf
snug07_Verilog Gotchas for Verification.pdfsnug07_Verilog Gotchas for Verification.pdf
snug07_Verilog Gotchas for Verification.pdf
 
04+ECETEMT092-+WDT+APB+UVM.pdf
04+ECETEMT092-+WDT+APB+UVM.pdf04+ECETEMT092-+WDT+APB+UVM.pdf
04+ECETEMT092-+WDT+APB+UVM.pdf
 
14-Bill-Tiffany-SigmaSense-VF2023.pdf
14-Bill-Tiffany-SigmaSense-VF2023.pdf14-Bill-Tiffany-SigmaSense-VF2023.pdf
14-Bill-Tiffany-SigmaSense-VF2023.pdf
 
RF-Transceiver.pdf
RF-Transceiver.pdfRF-Transceiver.pdf
RF-Transceiver.pdf
 
inf5430_sv_randomization.pdf
inf5430_sv_randomization.pdfinf5430_sv_randomization.pdf
inf5430_sv_randomization.pdf
 
FAC14_Vlach.pdf
FAC14_Vlach.pdfFAC14_Vlach.pdf
FAC14_Vlach.pdf
 
vip-shielding.pdf
vip-shielding.pdfvip-shielding.pdf
vip-shielding.pdf
 
UVM_TB_20220621_slides-1.pdf
UVM_TB_20220621_slides-1.pdfUVM_TB_20220621_slides-1.pdf
UVM_TB_20220621_slides-1.pdf
 
Sva.pdf
Sva.pdfSva.pdf
Sva.pdf
 
Web Template Mechanisms in SOC Verification - DVCon.pdf
Web Template Mechanisms in SOC Verification - DVCon.pdfWeb Template Mechanisms in SOC Verification - DVCon.pdf
Web Template Mechanisms in SOC Verification - DVCon.pdf
 
cupdf.com_chapter-11-system-level-verification-issues-the-importance-of-verif...
cupdf.com_chapter-11-system-level-verification-issues-the-importance-of-verif...cupdf.com_chapter-11-system-level-verification-issues-the-importance-of-verif...
cupdf.com_chapter-11-system-level-verification-issues-the-importance-of-verif...
 
UVM-based RISC-V processor Verification Paltform ---.pdf
UVM-based RISC-V processor Verification Paltform ---.pdfUVM-based RISC-V processor Verification Paltform ---.pdf
UVM-based RISC-V processor Verification Paltform ---.pdf
 

Recently uploaded

Bommasandra Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...
Bommasandra Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...Bommasandra Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...
Bommasandra Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...amitlee9823
 
Escorts Service Sanjay Nagar ☎ 7737669865☎ Book Your One night Stand (Bangalore)
Escorts Service Sanjay Nagar ☎ 7737669865☎ Book Your One night Stand (Bangalore)Escorts Service Sanjay Nagar ☎ 7737669865☎ Book Your One night Stand (Bangalore)
Escorts Service Sanjay Nagar ☎ 7737669865☎ Book Your One night Stand (Bangalore)amitlee9823
 
Introduction-to-4x4-SRAM-Memory-Block.pptx
Introduction-to-4x4-SRAM-Memory-Block.pptxIntroduction-to-4x4-SRAM-Memory-Block.pptx
Introduction-to-4x4-SRAM-Memory-Block.pptxJaiLegal
 
Top Rated Pune Call Girls Ravet ⟟ 6297143586 ⟟ Call Me For Genuine Sex Servi...
Top Rated  Pune Call Girls Ravet ⟟ 6297143586 ⟟ Call Me For Genuine Sex Servi...Top Rated  Pune Call Girls Ravet ⟟ 6297143586 ⟟ Call Me For Genuine Sex Servi...
Top Rated Pune Call Girls Ravet ⟟ 6297143586 ⟟ Call Me For Genuine Sex Servi...Call Girls in Nagpur High Profile
 
Call Girls Pimple Saudagar Call Me 7737669865 Budget Friendly No Advance Booking
Call Girls Pimple Saudagar Call Me 7737669865 Budget Friendly No Advance BookingCall Girls Pimple Saudagar Call Me 7737669865 Budget Friendly No Advance Booking
Call Girls Pimple Saudagar Call Me 7737669865 Budget Friendly No Advance Bookingroncy bisnoi
 
Abort pregnancy in research centre+966_505195917 abortion pills in Kuwait cyt...
Abort pregnancy in research centre+966_505195917 abortion pills in Kuwait cyt...Abort pregnancy in research centre+966_505195917 abortion pills in Kuwait cyt...
Abort pregnancy in research centre+966_505195917 abortion pills in Kuwait cyt...drmarathore
 
Escorts Service Arekere ☎ 7737669865☎ Book Your One night Stand (Bangalore)
Escorts Service Arekere ☎ 7737669865☎ Book Your One night Stand (Bangalore)Escorts Service Arekere ☎ 7737669865☎ Book Your One night Stand (Bangalore)
Escorts Service Arekere ☎ 7737669865☎ Book Your One night Stand (Bangalore)amitlee9823
 
Kothanur Call Girls Service: 🍓 7737669865 🍓 High Profile Model Escorts | Bang...
Kothanur Call Girls Service: 🍓 7737669865 🍓 High Profile Model Escorts | Bang...Kothanur Call Girls Service: 🍓 7737669865 🍓 High Profile Model Escorts | Bang...
Kothanur Call Girls Service: 🍓 7737669865 🍓 High Profile Model Escorts | Bang...amitlee9823
 
怎样办理维多利亚大学毕业证(UVic毕业证书)成绩单留信认证
怎样办理维多利亚大学毕业证(UVic毕业证书)成绩单留信认证怎样办理维多利亚大学毕业证(UVic毕业证书)成绩单留信认证
怎样办理维多利亚大学毕业证(UVic毕业证书)成绩单留信认证tufbav
 
一比一定(购)新西兰林肯大学毕业证(Lincoln毕业证)成绩单学位证
一比一定(购)新西兰林肯大学毕业证(Lincoln毕业证)成绩单学位证一比一定(购)新西兰林肯大学毕业证(Lincoln毕业证)成绩单学位证
一比一定(购)新西兰林肯大学毕业证(Lincoln毕业证)成绩单学位证wpkuukw
 
Call Girls In RT Nagar ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In RT Nagar ☎ 7737669865 🥵 Book Your One night StandCall Girls In RT Nagar ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In RT Nagar ☎ 7737669865 🥵 Book Your One night Standamitlee9823
 
Makarba ( Call Girls ) Ahmedabad ✔ 6297143586 ✔ Hot Model With Sexy Bhabi Rea...
Makarba ( Call Girls ) Ahmedabad ✔ 6297143586 ✔ Hot Model With Sexy Bhabi Rea...Makarba ( Call Girls ) Ahmedabad ✔ 6297143586 ✔ Hot Model With Sexy Bhabi Rea...
Makarba ( Call Girls ) Ahmedabad ✔ 6297143586 ✔ Hot Model With Sexy Bhabi Rea...Naicy mandal
 
Book Sex Workers Available Pune Call Girls Yerwada 6297143586 Call Hot India...
Book Sex Workers Available Pune Call Girls Yerwada  6297143586 Call Hot India...Book Sex Workers Available Pune Call Girls Yerwada  6297143586 Call Hot India...
Book Sex Workers Available Pune Call Girls Yerwada 6297143586 Call Hot India...Call Girls in Nagpur High Profile
 
Shikrapur Call Girls Most Awaited Fun 6297143586 High Profiles young Beautie...
Shikrapur Call Girls Most Awaited Fun  6297143586 High Profiles young Beautie...Shikrapur Call Girls Most Awaited Fun  6297143586 High Profiles young Beautie...
Shikrapur Call Girls Most Awaited Fun 6297143586 High Profiles young Beautie...tanu pandey
 
(👉Ridhima)👉VIP Model Call Girls Mulund ( Mumbai) Call ON 9967824496 Starting ...
(👉Ridhima)👉VIP Model Call Girls Mulund ( Mumbai) Call ON 9967824496 Starting ...(👉Ridhima)👉VIP Model Call Girls Mulund ( Mumbai) Call ON 9967824496 Starting ...
(👉Ridhima)👉VIP Model Call Girls Mulund ( Mumbai) Call ON 9967824496 Starting ...motiram463
 
➥🔝 7737669865 🔝▻ Deoghar Call-girls in Women Seeking Men 🔝Deoghar🔝 Escorts...
➥🔝 7737669865 🔝▻ Deoghar Call-girls in Women Seeking Men  🔝Deoghar🔝   Escorts...➥🔝 7737669865 🔝▻ Deoghar Call-girls in Women Seeking Men  🔝Deoghar🔝   Escorts...
➥🔝 7737669865 🔝▻ Deoghar Call-girls in Women Seeking Men 🔝Deoghar🔝 Escorts...amitlee9823
 
Deira Dubai Escorts +0561951007 Escort Service in Dubai by Dubai Escort Girls
Deira Dubai Escorts +0561951007 Escort Service in Dubai by Dubai Escort GirlsDeira Dubai Escorts +0561951007 Escort Service in Dubai by Dubai Escort Girls
Deira Dubai Escorts +0561951007 Escort Service in Dubai by Dubai Escort GirlsEscorts Call Girls
 

Recently uploaded (20)

(INDIRA) Call Girl Napur Call Now 8617697112 Napur Escorts 24x7
(INDIRA) Call Girl Napur Call Now 8617697112 Napur Escorts 24x7(INDIRA) Call Girl Napur Call Now 8617697112 Napur Escorts 24x7
(INDIRA) Call Girl Napur Call Now 8617697112 Napur Escorts 24x7
 
Bommasandra Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...
Bommasandra Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...Bommasandra Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...
Bommasandra Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...
 
Escorts Service Sanjay Nagar ☎ 7737669865☎ Book Your One night Stand (Bangalore)
Escorts Service Sanjay Nagar ☎ 7737669865☎ Book Your One night Stand (Bangalore)Escorts Service Sanjay Nagar ☎ 7737669865☎ Book Your One night Stand (Bangalore)
Escorts Service Sanjay Nagar ☎ 7737669865☎ Book Your One night Stand (Bangalore)
 
Introduction-to-4x4-SRAM-Memory-Block.pptx
Introduction-to-4x4-SRAM-Memory-Block.pptxIntroduction-to-4x4-SRAM-Memory-Block.pptx
Introduction-to-4x4-SRAM-Memory-Block.pptx
 
Top Rated Pune Call Girls Ravet ⟟ 6297143586 ⟟ Call Me For Genuine Sex Servi...
Top Rated  Pune Call Girls Ravet ⟟ 6297143586 ⟟ Call Me For Genuine Sex Servi...Top Rated  Pune Call Girls Ravet ⟟ 6297143586 ⟟ Call Me For Genuine Sex Servi...
Top Rated Pune Call Girls Ravet ⟟ 6297143586 ⟟ Call Me For Genuine Sex Servi...
 
Call Girls Pimple Saudagar Call Me 7737669865 Budget Friendly No Advance Booking
Call Girls Pimple Saudagar Call Me 7737669865 Budget Friendly No Advance BookingCall Girls Pimple Saudagar Call Me 7737669865 Budget Friendly No Advance Booking
Call Girls Pimple Saudagar Call Me 7737669865 Budget Friendly No Advance Booking
 
CHEAP Call Girls in Ashok Nagar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Ashok Nagar  (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Ashok Nagar  (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Ashok Nagar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
Abort pregnancy in research centre+966_505195917 abortion pills in Kuwait cyt...
Abort pregnancy in research centre+966_505195917 abortion pills in Kuwait cyt...Abort pregnancy in research centre+966_505195917 abortion pills in Kuwait cyt...
Abort pregnancy in research centre+966_505195917 abortion pills in Kuwait cyt...
 
Escorts Service Arekere ☎ 7737669865☎ Book Your One night Stand (Bangalore)
Escorts Service Arekere ☎ 7737669865☎ Book Your One night Stand (Bangalore)Escorts Service Arekere ☎ 7737669865☎ Book Your One night Stand (Bangalore)
Escorts Service Arekere ☎ 7737669865☎ Book Your One night Stand (Bangalore)
 
Kothanur Call Girls Service: 🍓 7737669865 🍓 High Profile Model Escorts | Bang...
Kothanur Call Girls Service: 🍓 7737669865 🍓 High Profile Model Escorts | Bang...Kothanur Call Girls Service: 🍓 7737669865 🍓 High Profile Model Escorts | Bang...
Kothanur Call Girls Service: 🍓 7737669865 🍓 High Profile Model Escorts | Bang...
 
怎样办理维多利亚大学毕业证(UVic毕业证书)成绩单留信认证
怎样办理维多利亚大学毕业证(UVic毕业证书)成绩单留信认证怎样办理维多利亚大学毕业证(UVic毕业证书)成绩单留信认证
怎样办理维多利亚大学毕业证(UVic毕业证书)成绩单留信认证
 
一比一定(购)新西兰林肯大学毕业证(Lincoln毕业证)成绩单学位证
一比一定(购)新西兰林肯大学毕业证(Lincoln毕业证)成绩单学位证一比一定(购)新西兰林肯大学毕业证(Lincoln毕业证)成绩单学位证
一比一定(购)新西兰林肯大学毕业证(Lincoln毕业证)成绩单学位证
 
Call Girls In RT Nagar ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In RT Nagar ☎ 7737669865 🥵 Book Your One night StandCall Girls In RT Nagar ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In RT Nagar ☎ 7737669865 🥵 Book Your One night Stand
 
Makarba ( Call Girls ) Ahmedabad ✔ 6297143586 ✔ Hot Model With Sexy Bhabi Rea...
Makarba ( Call Girls ) Ahmedabad ✔ 6297143586 ✔ Hot Model With Sexy Bhabi Rea...Makarba ( Call Girls ) Ahmedabad ✔ 6297143586 ✔ Hot Model With Sexy Bhabi Rea...
Makarba ( Call Girls ) Ahmedabad ✔ 6297143586 ✔ Hot Model With Sexy Bhabi Rea...
 
(ISHITA) Call Girls Service Aurangabad Call Now 8617697112 Aurangabad Escorts...
(ISHITA) Call Girls Service Aurangabad Call Now 8617697112 Aurangabad Escorts...(ISHITA) Call Girls Service Aurangabad Call Now 8617697112 Aurangabad Escorts...
(ISHITA) Call Girls Service Aurangabad Call Now 8617697112 Aurangabad Escorts...
 
Book Sex Workers Available Pune Call Girls Yerwada 6297143586 Call Hot India...
Book Sex Workers Available Pune Call Girls Yerwada  6297143586 Call Hot India...Book Sex Workers Available Pune Call Girls Yerwada  6297143586 Call Hot India...
Book Sex Workers Available Pune Call Girls Yerwada 6297143586 Call Hot India...
 
Shikrapur Call Girls Most Awaited Fun 6297143586 High Profiles young Beautie...
Shikrapur Call Girls Most Awaited Fun  6297143586 High Profiles young Beautie...Shikrapur Call Girls Most Awaited Fun  6297143586 High Profiles young Beautie...
Shikrapur Call Girls Most Awaited Fun 6297143586 High Profiles young Beautie...
 
(👉Ridhima)👉VIP Model Call Girls Mulund ( Mumbai) Call ON 9967824496 Starting ...
(👉Ridhima)👉VIP Model Call Girls Mulund ( Mumbai) Call ON 9967824496 Starting ...(👉Ridhima)👉VIP Model Call Girls Mulund ( Mumbai) Call ON 9967824496 Starting ...
(👉Ridhima)👉VIP Model Call Girls Mulund ( Mumbai) Call ON 9967824496 Starting ...
 
➥🔝 7737669865 🔝▻ Deoghar Call-girls in Women Seeking Men 🔝Deoghar🔝 Escorts...
➥🔝 7737669865 🔝▻ Deoghar Call-girls in Women Seeking Men  🔝Deoghar🔝   Escorts...➥🔝 7737669865 🔝▻ Deoghar Call-girls in Women Seeking Men  🔝Deoghar🔝   Escorts...
➥🔝 7737669865 🔝▻ Deoghar Call-girls in Women Seeking Men 🔝Deoghar🔝 Escorts...
 
Deira Dubai Escorts +0561951007 Escort Service in Dubai by Dubai Escort Girls
Deira Dubai Escorts +0561951007 Escort Service in Dubai by Dubai Escort GirlsDeira Dubai Escorts +0561951007 Escort Service in Dubai by Dubai Escort Girls
Deira Dubai Escorts +0561951007 Escort Service in Dubai by Dubai Escort Girls
 

SVA Advanced Topics- SVAUnit and Assertions for Introduction to SystemVerilog Assertions (SVAs) • Planning SVA development • Implementation • SVA verification using SVAUnit.pdf

  • 1. SVA Advanced Topics: SVAUnit and Assertions for Formal
  • 2. SystemVerilog Assertions Verification with SVAUnit Andra Radu Ionuț Ciocîrlan
  • 3. 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 3
  • 4. Introduction to SystemVerilog Assertions (SVAs) 2/29/2016 Andra Radu - AMIQ Consulting Ionuț Ciocîrlan - AMIQ Consulting 4
  • 5. Assertions and Properties • What is an assertion? • What is a property? 2/29/2016 Andra Radu - AMIQ Consulting Ionuț Ciocîrlan - AMIQ Consulting 5 assert (a |-> b) else $error("Assertion failed!") property p_example; a |-> b endproperty
  • 6. Simple Assertion Example 2/29/2016 Andra Radu - AMIQ Consulting Ionuț Ciocîrlan - AMIQ Consulting 6 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")
  • 7. Types of SystemVerilog Assertions • Immediate • Concurrent 2/29/2016 Andra Radu - AMIQ Consulting Ionuț Ciocîrlan - AMIQ Consulting 7 assert (expression) pass_statement [else fail_statement]
  • 8. 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 8
  • 9. SVAs Advantages • Fast • Non-intrusive • Flexible • Coverable 2/29/2016 Andra Radu - AMIQ Consulting Ionuț Ciocîrlan - AMIQ Consulting 9
  • 10. Planning SVA Development 2/29/2016 Andra Radu - AMIQ Consulting Ionuț Ciocîrlan - AMIQ Consulting 10
  • 11. 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 11 $rose(req) ##[1:3] $rose(ack)
  • 12. 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 12 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)
  • 13. Implementation 2/29/2016 Andra Radu - AMIQ Consulting Ionuț Ciocîrlan - AMIQ Consulting 13
  • 14. 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 14
  • 15. 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 15
  • 16. 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 16 assert property ( req |-> strong(##[1:$] ack)); assert property ( @(posedge clk) disable iff (!setup || !rst_n) req |-> strong(##[1:$] ack) );
  • 17. 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 17 assert property (WRITE |=> ERROR); assert property (WRITE |=> !ERROR); assert property (WRITE and CPU==0 |=> ERROR); assert property (WRITE and CPU==1 |=> !ERROR);
  • 18. Best Practices (contd.) • Use the $sampled() function in action blocks 2/29/2016 Andra Radu - AMIQ Consulting Ionuț Ciocîrlan - AMIQ Consulting 18 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)));
  • 19. 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 19
  • 20. Assertion Example (contd.) • Antecedent (the SETUP phase) • Consequent (the ACCESS phase) 2/29/2016 Andra Radu - AMIQ Consulting Ionuț Ciocîrlan - AMIQ Consulting 20 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
  • 21. 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 21 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")
  • 22. Does It Work as Intended? 2/29/2016 Andra Radu - AMIQ Consulting Ionuț Ciocîrlan - AMIQ Consulting 22
  • 23. SVA Verification with SVAUnit 2/29/2016 Andra Radu - AMIQ Consulting Ionuț Ciocîrlan - AMIQ Consulting 23
  • 24. SVA Verification Challenges 2/29/2016 Andra Radu - AMIQ Consulting Ionuț Ciocîrlan - AMIQ Consulting 24 Clear separation between validation and SVA definition code Easy to: - Update - Enhance - Disable Results should be: - Deterministic - Repeatable Predictable
  • 25. 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 25
  • 26. SVAUnit Infrastructure 2/29/2016 Andra Radu - AMIQ Consulting Ionuț Ciocîrlan - AMIQ Consulting 26 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
  • 27. 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 27
  • 28. Example APB Interface 2/29/2016 Andra Radu - AMIQ Consulting Ionuț Ciocîrlan - AMIQ Consulting 28 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
  • 29. APB Sequences Definitions • Antecedent (the SETUP phase) • Consequent (the ACCESS phase) 2/29/2016 Andra Radu - AMIQ Consulting Ionuț Ciocîrlan - AMIQ Consulting 29 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
  • 30. 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 30 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")
  • 31. Example of SVAUnit Testbench 2/29/2016 Andra Radu - AMIQ Consulting Ionuț Ciocîrlan - AMIQ Consulting 31 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
  • 32. Example of SVAUnit Test 2/29/2016 Andra Radu - AMIQ Consulting Ionuț Ciocîrlan - AMIQ Consulting 32 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
  • 33. APB – SVAUnit Test Steps 2/29/2016 Andra Radu - AMIQ Consulting Ionuț Ciocîrlan - AMIQ Consulting 33 Enable the APB SVA Initialize the interface signals Generate setup phase stimuli Generate access phase stimuli SVA checks based on generated stimuli
  • 34. Enable SVA and Initialize Signals 2/29/2016 Andra Radu - AMIQ Consulting Ionuț Ciocîrlan - AMIQ Consulting 34 ... // 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 ...
  • 35. Generate Setup Phase Stimuli 2/29/2016 Andra Radu - AMIQ Consulting Ionuț Ciocîrlan - AMIQ Consulting 35 ... 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 ...
  • 36. Generate Access Phase Stimuli 2/29/2016 Andra Radu - AMIQ Consulting Ionuț Ciocîrlan - AMIQ Consulting 36 ... 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 ...
  • 37. SVA State Checking 2/29/2016 Andra Radu - AMIQ Consulting Ionuț Ciocîrlan - AMIQ Consulting 37 ... 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!"); ...
  • 38. Example of SVAUnit Test Suite 2/29/2016 Andra Radu - AMIQ Consulting Ionuț Ciocîrlan - AMIQ Consulting 38 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
  • 39. SVAUnit Test API 2/29/2016 Andra Radu - AMIQ Consulting Ionuț Ciocîrlan - AMIQ Consulting 39 • disable_all_assertions(); • enable_assertion(sva_name); • enable_all_assertions(); . . . CONTROL • fail_if_sva_does_not_exists(sva_name, error_msg); • pass_if_sva_not_succeeded(sva_name, error_msg); • pass/fail_if(expression, error_msg); . . . CHECK • print_status(); • print_sva(); • print_report(); . . . REPORT
  • 40. SVAUnit Flow 2/29/2016 Andra Radu - AMIQ Consulting Ionuț Ciocîrlan - AMIQ Consulting 40 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
  • 41. Error Reporting 2/29/2016 Andra Radu - AMIQ Consulting Ionuț Ciocîrlan - AMIQ Consulting 41 Name of SVAUnit check Custom error message Name of SVA under test SVAUnit test path
  • 42. Hierarchy Report 2/29/2016 Andra Radu - AMIQ Consulting Ionuț Ciocîrlan - AMIQ Consulting 42
  • 43. Test Scenarios Exercised 2/29/2016 Andra Radu - AMIQ Consulting Ionuț Ciocîrlan - AMIQ Consulting 43
  • 44. SVAs and Checks Exercised 2/29/2016 Andra Radu - AMIQ Consulting Ionuț Ciocîrlan - AMIQ Consulting 44
  • 45. SVA Test Patterns 2/29/2016 Andra Radu - AMIQ Consulting Ionuț Ciocîrlan - AMIQ Consulting 45
  • 46. Simple Implication Test 2/29/2016 Andra Radu - AMIQ Consulting Ionuț Ciocîrlan - AMIQ Consulting 46 • 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
  • 47. Multi-thread Antecedent/Consequent 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 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
  • 48. Multi-thread Antecedent/Consequent (contd.) 2/29/2016 Andra Radu - AMIQ Consulting Ionuț Ciocîrlan - AMIQ Consulting 48 • $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
  • 49. Consecutive Repetition 2/29/2016 Andra Radu - AMIQ Consulting Ionuț Ciocîrlan - AMIQ Consulting 49 • 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)
  • 50. Consecutive Repetition (contd.) 2/29/2016 Andra Radu - AMIQ Consulting Ionuț Ciocîrlan - AMIQ Consulting 50 • 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
  • 51. Repetition Range with Zero 2/29/2016 Andra Radu - AMIQ Consulting Ionuț Ciocîrlan - AMIQ Consulting 51 • a |-> b[*0: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)
  • 52. Repetition Range with Zero (contd.) 2/29/2016 Andra Radu - AMIQ Consulting Ionuț Ciocîrlan - AMIQ Consulting 52 • a |-> b[*0: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("REPETITION_RANGE0_ASSERT", "The assertion should have failed!"); else vpiw.fail_if_sva_not_succeeded("REPETITION_RANGE0_ASSERT", "The assertion should have succeeded!"); end // end of test repeat loop
  • 53. Sequence Disjunction 2/29/2016 Andra Radu - AMIQ Consulting Ionuț Ciocîrlan - AMIQ Consulting 53 • 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: (d ##1 e) SVA state check based on branch stimuli
  • 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 (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
  • 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) ... // 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
  • 56. Sequence Disjunction (contd.) 2/29/2016 Andra Radu - AMIQ Consulting Ionuț Ciocîrlan - AMIQ Consulting 56 • 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
  • 57. Tools Integration 2/29/2016 Andra Radu - AMIQ Consulting Ionuț Ciocîrlan - AMIQ Consulting 57 Simulator independent!
  • 58. Availability 2/29/2016 Andra Radu - AMIQ Consulting Ionuț Ciocîrlan - AMIQ Consulting 58 • 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
  • 59. 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 59
  • 60. Thank you! 2/29/2016 Andra Radu - AMIQ Consulting Ionuț Ciocîrlan - AMIQ Consulting 60