DAC 2009 SystemVerilog-2009 Presentation by Sunburst Design, Beaverton, Oregon, © 2009

1 of 59

SystemVerilog Is Getting Even Better! An Update on the Proposed 2009 SystemVerilog Standard Part 1

Presented by

Clifford E. Cummings Stuart Sutherland Sunburst Design, Inc. Sutherland HDL, Inc. [email protected] [email protected] www.sunburst-design.com www.sutherland-hdl.com sponsored by

© 2009, Sunburst Design, Inc.

2 of 59 50+ Major Enhancements in SystemVerilog-2009…

•Part 1: Q Cliff Cummings of Sunburst Design presents the details on the major new features in SystemVerilog-2009 that involve hardware models and testbench models Q www.sunburst-design.com/papers/ DAC2009_SystemVerilog_Update_Part1_SunburstDesign.pdf

•Part 2: Q Stu Sutherland of Sutherland HDL presents the details on the major new features in SystemVerilog-2009 that involve SystemVerilog Assertions Q www.sutherland-hdl.com/papers/ DAC2009_SystemVerilog_Update_Part2_SutherlandHDL.pdf

© 2009, Sunburst Design, Inc.

1of 30 Rev 1.0 DAC 2009 SystemVerilog-2009 Presentation by Sunburst Design, Beaverton, Oregon, © 2009

3 of 59 Cliff Cummings and Sunburst Design

• Verilog/SystemVerilog/Synthesis Trainer & Contractor • Accellera & IEEE 1800 SystemVerilog Committees • IEEE 1364 Verilog Standards Groups (VSG) – Chair of the Behavioral Task Force (Enhancements & Synthesis) • IEEE 1364.1 Verilog Synthesis Interoperability Group • Authored more than 40 technical papers – includes 17 "Best Paper" awards www.sunburst-design.com/paperswww.sunburst-design.com/papers

• Verilog instructor for 17 years SystemVerilogSystemVerilog instructorinstructor – Synthesis instructor for 15 years forfor 66 yearsyears StuStu isis aa – Provides the absolute best Verilog and SystemVerilog training! closeclose 2nd2nd !!!! • Tektronix, FPS, IBM - board, FPGA & ASIC design & Test Lab • MSEE-Oregon State Univ. / BSEE-BYU

© 2009, Sunburst Design, Inc.

4 of 59 Acknowledgement & Disclaimer

• Acknowledgements – Our thanks to Shalom Bresticker and Brad Pierce ...... both both compiled compiled lists lists ofof enhancements enhancements

(Emails)(Emails) SystemVerilog SystemVerilog & & www.eda.org/sv-bc/hm/8983.htmlwww.eda.org/sv-bc/hm/8983.html VerilogVerilog LRM LRM expert expert • Disclaimer – Cliff & Stu have made every attempt to show legal SystemVerilog-2009 examples

NotNot all all enhanced enhanced features features cancan be be tested tested at at this this time time

NoNo guarantees guarantees !! !!

© 2009, Sunburst Design, Inc.

2of 30 Rev 1.0 DAC 2009 SystemVerilog-2009 Presentation by Sunburst Design, Beaverton, Oregon, © 2009

5 of 59 The SystemVerilog Mantis Database

• The Mantis database contains corrections, clarifications & enhancement descriptions for SystemVerilog-2009

CurrentCurrent errata errata & & proposed proposed enhancements enhancements • www.eda.org/svdb Login:Login: guestguest Password:Password: guestguest

• Mantis Item numbers are noted on appropriate slides • Mantis items details can be viewed in the Mantis database

AfterAfter logginglogging inin ...... EnterEnter IssueIssue ## ...... thenthen selectselect thethe JumpJump buttonbutton

890 © 2009, Sunburst Design, Inc.

6 of 59 Scheduling of New SV Commands Mantis 890 From previous Region for new From previous PreponedPreponed Region for new timetime slot slot SVSV commandscommands

#1step#1step ActiveActive ActiveActive regionregion InactiveInactive setset UsedUsed for for sampling sampling & & NBANBA verifyingverifying DUT DUT outputs outputs EvaluateEvaluate concurrentconcurrent (testbench(testbench inputs) inputs) assertionsassertions ObservedObserved TriggerTrigger clockingclocking blocksblocks

ReactiveReactive regionregion Regions for new Regions for new setset SVSV commandscommands ReactiveReactive ExecuteExecute Re-InactiveRe-Inactive pass/failpass/fail assertionassertion codecode Update to Re-NBA programprogram blockblock codecode IEEE1800-2005 Re-NBA Standard

New event scheduling To next New event scheduling PostponedPostponed To next (already(already implemented) implemented) timetime slot slot © 2009, Sunburst Design, Inc. Sunburst

3of 30 Rev 1.0 DAC 2009 SystemVerilog-2009 Presentation by Sunburst Design, Beaverton, Oregon, © 2009

7 of 59

SystemVerilog-2009 Display Enhancements

© 2009, Sunburst Design, Inc.

8 of 59 Field Widths in Print Formats Mantis 1175

program print; randcase int a, b; 3: a = $urandom_range( 5'h10); 2: a = $urandom_range( 9'h100); initial 2: a = $urandom_range(13'h1000); repeat (8) begin 2: a = $urandom_range(17'h10000); endcase ... randcase 1: b = $urandom_range( 5'h10); $display("a=%h b=%h", a, b); 2: b = $urandom_range( 9'h100); end 2: b = $urandom_range(13'h1000); endprogram 1: b = $urandom_range(17'h10000); ShowShow allall endcase leadingleading 00's's $display $display $display ("a=%h b=%h" , a, b); ("a=%0h b=%0h" , a, b); ("a=%4h b=%4h" , a, b);

a=000071ec b=000000fb a=71ec b=fb RemoveRemove leadingleading a=71ec b=00fb a=00000003 b=00000048 a=3 b=48 00's's (ragged(ragged display)display) a=0003 b=0048 a=00000ed4 b=000000f4 a=ed4 b=f4 a=0ed4 b=00f4 a=00008fbb b=00000860 a=8fbb b=860 a=8fbb b=0860 a=00000003 b=0000003a a=3 b=3a a=0003 b=003a 4-character4-character fieldfield a=000000b1 b=00004895 a=b1 b=4895 a=00b1 b=4895 withwith leadingleading 00's's a=00000010 b=0000007c a=10 b=7c (orderly(orderly display)display) a=0010 b=007c a=0000097a b=000000da a=97a b=da a=097a b=00da © 2009, Sunburst Design, Inc.

4of 30 Rev 1.0 DAC 2009 SystemVerilog-2009 Presentation by Sunburst Design, Beaverton, Oregon, © 2009

9 of 59 Print Format Specifier %x Mantis 1749

%x%x is is a a synonym synonym for for %h %h program print; randcase int a, b; 3: a = $urandom_range( 5'h10); 2: a = $urandom_range( 9'h100); initial 2: a = $urandom_range(13'h1000); repeat (8) begin 2: a = $urandom_range(17'h10000); endcase ... randcase 1: b = $urandom_range( 5'h10); $display("a=%4x b=%4x", a, b); 2: b = $urandom_range( 9'h100); end 2: b = $urandom_range(13'h1000); endprogram 1: b = $urandom_range(17'h10000); endcase

a=71ec b=00fb Same orderly printout a=0003 b=0048 Same orderly printout a=0ed4 b=00f4 a=8fbb b=0860 a=0003 b=003a %x is just "syntactic sugar" a=00b1 b=4895 %x is just "syntactic sugar" (-like - not really needed) a=0010 b=007c (C-like - not really needed) a=097a b=00da

© 2009, Sunburst Design, Inc.

10 of 59 Print Format Specifier %p (%4p) Mantis 331

package complex; import complex::*; typedef struct { logic [7:0] re; module structprint; complex_s a, b, sum; logic [7:0] im; logic clk; } complex_s; ... initial begin endpackage clk <= '0; forever #(`CYCLE/2) clk = ~clk; module cplx_adder ( end output complex_s sum, input complex_s a, b); cplx_adder u1 (.*); SizedSized format format specifier for assign sum = add(a, b); specifier% %4p4p for initial $monitor(...); endmodule orderlyorderly printing printing ... endmodule

$monitor("sum=$monitor("sum=%4p%4p a=a=%4p%4p b=b=%4p%4p ",", sum,sum, a,a, b);b); sum='{re: x, im: x} a='{re: x, im: x} b='{re: x, im: x} sum='{re: 216, im: 240} a='{re: 193, im: 148} b='{re: 23, im: 92} sum='{re: 158, im: 85} a='{re: 138, im: 154} b='{re: 20, im: 187} sum='{re: 218, im: 240} a='{re: 36, im: 160} b='{re: 182, im: 80} sum='{re: 180, im: 4} a='{re: 108, im: 41} b='{re: 72, im: 219} © 2009, Sunburst Design, Inc.

5of 30 Rev 1.0 DAC 2009 SystemVerilog-2009 Presentation by Sunburst Design, Beaverton, Oregon, © 2009

11 of 59 $sformatf Returns a Formatted String Mantis 1589 & 1651

module test1; SystemVerilog2005 int a = 32; SystemVerilog2005 logic [31:0] b = 32'haabbccdd; $sformat$sformat task task assigns assigns string s; stringstring to to output output argument argument ( s(s))

initial begin $sformat(s, "\nThe value of b = %0d'h%h\n", a, b); $display("%s", s); Output display end Output display endmodule The value of b = 32'haabbccdd

module test2; SystemVerilog2009 adds int a = 32; SystemVerilog2009 adds function logic [31:0] b = 32'haabbccdd; $sformatf$sformatf function string s; thatthat returns returns a a string string

initial begin s = $sformatf("\nThe value of b = %0d'h%h\n", a, b); $display("%s", s); Mantis 1651: end Mantis 1651: $psprintf was rejected endmodule $psprintf was rejected (Proposed(Proposed synonym synonym for for $sformatf $sformatf ) ) © 2009, Sunburst Design, Inc.

12 of 59 $fatal/$error/$warning/$info Display Tasks Mantis 1641

In SystemVerilog2005 module tb; In SystemVerilog2005 $fatal / $error / $warning / $info ... $fatal / $error / $warning / $info couldcould only only be be used used in in assertions assertions function void check_output; if (cb1.y===exp) $display("PASS: y=%h exp=%h", y, exp); else $display("FAIL: y=%h exp=%h", y, exp); endfunction ... endmodule

InIn SystemVerilog2009 SystemVerilog2009 module tb; $fatal / $error / $warning / $info ... $fatal / $error / $warning / $info cancan be be used used anywhere anywhere $display $display can can be be used used function void check_output; if (cb1.y===exp) $info ("PASS: y=%h exp=%h", y, exp); else $fatal("FAIL: y=%h exp=%h", y, exp); endfunction ... endmodule

© 2009, Sunburst Design, Inc.

6of 30 Rev 1.0 DAC 2009 SystemVerilog-2009 Presentation by Sunburst Design, Beaverton, Oregon, © 2009

13 of 59

SystemVerilog-2009 Design Enhancements

© 2009, Sunburst Design, Inc.

14 of 59 always_ff Logic-Specific Process

• always_ff – Conveys designer's intent module dff1 ( to infer clocked logic output bit_t q, input bit_t d, clk, rst_n);

always_ff @(posedge clk, negedge rst_n) if (!rst_n) q <= 0; CorrectCorrect sensitivity sensitivity list else q <= d; list endmodule

© 2009, Sunburst Design, Inc.

7of 30 Rev 1.0 DAC 2009 SystemVerilog-2009 Presentation by Sunburst Design, Beaverton, Oregon, © 2009

15 of 59 Edge Event - For DDR Logic Mantis 2396

• SV2009 adds edge keyword EquivalentEquivalent to to both both posedgeposedge / /negedge negedge

CurrentlyCurrently illegal illegal syntax syntax NoNo posedge posedge ( clk(clk)) forfor synthesis synthesis NoNo negedge negedge ( clk(clk))

module ddrff ( RemoveRemove posedge posedge to to permit permit output bit_t q, triggeringtriggering on on both both edges edges input bit_t d, clk, rst_n); ????

always_ff @(clk, negedge rst_n) if (!rst_n) q <= 0; else q <= d; endmodule always_ffalways_ff shows shows designer'sdesigner's intent intent

always_ff @(edge clk, negedge rst_n)

CouldCould this this synthesize synthesize to to a a DDR DDR flip-flop flip-flop inin an an ASIC ASIC vendor vendor library library ?? ?? © 2009, Sunburst Design, Inc. Sunburst

16 of 59 .name Instantiation & Unconnected Ports Mantis 1660 SystemVerilog-2009SystemVerilog-2009 clarificationclarification ain bin alu_accum.valu_accum.v

8 8 opcode[2:0] alu (8-bit) 3 alu_out 8 1 1 alu_out[7] 1 zero ones 8 DanglingDangling zerozero xtend accum && onesones outputsoutputs clk 8 8 .name allows unconnected rst_n .name allows unconnected portsports to to be be omitted omitted dataout[15:8] dataout[7:0] 16

dataout NotNot the the original original intentintent for for .name .name © 2009, Sunburst Design, Inc.

8of 30 Rev 1.0 DAC 2009 SystemVerilog-2009 Presentation by Sunburst Design, Beaverton, Oregon, © 2009

17 of 59 .name Instantiation & Unconnected Ports Mantis 1660

module alu_accum ( output [15:0] dataout, LegalLegal ( but(but not not required required):): input [7:0] ain, bin, list unconnected ports input [2:0] opcode, list unconnected ports input clk, rst_n); wire [7:0] alu_out;

alu alu (.alu_out, .zero(), .one(), .ain, .bin, .opcode); accum accum (.dataout(dataout[7:0]), .datain(alu_out), .clk, .rst_n); xtend xtend (.dout(dataout[15:8]), .din(alu_out[7]), .clk, .rst_n); endmodule

Legal:Legal: ... omit unconnected ports alu alu (.alu_out, .ain, .bin, .opcode); omit unconnected ports accum accum (.dataout(dataout[7:0]), .datain(alu_out), .clk, .rst_n); ...

LegalLegal ( but(but WRONG! WRONG!):): ... omitomit design design port port ( alu_out(alu_out)) alu alu (.ain, .bin, .opcode); accum accum (.dataout(dataout[7:0]), .datain(alu_out), .clk, .rst_n); ... Another good reason to avoid using .name © 2009, Sunburst Design, Inc. Another good reason to avoid using .name

18 of 59 2-to-4 Decoder w/ Enable SystemVerilog-2005 Style

module dec2_4a ( ======output logic [3:0] y, | Line | full/parallel | input logic [1:0] a, uniqueunique casecase ======input logic en); withwith initial initial default default | # | user/user | always_comb begin assignmentassignment ======y = 0; unique case ({en,a}) 3'b100: y[a]=1; uniqueunique 3'b101: y[a]=1; SameSame as as full_case full_case 3'b110: y[a]=1; parallel_caseparallel_case 3'b111: y[a]=1; endcase end endmodule SystemVerilogSystemVerilog simulatorssimulators areare requiredrequired toto givegive aa run-timerun-time warningwarning whenwhen en=0en=0 parallel_caseparallel_case (uniqueness)(uniqueness) uniqueunique means:means: (1) case expression can only match 1 case item full_casefull_case (1) case expression can only match 1 case item all possible cases are defined (2)(2) case case expression expression MUST MUST match match 1 1 case case item item all possible cases are defined (others(others are are "don't "don't cares") cares") © 2009, Sunburst Design, Inc.

9of 30 Rev 1.0 DAC 2009 SystemVerilog-2009 Presentation by Sunburst Design, Beaverton, Oregon, © 2009

19 of 59 2-to-4 Decoder with Enable WRONG Synthesis Results! SystemVerilog simulation Dangling enable! SystemVerilog simulation Dangling enable! shouldshould warn warn about about this this error error

en y[3] uniqueunique case case dec2_4a dec2_4a uniqueunique infersinfers the the wrong logic wrong logic y[2]

y[1]

a[1] y[0] a[0]

© 2009, Sunburst Design, Inc.

20 of 59 2-to-4 Decoder w/ Enable SystemVerilog-2005 Current Work-Around

module dec2_4b ( ======output logic [3:0] y, | Line | full/parallel | input logic [1:0] a, uniqueunique casecase ======input logic en); withwith initial initial default default | # | auto/user | always_comb begin assignmentassignment ======y = 0; unique case ({en,a}) 3'b100: y[a]=1; uniqueunique withwith empty empty default default 3'b101: y[a]=1; samesame as as parallel_case parallel_case 3'b110: y[a]=1; 3'b111: y[a]=1; default: ; EmptyEmpty default default endcase killskills full_case full_case end endmodule Ugly,Ugly, but but fixes fixes the the synthesissynthesis results results

© 2009, Sunburst Design, Inc.

10 of 30 Rev 1.0 DAC 2009 SystemVerilog-2009 Presentation by Sunburst Design, Beaverton, Oregon, © 2009

21 of 59 Unique0 - parallel_case Equivalent Mantis 2131

module dec2_4c ( ======output logic [3:0] y, | Line | full/parallel | input logic [1:0] a, unique0unique0 casecase ======input logic en); withwith initial initial default default | # | auto/user | always_comb begin assignmentassignment ======y = 0; unique0 case ({en,a}) 3'b100: y[a]=1; unique0unique0 3'b101: y[a]=1; samesame as as 3'b110: y[a]=1; parallel_caseparallel_case 3'b111: y[a]=1; endcase end endmodule SimulationSimulation isis correctcorrect whenwhen en=0en=0 parallel_caseparallel_case (uniqueness)(uniqueness) unique0 means: unique0 means: NOT (1) case expression can only match 1 case item NOTfull_case full_case (1) case expression can only match 1 case item (others covered by initial (2)(2) case case expression expression can can match match 1 1 or or 0 0 case case items items (others covered by initial defaultdefault assignment) assignment) © 2009, Sunburst Design, Inc.

22 of 59 2-to-4 Decoder with Enable Correct Synthesis Results

a[1] SystemVerilogSystemVerilog a[0] y[3] dec2_4bdec2_4b en dec2_4cdec2_4c

y[2]

y[1]

y[0]

© 2009, Sunburst Design, Inc.

11 of 30 Rev 1.0 DAC 2009 SystemVerilog-2009 Presentation by Sunburst Design, Beaverton, Oregon, © 2009

23 of 59 priority/unique/unique0 Violations Mantis 2008

ReportedReported as as warnings warnings (vendors(vendors did did not not want want • SV-2005: priority/unique warnings toto report report false-errors) false-errors)

• SV-2009: priority/unique/unique0 violations ReportedReported as as violations violations

AskAsk vendors vendors to to provide provide fatal-on-violation option uniqueunique: :Only Only one one case case fatal-on-violation option itemitem should should match match the the Simulation scenario: casecase expression expression Simulation scenario: (1)(1) a a goes goes to to 1 1 always_comb begin: a1 (2)(2) always_comb always_comb ( a1(a1) )triggers triggers unique case (1’b1) (3)(3) unique unique case case detects detects violation violation a : z = b; (a(a & & not_a not_a both both match match 1'b1 1'b1)) not_a : z = c; (4)(4) violation violation report report generated generated endcase (scheduled(scheduled into into Observed Observed Region Region)) end (5)(5) always_comb always_comb ( a2(a2) )triggers triggers (6)(6) not_a not_a goes goes to to 0 0 always_comb begin: a2 (7)(7) always_comb always_comb ( a1(a1) )re-triggers re-triggers not_a = !a; (8)(8) unique unique case case detects detects NO NO violation violation end (9)(9) violation violation report report cleared cleared (before(before entering entering Observed Observed Region Region)) © 2009, Sunburst Design, Inc.

24 of 59 Default Inputs For Module/Interface Ports Mantis 2399 (Corrects Mantis1619 Enhancement)

OldOld version version of of module register ( registerregister module module output logic [7:0] q, input logic [7:0] d, input logic clk, rst_n); DefaultDefault values values might might be be useful useful forfor infrequently infrequently used used inputs inputs always_ff @(posedge clk, negedge rst_n) if (!rst_n) q <= '0; DefaultDefault values values only only legal legal else q <= d; withwith ANSI-style ANSI-style port port list list endmodule

module register ( NewNew version version of of register module output logic [7:0] q, register module withwith set_n set_n input input input logic [7:0] d, NewNew input input has has input logic clk, rst_n, aa default default value value input logic set_n='1 );

always_ff @(posedge clk, negedge rst_n, negedge set_n) if (!rst_n) q <= '0; else if (!set_n) q <= '1; else q <= d; CAUTION:CAUTION: instantiation instantiation rules rules endmodule cancan be be confusing confusing © 2009, Sunburst Design, Inc.

12 of 30 Rev 1.0 DAC 2009 SystemVerilog-2009 Presentation by Sunburst Design, Beaverton, Oregon, © 2009

25 of 59 Default Inputs For Module/Interface Ports Mantis 2399 (Corrects Mantis1619 Enhancement) set_nset_n / /rst_n rst_n module register ( module tb; bothboth declared declared output logic [7:0] q, logic [7:0] q; input logic [7:0] d, logic [7:0] d; input logic clk, logic clk; input logic rst_n='1 , logic rst_n, set_n; input logic set_n='1 ); ... // register endmodule set_nset_n and and rst_n rst_n inputs inputs ... registerregister instantiation instantiation havehave default default values values endmodule

register r1 (.q(q), .d(d), .clk(clk), .rst_n(rst_n), .set_n(set_n));

register r1 (.q, .d, .clk, .rst_n, .set_n); tbtb overridesoverrides defaultdefault set_nset_n // rst_nrst_n valuesvalues

register r1 (.q(q), .d(d), .clk(clk), .rst_n(rst_n));

register r1 (.q, .d, .clk, .rst_n); tbtb onlyonly overridesoverrides defaultdefault rst_nrst_n valuevalue register keepskeeps defaultdefault register CAUTION: this can be confusing register r1 (.*); set_nset_n // rst_nrst_n valuesvalues CAUTION: this can be confusing © 2009, Sunburst Design, Inc.

26 of 59 Default Inputs For Module/Interface Ports Mantis 2399 (Corrects Mantis1619 Enhancement) set_nset_n NOT NOT module register ( module tb; declareddeclared output logic [7:0] q, logic [7:0] q; input logic [7:0] d, logic [7:0] d; input logic clk, set_nset_n logic clk; input logic rst_n='1 , assignedassigned logic rst_n; input logic set_n='1 ); ... assign set_n = d[7]; endmodule set_nset_n and and rst_n rst_n inputs inputs // register have default values have default values ... registerregister instantiation instantiation endmodule

register r1 (.q(q), .d(d), .clk(clk), .rst_n(rst_n), .set_n(.set_n));

tbtb overridesoverrides defaultdefault set_nset_n // rst_nrst_n valuesvalues

register r1 (.q(q), .d(d), .clk(clk), .rst_n(rst_n)); tbtb onlyonly overridesoverrides defaultdefault rst_nrst_n valuevalue

register r1 (.q, .d, .clk, .rst_n, .set_n); ERROR:ERROR: set_nset_n notnot register r1 (.q, .d, .clk, .rst_n); declareddeclared inin tbtb © 2009, Sunburst Design, Inc.

13 of 30 Rev 1.0 DAC 2009 SystemVerilog-2009 Presentation by Sunburst Design, Beaverton, Oregon, © 2009

27 of 59 Bit Selects & Part Selects of Expressions Mantis 1197

module expr_range; module expr_range; logic [2:0] y; logic [2:0] y; logic [7:0] a, b, c; logic [7:0] a, b, c; logic [7:0] tmp; assign y = ((a & b) | c)[4:2]; assign tmp = (a & b) | c; assign y = tmp[4:2]; ... endmodule ... endmodule VerilogVerilog only only allows allows bit bit SystemVerilog-2009SystemVerilog-2009 andand part part selects selects of of allowsallows bit bit and and part part netsnets and and variables variables selectsselects expressions expressions

MightMight require require CAUTION:CAUTION: more more concise concise but but extraextra code code perhapsperhaps more more confusing(?) confusing(?)

© 2009, Sunburst Design, Inc.

28 of 59

SystemVerilog-2009 Packages, Parameters, Compiler Directives

© 2009, Sunburst Design, Inc.

14 of 30 Rev 1.0 DAC 2009 SystemVerilog-2009 Presentation by Sunburst Design, Beaverton, Oregon, © 2009

29 of 59 Package Import in Design Element Header Mantis 329 SystemVerilog-2005SystemVerilog-2005 packagepackage usage usage style style #1 #1 package data_pkg; typedef logic [7:0] data_t; typedef logic clk_t; DeclareDeclare the the data_pkg data_pkg endpackage andand bit_pkg bit_pkg

package bit_pkg; bit_pkg::clk_t typedef bit clk_t; bit_pkg::clk_t not used typedef bit rst_t; not used endpackage

module register ( Use the data_t and clk_t output data_pkg::data_t q, Use the data_t and clk_t from the data_pkg input data_pkg::data_t d, from the data_pkg input data_pkg::clk_t clk, input bit_pkg::rst_t rst_n); UseUse the the rst_t rst_t from from the bit_pkg ... the bit_pkg endmodule

...... somewhat somewhat verbose verbose © 2009, Sunburst Design, Inc.

30 of 59 Package Import in Design Element Header Mantis 329 SystemVerilog-2005SystemVerilog-2005 packagepackage usage usage style style #2 #2 package data_pkg; typedef logic [7:0] data_t; typedef logic clk_t; DeclareDeclare the the data_pkg data_pkg endpackage andand bit_pkg bit_pkg

package bit_pkg; bit_pkg::clk_t typedef bit clk_t; bit_pkg::clk_t not used typedef bit rst_t; not used endpackage UseUse the the data_t data_t and and clk_t clk_t import data_pkg::*; fromfrom the the data_pkg data_pkg import bit_pkg::rst_t; UseUse the the rst_t rst_t from from module register ( thethe bit_pkg bit_pkg output data_t q, input data_t d, input clk_t clk, input rst_t rst_n); ...... packages packages have have been been imported imported intointo the the $unit $unit/$root/$root space space ... (depending upon the simulator) endmodule (depending upon the simulator) © 2009, Sunburst Design, Inc.

15 of 30 Rev 1.0 DAC 2009 SystemVerilog-2009 Presentation by Sunburst Design, Beaverton, Oregon, © 2009

31 of 59 Package Import in Design Element Header

Mantis 329 SystemVerilog-2009SystemVerilog-2009 adds adds import import of of locallocal package package declarations declarations in in module module,, interfaceinterface and and program program headers headers package data_pkg; typedef logic [7:0] data_t; typedef logic clk_t; DeclareDeclare the the data_pkg data_pkg endpackage andand bit_pkg bit_pkg

package bit_pkg; bit_pkg::clk_t typedef bit clk_t; bit_pkg::clk_t not used typedef bit rst_t; not used endpackage PackagesPackages are are available available to the module header to the module header Use the data_t and clk_t module register Use the data_t and clk_t fromfrom the the data_pkg import bit_pkg::rst_t, data_pkg::*; data_pkg (output data_t q, UseUse the the rst_t rst_t from from input data_t d, the bit_pkg input clk_t clk, the bit_pkg input rst_t rst_n);

...... packages have been imported endmodule ... packages have been imported locallylocally into into the the register register module module

© 2009, Sunburst Design, Inc.

32 of 59 Package Chaining - Export in a Package Mantis 1323 SystemVerilog-2005SystemVerilog-2005 did did not not permit permit packagepackage nesting/ nesting/importimport package pkg1; package pkg2a; typedef logic [2:0] src1_t; typedef logic [2:0] src1_t; typedef logic [2:0] dst1_t; typedef logic [2:0] dst1_t; typedef logic [7:0] data_t; typedef logic [2:0] src2_t; typedef struct { typedef logic [2:0] dst2_t; src1_t fld1; typedef logic [15:0] data_t; dst1_t fld2; typedef struct packed { data_t fld3; src1_t fld1; } pkt_t; dst1_t fld2; endpackage src2_t fld3; dst2_t fld4; data_t fld5; } pkt_t; import pkg2a::*; IfIf used, used, re-declaration re-declaration of of src1_t src1_t and was required endpackage anddst1_t dst1_t was required module register ( output pkt_t q, input pkt_t d, and use the input logic clk, importimport and use the input logic rst_n); expandedexpanded pkg2a pkg2a package package ... endmodule

© 2009, Sunburst Design, Inc.

16 of 30 Rev 1.0 DAC 2009 SystemVerilog-2009 Presentation by Sunburst Design, Beaverton, Oregon, © 2009

33 of 59 Package Chaining - Export in a Package Mantis 1323 SystemVerilog-2009SystemVerilog-2009 allows allows packagepackage nesting/ nesting/importimport/export/export package pkg1; package pkg2; typedef logic [2:0] src1_t; import pkg1::*; typedef logic [2:0] dst1_t; export pkg1::*; typedef logic [7:0] data_t; typedef logic [2:0] src2_t; typedef struct { typedef logic [2:0] dst2_t; src1_t fld1; typedef logic [15:0] data_t; dst1_t fld2; typedef struct packed { data_t fld3; src1_t fld1; } pkt_t; dst1_t fld2; Add the src2_t endpackage src2_t fld3; Add the src2_t and dst2_t types dst2_t fld4; and dst2_t types importimport/export/export the the src1_t src1_t data_t fld5; andand dst1_t dst1_t types types } pkt_t; import pkg2::*; endpackage module register ( OverrideOverride the the data_t data_t output pkt_t q, andand pkt_t pkt_t types types input pkt_t d, and use the input logic clk, importimport and use the input logic rst_n); expandedexpanded pkg2 pkg2 package package ... endmodule

© 2009, Sunburst Design, Inc.

34 of 59 Multiple Package Export Mantis 1323

package pkg3a; importimport each each package package typedef logic [7:0] byte_t; separately ... separately endpackage

package pkg3b; package pkg4; ... import pkg3a::byte_t; endpackage import pkg3b::*; import pkg3c::*; package pkg3c; import pkg3d::*; ... export *::*; endpackage endpackage

package pkg3d; exportexport all all packages packages ... (using(using wildcards) wildcards) endpackage

LikeLike doing doing package package extensionextension ...... with with multiple multiple inheritanceinheritance !! !! © 2009, Sunburst Design, Inc.

17 of 30 Rev 1.0 DAC 2009 SystemVerilog-2009 Presentation by Sunburst Design, Beaverton, Oregon, © 2009

35 of 59 Package Automatic Declarations Mantis 1524 SystemVerilog-2005SystemVerilog-2005 had: had: SystemVerilog-2009SystemVerilog-2009 adds: adds: ••modulemodule automaticautomatic ••packagepackage automaticautomatic ••programprogram automaticautomatic ••interfaceinterface automaticautomatic

NormalNormal package package ...... automaticautomatic packagepackage ......

package complex; package automatic complex; typedef struct { typedef struct { logic [7:0] re; logic [7:0] re; logic [7:0] im; ...... static logic [7:0] im; ...... automatic automatic } complex_s; functionfunction } complex_s; functionfunction

function complex_s add; function complex_s add; input complex_s a, b; input complex_s a, b; complex_s sum; complex_s sum; sum.re = a.re + b.re; sum.re = a.re + b.re; sum.im = a.im + b.im; sum.im = a.im + b.im; return(sum); return(sum); endfunction endfunction endpackage endpackage © 2009, Sunburst Design, Inc.

36 of 59 Localparams in ANSI-Style Headers Mantis 1134 localparamlocalparam can can be be in in thethe parameter parameter port port list list `timescale 1ns / 1ns module ram #(parameter AWIDTH=10, localparam DEPTH=1<

assign data = (!cs_n && r_wn) ? mem[addr] : 'z;

always_latch if (!cs_n && !r_wn) mem[addr] <= data; DEPTH not endmodule DEPTH not listedlisted

ramram instantiation: instantiation: AWIDTH=20AWIDTH=20 (1MB) (1MB) ram #(20,16) ram1 (...); DWIDTH=16DWIDTH=16 © 2009, Sunburst Design, Inc.

18 of 30 Rev 1.0 DAC 2009 SystemVerilog-2009 Presentation by Sunburst Design, Beaverton, Oregon, © 2009

37 of 59 Blank And Illegal Parameter Defaults Mantis 907 NOTE:NOTE: SIZE SIZE parameter parameter not not assignedassigned a a default default value value

module register #(SIZE) ( output logic [SIZE-1:0] q, input logic [SIZE-1:0] d, input logic clk, rst_n);

always_ff @(posedge clk, negedge rst_n) Parameter must be if (!rst_n) q <= '0; Parameter must be defineddefined when when the the else q <= d; module is instantiated endmodule module is instantiated

module tb; parameter SIZE = 64; logic [SIZE-1:0] q; logic [SIZE-1:0] d; logic clk, rst_n;

register #(SIZE) r1 (.*); //... endmodule

© 2009, Sunburst Design, Inc.

38 of 59 Setting Parameters in Configurations Mantis 2037 File:File: rtl.cfg rtl.cfg module tb; config rtl; parameter SZ = 12; design tbLib.tb; ... default liblist rtlLib; pipeline #(.WIDTH(SZ)) p1 (.*); instance tb use (.SZ(16)); ... endmodule endconfig Parameter values Parameter values module pipeline #(WIDTH=4) ( Parameter values Parameter values before after output logic [WIDTH-1:0] q, beforeconfig config afterrtl rtlconfig config input logic [WIDTH-1:0] d, SZSZ =12=12 SZSZ =16=16 input logic clk); WIDTH=12 (default 4) WIDTH=16 logic [WIDTH-1:0] p1, p2; WIDTH=12 (default 4) WIDTH=16 SIZESIZE =12=12 (default (default 8 8) ) SIZESIZE =16=16 register #(.SIZE(WIDTH)) r[1:3] (.q({q,p2,p1}), .d({p2,p1,d}), .clk(clk)); More endmodule Moreconfig configparameter parameter capabilitiescapabilities have have been been added added (not shown) module register #(SIZE=8) ( (not shown) output logic [SIZE-1:0] q, input logic [SIZE-1:0] d, input logic clk); File:File: lib.map lib.map always_ff @(posedge clk) q <= d; library tbLib tb/*.sv; endmodule library rtlLib rtl/*.sv; © 2009, Sunburst Design, Inc.

19 of 30 Rev 1.0 DAC 2009 SystemVerilog-2009 Presentation by Sunburst Design, Beaverton, Oregon, © 2009

39 of 59 Verilog-95 Macro Capabilities

`define CYCLE 100 DefineDefine and and use use a a macro macro ... (every(every Verilog Verilog coder coder knows knows this this style) style) initial begin clk <= '0; forever #(`CYCLE/2) clk = ~clk; end

LineLine continuation continuation charactercharacter \\ DefineDefine a a multi-line multi-line macro macro (not all Verilog coders know this) `define assert_clk( ... ) \ (not all Verilog coders know this) assert property (@(posedge clk) disable iff (!rst_n) ... )

PassPass an an argument argument to to Define a multi-line macro thethe macro macro argarg Define a multi-line macro withwith input input arguments arguments (not all Verilog coders know this) `define assert_clk( arg ) \ (not all Verilog coders know this) assert property (@(posedge clk) disable iff (!rst_n) arg )

© 2009, Sunburst Design, Inc.

40 of 59 Macros with Default Arguments Mantis 1571

• SystemVerilog-2009 permits macros to have arguments with default values

ByBy default, default, macro macro uses uses clk clk forfor assertion assertion sampling sampling

`define assert_clk(arg, ck=clk) \ assert property (@(posedge ck) disable iff (!rst_n) arg)

ERROR_q_did_not_follow_d: Use default clk `assert_clk(q==$past(d)); Use default clk

ERROR_q_did_not_follow_d: Use clk2 `assert_clk(q==$past(d), clk2); Use clk2

© 2009, Sunburst Design, Inc.

20 of 30 Rev 1.0 DAC 2009 SystemVerilog-2009 Presentation by Sunburst Design, Beaverton, Oregon, © 2009

41 of 59 Verilog `define & `undef

`define DSIZE 8 `define`define data data size, size, `define ASIZE 10 `define`define address address size size `define MDEPTH 1024 `define`define memory memory depth depth module ram1 ( inout [`DSIZE-1:0] data, input [`ASIZE-1:0] addr, input en, rw_n);

logic [`DSIZE-1:0] mem [0:`MEM_DEPTH-1];

assign data = (rw_n && en) ? mem[addr] : {`DSIZE{1'bz}};

always @* begin if (!rw_n && en) mem[addr] <= data; end endmodule `undef DSIZE `undef`undef data data size, size, `undef ASIZE `undef`undef address address size size `undef MDEPTH `undef`undef memory memory depth depth © 2009, Sunburst Design, Inc.

42 of 59 `undefineall Mantis 1090

`define DSIZE 8 `define`define data data size, size, `define ASIZE 10 `define`define address address size size `define MDEPTH 1024 `define`define memory memory depth depth module ram1 ( inout [`DSIZE-1:0] data, input [`ASIZE-1:0] addr, input en, rw_n);

logic [`DSIZE-1:0] mem [0:`MEM_DEPTH-1];

assign data = (rw_n && en) ? mem[addr] : {`DSIZE{1'bz}};

always_latch begin if (!rw_n && en) mem[addr] <= data; end endmodule `undefineall un-defines un-defines `undefineall `undefineall allall `define `define macros macros

© 2009, Sunburst Design, Inc.

21 of 30 Rev 1.0 DAC 2009 SystemVerilog-2009 Presentation by Sunburst Design, Beaverton, Oregon, © 2009

43 of 59 SystemVerilog Parameterized Model A Better Solution ConsiderConsider this: this: IfIf you you are are using using `undefineall `undefineall itit looks looks like like a a local local constant constant

module ram1 #(parameter ASIZE=10, DeclareDeclare parameters, parameters, DSIZE=8) locallocal to to the the module module (inout [DSIZE-1:0] data, input [ASIZE-1:0] addr, input en, rw_n);

localparam MEM_DEPTH = 1<

assign data = (rw_n && en) ? mem[addr] CalculateCalculate the the memory memory depth depth : {DSIZE{1'bz}}; fromfrom the the address address size size

always_latch begin if (!rw_n && en) mem[addr] <= data; end endmodule

Guideline:Guideline: choose choose parameter parameter first first Guideline:Guideline: choose choose `define `define only only if if needed needed © 2009, Sunburst Design, Inc.

44 of 59

SystemVerilog-2009 Arrays & Queues Enhancements

© 2009, Sunburst Design, Inc.

22 of 30 Rev 1.0 DAC 2009 SystemVerilog-2009 Presentation by Sunburst Design, Beaverton, Oregon, © 2009

45 of 59 Associative Array Clarifications Mantis 1457 foreach command command works works with with foreach SV2009SV2009 clarifies clarifies non-non-[*] associative associative arrays arrays [*] foreachforeach fails fails with with module aa2; [*][*] assoc assoc arrays arrays typedef bit [7:0] byte_t; byte_t aa [int]; byte_t aa [*]; 1 ARRAY ELEMENTS initial begin aa[1234]=aa aa[2143] = 8'hAA; 9 ARRAY ELEMENTS aa_display; aa[ 0]=cc 12 ARRAY ELEMENTS for (int i=0; i<8; i++) aa[ 1]=cc aa[ 0]=cc aa[i]=8'hCC; aa[ 2]=cc aa[ 1]=cc aa_display; aa[ 3]=cc aa[ 2]=cc for (int i=5; i<21; i+=5) aa[ 4]=cc aa[ 3]=cc aa[i]=8'hDD; aa[ 5]=cc aa[ 4]=cc aa_display; aa[ 6]=cc aa[ 5]=dd end aa[ 7]=cc aa[ 6]=cc aa[1234]=aa aa[ 7]=cc endmodule aa[ 10]=dd aa[ 15]=dd function void aa_display; aa[ 20]=dd $display("%0d ARRAY ELEMENTS %0d", aa.num()); aa[1234]=aa foreach (aa[i]) $display("aa[%4d]=%2", i, aa[i]); endfunction foreach storesstores eacheach aa[] indexindex inin thethe i variablevariable © 2009, Sunburst Design, Inc. foreach aa[] i

46 of 59 Associative Array Clarifications Mantis 1723

• SystemVerilog 2005 array types & methods ReturnsReturns the the size size of of – Dynamic arrays: .size() method thethe dynamic dynamic array array – Queues: .size() method ReturnsReturns the the size size of of – Asosciative arrays: .num() method thethe queue queue

ReturnsReturns the the number number of of elementselements in in the the associativeassociative array array function void aa_display; $display("%0d ARRAY ELEMENTS %0d", aa.num()); ... endfunction SV2009SV2009 defines defines .size().size() method method - - synonymsynonym for for function void aa_display; .num().num() method method $display("%0d ARRAY ELEMENTS %0d", aa.size()); ... endfunction

© 2009, Sunburst Design, Inc.

23 of 30 Rev 1.0 DAC 2009 SystemVerilog-2009 Presentation by Sunburst Design, Beaverton, Oregon, © 2009

47 of 59

Queue Delete SV2009SV2009 adds adds a a built-in built-in method method to delete an entire queue Mantis 1560 to delete an entire queue

data=8'h00 8'hA0 InitialInitial program q_methods; 8'hA1 valuesvalues bit [7:0] q[$] = '{8'hA0, 8'hA1, 8'hA2}; 8'hA2 bit [7:0] data; q.size=3 int q_size; 8'hA0 $display$display 8'hA1 8'hFF initial begin insert(@2)insert(@2) 8'hA2 $display("q.size=%0d", q.size()); q.insert(2,8'hff); 8'hA0 delete(@1)delete(@1) q.delete(1); 8'hFF 8'hA2 data=q.pop_front(); pop_frontpop_front data=q.pop_back(); 8'hFF q.push_front(8'hbb); data=8'hA0 8'hA2 pop_backpop_back q.push_back(8'hcc); q.delete() data=8'hA2 8'hFF end push_frontpush_front 8'hBB endprogram 8'hFF push_backpush_back No argument 8'hBB No argument NewNew toto SV2009SV2009 means to delete 8'hFF means to delete deletedelete entireentire queuequeue 8'hCC entireentire queue queue

© 2009, Sunburst Design, Inc.

48 of 59

SystemVerilog-2009 Classes & Verification Enhancements

© 2009, Sunburst Design, Inc.

24 of 30 Rev 1.0 DAC 2009 SystemVerilog-2009 Presentation by Sunburst Design, Beaverton, Oregon, © 2009

49 of 59 Static Variable In-Line Initialization Mantis 1556

module top; static keyword is optional - int svar1 = 1; static keyword is optional - initialization happens before time 0 initial begin initialization happens before time 0 for (int i=0; i<3; i++) begin automatic int loop3 = 0; automaticautomatic variable variable for (int j=0; j<3; j++) begin assignmentassignment executes executes each each time the outer loop is called loop3++; time the outer loop is called $write("%3d", loop3); Display values end Display values end 1 2 3 1 2 3 1 2 3 $display("\n"); for (int i=0; i<3; i++) begin static int loop2 = 0; TheThe static static variable variable for (int j=0; j<3; j++) begin assignmentassignment executes executes loop2++; onceonce before before time time 0 0 $write("%3d", loop2); end DisplayDisplay valuesvalues end 1 2 3 4 5 6 7 8 9 $display("\n"); end endmodule © 2009, Sunburst Design, Inc.

50 of 59 Pure Virtual Methods Mantis 1308

• pure virtual is an abstract method prototype defined in an abstract class (virtual class) • virtual requires: virtualvirtual requires requires argumentargument compatibility compatibility – argument types must match – argument directions must match – number of arguments must match – return types must match purepure creates creates a a place-holder place-holder

purepure requires requires that that a a • pure requires: methodmethod be be overridden overridden with with an actual implementation – method shall only be a prototype an actual implementation – no code can be included for the prototype – not even allowed to have endfunction/endtask keywords – pure virtual methods MUST be overridden in non-abstract classes

© 2009, Sunburst Design, Inc.

25 of 30 Rev 1.0 DAC 2009 SystemVerilog-2009 Presentation by Sunburst Design, Beaverton, Oregon, © 2009

51 of 59 Pure Constraint Mantis 2514

• pure constraint is an constraint prototype defined in an abstract class (virtual class) • pure requires: – constraint shall only be a prototype pure constraint constraint-name;

–Every pure constraint MUST be overridden in non-abstract classes

Again:Again: purepure creates creates a a place-holder place-holder

purepure requires requires that that a a constraintconstraint be be overridden overridden withwith an an actual actual constraint constraint

© 2009, Sunburst Design, Inc.

52 of 59 Allow Functions to Spawn Processes Mantis 1336 forkfork / /join_none join_none allows allows functionsfunctions to to spawn spawn off off module forkprocess; time-consuming code int b; time-consuming code initial $timeformat(-9,0,"ns",6); initial startup; NonblockingNonblocking assignment assignment legal legal inin function function when when surrounded surrounded function void startup; byby fork fork / /join_none join_none fork b <= 8'hcc; time-1time-1 #1 $display("%t: 2nd Sequence started - b=%2h", $time, b); #3 run; task call that consumes time-2time-2 #2 $display("%t: 3rd Sequence started", $time); task call that consumes time (3+3+4=10ns) join_none time (3+3+4=10ns) time-0time-0 $display("%t: Initial Sequence started", $time); endfunction task run; int a; endmodule #3 a=8'h88; Output display #4 $display("RUN(%t): a=%2h", Output display $time, a); 0ns: Initial Sequence started endtask 1ns: 2nd Sequence started - b=cc 2ns: 3rd Sequence started RUN( 10ns): a=88 © 2009, Sunburst Design, Inc.

26 of 30 Rev 1.0 DAC 2009 SystemVerilog-2009 Presentation by Sunburst Design, Beaverton, Oregon, © 2009

53 of 59 External Methods w/ Parameterized Classes Mantis 1857

SystemVerilog-2005SystemVerilog-2005 does does not not allowallow a a class class type type to to use use both both class C #(int p = 1); parameters and external methods extern static function int f(); parameters and external methods endclass

function int C::f(); Fixed method return p + p; Fixed method returnreturn type type OutputOutput display display endfunction 2 10 initial $display("%0d %0d", C#()::f(),C#(5)::f());

SystemVerilog-2009SystemVerilog-2009 adds adds the the ability to have parameterized class C #(int p = 1, type T = int); ability to have parameterized classesclasses with with external external methods methods extern static function T f(); endclass DeclarationDeclaration of of extern static function (method) function C::T C::f(); extern static function (method) with return type T (parameterized type) return p + C::p; with return type T (parameterized type) endfunction

initial $display(“%0d %0d”, C#()::f(),C#(5)::f()); © 2009, Sunburst Design, Inc.

54 of 59 Covergroup Sample Method w/ Arguments Mantis 2149

covergroupcovergroup with with sample sample argumentsarguments a a and and x x

covergroup p_cg with function sample(bit a, int x); coverpoint x; cross x, a; endgroup ...... if if c c is is high high ##1 ##1 cycle cycle later, later, sample sample the the p_cg cg1 = new; WhenWhen a a is is high, high, set set covergroupcovergroup cg1 cg1 ( p_cg(p_cg) )and and pass pass the the locallocal variable variable x=b x=b ...... sampledsampled a a and and x x values values to to the the covergroup covergroup property p1; int x; @(posedge clk)(a, x = b) ##1 (c, cg1.sample(a, x)); endproperty

c1: cover property (p1);

© 2009, Sunburst Design, Inc.

27 of 30 Rev 1.0 DAC 2009 SystemVerilog-2009 Presentation by Sunburst Design, Beaverton, Oregon, © 2009

55 of 59

SystemVerilog-2009 Miscellaneous Enhancements

timeunit $system task `__FILE__ & `__LINE__ Macros SDF Annotation of $timeskew & $fullskew

© 2009, Sunburst Design, Inc.

56 of 59 New Concise timeunit Syntax Mantis 1623

SystemVerilog-2005SystemVerilog-2005 SystemVerilog-2009SystemVerilog-2009

`timescale 1ns/1ns 1ns/1ns `timescale 1ns/1ns module tb; 1ns/1ns module tb; timescaletimescale ... active ... endmodule active endmodule

module register ( module register ( output logic [7:0] q, output logic [7:0] q, input logic [7:0] d, input logic [7:0] d, input logic clk); 100ps/100ps100ps/100ps input logic clk); timeunit 100ps; locallocal timescale timescale timeunit 100ps/100ps; timeprecision 100ps; CombinedCombined 1-line1-line syntaxsyntax 2-line2-line syntaxsyntax always_ff @(posedge clk) MustMust bebe placedplaced always_ff @(posedge clk) q <= #1 d; immediatelyimmediately afterafter q <= #1 d; endmodule modulemodule headerheader endmodule

module blka (...); module blka (...); 1ns/1ns1ns/1ns ... timescale ... endmodule timescale endmodule againagain active active © 2009, Sunburst Design, Inc.

28 of 30 Rev 1.0 DAC 2009 SystemVerilog-2009 Presentation by Sunburst Design, Beaverton, Oregon, © 2009

57 of 59 $system Task to Invoke SystemCommands Mantis 1863

•The $system task allows SystemVerilog code to call operating system commands

module top; initial $system("mv design.v adder.v"); endmodule

MostMost Verilog Verilog simulators simulators already already havehave this this task, task, but but it it was was never never partpart of of the the Verilog Verilog standard standard

© 2009, Sunburst Design, Inc.

58 of 59 `__FILE__ & `__LINE__ Macros Mantis 1588

• SystemVerilog-2009 adds the C-like macros ‘__FILE__ ‘__LINE__

• These macros allow access to the current file and line number from within SystemVerilog code

© 2009, Sunburst Design, Inc.

29 of 30 Rev 1.0 DAC 2009 SystemVerilog-2009 Presentation by Sunburst Design, Beaverton, Oregon, © 2009

59 of 59 SDF Annotation of $timeskew & $fullskew Mantis 1140

• Verilog-2001 added the timing skew checks $timeskew $fullskew

• SystemVerilog-2009 defines how these checks are annotated from SDF files

© 2009, Sunburst Design, Inc.

60 of 59

SystemVerilog Is Getting Even Better! An Update on the Proposed 2009 SystemVerilog Standard Part 1

Presented by

Clifford E. Cummings Stuart Sutherland Sunburst Design, Inc. Sutherland HDL, Inc. [email protected] [email protected] www.sunburst-design.com www.sutherland-hdl.com sponsored by

© 2009, Sunburst Design, Inc.

30 of 30 Rev 1.0