Can My Synthesis Compiler Do That?

Similar documents
What, If Anything, In SystemVerilog Will Help Me With FPGA-based Design. Stuart Sutherland, Consultant and Trainer, Sutherland HDL, Inc.

Lecture 8: More SystemVerilog Features

SystemVerilog 3.1: It s What The DAVEs In Your Company Asked For

What, If Anything, In SystemVerilog Will Help Me With FPGA-based Designs?

Verilog: The Next Generation Accellera s SystemVerilog Standard

Stuart Sutherland, Sutherland HDL, Inc.

CSE140L: Components and Design Techniques for Digital Systems Lab

Verilog Is Not Called Verilog Anymore!

CSE140L: Components and Design

SystemVerilog Essentials Simulation & Synthesis

EEL 4783: HDL in Digital System Design

Synthesis vs. Compilation Descriptions mapped to hardware Verilog design patterns for best synthesis. Spring 2007 Lec #8 -- HW Synthesis 1

EECS150 - Digital Design Lecture 10 Logic Synthesis

EECS150 - Digital Design Lecture 10 Logic Synthesis

Logic Synthesis. EECS150 - Digital Design Lecture 6 - Synthesis

Yet Another Latch and Gotchas Paper

Sunburst Design - Comprehensive SystemVerilog Design & Synthesis by Recognized Verilog & SystemVerilog Guru, Cliff Cummings of Sunburst Design, Inc.

Sunburst Design - Advanced SystemVerilog for Design & Verification by Recognized Verilog & SystemVerilog Guru, Cliff Cummings of Sunburst Design, Inc.

Quick Introduction to SystemVerilog: Sequental Logic

SystemVerilog For Design Second Edition

Speaker: Kayting Adviser: Prof. An-Yeu Wu Date: 2009/11/23

ECEN 468 Advanced Logic Design

Verilog for Synthesis Ing. Pullini Antonio

OVERVIEW: ============================================================ REPLACE

Lecture 32: SystemVerilog

Extending SystemVerilog Data Types to Nets

HDL Compiler Directives 7

A Verilog Primer. An Overview of Verilog for Digital Design and Simulation

Synthesizable Verilog

Standard Gotchas Subtleties in the Verilog and SystemVerilog Standards That Every Engineer Should Know

Synthesis of Language Constructs. 5/10/04 & 5/13/04 Hardware Description Languages and Synthesis

Course Profile SystemVerilog Design

Chapter 4 :: Topics. Introduction. SystemVerilog. Hardware description language (HDL): allows designer to specify logic function only.

קורס SystemVerilog Essentials Simulation & Synthesis.. SystemVerilog

Verilog Behavioral Modeling

Bulletproofing FSM Verification Automated Approach to Detect Corner Case Issues in an FSM Design

CMPE 415 Full and Parallel Case

IP Core Design. Lecture 6 Introduction to Verilog-2001

Verilog. What is Verilog? VHDL vs. Verilog. Hardware description language: Two major languages. Many EDA tools support HDL-based design

HDVL += (HDL & HVL) SystemVerilog 3.1 The Hardware Description AND Verification Language

EECS 470 Lab 6. SystemVerilog. Department of Electrical Engineering and Computer Science College of Engineering. (University of Michigan)

Unifying Design and Verification

Lecture 15: System Modeling and Verilog

FSM and Efficient Synthesizable FSM Design using Verilog

Chapter 4. Digital Design and Computer Architecture, 2 nd Edition. David Money Harris and Sarah L. Harris. Chapter 4 <1>

SystemVerilog Design: User Experience Defines Multi-Tool, Multi-Vendor Language Working Set Experience from Four Years of SVD Adoption

A Brief Introduction to Verilog Hardware Definition Language (HDL)

Chapter 4. Digital Design and Computer Architecture, 2 nd Edition. David Money Harris and Sarah L. Harris. Chapter 4 <1>

EECS150 - Digital Design Lecture 5 - Verilog Logic Synthesis

Verilog for High Performance

A short introduction to SystemVerilog. For those who know VHDL We aim for synthesis

HDLs and SystemVerilog. Digital Computer Design

SystemVerilog Design: User Experience Defines Multi-Tool, Multi-Vendor Language Working Set No Excuses for Not Using SystemVerilog in Your Next Design

ECE 4514 Digital Design II. Spring Lecture 15: FSM-based Control

Graduate Institute of Electronics Engineering, NTU. Lecturer: Chihhao Chao Date:

Writing Circuit Descriptions 8

Course Topics - Outline

Extending SystemVerilog Data Types to Nets

Simple Behavioral Model: the always block

List of Code Samples. xiii

Digital Design with SystemVerilog

EECS 427 Lecture 14: Verilog HDL Reading: Many handouts/references. EECS 427 W07 Lecture 14 1

CSE 502: Computer Architecture

Verilog Coding Guideline

Hardware Description Languages: Verilog

SystemVerilog Assertions Are For Design Engineers Too!

Design Creation & Synthesis Division Avoid FPGA Project Delays by Adopting Advanced Design Methodologies

Cadence Technical Analysis of System Verilog DECEMBER 2002

Verilog introduction. Embedded and Ambient Systems Lab

CAD for VLSI Design - I. Lecture 21 V. Kamakoti and Shankar Balachandran

Lecture #2: Verilog HDL

Course Details: Webpage

Synthesis of Combinational and Sequential Circuits with Verilog

Online Verilog Resources

A short introduction to SystemVerilog. For those who know VHDL We aim for synthesis

Introduction to Verilog

Digital Design with FPGAs. By Neeraj Kulkarni

Programmable Logic Devices Verilog VII CMPE 415

Modular SystemVerilog

Lecture 12 VHDL Synthesis

P-1/P-105. Samir Palnitkar. Prentice-Hall, Inc. INSTRUCTOR : CHING-LUNG SU.

An Overview of SystemVerilog 3.1

Hardware Description Languages: Verilog. Quick History of HDLs. Verilog/VHDL. Design Methodology. Verilog Introduction. Verilog.

TSEA44: Computer hardware a system on a chip

Chapter 2 Using Hardware Description Language Verilog. Overview

case Statatement Common variations for case statement Verilog has an implied break statement unlike C

Getting Ready for SystemVerilog at DAC

ES611 FPGA Based System Design. Behavioral Model

Verilog Design Principles

Recommended Design Techniques for ECE241 Project Franjo Plavec Department of Electrical and Computer Engineering University of Toronto

EN2911X: Reconfigurable Computing Topic 02: Hardware Definition Languages

Module 4. Design of Embedded Processors. Version 2 EE IIT, Kharagpur 1

14:332:231 DIGITAL LOGIC DESIGN. Hardware Description Languages

Course Topics - Outline

Index. 1=> implication operator > implication operator * See dot-starport connection

Introduction to Digital Design with Verilog HDL

ECE 4514 Digital Design II. Spring Lecture 13: Logic Synthesis

271/469 Verilog Tutorial

The Verilog Language COMS W Prof. Stephen A. Edwards Fall 2002 Columbia University Department of Computer Science

EN164: Design of Computing Systems Lecture 06: Lab Foundations / Verilog 2

Transcription:

1 of 22 Austin TX 1 of 30 A Tutorial on Important SystemVerilog Features Supported by ASIC and FPGA Synthesis Compilers Stu Sutherland Sutherland HDL Can My Synthesis Compiler Do That? Don Mills Microchip Technology based on a conference paper presented at DVCon-2014 in San Jose CA The full paper and presentation slides can be downloaded from www.sutherland-hdl.com (or www.shdl.co)

2 of 22 Austin TX What This Paper is About 2 of 30 Debunking the myth that SystemVerilog is not synthesizable Several important SystemVerilog constructs that are synthesizable Why those constructs are important for you to use 18 major advantages for designing with SystemVerilog Only a few Synthesizable SystemVerilog constructs are discussed in this presentation; Refer to the paper for the full list and details of Synthesizable SystemVerilog

3 of 22 Austin TX It s a Myth! 3 of 30 Verilog is a design language, and SystemVerilog is a verification language And synthesis compilers can t read in SystemVerilog Not True! SystemVerilog was designed to enhance both the design and verification capabilities of traditional Verilog ASIC and FPGA synthesis compilers have excellent support for RTL modeling with SystemVerilog

Stu Sutherland and Don Mills Synthesizing SystemVerilog for ASIC and FPGA Design 2014, Sutherland HDL, Inc. Austin TX verification design assertions test program blocks clocking domains process control interfaces nested hierarchy unrestricted ports automatic port connect enhanced literals time values and units specialized procedures ANSI C style ports generate localparam constant functions modules parameters function/tasks always @ assign $finish $fopen $fclose $display $write $monitor `define `ifdef `else `include `timescale SystemVerilog is Synthesizable SystemVerilog-2005/2009/2012 mailboxes semaphores constrained random values direct C function calls packed arrays array assignments unique/priority case/if void functions function input defaults function array args parameterized types standard file I/O $value$plusargs `ifndef `elsif `line @* Verilog-2005 uwire `begin_keywords `pragma $clog2 Verilog-2001 (* attributes *) configurations memory part selects variable part select Verilog-1995 (created in 1984) initial disable events wait # @ fork join classes inheritance strings references break continue return do while case inside aliasing const wire reg integer real time packed arrays 2D memory dynamic arrays associative arrays queues checkers enum typedef structures unions 2-state types packages $unit multi dimensional arrays signed types automatic ** (power operator) begin end while for forever if else repeat + = * / % >> << 4 of 22 4 of 30 2-state types shortreal type globals let macros ++ -- += -= *= /= >>= <<= >>>= <<<= &= = ^= %= ==?!=? inside streaming casting

Tell Me Where My Design Logic Type is Functionally Incorrect? Verilog always procedures model all types of design logic Synthesis must infer (guess) whether an engineer intended to have combinational, latched or sequential functionality SystemVerilog has hardware-specific always procedures: always_comb, always_latch, always_ff Documents designer intent Enforces several synthesis RTL rules Synthesis can check against designer intent always @(mode) if (!mode) o1 = a + b; else o2 = a - b; always_comb if (!mode) o1 = a + b; else o2 = a - b; Non-synthesizable code gives warnings Simulation, synthesis and formal tools use same rules 5 of 22 5 of 30 where did all these latches come from? Warning: test.sv:5: Netlist for always_comb block contains a latch

A Closer Look at always_comb and always_ff 6 of 22 6 of 30 SV s hardware-specific always procedures enforce synthesis rules always_comb (and always_latch): Automatically infers a correct combinational logic sensitivity Verilog s always @* can infer an incorrect sensitivity list Does not allow the same variables to be assigned elsewhere Prevents unintentional multi-driver logic Automatically triggers once at time 0 Ensures combinational outputs are correct at start of simulation always_ff: No other event controls ( @ ) are permitted within the block No blocking statements are permitted with the block #, wait, task calls, etc. are not allowed Blocking assignments are allowed need for temp. calculations NOTE: Simulation does not check if the code matches the intent

Automatically Infer wire and reg Data Types? Traditional Verilog has strict and confusing rules for port types Input ports must be a net type (wire) Output ports must be: reg in some contexts wire in other contexts 7 of 22 7 of 30 module chip (input wire in1, input wire in2, output reg out1, output wire out2 ); SystemVerilog makes it easy Just declare everything as logic!!! logic indicates the value set (4-state) to be simulated SystemVerilog infers a variable or net based on context module chip (input logic in1, input logic in2, output logic out1, output logic out2 ); Defining and maintaining modules just got a whole lot easier!

Allow Me to Avoid Using Cryptic Vector Part Selects? A byte (or other segment size) of a traditional Verilog vector is accessed using part-selects Awkward to use if a design frequently works with bytes Part-select coding errors will often simulate and synthesize SystemVerilog vectors can be declared with subfields Subfields are accessed using a simple index instead of part-selects 8 of 22 8 of 30 module add_third_byte (input wire [31:0] a, b, input wire ci, output reg [7:0] sum, output reg co ); always @(a, b, ci) {co,sum} = a[24:17] + b[24:17]; endmodule module add_third_byte (input logic [2:0][7:0] a, b,... ); always_comb {co,sum} = a[3] + b[3]; [7:0] [7:0] [7:0] [7:0] Byte selects are easier to model and are correct by construction! a[3] a[2] a[1] a[0]

Prevent Stupid Mistakes? 9 of 22 9 of 30 parameter [2:0] WAIT = 3'b001, LOAD = 3'b010, DONE = 3'b001; parameter [1:0] READY = 3'b101, SET = 3'b010, GO = 3'b110; Traditional Verilog reg [2:0] state, next_state; reg [2:0] mode_control; always @(posedge clk or negedge rstn) if (!resetn) state <= 0; else state <= next_state; always @(state) // next state decoder case (state) WAIT : next_state = state + 1; LOAD : next_state = state + 1; DONE : next_state = state + 1; endcase enum logic [2:0] {WAIT = 3'b001, SystemVerilog adds legal, LOAD but = 3'b010, a bug WAIT enumerated and DONE have types the same DONE value = 3'b001} state, next_state; enum legal, logic but a [1:0] bug parameter size is too small {READY = 3'b101, SET = 3'b010, GO = 3'b110} mode_control; always_ff @(posedge clk or negedge rstn) legal, if (!resetn) but a bug state wrong <= reset 0; value for state else state <= next_state; always_comb // next state decoder case (state) WAIT : next_state = state + 1; legal, LOAD but : a next_state bug state+1 = results state + in 1; invalid DONE : next_state = state + 1; state value endcase always @(state) // output decoder always_comb // output decoder case (state) case (state) WAIT : mode_control = READY; WAIT : mode_control = READY; LOAD : mode_control = SET; LOAD : mode_control = SET; DONE : mode_control = DONE; legal, DONE but : a mode_control bug wrong constant = DONE; used for endcase mode_control endcase

Allow Me to Transfer a Look- Up Table in One Line of Code? In Verilog arrays could only be accessed one element at a time Hard to reset, load or copy Hard to pass through module ports or to a function SystemVerilog allow entire arrays to be assigned Load array with one statement Copy array with one statement Pass through ports or to a function This is major! Manipulating entire data arrays substantially reduces lines of code (see example on next page) 10 of 22 10 of 30 reg [7:0] t1[0:63], t2[0:63]; integer i; always @(posedge clk) if (load) for (i=0; i<=63; i=i+1) t2[i] <= t1[i]; always @(posedge clk) if (!rstn) t2 <= {default:0}; else if (load) t2 <= t1;

Allow Me to Reduce 216 Lines of Code to Just 4 Lines? 11 of 22 11 of 30 Traditional Verilog has no easy way to bundle related signals Each signal is treated separately for assigning, copying, passing through module ports, etc. SystemVerilog structures bundle related signals together Entire structure can be assigned, copied, or passed through module ports typedef struct { logic [ 3:0] GFC; logic [ 7:0] VPI; logic [15:0] VCI; logic CLP; logic [ 2:0] T; logic [ 7:0] HEC; logic [ 7:0] Payload [0:47]; } uni_t; // UNI cell bundle Structures reduce code and ensure consistency a UNI ATM cell is made up of 54 signals module cell_transmitter 54 ports in Verilog (output uni_t d_out, input uni_t d_in, another 54 ports input logic clk, rstn); always @(posedge clk or negedge rstn) if (!resetn) d_out <= {default:0}; else d_out <= d_in; endmodule 108 separate assignment statements in Verilog

Allow Me to Use the Same Register for Different Storage? 12 of 22 12 of 30 Traditional Verilog does not allow the same register to store different types of data at different times Must define different registers for each type requires extra gates SystemVerilog adds unions a variable that is a union of types typedef struct packed { source_port } tcp_t; typedef struct packed { source_port } udp_t; dest_port dest_port length sequence checksum union packed { tcp_t tcp_data; udp_t udp_data; } data_packet; data_packet is a single variable that can store two different data types // register can store either TCP or UDP always_ff @(posedge din_clock) case (packet_type) TCP: data_packet.tcp_data <= tcp_pkt_in; UDP: data_packet.udp_data <= udp_pkt_in; endcase Unions reduce code and model shared resources

Support Sharing Definitions Across Several Modules? 13 of 22 13 of 30 SystemVerilog adds a package construct to Verilog Allows the same definition to be used by many modules package project_types; typedef logic [31:0] bus32_t; typedef enum [7:0] {...} opcodes_t; typedef struct {...} operation_t; function automatic crc_gen...; endpackage module ALU import project_types::*; (input operation_t operation, output bus32_t result); operation_t registered_op;... endmodule Ensures consistency throughout a project (including verification) Reduces duplicate code Makes code easier to maintain and reuse than `include

A Closer Look SystemVerilog Packages 14 of 22 14 of 30 Package definitions can be imported three ways Directly reference specific declarations in a package module chip (output definitions_pkg::instruction_t q,...);... package name scope resolution operator User-defined port type Import specific declarations from a package using import module chip import definitions_pkg::instruction_t; (output instruction_t q,...); An explicitly imported package item instruction_t instruction_reg; becomes a local name within the module... Import everything needed from a package using a wildcard Makes all declarations in the package available for import module chip import definitions_pkg::*; (output instruction_t q,...); opcode_t operation_reg;... Import just the package items that are referenced in the module A local declaration or explicit import takes precedence over a wildcard import

Help Me Make Better Decisions? Verilog has a limited of decision statements Comparing to multiple values is awkward The casex and casez statements have major gotchas SystemVerilog adds: ==? and!=? wildcard equality operators inside set membership operator case() inside wildcard decisions case (opcode) inside 8 b1???????:... // only compare most significant bit 8 b????1111:... // compare lower 4 bits, ignore upper bits... default: $error("bad opcode"); endcase 15 of 22 15 of 30 if ( (data >= 128) && (data <= 255))... if data is between 128 to 255 if (data ==? 8 b11??????) if (data inside {[128:255]) If opcode has the value 8'bzzzzzzzz, which branch should execute? Decisions can be modeled more accurately and with less code

A Closer Look at SV s ==? and inside Operators 16 of 22 16 of 30 The ==? and!=? wildcard equality operators allow masking bits X, Z,? bits in the right-hand operand are mask bits (not compared) X, Z,? bits in the left-hand operand are literal values Operator Usage Description = =? m = =? n is m identical to n? (ignore mask bits)! =? m! =? n is m not identical to n? (ignore masks) Examples: logic [3:0] m = 4 b11x1; m = =? 4 b1??1 returns 1 b1 The inside operator compares one value to a set of values Returns true (1'b1) if the operand matches any values in the set Uses the ==? wildcard equality operator for comparisons if (data inside {255,511,1023})... if data is 255, 511 or 1023 if (data inside {[0:255]})... if data is between 0 to 255, inclusive if (data inside {in1, in2, in3})... if data matches the current value of in1, in2, or in3 if (data inside {3'b1?1})... if data is 3'b101, 3'b111, 3'b1x1, or 3'b1z1

Support Run-time Checking of Full_case / Parallel_case Hazards? Verilog ignores full_case and parallel_case synthesis comments Can result is serious design flaws going undetected! Often referred to as The Evil Twins of synthesis SystemVerilog adds decision optimization checking Gives simulation violation warnings if either full_case or parallel_case synthesis optimization might not be safe to use always_comb // decoder for FSM with 3-states unique case (state) unique checks that: 2 b00:... 2 b01:... All state values that occur 2 b10:... are decoded endcase All case items are mutually exclusive unique checks both full_case and parallel_case behavior unique0 checks full_case 17 of 22 17 of 30 priority checks parallel_case Synthesis decision optimizations can be verified in simulation!

Reverse All the Bits or Bytes of My Resizable Vector? Verilog requires that bit-selects and part-selects of vectors must be referenced using the same endian as the vector declaration Makes it difficult to swap the order of bits or bytes of a vector parameter N=64; reg [N-1:0] d; always @(posedge clk) if (swap_bits) for (i=0; i<n; i=i+1) d[(n-1)-i] <= d[i]; SystemVerilog adds pack and unpack streaming operators SystemVerilog bit reverse bit reverse always @(posedge clk) if (swap_bytes) SystemVerilog byte reverse 18 of 22 18 of 30 for (i=0; i<n; i=i+8) d[((n-1)-i)-:8] <= d[i+:8]); Huh? byte reverse d = { << { d }}; d = { <<8{ d }}; Data manipulation is easier to code and less likely to have errors

Eliminate False Warnings for Intentional Size Mismatches? 19 of 22 19 of 30 Verilog does automatic size and type conversions RTL code often depends on these conversions Can result in false warning messages from lint checkers SystemVerilog has a cast operator Explicit conversion do not cause warnings logic [31:0] a, y; logic [ 5:0] b; y = {a,a} >> b; The truncation will cause a synthesis warning, even though the code is correct y = 32'({a,a} >> b); Rotate a by b number of times depends on upper 32 bits of the 64-bit operation result being truncated cast the operation result to 32 bits before assigning Documents intent that a change in type, size or sign is intended Can eliminate size and type mismatch warnings

Prevent Subroutines that Simulate but won t Synthesize? Verilog tasks are subroutines Synthesis imposes several restrictions on tasks It is possible for a task to simulates correctly, but not synthesize Verilog functions will almost always synthesize correctly, but cannot be used in place of a task SystemVerilog enhances functions several ways Void functions functions that can be used like a task Functions with output and inout formal arguments Passing arrays and structures as arguments (and more) 20 of 22 20 of 30 Important for synthesis! Void functions can be used like tasks, but are still functions and help ensure that the subroutine will be synthesizable

Support Abstract Models of Bus Protocols? Verilog uses separate ports for each signal in a bus protocol Requires lots of redundant port declarations and complex netlists SystemVerilog adds interfaces compound, multi-signal ports Bundles bus protocol signals together can include subroutines Verilog discrete ports CPU clk reset data address request grant ready mclk mrst RAM clk reset data address request grant ready SystemVerilog interface ports CPU clk reset interface port mclk mrst chip_bus interface interface port 21 of 22 21 of 30 interface chip_bus; logic [31:0] data, address; logic request, grant, boolean_t ready; endinterface RAM clk reset module CPU (chip_bus bus, input logic clk, input logic reset);... Simplifies complex bus definitions and interconnections Ensures consistency throughout the design

Easily Fill Expression Vectors of Any Size with All 1s In Verilog, there is no simple way to fill a vector with all 1 s 22 of 22 22 of 30 could also use coding tricks, such parameter N = 64; as replicate or invert operations reg [N-1:0] data_bus; data_bus = 64 hfffffffffffffff; //set all bits of data_bus to 1 vector width must be hard coded SystemVerilog adds a vector fill literal value x 0 fills all bits on the left-hand side with 0 x 1 fills all bits on the left-hand side with 1 x z fills all bits on the left-hand side with z x x fills all bits on the left-hand side with x Code will scale correctly when vector sizes change reg [N-1:0] data_bus; data_bus = x 1; set all bits of data_bus to 1

Automatically Calculate the Size of My Address Busses? 23 of 22 23 of 30 Verilog does not have a built-in way to calculate vector widths Engineers must calculate vector widths A mistake, or a change in design spec, can result in a faulty design SystemVerilog adds: $bits returns the width of a vector $clog2 returns the ceiling log base 2 of a vector width module fifo #(parameter FIFO_SIZE = 32) (input wire i_clk, o_clk, input wire [4:0] rd_ptr, wr_ptr, input wire [7:0] data_in, output reg [7:0] data_out );... module fifo #(parameter FIFO_SIZE = 32, P_WIDTH = $clog2(fifo_size) (input logic i_clk, o_clk, input logic [P_WIDTH-1:0] rd_ptr, wr_ptr,... );... What if the FIFO SIZE changes? The pointer widths automatically scale to the FIFO SIZE Vector sizes are scalable and correct by construction!

Simplify My Netlists and Perform Connection Checking? 24 of 22 24 of 30 Verilog s named port connection syntax is verbose and redundant Netlists require lots of typing (with a risk of size mismatches) module ALU (...); logic [31:0] i1, i2, o1; add32 adder1 (.i1(i1),.i2(i2),.out(o1)); SystemVerilog adds inferred netlist port connections dot-name only type port name, auto-connects net of same name dot-star automatically connects ports and nets with same name Size mismatches are a compilation error module ALU (...); logic [31:0] i1, i2, o2; add32 adder2 (.i1,.i2,.out(o2)); Reduces typing and detects declaration errors! module add32 (input [31:0] i1, i2, output [31:0] out ); module ALU (...); logic [31:0] i1, i2, o3; add32 adder3 (.*,.out(o3));

25 of 22 Austin TX 25 of 30 These are great additions to traditional Verilog! Yes, but does our synthesis compiler support SystemVerilog?

SystemVerilog Synthesis Support 26 of 22 GREEN = supported YELLOW = partially supported 26 of 30 RED = not supported SystemVerilog Construct Compiler A Compiler B Compiler C Compiler D Compiler E Compiler F always_ff, always_comb, always_latch logic type / inferred wire or reg Vectors with subfields Enumerated types Array assignments and copying Structures and structure assignments Packages and package import P inside and case inside decisions P Streaming operators Casting Void functions Interfaces Vector fill tokens $bits, $clog2 expression size function

But Wait There s More 27 of 22 27 of 30 SystemVerilog has many more useful constructs that are supported by many synthesis compilers Version keyword compatibility 2-state types User-defined types Parameterized types ++ and -- increment/decrement Multiple for-loop iterator variables do...while loops foreach loops break and continue loop controls Continuous assignments to variables Task/function formal arguments with default values Task/function calls pass by name Function return statements Parameterized tasks and functions Named statement group ends const variables Assertions Local time unit and precision $unit declaration space

28 of 22 Austin TX Summary 28 of 30 It s a myth! SystemVerilog is not just for verification, it is also a synthesizable design language Technically, there is no such thing as Verilog the IEEE changed the name to SystemVerilog in 2009 SystemVerilog adds many important synthesizable constructs to the old Verilog language Design more functionality in fewer lines of code Ensure RTL code will synthesize to the logic intended Make code more reusable in future projects ASIC and FPGA synthesis compilers support SystemVerilog There are some differences, but overall support is very good There are many benefits to using SystemVerilog for ASIC and FPGA design

29 of 22 Austin TX Questions? 29 of 30 the answer is in the paper... somewhere ( the full paper can be downloaded from sutherland-hdl.com ) Sutherland HDL trains engineers to be true SystemVerilog Wizard!s

30 of 22 Austin TX Once Upon a Time 30 of 30 Four design engineers worked on an important design. Their names were: Somebody, Everybody, Anybody and Nobody. Everybody had attended this DVClub Tutorial on synthesizing SystemVerilog, and was sure that Somebody would take advantage of using SystemVerilog. Anybody could have written the RTL code in SystemVerilog, but Nobody did it. Instead, the design was modeled in traditional Verilog-2001 RTL, using redundant, error-prone code. The product missed its market window, and cost the company oodles of lost revenue. Everybody blamed Somebody because Nobody did what Anybody could have done (but their competitors were pleased).