EECS150 - Digital Design Lecture 11 - Static Random Access Memory (SRAM) Feb 26, 2013 John Wawrzynek
Spring 2013
Page 1
EECS150 - Lec11-sram
Memory-Block Basics • Uses: Whenever a large collection of state elements is required. – data & program storage – general purpose registers
log2(M)
– data buffering – table lookups – CL implementation
M X N memory: Depth = M, Width = N.
• Basic Types: – RAM - random access memory
M words of memory, each word N bits wide.
– ROM - read only memory – EPROM, FLASH - electrically programmable read only memory Spring 2013
EECS150 - Lec11-sram
Page 2
Memory Components Types: • Volatile: – Random Access Memory (RAM): • DRAM "dynamic" • SRAM "static" Focus Today
• Non-volatile:
– Read Only Memory (ROM): • Mask ROM "mask programmable" • EPROM "electrically programmable" • EEPROM "erasable electrically programmable" • FLASH memory - similar to EEPROM with programmer integrated on chip
All these types are available as stand alone chips or as blocks 2013 chips. EECS150 - Lec11-sram Page 3 in Spring other
Standard Internal Memory Organization 2-D arrary of bit cells. Each cell stores one bit of data.
Special circuit tricks are used for the cell array to improve storage density.
• RAM/ROM naming convention: – examples: 32 X 8, "32 by 8" => 32 8-bit words – 1M X 1, "1 meg by 1" => 1M 1-bit words
Spring 2013
EECS150 - Lec11-sram
Page 4
Address Decoding sel_row1 sel_row2
Address
•
The function of the address decoder is to generate a one-hot code word from the address.
•
The output is use for row selection.
•
Many different circuits exist for this function. A simple one is shown to the right. Spring 2013
Page 5
EECS150 - Lec11-sram
Memory Block Internals For read operation, functionally the memory is equivalent to a 2-D array off flip-flops with tristate outputs on each:
sel_row1
sel_row2
For write operation, functionally equivalent includes a means to change state value:
Spring 2013
EECS150 - Lec11-sram
These circuits are just functional abstractions of the actual circuits used.
Page 6
SRAM Cell Array Details wor
wor
bit
wor bit bit
bit wor
bit
wor bit bit
bit
bit
bit bit
bit
Most common is 6transistor (6T) cell array. Word selects this cell, and all others in a row.
wor
word line
For write operation, column bit lines are driven differentially (0 on one, 1 on the other). Values overwrites cell state.
bit
bit
For read operation, column bit lines are equalized (set to same voltage), then released. Cell pulls down one bit line or the other. Spring 2013
EECS150 - Lec11-sram
Page 7
Column MUX in ROMs and RAMs: • Permits input/output data widths different from row width. • Controls physical aspect ratio – Important for physical layout and to control delay on wires.
Technique illustrated for read operation. Similar approach for write. Spring 2013
EECS150 - Lec11-sram
Page 8
Cascading Memory-Blocks How to make larger memory blocks out of smaller ones. Increasing the width. Example: given 1Kx8, want 1Kx16
Spring 2013
EECS150 - Lec11-sram
Page 9
Cascading Memory-Blocks How to make larger memory blocks out of smaller ones. Increasing the depth. Example: given 1Kx8, want 2Kx8
Spring 2013
EECS150 - Lec11-sram
Page 10
Multi-ported Memory • Motivation: – Consider CPU core register file:
Aa Dina WEa
• 1 read or write per cycle limits processor performance. • Complicates pipelining. Difficult for different instructions to simultaneously read or write regfile.
Ab Dinb WEb
• Common arrangement in pipelined CPUs is 2 read ports and 1 write port.
– I/O data buffering:
Spring 2013
•
disk or network interface
data buffer
CPU
Douta Dual-port Memory Doutb
dual-porting allows both sides to simultaneously access memory at full bandwidth. Page 11
EECS150 - Lec11-sram
Dual-ported Memory Internals • Add decoder, another set of read/write logic, bits lines, word lines:
deca
decb
cell array
•
WL2 WL1
b2 • r/w logic r/w logic
address ports
Spring 2013
Example cell: SRAM
•
b1
b1
b2
Repeat everything but crosscoupled inverters. This scheme extends up to a couple more ports, then need to add additional transistors.
data ports
EECS150 - Lec11-sram
Page 12
Adding Ports to Primitive Memory Blocks Adding a read port to a simple dual port (SDP) memory. Example: given 1Kx8 SDP, want 1 write & 2 read ports.
Spring 2013
EECS150 - Lec11-sram
Page 13
Adding Ports to Primitive Memory Blocks How to add a write port to a simple dual port memory. Example: given 1Kx8 SDP, want 1 read & 2 write ports.
Spring 2013
EECS150 - Lec11-sram
Page 14
ation-Specific Modular BLock Architecture) COUT
Virtex-5 LX110T DI memory blocks. D6 D5 Distributed RAM D4 using LUTs D3 among theD2CLBs. D1
Block RAMs in four DX columns.
A6 A5 A4 A3 A2 A1
DI2 DPRAM64/32 SPRAM64/32 SRL32 O6 SRL16 O5 LUT DI1 RAM ROM MC31
WA1-WA6 WA7 WA8
CI C6 C5 C4 C3 C2 C1
!"#$%&'4
DI2 DPRAM64/32 SPRAM64/32 SRL32 O6 SRL16 O5 LUT DI1 RAM ROM MC31 WA1-WA6 WA7 WA8
A6 A5 A4 A3 A2 A1
!"#$%&')
Serial ()*
A SLICEM 6-LUT ...
slide 7 CX
Memory data input
BI
Normal 6-LUT inputs.
Memory write address
B6 B5 B4 B3 B2 B1
BX
DI2 A6 DPRAM64/32 A5 SPRAM64/32 A4 SRL32 O6 SRL16 O5 A3 LUT DI1 A2 RAM ROM A1 MC31 WA1-WA6 WA7 WA8
Normal 5/6-LUT outputs. Memory data input.
Control output for chaining LUTs to make larger memories.
Synchronous write / asychronous read
AI
A 1.1 Mb distributed RAM can be made if DI2 all A6 SLICEMs of A6 an LX110T are used as RAM. DPRAM64/32
Spring 2013
A5 A4 A3 A2 A1
A5 A4 A3 A2 A1
EECS150 - Lec11-sram SPRAM64/32
SRL32 SRL16 LUT RAM ROM
O6 O5 DI1 MC31
Page 16
SLICEL vs SLICEM ...
SLICEM
R
Chapter 5: Configurable Logic Blocks (CLBs)
R
SLICEL
CLB Overview
COUT
Reset Type
Reset Type
COUT
Sync
Sync
DMUX D6 D5 D4 D3 D2 D1
A6 A5 A4 A3 A2 A1
LUT ROM
D
D
O6 O5
DX D CE CK
DX
Async
DI
Async
FF LATCH Q INIT1 INIT0 SRHIGH SRLOW SR REV
DQ
D6 D5 D4 D3 D2 D1
DMUX A6 A5 A4 A3 A2 A1
DI2 DPRAM64/32 SPRAM64/32 SRL32 O6 SRL16 O5 LUT DI1 RAM ROM MC31
D
D DX
WA1-WA6 WA7 WA8
D CE CK
FF LATCH Q INIT1 INIT0 SRHIGH SRLOW SR REV
DQ
DX CMUX C6 C5 C4 C3 C2 C1
A6 A5 A4 A3 A2 A1
CI LUT ROM
C
O6 O5
CX
D CE CK
CX
FF LATCH Q INIT1 INIT0 SRHIGH SRLOW SR REV
C CQ
C6 C5 C4 C3 C2 C1
BMUX B6 B5 B4 B3 B2 B1
A6 A5 A4 A3 A2 A1
LUT ROM
B
O6 O5
BX
D CE CK
BX
FF LATCH Q INIT1 INIT0 SRHIGH SRLOW SR REV
B
A6 A5 A4 A3 A2 A1
LUT ROM
A
O6 O5
AX
AX SR CE CLK
D CE CK
0/1
FF LATCH Q INIT1 INIT0 SRHIGH SRLOW SR REV
CIN
B6 B5 B4 B3 B2 B1
A AQ
A6 A5 A4 A3 A2 A1
Diagram of SLICEL
B BX
D CE CK
A AX
AX SR CE CLK
FF LATCH Q INIT1 INIT0 SRHIGH SRLOW SR REV
D CE CK
FF LATCH Q INIT1 INIT0 SRHIGH SRLOW SR REV
CLK
WSGEN
WE
CIN
D
WCLK WE
8
(CLK) (WE/CE)
A[6:1] WA[8:1] CLK WE
Virtex-5 FPGA User Guide UG190 (v4.2) May 9, 2008
173
www.xilinx.com
A6 (CX)
SPRAM64 O6
DI1 6 8
A[6:1] WA[8:1] CLK WE
A7 (BX) O F8MUX
SPRAM64 O6
DI1 6 8
A[6:1] WA[8:1] CLK WE
8
Output D Q
Registered Output (Optional)
A6 (AX)
SPRAM64 O6
DI1 6
A 128 x 32b LUT RAM has a 1.1ns access time.
F7BMUX
F7AMUX
A[6:1] WA[8:1] CLK WE UG190_5_14_050506
Figure 5-14:
AQ
UG190_5_03_041006
Example configuration: Single-port 256b x 1, registered output.
O6
DI1 6
A[7:0]
A
Diagram of SLICEM
CLB Overview
SPRAM64
BQ
Page 17
Example Distributed RAM (LUT RAM) RAM256X1S
B
0/1
Figure 5-3:
R
CQ
AMUX DI2 A6 DPRAM64/32 A5 SPRAM64/32 A4 SRL32 O6 SRL16 O5 A3 LUT DI1 A2 RAM A1 ROM MC31 WA1-WA6 WA7 WA8
WE
Virtex-5 FPGA User Guide UG190 (v4.2) May 9, 2008
C
BMUX DI2 A6 DPRAM64/32 A5 SPRAM64/32 A4 SRL32 O6 SRL16 O5 A3 LUT DI1 A2 RAM A1 ROM MC31 WA1-WA6 WA7 WA8
EECS150 - Lec11-sram
www.xilinx.com
FF LATCH Q INIT1 INIT0 SRHIGH SRLOW SR REV
BX
Each CLB can contain zero or one SLICEM. Every other CLB column contains a SLICEMs. In addition, the two CLB columns to the left of the DSP48E columns both contain a SLICEL and a SLICEM.
174
D CE CK
AI
UG190_5_04_032606
Spring 2013
CX
BI
SLICEM adds memory features to LUTs, + muxes. Figure 5-4:
C
CX
BQ
AMUX A6 A5 A4 A3 A2 A1
CMUX DI2 DPRAM64/32 SPRAM64/32 SRL32 O6 SRL16 O5 LUT DI1 RAM ROM MC31 WA1-WA6 WA7 WA8
A6 A5 A4 A3 A2 A1
Distributed RAM (RAM256X1S)
Spring 2013 greater than the provided examples require EECS150 Distributed RAM configurations more than- Lec11-sram one SLICEM. There are no direct connections between slices to form larger distributed RAM configurations within a CLB or between slices.
Page 18
!
No set or reset
!
Synchronous set
!
Synchronous reset
!
Synchronous set and reset
!
Asynchronous set (preset)
!
Asynchronous reset (clear)
!
Asynchronous set and reset (preset and clear)
Distributed RAM Primitives
Distributed RAM and Memory (Available in SLICEM only) Multiple LUTs in a SLICEM can be combined in various ways to store larger amount of data. The function generators (LUTs) in SLICEMs can be implemented as a synchronous RAM resource called a distributed RAM element. RAM elements are configurable within a SLICEM to implement the following: !
Single-Port 32 x 1-bit RAM
!
Dual-Port 32 x 1-bit RAM
!
Quad-Port 32 x 2-bit RAM
!
Simple Dual-Port 32 x 6-bit RAM
!
Single-Port 64 x 1-bit RAM
!
Dual-Port 64 x 1-bit RAM
!
Quad-Port 64 x 1-bit RAM
!
Simple Dual-Port 64 x 3-bit RAM
!
Single-Port 128 x 1-bit RAM
!
Dual-Port 128 x 1-bit RAM
!
Single-Port 256 x 1-bit RAM
All are built from a single slice or less.
Remember, though, that the SLICEM LUT is naturally only 1 read and 1 write port.
Distributed RAM modules are synchronous (write) resources. A synchronous read can be implemented with a storage element or a flip-flop in the same slice. By placing this flip-flop, Spring 2013 EECS150 - Lec11-sram the distributed RAM performance is improved by decreasing the delay into the clock-to-out value of the flip-flop. However, an additional clock latency is added. The distributed elements share the same clock input. For a write operation, the Write Enable (WE) input, driven by either the CE or WE pin of a SLICEM, must be set High.
Page 19
Example Dual Port Configurations 178
www.xilinx.com
Spring 2013
Virtex-5 FPGA User Guide UG190 (v4.2) May 9, 2008
EECS150 - Lec11-sram
Page 20
Distributed RAM Timing
Spring 2013
EECS150 - Lec11-sram
Page 21
Spring 2013
EECS150 - Lec11-sram
Page 22
Block RAM Overview •
36K bits of data total, can be configured as: –
•
Each 36Kb block RAM can be configured as: –
•
2 independent 18Kb RAMs, or one 36Kb RAM.
64Kx1 (when cascaded with an adjacent 36Kb block RAM), 32Kx1, 16Kx2, 8Kx4, 4Kx9, 2Kx18, or 1Kx36 memory.
Each 18Kb block RAM can be configured as: –
16Kx1, 8Kx2, 4Kx4, 2Kx9, or 1Kx18 memory.
•
Write and Read are synchronous operations.
•
The two ports are symmetrical and totally independent (can have different clocks), sharing only the stored data.
• Spring 2013
Each port can be configured in one of the available widths, independent of the other EECS150 - Lec11-sram Page
23
Block RAM Timing
• Note this is in the default mode, “WRITE_FIRST”. Other possible modes are “READ_FIRST”, and “NO_CHANGE”. • Optional output register, would delay appearance Spring 2013
EECS150 - Lec11-sram
Page 24
Verilog Synthesis Notes • Block RAMS and LUT RAMS all exist as primitive library elements. However, it is much more convenient to use inference. • Depending on how you write your verilog, you will get either a collection of block RAMs, a collection of LUT RAMs, or a collection of flip-flops. • The synthesizer uses size, and read style (synch versus asynch) to determine the best primitive type to use. • It is possible to force mapping to a particular primitive by using synthesis directives. However, if you write your verilog correctly, you will not need to use directives. • The synthesizer has limited capabilities (eg., it can combine primitives for more depth and width, but is limited on porting options). Be careful, as you might not get what you want. • See XST User Guide for examples. Spring 2013
Page 25
EECS150 - Lec11-sram
Inferring RAMs in Verilog // 64X1 RAM implementation using distributed RAM module ram64X1 (clk, we, d, addr, q); input clk, we, d; input [5:0] addr; output q; reg [63:0] temp; always @ (posedge clk) if(we) temp[addr]