Top Banner
ECE 551 Digital System Design & Synthesis Lecture 09 Synthesis of Common Verilog Constructs
28

ECE 551 Digital System Design & Synthesis Lecture 09 Synthesis of Common Verilog Constructs.

Dec 17, 2015

Download

Documents

Posy Rodgers
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: ECE 551 Digital System Design & Synthesis Lecture 09 Synthesis of Common Verilog Constructs.

ECE 551Digital System Design &

Synthesis

Lecture 09

Synthesis of Common Verilog Constructs

Page 2: ECE 551 Digital System Design & Synthesis Lecture 09 Synthesis of Common Verilog Constructs.

Overview Don’t Cares and z’s in synthesis Unintentional latch synthesis Synthesis & Flip-Flops Gating the clock… and alternatives Loops in synthesis

2

Page 3: ECE 551 Digital System Design & Synthesis Lecture 09 Synthesis of Common Verilog Constructs.

Synthesis Of x And z Only allowable uses of x is as “don’t care”,

since x cannot actually exist in hardware in casex in casez in defaults of conditionals such as if, case, ?

Only allowable uses of z: As a “don’t care” Constructs implying a 3-state output

3

Page 4: ECE 551 Digital System Design & Synthesis Lecture 09 Synthesis of Common Verilog Constructs.

Don’t Cares x assigned as a default in a conditional,

case, or casex. x, ?, or z within case item expression in

casex Does not actually output “don’t cares”! Values for which input comparison to be ignored Lets synthesizer choose between 0 or 1

Choose whichever helps meet design goals

z, ? within case item expression in casez Same conditions as listed above except does not

apply to x

4

Page 5: ECE 551 Digital System Design & Synthesis Lecture 09 Synthesis of Common Verilog Constructs.

Don’t Cares Example [1]

Give synthesizer flexibility in optimization

5

case (state)3’b000: out = 1’b0;3’b001: out = 1’b1;3’b010: out = 1’b1;3’b011: out = 1’b0;3’b100: out = 1’b1;// below states not used3’b101: out = 1’b0;3’b110: out = 1’b0;3’b111: out = 1’b0;endcase

case (state)3’b000: out = 1’b0;3’b001: out = 1’b1;3’b010: out = 1’b1;3’b011: out = 1’b0;3’b100: out = 1’b1;default: out = 1’bx;endcase

VS

Page 6: ECE 551 Digital System Design & Synthesis Lecture 09 Synthesis of Common Verilog Constructs.

Don’t Cares Example [2]

6

Synthesis results for JUST output calculation:

VS

Area = 21.04 Area = 15.24

Page 7: ECE 551 Digital System Design & Synthesis Lecture 09 Synthesis of Common Verilog Constructs.

Don’t Cares Example [3]

casex can reduce number of conditions specified and may aid synthesis

7

casex (state)3’b000: out = 1’b1;3’b001: out = 1’b1;3’b010: out = 1’b1;3’b011: out = 1’b1;3’b100: out = 1’b0;3’b101: out = 1’b0;3’b110: out = 1’b1;3’b111: out = 1’b1;endcase

casex (state)3’b0??: out = 1’b1;3’b10?: out = 1’b0;3’b11?: out = 1’b1;endcase

VS

Page 8: ECE 551 Digital System Design & Synthesis Lecture 09 Synthesis of Common Verilog Constructs.

Synthesis Of z Example 1: (Simple Tri-State Bus) assign bus_line = (en) ? data_out : 32’bz;

Example 2 (Bidirectional Bus)

// bus_line receives from data when en is 0 assign bus_line = (!en) data : 32’bz; // bus_line sends to data when enable is 1 assign data = (en) ? bus_line : 32’bz;

8

Page 9: ECE 551 Digital System Design & Synthesis Lecture 09 Synthesis of Common Verilog Constructs.

Combinational Logic Hazards Avoid structural feedback in continuous

assignments, combinational alwaysassign z = a | y;assign y = b | z; // feedback on y and z signals!

Avoid incomplete sensitivity lists in combinational always always (*) // helps to avoid latches

For conditional assignments, either: Set default values before statement Make sure LHS has value in every

branch/condition For warning, set hdlin_check_no_latch true

before compiling9

Page 10: ECE 551 Digital System Design & Synthesis Lecture 09 Synthesis of Common Verilog Constructs.

Synthesis Example [1]

10

module latch2(input a, b, c, d, output reg out);always @(a, b, c, d) begin if (a) out = c | d; else if (b) out = c & d;endendmodule

Area = 44.02

Page 11: ECE 551 Digital System Design & Synthesis Lecture 09 Synthesis of Common Verilog Constructs.

Synthesis Example [2]

11

module no_latch2(input a, b, c, d, output reg out);always @(a, b, c, d) begin if (a) out = c | d; else if (b) out = c & d; else out = 1’b0;endendmodule

Area = 16.08

Page 12: ECE 551 Digital System Design & Synthesis Lecture 09 Synthesis of Common Verilog Constructs.

Synthesis Example [3]

12

module no_latch2_dontcare(input a, b, c, d, output reg out);always @(a, b, c, d) begin if (a) out = c | d; else if (b) out = c & d; else out = 1’bx;endendmodule

When can this be done?

Area = 12.99

Page 13: ECE 551 Digital System Design & Synthesis Lecture 09 Synthesis of Common Verilog Constructs.

Registered Combinational Logic Combinational logic followed by a register

always @(posedge clk)y <= (a & b) | (c & d);

always @(negedge clk)case (select)

3’d0: y <= a; 3’d1: y <= b; 3’d2: y <= c; 3’d3: y <= d;default y <= 8’bx;

endcase

The above behaviors synthesize to combinational logic followed by D flip-flops.

Combinational inputs (e.g., a, b, c, and d) should not be included in the sensitivity list

13

Page 14: ECE 551 Digital System Design & Synthesis Lecture 09 Synthesis of Common Verilog Constructs.

Flip-Flop Synthesis

14

Each variable assigned in an edge-controlled always block implies a flip-flop.

Page 15: ECE 551 Digital System Design & Synthesis Lecture 09 Synthesis of Common Verilog Constructs.

Gated Clocks Use only if necessary (e.g., for low-power)

Clock gating is for experts!

module gated_dff(clk, en, data, q);input clk, en, data;output reg q;wire my_clk = clock & en;always @(posedge my_clk)

q <= data;endmodule

When clock_en is zero flip-flop won’t update. What problems might this cause?

15

Page 16: ECE 551 Digital System Design & Synthesis Lecture 09 Synthesis of Common Verilog Constructs.

Alternative to Gated Clocksmodule enable_dff(clk, en, data, q);

input clk, en, data;output reg q;always @(posedge clock)

if (en) q <= data;endmodule

Flip-flop output can only change when en is asserted

How might this be implemented?

16

Page 17: ECE 551 Digital System Design & Synthesis Lecture 09 Synthesis of Common Verilog Constructs.

Clock Generators Useful when you need to gate large chunks of

your circuit. Adding individual enable signals adds up

module clock_gen(pre_clk, clk_en, post_clk);input pre_clk, clk_en;output post_clk;assign post_clk = clk_en & pre_clk;

endmodule

Key: If you do this, you cannot use pre_clk on any flip-flops! Exclusively use post_clk.

This is still mostly recommended only for experts.

17

Page 18: ECE 551 Digital System Design & Synthesis Lecture 09 Synthesis of Common Verilog Constructs.

Loops A loop is static (data-independent) if the

number of iterations is fixed at compile-time Loop Types

Static without internal timing control Combinational logic

Static with internal timing control Sequential logic

Non-static without internal timing control Not synthesizable

Non-static with internal timing control Sometimes synthesizable, Sequential logic

18

Page 19: ECE 551 Digital System Design & Synthesis Lecture 09 Synthesis of Common Verilog Constructs.

Static Loops w/o Internal Timing Combinational logic results from “loop

unrolling” Example

always@(a) begin andval[0] = 1; for (i = 0; i < 4; i = i + 1) andval[i + 1] = andval[i] & a[i];end

What would this look like? How can we register the outputs?

19

Page 20: ECE 551 Digital System Design & Synthesis Lecture 09 Synthesis of Common Verilog Constructs.

Static Loops with Internal Timing If a static loop contains an internal edge-

sensitive event control expression, then activity distributed over multiple cycles of the clock

always begin for (i = 0; i < 4; i = i + 1)

@(posedge clk) sum <= sum + i;end

What does this loop do?

This might synthesize, but why take your chances?

20

Page 21: ECE 551 Digital System Design & Synthesis Lecture 09 Synthesis of Common Verilog Constructs.

Non-Static Loops w/o Internal Timing Number of iterations is variable

Not known at compile time

Can be simulated, but not synthesized! Essentially an iterative combinational circuit

of data dependent size!

always@(a, n) begin andval[0] = 1;

for (i = 0; i < n; i = i +1) andval[i + 1] = andval[i] & a[i]; end

What if n is a parameter? 21

Page 22: ECE 551 Digital System Design & Synthesis Lecture 09 Synthesis of Common Verilog Constructs.

Non-Static Loops with Internal Timing Number of iterations determined by

Variable modified within the loop Variable that can’t be determined at compile time

Due to internal timing control— Distributed over multiple cycles Number of cycles determined by variable above

Variable must still be bounded

always begin continue = 1’b1;

for (; continue; ) begin @(posedge clk) sum = sum + in; if (sum > 8’d42) continue = 1’b0; end end

22

Timing controls inside the always block make design guidelines fuzzy…

Confusing, and bestto avoid.

Page 23: ECE 551 Digital System Design & Synthesis Lecture 09 Synthesis of Common Verilog Constructs.

Unnecessary Calculations Expressions that are fixed in a for loop are

replicated due to “loop unrolling.” Solution: Move fixed (unchanging)

expressions outside of all loops.

for (x = 0; x < 5; x = x + 1) begin for (y = 0; y < 9; y = y + 1) begin

index = x*9 + y; value = (a + b)*c; mem[index] = value; endend

Which expressions should be moved? 23

Page 24: ECE 551 Digital System Design & Synthesis Lecture 09 Synthesis of Common Verilog Constructs.

Unnecessary Calculations Expressions that are fixed in a for loop are

replicated due to “loop unrolling.” Solution: Move fixed (unchanging)

expressions outside of all loops.

value = (a + b)*c;for (x = 0; x < 5; x = x + 1) begin

index = x*9; for (y = 0; y < 9; y = y + 1) begin mem[index+y] = value; endend

Not so different from Loop optimization in software.

24

Page 25: ECE 551 Digital System Design & Synthesis Lecture 09 Synthesis of Common Verilog Constructs.

FSM Replacement for Non-Static Loops Not all loop structures supported by vendors Can always implement a loop with internal

timing using an FSM Can make a “while” loop easily by rewriting as

FSM Often use counters along with the FSM

All (good) synthesizers support FSMs! Synopsys supports for-loops with a static

number of iterations

Don’t bother with “fancy” loops outside of testbenches

25

Page 26: ECE 551 Digital System Design & Synthesis Lecture 09 Synthesis of Common Verilog Constructs.

Review Questions Draw the Karnaugh-map for each statement,

assuming each variable is one bit. if (c) z = a | b; else z = 0; if (c) z = a | b; else z = 1`x;

Give a simplified Boolean expression for each statement

What would you expect to get from the following expressions?

if (c) z = a & b;

26

Page 27: ECE 551 Digital System Design & Synthesis Lecture 09 Synthesis of Common Verilog Constructs.

Review Questions Rewrite the following code, so that it takes two clock

cycles and can use only a single multiplier and adder to compute z. Draw potential hardware for each piece of code.

reg [15:0] z; reg [7:0] a, b, c, dalways @(posedge clock) z = a*b + c*d;

27

Page 28: ECE 551 Digital System Design & Synthesis Lecture 09 Synthesis of Common Verilog Constructs.

Review Questions What hardware would you expect from the following code?

module what(input clk, input [7:0] b, output [7:0] c); reg [7:0] a[0:3];integer i;always@(posedge clk) begin

a[0] <= b; for (i = 1; i < 4; i=i+1) a[i] <= a[i-1] + b; end assign c = a[3];

endmodule

28