Lect 12
Lect 12
Harris
David Harris
Reading
W&E 4.5-4.6
Introduction
In the last lecture, we looked at memory design. Today we will look at various
methods for building decoders to drive the word lines and column multiplexer
circuitry.
To build a fast memory, we need to minimize the delay of the decoder. This
challenge will serve as a jumping off point for delay estimation and gate sizing
to minimize delay.
decoder
mux
We need to build the decoder and wordline drive circuits, and the column select
and bitline drive circuits. For both we need to build a decoder -- something to
select the correct line. Lets look at building decoders for CMOS memories.
A decoder is just a structure that contains a number of AND gates, where each
gate is enabled for a different input value.
For a n-bit to 2n decoder, we need to build 2n, n-input AND gates. And we want to
build these AND gates so they layout nicely (in a regular way)
In CMOS building this type of gate causes a problem, since large fanin implies a
series stack. We will see a little later in the notes that the best way to do this is to
use a two-level decoder by predecoding the inputs.
In nMOS the problem was easy, large fanin NOR gates work well. So
In CMOS, a large fanin gate implies a series stack. So we need to build a decoder
that does not use a large fanin gate. But how? Use a 2-level decoder.
• An n-bit decoder requires 2n wires
A0, A0, A1, A1, …
Each gate is an n bit NOR (NAND gate)
• Could predecode the inputs
Send A0 A1, A0 A1, A0 A1, A0 A1, A2 A3 …
Instead of A0, A0, A1, A1, …
Maps 4 wires into 4 wires that need to go to the decoder
Reduces the number of inputs to the decode gate by a factor of two.
A0 A1
A0 A1
A0 A1
A0 A1
A0 A1
A0 A1
A0 A1
A0 A1
A1
A1
A0
A0
2 Bit Predecode No Predecode
Predecode is just like what we did when we needed to make a single six input
AND gate. Did it in a few levels:
decode gate
predecode
The difference with standard logic is that we need to decode all possible inputs.
This means that each predecode gate can be reused by many ‘final’ decode
gates. A little planning can yield a regular layout.
A predecoded decoder:
A0 A1 A2 A3 A4 A5
Often we need to build large array structures (for example we need a large RAM),
so we want to layout the decoder in as little space as possible. We need to find a
good way to layout this structure.
Clearly we need to run the address lines through each decoder cell, and stack the
decoder cells next to each other.
The output of the predecode gate need to drive the address lines.
• These address lines are usually high capacitance
So usually it is better to use a NAND with an inverter buffer as the
predecode cells.
• Cells can be placed on top of the address lines, or to the left of the address
lines.
predecode cells
decode cells
A0 A0 A1 A1 A2 A2 Gnd Vdd
The problem with this layout is that most of the space is wasted. All of the area
under the wires is wasted. We should rotate the gate to fit under the wires.
Out0
A0 A0 A1 A1 A2 A2 Vdd Gnd
In this layout, the basic cell remains unchanged, it is the wire contacts that are
programmed. This is sometimes a good idea, since it lets you optimize the decode
cell (in this case the 3 input gate)
Vdd
Out1
Gnd
Out0
A0 A0 A1 A1 A2 A2
Φ1
or use normal NAND gate
Wordline pitch of memory cell is not that tight (about 40λ), but not that large either.
There are some memories (ROMs, dRAMs) with much tighter pitch. For many of
these applications you need thin gates and drivers. The minimum useful space is
16λ
For the wordline driver, I might use two of these drivers in parallel, to reduce the
horizontal length (effectively fold the transistors again)
Predecoder
Row Decode
Memory Array Mem Drv Decoder
Mem
Drv Decoder
R/W
Column Mux 2:1 Mux
&
Bit IO
Bit IO
Address
For memories (and other structures) you end up with long high cap wires
• Need to drive these large capacitors quickly, and this sets the device size
• We will look at chain of inverters first, and then think about gates
Why transistor sizes matter when you are driving a large capacitance
13ns falling
26ns rising
2pF
min 400-p
200-n
1 f f2 f3