22
How to synthesize DDR multiplexers Michael Krieger, ZITI, Uni Heidelberg 28th CBM Collaboration Meeting Tübingen, 09/2016 Michael Krieger, ZITI, Uni Heidelberg How to synthesize DDR multiplexers 1

How to synthesize DDR multiplexers - SuS

  • Upload
    others

  • View
    18

  • Download
    0

Embed Size (px)

Citation preview

Page 1: How to synthesize DDR multiplexers - SuS

How to synthesize DDR multiplexers

Michael Krieger, ZITI, Uni Heidelberg

28th CBM Collaboration Meeting

Tübingen, 09/2016

Michael Krieger, ZITI, Uni Heidelberg How to synthesize DDR multiplexers 1

Page 2: How to synthesize DDR multiplexers - SuS

Introduction

SPADIC – readout ASIC for TRD

Largely consists of synthesized digital logic

Uses DDR serial data output

Versions: 1.0 (Nov. 2011), 1.1 (Nov. 2015), 2.0 (June 2016)

There were some problems implementing DDR correctly

What went wrong? How to do it right?

Michael Krieger, ZITI, Uni Heidelberg How to synthesize DDR multiplexers 2

Page 3: How to synthesize DDR multiplexers - SuS

Scope

Results apply in particular to

Synthesized (‘semi-custom’) ASICs

Using a standard cell library

Using Cadence RTL Compiler (Versions 12–14)

Fundamentals also applicable to

FPGAs – understanding built-in DDR macros

Full-custom ASICs – building your own DDR serializer

Michael Krieger, ZITI, Uni Heidelberg How to synthesize DDR multiplexers 3

Page 4: How to synthesize DDR multiplexers - SuS

Serial data transmission

Output the individual bits one after the other

Synchronous to the clock signal that is used inside the chip

‘Single data rate’ – one bit per clock cycle (→ trivial)

‘Double data rate’ – two bits per clock cycle

Serialized data is sampled at the receiving side – must be stable as long

as possible (SDR: 1, DDR: ½ clock cycle)

clock

SDR

DDR

good bad

Michael Krieger, ZITI, Uni Heidelberg How to synthesize DDR multiplexers 4

Page 5: How to synthesize DDR multiplexers - SuS

Implementing DDR

Problem

Flip-flops are sensitive to one of the clock edges

How to update a signal (exactly) twice per clock cycle?

Basic idea

Use two flip-flops and a multiplexer

Alternate between the inputs using the clock

second

first

clk

out

Must ensure that first is output before second!

Michael Krieger, ZITI, Uni Heidelberg How to synthesize DDR multiplexers 5

Page 6: How to synthesize DDR multiplexers - SuS

Choosing clock polarities

second

first

clk

out0

1

Model all possible configurations (23 = 8) by inserting inverters

Naming convention: (n|p)(n|p)(−|+)

first sensitive edge, second sensitive edge, select polarity

Only 4 out of 8 combinations give correct results:1

pp−, np+, np−, nn+ (see Appendix)

1Considering the ideal case where gate/wire delays ¿ clock periodMichael Krieger, ZITI, Uni Heidelberg How to synthesize DDR multiplexers 6

Page 7: How to synthesize DDR multiplexers - SuS

Choosing clock polarities: Examples

firstsecond

second

first

1

0first

0 01

pn+ “22”

second

first

1

0

1 10

pp− “12”

wrong! (second before first)

correct! (first before second)

(clk connections implied, inverters denoted by )

firstsecond

second

before FFafter FF

Another naming convention: (1|2)(1|2)selected half of first, selected half of second

Michael Krieger, ZITI, Uni Heidelberg How to synthesize DDR multiplexers 7

Page 8: How to synthesize DDR multiplexers - SuS

Implementing the multiplexer

Synthesis tool translates HDL code to logic function:

sel a b y

0 0 – 0

0 1 – 1

1 – 0 0

1 – 1 1

y= a ·!sel+b ·sel

1 1

1 1

0 0

0 0

b

asel

b

a

sel y!y!sel=

sel

b

ay

“AOI22” gate

Problem

sel and !sel are independent inputs → glitch when relative delay 6= 0

Michael Krieger, ZITI, Uni Heidelberg How to synthesize DDR multiplexers 8

Page 9: How to synthesize DDR multiplexers - SuS

Glitch

True CMOS implementation of the multiplexer logic function – PMOS

and NMOS networks are complementary (or dual)

Glitch occurs when a= b= 1 and sel= 1 → 0

y should be 1 (!y = 0) at all times

!y

sel

!sel

!sel

a

b

a

sel

b

!y = 0 !y = 1

sel→ 0!sel still 0

!y = 0

!sel→ 1

Michael Krieger, ZITI, Uni Heidelberg How to synthesize DDR multiplexers 9

Page 10: How to synthesize DDR multiplexers - SuS

Glitch in SPADIC 1.0

For each output bit (½ clock period), for the duration equal to the

relative delay between sel and !sel, the signal is potentially wrong

Safe ‘sampling window length’ is reduced by this amount

Observed: ≈ 2 ns (distance of red line to black line)

Simple inverter delay only ≈ 0.1 ns

Reason: sel and !sel taken from

different depths of the clock tree!

Limits SPADIC 1.0 practically usable

clock speed to < 250 MHz (which was the

target)

Michael Krieger, ZITI, Uni Heidelberg How to synthesize DDR multiplexers 10

Page 11: How to synthesize DDR multiplexers - SuS

Solution (Part 1)

A dedicated multiplexer cell using gated inverters – PMOS and NMOS

networks are symmetric rather than complementary

!sel derived internally from sel (not shown here)

More importantly: no glitch possible (see Appendix for all cases)

Again considering a= b= 1, sel= 1 → 0:

!y

a

sel

!sel

a

b

!sel

sel

b

!y = 0

sel→ 0!sel still 0

!y = 0

!sel→ 1

!y =sela

b

!sel

!sel

Michael Krieger, ZITI, Uni Heidelberg How to synthesize DDR multiplexers 11

Page 12: How to synthesize DDR multiplexers - SuS

Enforcing the dedicated multiplexer

Option 1: Compiler directive

assign y = sel ? // pragma map_to_muxb : a;

y <= b when sel -- pragma map_to_muxelse a;

Must be ‘applied’ to the respective selection operator – code layout matters!

Option 2: Create an instance manually

Must set the dont_touch attribute for the instance, otherwise it will be

replaced by AOI22 again during optimization!

Tradeoff: Keeping the HDL code independent from the target technology

vs. knowing the instance name (important later)

Michael Krieger, ZITI, Uni Heidelberg How to synthesize DDR multiplexers 12

Page 13: How to synthesize DDR multiplexers - SuS

Problem solved in SPADIC 1.1?

Indeed the sampling window is

good – but only up to ≈ 150 MHz

It diminishes at higher speeds

depending on the clock

frequency (red points)

Still limited to <250 MHz

There’s more that can go wrong!

Michael Krieger, ZITI, Uni Heidelberg How to synthesize DDR multiplexers 13

Page 14: How to synthesize DDR multiplexers - SuS

Multiplexer input timing

second

first

1

0

0 1

firstsecond

Arbitrary timing relationship between each of the data inputs and the

select input of the multiplexer (wire delays, inserted buffers)

Each input must be stable while it is selected

Synthesis tools could enforce this if they knew what the desired

situation is

Michael Krieger, ZITI, Uni Heidelberg How to synthesize DDR multiplexers 14

Page 15: How to synthesize DDR multiplexers - SuS

Intermediate solution for SPADIC 2.0

How to teach the correct multiplexer input requirements to the

synthesis tools was not known at the time when SPADIC 2.0 was

submitted

After synthesis, it turned out that the inputs were off by about ½ clock

period using the chosen configuration (pp−)

Inputs were shifted by changing the configuration to np− and running

synthesis again, hoping that the results would otherwise stay similar

enough (this was the case)

Both variants were submitted to confirm the simulation results

Michael Krieger, ZITI, Uni Heidelberg How to synthesize DDR multiplexers 15

Page 16: How to synthesize DDR multiplexers - SuS

Solution (Part 2)

Setting the right constraints

set_data_check should work, but ignored by RTL Compiler (bug)

‘Workaround’ provided by Marios Karatzias from Cadence support

(actually more elegant – normally used in a different context, but expresses

precisely what is needed here)

Important: must be applied to the instance of a library cell (‘leaf pins’, as

opposed to ‘hierarchical pins’) → must know its name

set_clock_gating_check –low my_mux_instance/aset_clock_gating_check –high my_mux_instance/b

1

0

1

ab

clk

b

a

0

Michael Krieger, ZITI, Uni Heidelberg How to synthesize DDR multiplexers 16

Page 17: How to synthesize DDR multiplexers - SuS

Remark about setting constraints

My personal recommendation

Use the corresponding commands (dc:: prefix) in the Tcl synthesis

script instead of reading an SDC file!

Reason: Misspelled pin names, etc. will stop the script instead of

silently(!) being ignored.

Michael Krieger, ZITI, Uni Heidelberg How to synthesize DDR multiplexers 17

Page 18: How to synthesize DDR multiplexers - SuS

Choosing clock polarities revisited

Of the 4 possible logically correct configurations, which one is ‘best’?

They differ in which halves of the inputs are selected:

pp−, nn+→ “12”, np+→ “11”, np−→ “22”

Synthesis likes to correct timing violations by inserting delays into

data (first, second), not clock (sel) signals

‘too late’ data signal (w.r.t. sel) will be shifted into the next clock cycle

→ wrong output order

“2”

late: ½ cycle marginearly: easily corrected

“1”

late: no marginearly: ‘wasted’ margin

np− (“22”) is ‘best’, however there is no guarantee: if a data signal is more

than ½ cycle too late, a different configuration may lead to better results.Michael Krieger, ZITI, Uni Heidelberg How to synthesize DDR multiplexers 18

Page 19: How to synthesize DDR multiplexers - SuS

Summary

1 Choose one of the logically correct DDR mux configurations

2 Enforce the use of a proper mux library cell (no glitch possible)

3 Apply the proper timing constraints (set_clock_gating_check)

to the leaf pins

4 Verify the result, adjust configuration if necessary

Michael Krieger, ZITI, Uni Heidelberg How to synthesize DDR multiplexers 19

Page 20: How to synthesize DDR multiplexers - SuS

Appendix

Appendix

Michael Krieger, ZITI, Uni Heidelberg How to synthesize DDR multiplexers 20

Page 21: How to synthesize DDR multiplexers - SuS

Appendix

DDR mux configurations table

1

0 first

0 01

pn+ "22"second

first

second

1

0

0 01

np+ "11"first

secondfirst

second

1

0 first

0 01

pp+ "21"second

first

second

1

0

0 01

nn+ "12"first

secondfirst

second

1

0 firstpn– "11"second

first

second

1

0np– "22"first

secondfirst

second

1

0

1 10

pp– "12"first

second

1

0nn– "21"first

second

1 10

1 10

1 10

firstsecond

firstsecond

Michael Krieger, ZITI, Uni Heidelberg How to synthesize DDR multiplexers 21

Page 22: How to synthesize DDR multiplexers - SuS

Appendix

Multiplexer transitions table

!y

sel

!sel

!sel

a

b

a

sel

b

!y

a

sel

!sel

a

b

b

!sel

sel

!y

b

b

b = 0 → 1

sel = 0Gated inverters CMOS logic

!y

a

a

sel = 1

!y

sel!sel

a = b = 0

!y

!y

!selsel

a = b = 1

!y

sel

!sel

!selsel

a = 0, b = 1

!y

sel

sel

a = 1, b = 0

!y

!sel

!sel

a

b

!selsel

!ya

!sel

!sel

bsel !y

a = 0 → 1

sel = 0 → 1 sel = 0 → 1

sel = 0 → 1

sel = 1 → 0

sel = 0 → 1

sel = 1 → 0

sel = 0 → 1

sel = 1 → 0

Same in both implementations

Different in each implementation

Glitch!

Michael Krieger, ZITI, Uni Heidelberg How to synthesize DDR multiplexers 22