SystemVerilog Is Getting Even Better!



Similar documents
Using SystemVerilog Assertions for Creating Property-Based Checkers

SYSTEMVERILOG ASSERTIONS FOR FORMAL VERIFICATION

Keeping Up with Chip the Proposed SystemVerilog 2012 Standard Makes Verifying Ever-increasing Design Complexity More Efficient

SVA4T: SystemVerilog Assertions - Techniques, Tips, Tricks, and Traps

A Verilog HDL Test Bench Primer Application Note

Chapter 2 Ensuring RTL Intent

Chapter 13: Verification

Digital Design Verification

ECE232: Hardware Organization and Design. Part 3: Verilog Tutorial. Basic Verilog

Understanding Verilog Blocking and Non-blocking Assignments

Asynchronous & Synchronous Reset Design Techniques - Part Deux

ModelSim-Altera Software Simulation User Guide

Introduction to Functional Verification. Niels Burkhardt

VHDL GUIDELINES FOR SYNTHESIS

Registers & Counters

Lab #5: Design Example: Keypad Scanner and Encoder - Part 1 (120 pts)

Modeling Sequential Elements with Verilog. Prof. Chien-Nan Liu TEL: ext: Sequential Circuit

System Verilog Testbench Tutorial Using Synopsys EDA Tools

Lecture 10: Multiple Clock Domains

ECE 3401 Lecture 7. Concurrent Statements & Sequential Statements (Process)

AP Computer Science Java Subset

Finite State Machine Design and VHDL Coding Techniques

Getting off the ground when creating an RVM test-bench

VHDL Test Bench Tutorial

The Designer's Guide to VHDL

Chapter 7: Advanced Modeling Techniques

Use, Analysis, and Debug of SystemVerilog Assertions

3. VERILOG HARDWARE DESCRIPTION LANGUAGE

More Verilog. 8-bit Register with Synchronous Reset. Shift Register Example. N-bit Register with Asynchronous Reset.

Name: Class: Date: 9. The compiler ignores all comments they are there strictly for the convenience of anyone reading the program.

Life Cycle of a Memory Request. Ring Example: 2 requests for lock 17

ECE 451 Verilog Exercises. Sept 14, James Barnes

How To Port A Program To Dynamic C (C) (C-Based) (Program) (For A Non Portable Program) (Un Portable) (Permanent) (Non Portable) C-Based (Programs) (Powerpoint)

Object Oriented Software Design

Assertion Synthesis Enabling Assertion-Based Verification For Simulation, Formal and Emulation Flows

Novas Software, Inc. Introduction. Goal. PART I: Original Technology Donation 1. Data Dump Reader

C++FA 5.1 PRACTICE MID-TERM EXAM

LAB #3 VHDL RECOGNITION AND GAL IC PROGRAMMING USING ALL-11 UNIVERSAL PROGRAMMER

The Model Checker SPIN

CS 111 Classes I 1. Software Organization View to this point:

A New Paradigm for Synchronous State Machine Design in Verilog

Synthesizable Finite State Machine Design Techniques Using the New SystemVerilog 3.0 Enhancements

Exercise 4 Learning Python language fundamentals

Variations of Batteric V, Part 1

MAX II ISP Update with I/O Control & Register Data Retention

Course Title: Software Development

New Verilog-2001 Techniques for Creating Parameterized Models (or Down With `define and Death of a defparam!)

The Fundamentals of Efficient Synthesizable Finite State Machine Design using NC-Verilog and BuildGates. Clifford E. Cummings

A Static Analyzer for Large Safety-Critical Software. Considered Programs and Semantics. Automatic Program Verification by Abstract Interpretation

Course Name: ADVANCE COURSE IN SOFTWARE DEVELOPMENT (Specialization:.Net Technologies)

Visual Basic. murach's TRAINING & REFERENCE

KITES TECHNOLOGY COURSE MODULE (C, C++, DS)

C Programming. for Embedded Microcontrollers. Warwick A. Smith. Postbus 11. Elektor International Media BV. 6114ZG Susteren The Netherlands

Modeling Latches and Flip-flops

Programing the Microprocessor in C Microprocessor System Design and Interfacing ECE 362

I PUC - Computer Science. Practical s Syllabus. Contents

High-Level Synthesis for FPGA Designs

TECHNOLOGY Computer Programming II Grade: 9-12 Standard 2: Technology and Society Interaction

Below is a diagram explaining the data packet and the timing related to the mouse clock while receiving a byte from the PS-2 mouse:

Introduction to SPIN. Acknowledgments. Parts of the slides are based on an earlier lecture by Radu Iosif, Verimag. Ralf Huuck. Features PROMELA/SPIN

6. Control Structures

1 9/25/2009. wsnyder. Verilog-Mode. Still Reducing the Veri-Tedium. /*AUTOAUTHOR*/ Wilson Snyder.

The C Programming Language course syllabus associate level

Introduction to Promela and SPIN. LACL, Université Paris 12

PROBLEM SOLVING SEVENTH EDITION WALTER SAVITCH UNIVERSITY OF CALIFORNIA, SAN DIEGO CONTRIBUTOR KENRICK MOCK UNIVERSITY OF ALASKA, ANCHORAGE PEARSON

C#5.0 IN A NUTSHELL. Joseph O'REILLY. Albahari and Ben Albahari. Fifth Edition. Tokyo. Sebastopol. Beijing. Cambridge. Koln.

Modeling Registers and Counters

E158 Intro to CMOS VLSI Design. Alarm Clock

Keil C51 Cross Compiler

Introduction to CMOS VLSI Design (E158) Lecture 8: Clocking of VLSI Systems

Debugging. Common Semantic Errors ESE112. Java Library. It is highly unlikely that you will write code that will work on the first go

Quartus II Software Design Series : Foundation. Digitale Signalverarbeitung mit FPGA. Digitale Signalverarbeitung mit FPGA (DSF) Quartus II 1

Quartus II Introduction for VHDL Users

DIPLOMADO DE JAVA - OCA

WebSphere Business Monitor

Phys4051: C Lecture 2 & 3. Comment Statements. C Data Types. Functions (Review) Comment Statements Variables & Operators Branching Instructions

Fundamentals of Java Programming

Accessing Data with ADOBE FLEX 4.6

Boolean Expressions, Conditions, Loops, and Enumerations. Precedence Rules (from highest to lowest priority)

Real Time Programming: Concepts

Common Mistakes In Technical Texts by Cliff Cummings of Sunburst Design -

Chapter 1: Key Concepts of Programming and Software Engineering

Java Interview Questions and Answers

Moving from CS 61A Scheme to CS 61B Java

Using Altera MAX Series as Microcontroller I/O Expanders

VISUAL GUIDE to. RX Scripting. for Roulette Xtreme - System Designer 2.0

The Advanced JTAG Bridge. Nathan Yawn 05/12/09

RT Language Classes. Real-Time Programming Languages (ADA and Esterel as Examples) Implementation. Synchroneous Systems Synchronous Languages

The structured application of advanced logging techniques for SystemVerilog testbench debug and analysis. By Bindesh Patel and Amanda Hsiao.

Chapter 5. Selection 5-1

Glossary of Object Oriented Terms

Technical Note. Micron NAND Flash Controller via Xilinx Spartan -3 FPGA. Overview. TN-29-06: NAND Flash Controller on Spartan-3 Overview

AN141 SMBUS COMMUNICATION FOR SMALL FORM FACTOR DEVICE FAMILIES. 1. Introduction. 2. Overview of the SMBus Specification. 2.1.

Digital Systems Design. VGA Video Display Generation

Bitrix Intranet Portal. Business Process Guide

VIRTUAL LABORATORY: MULTI-STYLE CODE EDITOR

Using Xilinx ISE for VHDL Based Design

Chapter 6, The Operating System Machine Level

PL/SQL Overview. Basic Structure and Syntax of PL/SQL

Best Practises for LabVIEW FPGA Design Flow. uk.ni.com ireland.ni.com

Transcription:

by, SystemVerilog Is Getting Even Better! An Update on the Proposed 2009 SystemVerilog Standard Part 2 presented by Clifford E. Cummings Sunburst Design, Inc. cliffc@sunburst-design.com www.sunburst-design.com sponsored by Stuart Sutherland stuart@sutherland-hdl.com 50+ Major Enhancements in SystemVerilog-2009 Part 1: Cliff Cummings of Sunburst Design presents the details on the major new features in SystemVerilog-2009 that involve hardware modeling and testbench programming www.sunburst-design.com/papers/ DAC2009_SystemVerilog_Update_Part1_SunburstDesign.pdf Part 2: Stu Sutherland of Sutherland HDL presents the details on the major new features in SystemVerilog-2009 that involve SystemVerilog Assertions See the remaining slides of this presentation, or /papers/ DAC2009_SystemVerilog_Update_Part2_SutherlandHDL.pdf 2of 27 1 2009 by

by, Stu Sutherland and Sutherland HDL Stuart Sutherland, a true SystemVerilog wizard Indepent Verilog/SystemVerilog consultant and trainer Hardware design and verification engineer Have been working with Verilog since 1988 Bachelors in Computer Science / Masters in Education Presented dozens of papers (/papers) Published books on Verilog PLI and SystemVerilog for Design Technical editor of every version of the IEEE Verilog and SystemVerilog "Language Reference Manual" since 1995 Founded Sutherland HDL in 1992 Provides Verilog/SystemVerilog consulting services Provides the absolute best Verilog and SystemVerilog training! NOTE: There is a typo on slide 3 of Part 1; It is Cliff that is a close 2nd! 3of 27 SystemVerilog exts Verilog verification design What comes next? assertions test program blocks clocking domains process control interfaces nested hierarchy unrestricted ports automatic port connect enhanced literals time values and units modules parameters function/tasks always @ assign IEEE SystemVerilog-2005 mailboxes semaphores constrained random values functional coverage packages compilation unit space 2-state modeling specialized procedures array assignments unique/priority case/if $finish $fopen $fclose $display $write $monitor `define `ifdef `else `include `timescale Proposed SystemVerilog-2009 initial disable events wait # @ fork join classes inheritance polymorphism strings structures unions const break continue return wire reg integer real time packed arrays 2D memory dynamic arrays associative arrays queues references C types void alias casting typedef enum begin while for forever if else repeat do while ++ -- += -= *= /= >>= <<= >>>= <<<= &= = ^= %= ==? IEEE Verilog-2005 uwire `begin_keywords `pragma $clog2 IEEE Verilog-2001 ANSI C style ports generate standard file I/O $value$plusargs (* attributes *) configurations multi dimensional arrays signed types localparam `ifndef `elsif `line memory part selects automatic constant functions @* variable part select ** (power operator) IEEE Verilog-1995 (created in 1984) + = * / % >> << 4of 27 2 2009 by

by, Verilog and SystemVerilog: One Standard or Two Standards? SystemVerilog exts Verilog, but In 2005 they were separate standards!!! IEEE 1364-2005 the base Verilog standard IEEE 1800-2005 SystemVerilog extensions to 1364-2005 Why? (pick the best answer) To frustrate users of Verilog/SystemVerilog To use more paper So the IEEE could make more money by selling two documents So that EDA companies could focus on implementing new features SystemVerilog-2009 merges the two standards together One large document (about 1,300 pages) Removes the overlap between 1364-2005 and 1800-2005 Clarifies ambiguities that existed between the two documents Adds more than 50 new major features! 5of 27 Verilog Is Now Called SystemVerilog The IEEE 1364 Verilog base language has been merged into the IEEE 1800 SystemVerilog standard The unified Verilog and SystemVerilog standard is called SystemVerilog, not Verilog! The IEEE 1364 Verilog standard will soon be defunct The target is to have an IEEE 1800-2009 SystemVerilog standard First round of balloting was completed in April 2009 100% YES votes, but with lots of comments Second round of balloting to be conducted in August, 2009 Addresses all comments made on first ballot Official release might slip into 2010 due to IEEE "red tape" process A draft of the merged standard is available from the IEEE today 6of 27 3 2009 by

by, let Templates Mantis 1728 SV-2009 adds a new let construct for defining code templates Can replace the (often abused) `define text macros Eliminates the problems of `define let does not have file order depencies like `define let has a local scope; `define can inadvertently affect other files package my_templates; let check_mutex(a, b) = assert(!(a && b) ); let valid_arb(request, valid, override) = (request & valid) override; package module my_chip ( ); import my_templates::*; Expands to: assert(!(read_enable && write_enable) ); always_comb begin check_mutex(read_enable, write_enable); if (valid_arb(.request(start),.valid(d_ok),.override(abort))) begin... // do arbitration Expands to: if ( (start & d_ok) abort ) module 7of 27 Assertion Checkers Mantis 1900 SV-2009 adds assertion checker blocks Encapsulates assertions and supporting code in a verification unit Provides a mechanism for defining assertion libraries Engineers can use checkers without having to learn SVA package checker_library; checker check1 (event clk, logic[7:0] a, b); logic [7:0] sum; always @(clk) begin sum <= a + 1 b1; p0: assert property (sum < `MAX_SUM); p1: assert property (@clk sum < `MAX_SUM); p2: assert property (@clk a!= b); checker // other checker definitions package A checker can contain (partial list): Variables Functions Assertions Initial, always and final procedures Generate blocks module my_chip ( ); A check1 check_inputs(posedge clk, in1, in2); checker can be: // functionality of my chip Instantiated outside of RTL code module Embedded within RTL code 8of 27 4 2009 by

by, Assertion Untyped Arguments Mantis 1601 SV-2009 adds untyped as an argument data type Allows explicitly specifying that the formal argument is untyped in sequences, properties, and checkers Allows mixing typed and untyped arguments in any order SV-2005 could have all arguments be untyped, but was ambiguous about having a mix of typed and untyped property (bit clk, logic [63:0] a, untyped b, c);... Untyped arguments allow assertions logic [63:0] data, address; libraries to be more flexible on the sequence s1; actual argument types req ##1 ack; sequence assert property (mclk, data, s1, address); NOTE: The new let construct can have untyped arguments but the SV-2009 standard does not permit the untyped keyword with let constructs; This was an oversight in the syntax that will be corrected in a future version of the standard (see Mantis 2835) 9of 27 Assertion Global Clock Mantis 1681 SV-2009 adds the ability to specify a global clock definition Simplifies writing assertion definitions for formal verification tools global clocking @(posedge master_clock); clocking property @($global_clock)... There can only be one global clock definition in the entire elaborated model Can only be declared in a module or interface $global_clock returns the event expression specified in the global clocking declaration Can be used anywhere that a clocking event can be specified always @($global_clock) begin... In simulation, $global_clock is the event defined in the global clocking declaration In formal verification, $global_clock is the primary system clock 10 of 27 5 2009 by

by, Assertion Past & Future Values Mantis 1682 SV-2009 adds functions that return the nearest past or future value of a signal as sampled by the global clock One clock cycle in the past $past_gclk, $rose_gclk, $fell_gclk, $stable_gclk, $changed_gclk One clock cycle in the future $future_gclk, $rising_gclk, $falling_gclk, $steady_gclk, $changing_gclk assert property ( @$global_clock $changing_gclk(data) -> $falling_gclk(clock) ) else $error("data is not stable"); Verify that data only changes on a falling edge of clock 11 of 27 Inferred Assertion Functions Mantis 1674 SV-2009 adds the ability to query for information than an assertion might have inferred from context $inferred_clock, $inferred_disable, $inferred_enable default clocking @(negedge clk1); clocking Assertion libraries can use inferred default disable rst1; signals if no actual signal is passed in property p_triggers(a, b, clk = $inferred_clock, rst = $inferred_disable); @clk disable iff (rst) a => b; assert property (p_triggers(in1, in2)); This property expands to: @(negedge clk1) disable iff (rst1) in1 ##1 in2; assert property (p_triggers(in1, in2, posedge clk2)); always @(posedge clk3) begin if (rst3)... ; else assert property (p_triggers(in1, in2)); This property expands to: @(posedge clk2) disable iff (1'b0) in1 ##1 in2; This property expands to: @(posedge clk3) disable iff (rst3) in1 ##1 in2; 12 of 27 6 2009 by

by, Assertion Abort Operators Mantis 1674, 2100 SV-2009 adds a mechanism to abort a property during evaluation Asynchronous aborts: tested throughout the property evaluation reject_on If during the property evaluation, the abort condition becomes true, then the property aborts with a failure accept_on If during the property evaluation, the abort condition becomes true, then the property aborts with a success Synchronous aborts: tested each clock event during evaluation sync_reject_on If during the property evaluation, the abort condition becomes true, then the property aborts with a failure sync_accept_on If during the property evaluation, the abort condition becomes true, then the property aborts with a success assert property (@(posedge clk) go ##1 get[*2] -> reject_on(stop) put[->2]); Whenever go is high, followed by two occurrences of get being high, then stop cannot be high until after put goes true twice (not necessarily consecutive) The assertion aborts with a failure the moment stop goes true 13 of 27 Strong and Weak Assertions Mantis 1932 SV-2009 adds the concept of strong and weak assertions Provides formal verification with additional information Helps prevent simulation assertions that do not simulate efficiently assert property ( @(posedge clk) req -> strong(##[1:3] ack) ); assert property ( @(posedge clk) req -> weak(##[1:3] ack) ); Not fully backward compatible with SystemVerilog-2005! The default in 2005 was that all assertions were strong The default in 2009 is that all assertions are weak unless specified as strong Weak is the better behavior and avoids inadvertent gotchas // enable must remain true throughout simulation assert property ( @(posedge clk) enable ); In SVA-2005 this is a Gotcha! The assertion defaults to strong, and can have a negative impact on simulation performance 14 of 27 7 2009 by

by, Assertion Temporal Logic Operators Mantis 1932 SV-2009 adds Linear Temporal Logic (LTL) operators nexttime, s_nexttime until, s_until until_with, s_until_with implies always, s_always eventually, s_eventually #-#, #=# Allows for generic templates in assertion libraries Allows for both weak and strong operations property p1; nexttime a; If the clock ticks once more, then a shall be true at the next clock tick property p2; s_nexttime a; The clock shall tick once more and a shall be true at the next clock tick 15 of 27 New Assertion Operators Mantis 1456, 1758 SV-2009 adds 4 PSL-like assertion shortcut operators property preqack; @(posedge clock) ena -> ##[+] req[+] ack; ##[+] is short for the operation ##[1:$] ##[*] is short for the operation ##[0:$] req[+] is short for the operation req[*1:$] req[*] is short for the operation req[*0:$] SV-2009 adds logical implication and a equivalence operators These operators can be used anywhere, not just in assertions always_comb begin a_implies_b = (a -> b); a_equiv_b = (a <-> b); The implication and equivalence operators return true or false -> is short for the operation (!a b) <-> is short for the operation ( (a -> b) && (b -> a) ) 16 of 27 8 2009 by

by, Assertion Case Statement and Value Change Function Mantis 2173, 1677 SV-2009 adds the ability to use case statements in properties Provides an intuitive coding style for complex assertions property p_delay(logic [1:0] delay); @(posedge clock) case (delay) 2'd0: a && b; 2'd1: a ##2 b; 2'd2: a ##4 b; 2'd3: a ##8 b; default: 0; // cause a failure if delay has x or z values case SV-2009 adds a $changed value sample function Returns true if an expression changed value during a clock cycle Can be used in assertions and other verification code assert property (counter_enable -> ##1 $changed(count)); 17 of 27 Multi-Clock Assertion Enhancements Mantis 1683, 1731 SV-2009 allows the operators ##0, -> and if...else to be used in multiple-clock properties SV-2005 only allowed these operators with single-clock assertions property p1; @(posedge clk0) if (b) @(posedge clk1) s1 else @(posedge clk2) s2 b is checked at posedge clk0 If b is true then s1 is checked at the nearest, possibly overlapping posedge clk1 Else s2 is checked at the nearest non-strictly subsequent posedge clk2 SV-2009 allows $rose, $fell, $stable and $changed functions to be specified with a different clock than the assertion Adds an optional second argument that specifies the clock property p2; @(posedge clk1) en && $rose(req, @(posedge clk2)) => gnt 18 of 27 9 2009 by

by, Assertion Action Block Controls Mantis 1361 SV-2009 adds new system tasks: $assertpassoff turn off execution of pass statements $assertpasson turn on execution of pass statements $assertfailoff turn off execution of fail statements $assertfailon turn on execution of fail statements $assertvacuousoff turn off execution of pass statements when assertion is a vacuous success $assertnonvacuouson turn on execution of pass statements when assertion is a true success a1: assert property (preqack) $info( preqack passed ); else $error( preqack failed ); initial $assertvacuousoff(a1); By default, the pass action block will execute for both success and vacuous success Turn off action block execution for vacuous successes 19 of 27 Assertion Variable Initialization Mantis 1668 SV-2009 allows assertion local variables to be initialized at the time of declaration In SV-2005, local variables could only be initialized as part of an expression evaluation in the sequence local variable pipe_in is initialized property pipeline; when assertion thread starts transaction_t pipe_in = data_in; @(posedge clk) en -> ##6 data_out == pipe_in; 20 of 27 10 2009 by

by, Procedural Concurrent Assertions Mantis 2398, 1995 SV-2009 clarifies the inference and semantic rules of concurrent assertions embedded within procedural blocks property p1; a ##1 b ##1 c; always @(posedge clk) begin if (!rstn) q <= '0; else if (ena) begin q <= d; assert property (p1); Inference rules for clock, disable and enable conditions are well defined Simulation semantic rules are well defined SV-2009 add the ability to use procedural concurrent assertions within loops (illegal in SV-2005) always @(posedge clk) for (i=0; i<maxi; i=i+1) begin... assert property (p1); 21 of 27 Triggered Method in Sequences Mantis 2415 SV-2009 merges the capabilities of the assertion.matched and.triggered methods.matched tests for sequence completion in sequences.triggered tests for sequence completion in procedural blocks In SV-2009,.triggered can be used both ways The.matched method is deprecated in SV-2009 `define TRUE 1 sequence qrequest; @(posedge clk1) req ##1 `TRUE[*1:6]; sequence: qrequest property preqcausedack; @(posedge clk2) ack -> qrequest.triggered; : preqcausedack ack must be preceded by a req within 1 to 6 clock cycles; ack and req are in different clock domains 22 of 27 11 2009 by

by, Assume, Cover and Restrict Assertion Statements Mantis 1460, 1726, 1806 SV-2009 adds action blocks to assume statements assume property (property_spec) action_block Makes the syntax for assume statements consistent with concurrent assert and cover statements SV-2009 adds immediate cover and assume statements cover (expression) action_block assume (expression) action_block Makes the syntax for assume statements consistent with assert and cover statements SV-2009 adds a restrict statements restrict property (property_spec); Restricts the value state space used by formal verification tools Ignored by simulators restrict property (@(posedge clk) mode == 0); 23 of 27 Deferred Immediate Assertions Mantis 2005 SV-2009 adds "deferred immediate assertions" assert #0 (expression) action_block assume #0 (expression) action_block cover #0 (expression) action_block Only the last assertion evaluation is used if the assertion is executed multiple times in the same time step Prevents erroneous assertion messages assign not_a =!a; always_comb begin a1: assert (not_a!= a); a2: assert #0 (not_a!= a); Simple immediate assertion could trigger on a glitch as a and not_a change values Deferred immediate assertion evaluates after a and not_a have stabilized in a time step 24 of 27 12 2009 by

by, Assertions at Elaboration Time Mantis 1769 SV-2009 adds the ability to print assertion severity messages at elaboration time, before simulation starts running When $fatal, $error, $warning or $info are used outside of an assertion or procedural block, they are executed at elaboration Can be called as a stand-alone statement Can be called from within a generate block Can be used to check the validity of parameter definitions module my_chip #(parameter N = 1) (input [N-1:0] in, output [N-1:0] out); generate if ((N < 1) (N > 8)) $fatal(1, "Parameter N has an invalid value of %0d", N); generate... module 25 of 27 New Keywords SystemVerilog-2009 reserves several additional keywords accept_on checker checker eventually global implies let nexttime reject_on restrict s_always s_eventually s_nexttime s_until s_until_with strong sync_accept_on sync_reject_on unique0 until until_with untyped weak SV-2009 adds a new argument to `begin_keywords Maintains keyword backward compatibility with previous versions of the Verilog and SystemVerilog standard `begin_keywords "1800-2005" module old_chip (...);... module `_keywords `begin_keywords "1800-2009" module new_chip (...);... module `_keywords 26 of 27 13 2009 by

by, But Wait There s More! Only the more notable enhancements have been presented There are hundreds of "behind the curtains" enhancements Clarify ambiguities in the SystemVerilog-2005 standard Additional examples Editorial corrections VPI support for all aspects of SystemVerilog-2009 Expert SystemVerilog training is available! Sunburst Design and Sutherland HDL might not agree on who has the best SystemVerilog training, but You will be a winner with training from either company! 27 of 27 14 2009 by