verilog nonblocking assignments with delays - myths...

67
Sunburst Design Verilog Nonblocking Assignments with Delays - Myths & Mysteries Clifford E. Cummings Sunburst Design, Inc. [email protected] www.sunburst-design.com

Upload: others

Post on 08-May-2020

14 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

Sunburst Design

Verilog NonblockingAssignments with Delays -

Myths & Mysteries

Clifford E. CummingsSunburst Design, [email protected]

Page 2: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

2 of 67

Sunburst DesignAgenda

• IEEE 1364 reference model & event queue• Review 8 Guidelines to avoid "death by Verilog!"• 0-delay models - Nonblocking assignments happen first• Inertial & transport delays• Delay line modeling with transport delays• Benchmark VCS simulations with and without #1 delays• VCS switches: +nbaopt and +rad

• Multiple common clocks - are there race conditions?• Mixing blocking & nonblocking assignments• Mixed RTL & gate simulations• Miscellaneous SDF notes & testbench tricks• Flawed guidelines - better guidelines - Conclusions

Page 3: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

3 of 67

Sunburst Design

while (there are events) { if (no active events) { if (there are inactive events) { activate all inactive events; } else if (there are nonblocking assign update events) { activate all nonblocking assign update events; } else if (there are monitor events) { activate all monitor events; } else { advance T to the next event time; activate all inactive events for time T; } } E = any active event; if (E is an update event) { update the modified object; add evaluation events for sensitive processes to event queue; } else { /* shall be an evaluation event */ evaluate the process; add update events to the event queue; }}

IEEE Std 1364 - Section 5.4The Verilog simulation reference model

T refers to the current simulation timeand all events are held in the eventqueue, ordered by simulation time.

activate $monitor & $strobe

activate #0 events

activate LHS ofnonblocking assignments

else

Execute the active events

If no events left in the current timeadvance to the next simulation time

Confusing

Page 4: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

4 of 67

Sunburst Design

while (there are events) { if (there are active events) { E = any active event; if (E is an update event) { update the modified object; add evaluation events for sensitive processes to event queue; } else { // this is an evaluation event, so ... evaluate the process; add update events to the event queue; } } else if (there are nonblocking update events) { activate all nonblocking update events; }

else { advance T to the next event time; activate all inactive events for time T; }}

... update LHS ofnonblockingassignments

IEEE Std 1364 - Section 5.4Simplified Verilog simulation reference model

First: set T=0 / set nets=HiZ / set variables=X /activate always blocks / activate initial blocks

execute $monitor and $strobe commands before advancing time

after all active events have executed ...

Execute all active events

schedule newly triggered events

Advance to the nextsimulation timeand start over

Page 5: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

5 of 67

Sunburst Design

Other specific PLI commands

Update LHS of nonblocking assignments

$monitor command execution

$strobe command execution

#0 blocking assignments

Active Events

Inactive Events

Monitor Events

Nonblocking Events

Blocking assignments

Evaluate RHS of nonblocking assignments

Continuous assignments

$display command execution

Evaluate inputs and changeoutputs of primitives

These events maybe scheduled in

any order

IEEE1364-1995 VerilogStratified Event Queue

*Guideline #8: do notuse #0 delays

* Guidelines on slide 7

Page 6: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

6 of 67

Sunburst Design

$monitor command execution$strobe command execution

MonitorEvents

IEEE1364-1995 VerilogStratified Event Queue

These events maybe scheduled in

any order

Blocking assignmentsEvaluate RHS of NBAs Continuous assignments

Update LHS of nonblocking assignmentsNonblocking

Events

These eventsmay be

scheduled inany order

ActiveEvents

Blocking assignmentsEvaluate RHS of NBAs Continuous assignments

Update LHS of nonblocking assignments

Can triggernested events

in the sametime step

ActiveEvents

NonblockingEvents

Page 7: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

7 of 67

Sunburst Design

• In general, following specific coding guidelines can eliminateVerilog race conditions:

8 Guidelines to avoidCoding Styles that Kill!

Guideline #1: Sequential logic - use nonblocking assignments

Guideline #2: Latches - use nonblocking assignments

Guideline #3: Combinational logic in an always block - use blocking assignments

Guideline #4: Mixed sequential and combinational logic in the same always block - use nonblocking assignments

Guideline #5: Do not mix blocking and nonblocking assignments in the same always block

Guideline #6: Do not make assignments to the same variable from more than one always block

Guideline #7: Use $strobe to display values that have been assigned using nonblocking assignments

Guideline #8: Do not make #0 procedural assignments

Follow these guidelines andremove 90-100% of theVerilog race conditions

Page 8: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

8 of 67

Sunburst DesignAre There Exceptions to theGuidelines?

• How to judge valid exceptions:

– Does the exception make the simulation significantly faster?

– Does the exception make the code more understandable?

– Does the exception make the coding effort much easier?

• If not, the exception is probably not a good exception

Probably!

Faster! ... More understandable! ... Easier!

Page 9: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

9 of 67

Sunburst DesignFor 0-Delay RTL ModelsNonblocking Assignments finish first!

• ??? - The Verilog event queue schedules blockingassignments before nonblocking assignments

• Using clk-edge-based simulation techniques ...

a

b

clk

yd

rst_n

qcombinational

logiccombinational

logic

1 2 1 2

posedge clknegedge clk

a and b stimuluschange

d changesq nonblocking

changesy blockingchanges

All combinational outputs settle outimmediately after the posedge clk

posedge clk(1) nonblocking(2) blocking

negedge clk(1) blocking(2) blocking

Page 10: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

10 of 67

Sunburst DesignSimple sblk1 Examplemodule sblk1 ( output reg q2, input a, b, clk, rst_n); reg q1, d1, d2;

always @(a or b or q1) begin d1 = a & b; d2 = d1 | q1; end always @(posedge clk or negedge rst_n) if (!rst_n) begin q2 <= 0; q1 <= 0; end else begin q2 <= d2; q1 <= d1; endendmodule

module tb; reg a, b, clk, rst_n;

initial begin clk = 0; forever #10 clk = ~clk; end

sblk1 u1 (.q2(q2), .a(a), .b(b), .clk(clk), .rst_n(rst_n));

initial begin a = 0; b = 0; rst_n <= 0; @(posedge clk); @(negedge clk) rst_n = 1; a = 1; b = 1; @(negedge clk) a = 0; @(negedge clk) b = 0; @(negedge clk) $finish; endendmodule

ab

clk

q1 q2

d1

d2

rst_n

Simple testbench

2 flip-flops

Combinationallogic

Stimulus

Instance

Clockoscillator

Page 11: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

11 of 67

Sunburst Design

ab

clk

q1 q2

d1

d2

rst_n

sblk1 Input Stimulus & InputCombinational Logic Timing

rst_n

clk

a

b

d1

q1

d2

q2

External combinational inputstypically change on negedge clks

Page 12: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

12 of 67

Sunburst Design

$monitor command execution (if any)$strobe command execution (if any)

MonitorEvents

ActiveEvents

Blocking assignment (clk = ~ clk; // testbench negedge clk)Triggers testbench stimulus commands @negedge clk Triggers combinational inputs on the device under test

Empty (no nonblocking assignments to update)Nonblocking

Events

Combinationalblocking

assignments

sblk1 Input Stimulus & InputCombinational Logic Event Scheduling

(Blocking assignment in thetestbench clock oscillator)

Advance to next event(should be a posedge clk blocking assignment)

Page 13: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

13 of 67

Sunburst Designsblk1 Sequential(Clocked) Logic Timing

rst_n

clk

a

b

d1

q1

d2

q2

Sequential logic outputschange on posedge clks

ab

clk

q1 q2

d1

d2

rst_n

Page 14: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

14 of 67

Sunburst Designsblk1 OtherCombinational Logic Timing

rst_n

clk

a

b

d1

q1

d2

q2

Internal combinational outputschange on posedge clks(after sequential logic)

ab

clk

q1 q2

d1

d2

rst_n

Page 15: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

15 of 67

Sunburst Design

$monitor command execution (if any)$strobe command execution (if any)

MonitorEvents

ActiveEvents

Blocking assignment (clk = ~ clk; // testbench posedge clk)Triggers evaluation of RHS of sequential logic NBAs

Empty (no additional nonblocking assignments to update)Nonblocking

Events

ActiveEvents

Activate and execute NBAs eventsTriggers combinational logic blocking assignments

(after the NBAs in the same time step)

Update LHS of sequential logic nonblocking assignmentsNonblocking

Events

negedge clk - triggers stimulus input events

posedge clk - triggers sequential logic eventsAdvance to next event

sblk1 Sequential &Combinational Logic Event Scheduling

Page 16: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

16 of 67

Sunburst DesignInertial & Transport Delaysfor gate-level simulations

• Command line switches for gate-level simulations– Reject pulses shorter than x% of the propagation delay

+pulse_r/x

– Display unknowns (errors) for pulses greater than x% of the propagationdelay but shorter than y% of the propagation delay+pulse_e/y

– Enable transport delays for gate-level simulation+transport_path_delays

See the paper for more details

ReferenceMaterial

Page 17: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

17 of 67

Sunburst DesignSimple Test Bufferwith 5ns propagation delay

See the paper for more details

ReferenceMaterial

`timescale 1ns/1nsmodule tb; reg a; integer i;

delaybuf i1 (.y(y), .a(a));

initial begin a=0; #10 a=~a; for (i=1;i<7;i=i+1) #(i) a=~a; #20 $finish; endendmodule

`timescale 1ns/1nsmodule delaybuf (output y, input a);

buf u1 (y, a);

specify (a*>y) = 5; endspecifyendmodule

Simple testbench(tb.v)

Stimulus

instance

Simple delay buffer model(delaybuf.v)

Verilog bufferprimitive

a y

5ns

5ns specify blockdelay from a-to-y

Page 18: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

18 of 67

Sunburst DesignInertial & Transport Delayscommands & displays

ReferenceMaterial

vcs -RI +v2k tb.v delaybuf.v +pulse_r/100 +pulse_e/100

Pure inertial delays

Pure transport delays

vcs -RI +v2k tb.v delaybuf.v +pulse_r/0 +pulse_e/0 +transport_path_delays

Page 19: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

19 of 67

Sunburst DesignError & Mixed Delayscommands & displays

ReferenceMaterial

vcs -RI +v2k tb.v delaybuf.v +pulse_r/0 +pulse_e/100

Pure unknown (error) delays

Mixed delays (r/40 & e/80)

vcs -RI +v2k tb.v delaybuf.v +pulse_r/40 +pulse_e/80

Pulses shorter than 40% of 5ns are filtered outPulses between 40% & 80% of 5ns are passed as X's

Pulses greater than 80% of 5ns are passed

Page 20: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

20 of 67

Sunburst DesignDelay Line ModelTransport Delays

`timescale 1ns / 1nsmodule DL2 #(parameter TAP1 = 25, TAP2 = 40) (output reg y1, y2, input in);

always @(in) begin y1 <= #TAP1 in; y2 <= #TAP2 in; endendmodule

Delay line model withtwo output taps

Both models useVerilog-2001 enhanced

coding style

`timescale 1ns / 1nsmodule DL2 (output reg y1, y2, input in);

always @(in) begin y1 <= #25 in; y2 <= #40 in; endendmodule

These events are scheduled intofuture nonblocking assign

update event queues

Parameterized delay linemodel with two output taps

RHS nonblocking delaysare transport delays

DL2

y2

y1

in

NOTE: Synthesis toolsignore delays

Cannot synthesizedelay lines

25nsdelay

40nsdelay

Page 21: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

21 of 67

Sunburst DesignBenchmark Circuit #120K bits of Sequential Logic

. . .

clk

rst_n

d

1000 1000

d q qq1

10001000 1000

d q qq2

10001000 1000

d q q

100010001000

d q qq19

10001000

qq18

20 x 1000-bit registers

Page 22: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

22 of 67

Sunburst DesignBenchmark Circuit #220K bits Sequential / 40K bits Combinational

. . .d

1000 1000

dd qqqd

qq1

10001000 1000

dd qqqd

qq2

10001000 1000

dd qqqd

q

10001000

qq19

clk

rst_n

20 x 1000-bit registerswith inverted-inputsand inverted-outputs

Page 23: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

23 of 67

Sunburst Designmodule dff (q, d, clk, rst_n); parameter SIZE=100; output [SIZE-1:0] q; input [SIZE-1:0] d; input clk, rst_n; reg [SIZE-1:0] q;

always @(posedge clk or negedge rst_n) if (!rst_n) q <= 0; else q <= d;endmodule

DFF models withno inverters

Benchmark Models(with inverters and without inverters)

module dffi (q, d, clk, rst_n); parameter SIZE=100; output [SIZE-1:0] q; input [SIZE-1:0] d; input clk, rst_n;

reg [SIZE-1:0] qq; wire [SIZE-1:0] dd;

assign q = ~qq; assign dd = ~d;

always @(posedge clk or negedge rst_n) if (!rst_n) qq <= 0; else qq <= dd;endmodule

DFF models withinverters

Invert inputs to flip-flops andinvert outputs from flip-flops

Page 24: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

24 of 67

Sunburst DesignBenchmark RTL CodeWith and Without Delays

always @(posedge clk or negedge rst_n) if (!rst_n) q <= 0; else q <= d;

always @(posedge clk or negedge rst_n) if (!rst_n) q <= #1 0; else q <= #1 d;

always @(posedge clk or negedge rst_n) if (!rst_n) q = #1 0; else q = #1 d;

`define D #0always @(posedge clk or negedge rst_n) if (!rst_n) q <= `D 0; else q <= `D d;

`define Dalways @(posedge clk or negedge rst_n) if (!rst_n) q <= `D 0; else q <= `D d;

#1 Nonblocking assignmentswith no delays

#2 Nonblocking assignmentswith #1 delays

#3 Blocking assignmentswith #1 delays (BAD)

#4 Nonblocking assignmentswith macro-added #0 delays

#5 Nonblocking assignmentswith macro-added no delays

Page 25: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

25 of 67

Sunburst Design

module dffpipe (q, d, clk, rst_n); parameter SIZE=1000; output [SIZE-1:0] q; input [SIZE-1:0] d; input clk, rst_n;

wire [SIZE-1:0] qq1, qq2, qq3, qq4, qq5, qq6, qq7, qq8, qq9; wire [SIZE-1:0] qq10, qq11, qq12, qq13, qq14, qq15, qq16, qq17, qq18, qq19;

`DFF #(SIZE) u1 (.q( qq1), .d( d), .clk(clk), .rst_n(rst_n)); `DFF #(SIZE) u2 (.q( qq2), .d( qq1), .clk(clk), .rst_n(rst_n)); `DFF #(SIZE) u3 (.q( qq3), .d( qq2), .clk(clk), .rst_n(rst_n)); `DFF #(SIZE) u4 (.q( qq4), .d( qq3), .clk(clk), .rst_n(rst_n));

...

`DFF #(SIZE) u17 (.q(qq17), .d(qq16), .clk(clk), .rst_n(rst_n)); `DFF #(SIZE) u18 (.q(qq18), .d(qq17), .clk(clk), .rst_n(rst_n)); `DFF #(SIZE) u19 (.q(qq19), .d(qq18), .clk(clk), .rst_n(rst_n)); `DFF #(SIZE) u20 (.q( q), .d(qq19), .clk(clk), .rst_n(rst_n));endmodule

Large Pipeline Benchmark Circuit(top-level model)

+define+DFF="dff"+define+DFF="dff1"+define+DFF="dff1b"+define+DFF="dff0"+define+DFF="dff_"

20 registers1000 bits each

Command line options to select differentDFF models with or without delays

Page 26: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

26 of 67

Sunburst Design

DFF pipeline (no inverters)CPU Time(seconds)

Speed compared tono-delay model

No delays 292.920 Baseline no-delay model

Nonblocking #1 delays( <= #1 )

376.460 29% slower

Blocking #1 delays( = #1 NOT RECOMMENDED)

358.240 22% slower

Nonblocking #0 delays( <= `D and `define D #0 )

307.630 5% slower

Nonblocking blank delays( <= `D and `define D <no_value> )

292.880 ~same speed

IBM ThinkPad T21, Pentium III-850MHz, 384MB RAM, Redhat Linux 6.2VCS Version 6.2 - Simulation ended at Time: 800002150 ns

Benchmark Results - Circuit #1Pipeline with no inverters

Linux Laptop

Page 27: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

27 of 67

Sunburst Design

DFF pipeline (no inverters)CPU Time(seconds)

Speed compared tono-delay model

No delays 438.090 Baseline no-delay model

Nonblocking #1 delays( <= #1 )

839.270 92% slower

Blocking #1 delays( = #1 NOT RECOMMENDED)

548.110 25% slower

Nonblocking #0 delays( <= `D and `define D #0 )

447.770 2% slower

Nonblocking blank delays( <= `D and `define D <no_value> )

437.960 ~same speed

SUN Ultra 80, UltraSPARC-II 450MHz, 1GB RAM, Solaris 8VCS Version 6.2 - Simulation ended at Time: 800002150 ns

Benchmark Results - Circuit #1Pipeline with no inverters

SUN Workstation

Page 28: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

28 of 67

Sunburst DesignBenchmark Results - Circuit #2Pipeline with inverters

DFF pipeline with invertersCPU Time(seconds)

Speed compared tono-delay model

No delays 390.140 Baseline no-delay model

Nonblocking #1 delays( <= #1 )

462.230 18% slower

Blocking #1 delays( = #1 NOT RECOMMENDED)

458.750 18% slower

Nonblocking #0 delays( <= `D and `define D #0 )

390.320 ~same speed

Nonblocking blank delays( <= `D and `define D <no_value> )

390.630 ~same speed

IBM ThinkPad T21, Pentium III-850MHz, 384MB RAM, Redhat Linux 6.2VCS Version 6.2 - Simulation ended at Time: 800002150 ns

Linux Laptop

Page 29: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

29 of 67

Sunburst DesignBenchmark Results - Circuit #2Pipeline with inverters

DFF pipeline with invertersCPU Time(seconds)

Speed compared tono-delay model

No delays 668.170 Baseline no-delay model

Nonblocking #1 delays( <= #1 )

1,112.130 66% slower

Blocking #1 delays( = #1 NOT RECOMMENDED)

777.440 16% slower

Nonblocking #0 delays( <= `D and `define D #0 )

744.160 11% slower

Nonblocking blank delays( <= `D and `define D <no_value> )

673.95 1% slower

SUN Ultra 80, UltraSPARC-II 450MHz, 1GB RAM, Solaris 8VCS Version 6.2 - Simulation ended at Time: 800002150 ns

SUN Workstation

Page 30: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

30 of 67

Sunburst DesignCommand Line Switches+nbaopt and +rad

• VCS command line switch to remove delays from the RHS ofnonblocking assignments

+nbaopt

• VCS command line switch to improve overall simulationperformance

+rad

Synopsys reports some designs achieve large speedups with +rad (typically the uglier the code, the larger the speedup)

+rad is not just forcycle-based simulations

Speeds up logic andevent propagation

+rad does not affectdelay scheduling

+rad is actually a family of optimizations that willmake improvements to non-timing designs

+nbaopt can be usedto remove #1 delays

Page 31: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

31 of 67

Sunburst Design

DFF pipeline (no inverters)CPU Time(seconds)

Speed compared tono-delay model

No delays 293.770 Baseline no-delay model

Nonblocking #1 delays( <= #1 )

311.070 6% slower

IBM ThinkPad T21, Pentium III-850MHz, 384MB RAM, Redhat Linux 6.2VCS Version 6.2 - including the +nbaopt command switch

Benchmark Results - Circuit #1With +nbaopt Command Switch

LinuxLaptop

DFF pipeline (no inverters)CPU Time(seconds)

Speed compared tono-delay model

No delays 439.000 Baseline no-delay model

Nonblocking #1 delays( <= #1 )

448.630 2% slower

SUN Ultra 80, UltraSPARC-II 450MHz, 1GB RAM, Solaris 8VCS Version 6.2 - including the +nbaopt command switch

SUNWorkstation

Page 32: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

32 of 67

Sunburst Design

DFF pipeline (no inverters)CPU Time(seconds)

Speed compared tono-delay model

No delays 233.540 Baseline no-delay model

Nonblocking #1 delays( <= #1 )

293.250 26% slower

Blocking #1 delays( = #1 NOT RECOMMENDED)

289.940 24% slower

Nonblocking #0 delays( <= `D and `define D #0 )

229.290 2% faster

Nonblocking blank delays( <= `D and `define D <no_value> )

233.100 ~same speed

IBM ThinkPad T21, Pentium III-850MHz, 384MB RAM, Redhat Linux 6.2VCS Version 6.2 - (using +rad switch)

Benchmark Results - Circuit #1With +rad Command Switch

Linux Laptop

Page 33: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

33 of 67

Sunburst Design

DFF pipeline with invertersCPU Time(seconds)

Speed compared tono-delay model

No delays 233.710 Baseline no-delay model

Nonblocking #1 delays( <= #1 )

294.480 25% slower

Blocking #1 delays( = #1 NOT RECOMMENDED)

288.910 23% slower

Nonblocking #0 delays( <= `D and `define D #0 )

228.410 3% faster

Nonblocking blank delays( <= `D and `define D <no_value> )

234.510 2% faster

IBM ThinkPad T21, Pentium III-850MHz, 384MB RAM, Redhat Linux 6.2VCS Version 6.2 - (using +rad switch)

Benchmark Results - Circuit #2With +rad Command Switch

Linux Laptop

Page 34: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

34 of 67

Sunburst DesignMultiple Common Clocks& Race Conditions

module blk2_2 ( output reg q2, input a, b, input clk1a, clk1b, rst_n); reg q1; wire d1 = a & b; wire d2 = q1 | d1;

always @(posedge clk1a or negedge rst_n) if (!rst_n) q1 <= 0; else q1 <= d1;

always @(posedge clk1b or negedge rst_n) if (!rst_n) q2 <= 0; else q2 <= d2;endmodule

ab

clk1a

clk1b

q1 q2

d1

d2

rst_n

Combinationalassignments

clk1a block(q1 register)

clk1b block(registered q2 output)

Page 35: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

35 of 67

Sunburst DesignMultiple Common Clocks

rst_n

clk1a

clk1b

a

b

d1

q1

d2

q2

ab

clk1a

clk1b

q1 q2

d1

d2

rst_n

Sequential logic outputschange on posedge clks

If there is no skew betweenclk1a and clk1b and ...

always @(clk1a) clk1b <= clk1a;always @(clk1a) clk1b <= clk1a;

No race conditions!

Page 36: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

36 of 67

Sunburst Design

• Reasons to avoid this coding style– Understanding event scheduling can be confusing

– Mis-ordering statements -or- multiple NBAs will cause problems– Inputs, outputs and clocks all change simultaneously in a waves display

Do Not Mix Assignments!(This guideline is often challenged)

Guideline #5: Do not mix blocking and nonblocking assignments in the same always block

This is a VHDL-likecoding style

No simulation advantagein Verilog

Page 37: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

37 of 67

Sunburst DesignMixed Assignment Example #1

module blk1a ( output reg q, output y, input a, b, c, input clk, rst_n);

always @(posedge clk or negedge rst_n) begin: logic reg d; if (!rst_n) q <= 0; else begin d = a & b; q <= d; end end

assign y = q & c;endmodule

Clocked outputsignal

ab

clk

qd

y

rst_n

c

q

Combinationalintermediate

signal

Named block to permitlocal declarations

Page 38: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

38 of 67

Sunburst DesignMixed Assignment Example #1(synthesis result)

ab

clk

qd

y

rst_n

c

q

Synthesizes okay

Page 39: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

39 of 67

Sunburst DesignYucky Waveform Display!

rst_n

clk1b

a

b

c

d

q

y

ab

clk

qd

y

rst_n

c

q

... d input changes

... the q output changes at the same time !!

clk changes ...

The combinational d-signaldoes not update when thea and b inputs go high

Page 40: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

40 of 67

Sunburst DesignMixed Assignment Example #1(with x-assignments)

module blk1a ( output reg q, output y, input a, b, c, input clk, rst_n);

always @(posedge clk or negedge rst_n) begin: logic reg d; if (!rst_n) q <= 0; else begin d = a & b; q <= d; d = 1'bx; end end

assign y = q & c;endmodule

Extra X-assignment to avoidwaveform confusion (???)

ab

clk

qd

y

rst_n

c

q

Combinationalintermediate

signal

Named block to permitlocal declarations

Page 41: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

41 of 67

Sunburst Design

begin: logic reg d; if (!rst_n) q <= 0; else begin d = a & b; q <= d; d = 1'bx; endend

Is This Really Much Better??

rst_n

clk1b

a

b

c

d

q

y

ab

clk

qd

y

rst_n

c

q

... d input changes

... the q output changesd input always appears

to be unknown

clk changes ...

Page 42: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

42 of 67

Sunburst DesignMixed Assignment Example #2

module blk2a ( output reg q, q2, output y, input a, b, c, input clk, rst_n); reg d;

always @(posedge clk or negedge rst_n) if (!rst_n) q <= 0; else begin d = a & b; q <= d; end

assign y = q & c;

always @(d) q2 = d;endmodule

Bufferedd -output

ab

clk

qd

y

rst_n

c

q

Combinationalintermediate

signal

Signal d declaredat the module level

q2

Desired logic

Page 43: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

43 of 67

Sunburst DesignMixed Assignment Example #2(synthesis result)

Oops! q2 is now aregistered output

Page 44: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

44 of 67

Sunburst Design

clk

rst_n

mod1.v mod3.vmod2.v

a1 b1 c1a1a a1b b1a b1b c1a c1b

d1

a2 b2 c2 d2 a1a <= a1; a2a <= a2; a1b <= ...; a2b <= ...; b1 <= ...; b2 <= ...;

c1a <= c1; c2a <= c2; c1b <= ...; c2b <= ...; d1 <= ...; d2 <= ...;

b1a <= b1; b2a <= b2; b1b <= ...; b2b <= ...; c1 <= ...; c2 <= ...;

Mixed RTL & Gate-Level Simulations

• Are there any problems with mixed RTL and gate-levelsimulations?

Partitioned ASIC design(3 RTL partitions)

Page 45: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

45 of 67

Sunburst DesignMixed RTL & Gate-Level SimulationsWhere are the problems?

always @(posedge clk or negedge rst_n) if (!rst_n)...; // reset regs else begin a1a <= a1; a2a <= a2; a1b <= ...; a2b <= ...; b1 <= #1 ...; b2 <= #1 ...; end

clk

rst_n

a1a <= a1; a2a <= a2; a1b <= ...; a2b <= ...; b1 <= #1 ...; b2 <= #1 ...;

mod1.v mod3.vmod2.vg

a1 b1 c1a1a a1b b1a b1b c1a c1b

d1

a2 b2 c2 d2 c1a <= c1; c2a <= c2; c1b <= ...; c2b <= ...; d1 <= ...; d2 <= ...;

Tsetup = 1.3nsThold = 0.6ns

mod1.v(RTL model)

mod2.vg(gates model)

mod3.v(RTL model)

Guideline: Add a #1 (or more)delay to RTL statements that

drive gate-level models

Page 46: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

46 of 67

Sunburst DesignRTL Simulations(With Multiple Balanced Clock Sources)

clk1b

rst_n

clk1c

clk1a

mod1.v mod3.vmod2.v

a1 b1 c1a1a a1b b1a b1b c1a c1b

d1

a2 b2 c2 d2 a1a <= a1; a2a <= a2; a1b <= ...; a2b <= ...; b1 <= ...; b2 <= ...;

c1a <= c1; c2a <= c2; c1b <= ...; c2b <= ...; d1 <= ...; d2 <= ...;

b1a <= b1; b2a <= b2; b1b <= ...; b2b <= ...; c1 <= ...; c2 <= ...;

clk1

No simulationproblems

Multiple clock drivers(no nonblocking assignments

and no skew)

Page 47: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

47 of 67

Sunburst DesignRTL Simulations(With Instantiated PLL Clock Source)

clk1b

rst_n

clk1c

clk1a

PLL#0.1

#0.0

#0.2

skew

mod1.v mod3.vmod2.v

a1 b1 c1a1a a1b b1a b1b c1a c1b

d1

a2 b2 c2 d2 a1a <= a1; a2a <= a2; a1b <= ...; a2b <= ...; b1 <= #1 ...; b2 <= #1 ...;

c1a <= c1; c2a <= c2; c1b <= ...; c2b <= ...; d1 <= #1 ...; d2 <= #1 ...;

b1a <= b1; b2a <= b2; b1b <= ...; b2b <= ...; c1 <= #1 ...; c2 <= #1 ...;

Must add delaysto RTL outputs

Instantiated clock driver(PLL) with skewed clock

outputs

Page 48: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

48 of 67

Sunburst DesignGate-Level Simulations(With Instantiated PLL Clock Source)

clk1b

rst_n

clk1c

clk1a

PLL#0.1

#0.0

#0.2

skew

mod1.v mod3.vmod2.v

a1 b1 c1a1a a1b b1a b1b c1a c1b

d1

a2 b2 c2 d2

Instantiated clock driver(PLL) with skewed clock

outputs

Gate-level modelshave intrinsic delays

(no problems)

Page 49: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

49 of 67

Sunburst DesignProblem -Vendors That Use Blocking Assignments

clk

rst_n

da b cblockingassignments

vendor1_b1

blockingassignments

vendor2_b1

nonblockingassignments

myrtl_nb1

• What happens when an incorrectly-coded vendor modelinteracts with a correctly-coded RTL design?– 1st Examine: Bad-vendor1 model driving a good RTL model– 2nd Examine: Good RTL model driving a bad vendor2 model

Good RTL modelcoding style

Bad vendor1coding style

Bad vendor2coding style

Page 50: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

50 of 67

Sunburst DesignVendor Model Drives Correct RTLModel w/ Blocking Assignments

module vendor1_b0 ( output reg b, input a, clk, rst_n);

always @(posedge clk or negedge rst_n) if (!rst_n) b = 0; else b = a;endmodule

clk

rst_n

da b cb = #1 a

vendor1_b1

d = #1 c

vendor2_b1

c <= #1 b

myrtl_nb1

`timescale 1ns / 1nsmodule vendor1_b1 ( output reg b, input a, clk, rst_n);

always @(posedge clk or negedge rst_n) if (!rst_n) b = #1 0; else b = #1 a;endmodule

Error in vendor1coding style

Page 51: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

51 of 67

Sunburst DesignCorrect RTL Modelw/ Nonblocking Assignments

module myrtl_nb0 ( output reg c, input b, clk, rst_n);

always @(posedge clk or negedge rst_n) if (!rst_n) c <= 0; else c <= b;endmodule

clk

rst_n

da b cb = #1 a

vendor1_b1

d = #1 c

vendor2_b1

c <= #1 b

myrtl_nb1

`timescale 1ns / 1nsmodule myrtl_nb1 ( output reg c, input b, clk, rst_n);

always @(posedge clk or negedge rst_n) if (!rst_n) c <= #1 0; else c <= #1 b;endmodule

Correct sequentialcoding style

Page 52: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

52 of 67

Sunburst DesignCorrect RTL Model Drives VendorModel w/ Blocking Assignments

module vendor2_b0 ( output reg d, input c, clk, rst_n);

always @(posedge clk or negedge rst_n) if (!rst_n) d = 0; else d = c;endmodule

clk

rst_n

da b cb = #1 a

vendor1_b1

d = #1 c

vendor2_b1

c <= #1 b

myrtl_nb1

`timescale 1ns / 1nsmodule vendor2_b1 ( output reg d, input c, clk, rst_n);

always @(posedge clk or negedge rst_n) if (!rst_n) d = #1 0; else d = #1 c;endmodule

Error in vendor2coding style

Page 53: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

53 of 67

Sunburst DesignBad-Vendor1 Driving Good-RTL(Equivalent code after compiled & flattened designs) Scenario #1 & Scenario #2

both have potential raceconditions

always @(posedge clk ...)... begin

b = a; c <= b; ...

always @(posedge clk ...)... begin

c <= b; b = a; ...

Fails

Passes

always @(posedge clk ...)... begin

b = #1 a; c <= b; ...

always @(posedge clk ...)... begin

c <= b; b = #1 a; ...

Fails

Passes

clk

rst_n

a b cb = a

vendor1_b0

c <= b

myrtl_nb0

Scenario #1

clk

rst_n

a b cb = #1 a

vendor1_b1

c <= b

myrtl_nb0

Scenario #2

Page 54: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

54 of 67

Sunburst DesignBad-Vendor1 Driving Good-RTL(Equivalent code after compiled & flattened designs) Scenario #3 & Scenario #4

also both have potentialrace conditions

always @(posedge clk ...)... begin

b = a; c <= #1 b; ...

always @(posedge clk ...)... begin

c <= #1 b; b = a; ...

Fails

Passes

always @(posedge clk ...)... begin

b = #1 a; c <= #1 b; ...

always @(posedge clk ...)... begin

c <= #1 b; b = #1 a; ...

Fails

Passes

clk

rst_n

a b cb = a

vendor1_b0

c <= #1 b

myrtl_nb1

Scenario #3

clk

rst_n

a b cb = #1 a

vendor1_b1

c <= #1 b

myrtl_nb1

Scenario #4

Page 55: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

55 of 67

Sunburst DesignGood-RTL Driving Bad-Vendor2(Equivalent code after compiled & flattened designs) Scenario #5 & Scenario #6

both simulate with norace conditions

always @(posedge clk ...)... begin

c <= b; d = c; ...

always @(posedge clk ...)... begin

d = c; c <= b; ...

Passes

Passes

always @(posedge clk ...)... begin

c <= b; d = #1 c; ...

always @(posedge clk ...)... begin

d = #1 c; c <= b; ...

Passes

Passes

clk

rst_n

b c dc <= b

myrtl_nb0

d = c

vendor1_b0

Scenario #5

clk

rst_n

b c dc <= b

myrtl_nb0

d = #1 c

vendor1_b1

Scenario #6

Page 56: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

56 of 67

Sunburst DesignGood-RTL Driving Bad-Vendor2(Equivalent code after compiled & flattened designs) Scenario #7 & Scenario #8

both simulate with norace conditions

always @(posedge clk ...)... begin

c <= #1 b; d = c; ...

always @(posedge clk ...)... begin

d = c; c <= #1 b; ...

Passes

Passes

always @(posedge clk ...)... begin

c <= #1 b; d = #1 c; ...

always @(posedge clk ...)... begin

d = #1 c; c <= #1 b; ...

Passes

Passes

clk

rst_n

b c dc <= #1 b

myrtl_nb1

d = c

vendor1_b0

Scenario #7

clk

rst_n

b c dc <= #1 b

myrtl_nb1

d = #1 c

vendor1_b1

Scenario #8

Page 57: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

57 of 67

Sunburst DesignUrban Legend & Verilog Folklore

• "Adding #1 to my nonblocking assignments makes up forvendor coding problems"

Vendor1Model

RTLModel

Vendor2Model

b = a

b = a

c <= b

c <= #1 b

c <= b

c <= #1 b

d = c

d = c

NO race condition

NO race condition

NO race condition

NO race condition

Race Condition?

potential race condition

potential race condition

potential race condition

potential race condition

d = #1 c

d = #1 c

b = #1 a

b = #1 a

Nope! ... Sorry!

Page 58: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

58 of 67

Sunburst DesignBenchmark Circuit #3Only add delays to I/O registers

. . .

clk

rst_n

d

1000 1000

d q qq1

10001000 1000

d q qq2

10001000 1000

d q q

100010001000

d q qq19

10001000

qq18

20 x 1000-bit registers

No delays ondff models

Added #1 delaysto iof models

Added #1 delaysto iof models

Page 59: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

59 of 67

Sunburst Design

No delays 292.920 Baseline no-delay model

Nonblocking #1 delays( <= #1 )

376.460 29% slower

Nonblocking #1 delays only on the 2,000I/O flip-flops

375.710 28% slower

IBM ThinkPad T21, Pentium III-850MHz, 384MB RAM, Redhat Linux 6.2VCS Version 6.2 - #1 delays only added to the 2,000 I/O flip-flops

No delays 438.090 Baseline no-delay model

Nonblocking #1 delays( <= #1 )

839.270 92% slower

Nonblocking #1 delays only on the 2,000I/O flip-flops

833.720 90% slower

SUN Ultra 80, UltraSPARC-II 450MHz, 1GB RAM, Solaris 8VCS Version 6.2 - #1 delays only added to the 2,000 I/O flip-flops

Benchmark Results - Circuit #3With delays only on the I/O flip-flops

LinuxLaptop

SUNWorkstation

Page 60: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

60 of 67

Sunburst Design

• Why run gate-level simulations with SDF timing delays?

– Full system simulation– Equivalence checking software costs money

– Final regression simulations with SDF timing delays verifies STA andequivalence checked models

Gate SimulationsWith SDF Delays

See the paper for more details

ReferenceMaterial

Isn't is good enough to do(1) functional simulations, (2) static timing analysis (STA), and(3) equivalence check the gates model to the RTL model?

Page 61: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

61 of 67

Sunburst DesignTestbench TricksResets

initial begin rst_n = 0; ...end

always @(posedge clk or negedge rst_n) ...

initial begin rst_n <= 0; ...end

always @(posedge clk or negedge rst_n) ...

Race condition

No race condition

Page 62: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

62 of 67

Sunburst DesignTestbench TricksClock Oscillator

`define cycle 10...initial begin clk = 0; forever #(`cycle/2) clk = ~clk);end

`define cycle 10...initial begin clk <= 1; forever #(`cycle/2) clk = ~clk);end

Common clock oscillator(clk=0 at time 0)

clk=1 at time 0No race condition

Page 63: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

63 of 67

Sunburst DesignTestbench TricksChange stimulus on clock edges

module tb; reg a, b, clk, rst_n;

initial begin clk = 0; forever #10 clk = ~clk; end

sblk1 u1 (.q2(q2), .a(a), .b(b), .clk(clk), .rst_n(rst_n));

initial begin a = 0; b = 0; rst_n <= 0; @(posedge clk); @(negedge clk) rst_n = 1; a = 1; b = 1; @(negedge clk) a = 0; @(negedge clk) b = 0; @(negedge clk) $finish; endendmodule

Simple testbench

Free-runningclock oscillator

Initialize a & b

Reset at time 0 for one clock cycle

(negedge clk) release reset set a and b

(negedge clk) change a

(negedge clk) change b

(negedge clk) finish simulation

If the clock period changes,the testbench still stays the same

Page 64: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

64 of 67

Sunburst DesignThe Bergeron GuidelinesFour flawed guidelines

• Four "Guidelines for Avoiding Race Conditions:"

– If a register is declared outside of the always or initial block, assign to itusing a nonblocking assignment. Reserve the blocking assignment forregisters local to the block

– Assign to a register from a single always or initial block

Better

Guideline #6: Do not make assignments to the same variable from more thanone always block

Better

Guideline #5: Do not mix blocking and nonblocking assignments in the samealways block

Page 65: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

65 of 67

Sunburst DesignThe Bergeron GuidelinesFour flawed guidelines (cont.)

• Four "Guidelines for Avoiding Race Conditions:" (cont.)

– Use continuous assignments to drive inout pins only. Do not use themto model internal conbinational functions. Prefer sequential code instead

– Do not assign any value at time 0

Procedural blocks are more proneto Verilog race conditions

Initialize everythingat time 0

For simple Boolean expressions,use continuous assignments

To group assignments or to include case,if-else, for-loops, use procedural blocks

Use testbench nonblocking assignmenttricks to avoid race conditions

Page 66: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

66 of 67

Sunburst Design

• In general, following specific coding guidelines can eliminateVerilog race conditions:

8 Important Guidelines

Guideline #1: Sequential logic - use nonblocking assignments

Guideline #2: Latches - use nonblocking assignments

Guideline #3: Combinational logic in an always block - use blocking assignments

Guideline #4: Mixed sequential and combinational logic in the same always block - use nonblocking assignments

Guideline #5: Do not mix blocking and nonblocking assignments in the same always block

Guideline #6: Do not make assignments to the same variable from more than one always block

Guideline #7: Use $strobe to display values that have been assigned using nonblocking assignments

Guideline #8: Do not make #0 procedural assignments

Page 67: Verilog Nonblocking Assignments with Delays - Myths ...twins.ee.nctu.edu.tw/courses/ip_core_04/resource... · Delay Line Model Sunburst Design Transport Delays ` timescale 1ns / 1ns

67 of 67

Sunburst DesignConclusions

• Follow the 8 important coding guidelines• Do not mix blocking and nonblocking assignments• Either code NBAs with no delays or with macro #1 delays

• Mixed RTL & gates simulations require RTL-output delays• Remember +nbaopt and +rad for faster VCS simulation

• Request: please give us a +nba1 switch!

Simulations run upto 100% faster

without #1 delays

always @(posedge clk or negedge rst_n) if (!rst_n) q <= 0; else q <= d;

`define Dalways @(posedge clk or negedge rst_n) if (!rst_n) q <= `D 0; else q <= `D d;

-or- `define D #1No delays