What "Memory Compiler" Actually Means: From Bitcells to GDS Tiling

matt_d1 pts0 comments

What "Memory Compiler" Actually Means: From Bitcells to GDS Tiling | The Cloudlet

What "Memory Compiler" Actually Means: From Bitcells to GDS Tiling

May 29, 2026 [compiler-design] #memory-compiler #sram #eda #layout-vs-schematic #tiling<br>Most people see the name "memory compiler" and have no idea what it actually does.

1. Compiler Representation

The classical representation is the T-diagram (or Tombstone diagram). It characterizes a compiler by three languages: the source language it reads (A), the target language it emits (B), and the implementation language it is written in (C):

┌───┬───┐<br>│ A → B │<br>└───┴───┘<br>│ C

Read it as: "a program that translates A into B, written in C."

The textbook example is C → machine code. But the definition is broader than that:

Typical compiler: C / C++ → assembly / machine code

The compiler I work on at Synopsys: VHDL / Verilog RTL → simulation / debugging database

Memory compiler : design parameters (depth, width, port…) → all views needed to tape out a chip

Shader compiler: GLSL / HLSL → GPU machine code (e.g., Mesa's NIR pipeline, DXC)

Query compiler: SQL → a physical execution plan (e.g., PostgreSQL's planner/executor)

Bytecode compiler: Java source → JVM bytecode (javac), or JavaScript → V8 bytecode (Ignition)

2. The Raw Material: Inside a Bitcell

The fundamental building block of any SRAM (Static Random-Access Memory) is the bitcell — a tiny circuit that holds one bit. Hardware teams design and characterize these cells by hand; the memory compiler's job is to replicate them at scale.

The most common variant is the 6T bitcell (six transistors). Three signal lines connect it to the outside world: WL (Word Line — selects a row), BL (Bit Line), and BLB (Bit Line Bar, the complementary signal):

WL<br>══════════════════╦══════════════════════════════╦════════<br>║ ║<br>┌─────╫──────────────────────────────╫─────┐<br>│ [ M5 ] [ M6 ] │<br>│ │ │ │<br>BL ──┼─────●───── Q Q' ─────●─────┼── BLB<br>│ │ │ │<br>│ │ ┌───────┐ │ │<br>│ ├─►─┤ INV_R ├───┤ │<br>│ │ │(M2,M4)│ │ │<br>│ │ └───────┘ │ │<br>│ │ │ │<br>│ │ ┌───────┐ │ │<br>│ ├───┤ INV_L ├─◄─┤ │<br>│ │ │(M1,M3)│ │ │<br>│ │ └───────┘ │ │<br>│ │<br>│ bitcell (6T) │<br>└──────────────────────────────────────────┘

Transistor count:

INV_L: PMOS M3 + NMOS M1 = 2

INV_R: PMOS M4 + NMOS M2 = 2

Access transistors: M5, M6 = 2

Total: 6 → "6T"

Positive Feedback: How a Bit Gets Locked

Two inverters connected head-to-tail (cross-coupled ):

Assume Q = 1 (high, Vdd)

INV_R receives 1, outputs 0 to Q'

INV_L receives 0, outputs 1 back to Q

Q stays 1 — a perfect closed loop

This is positive feedback + bistability . As long as Vdd is present, Q and Q' are locked at opposite voltages indefinitely. The stored bit is literally just the voltage sitting on those two nodes. SRAM is called "Static" because — unlike DRAM — it never needs to refresh.

Three Operations

Hold (Standby)

WL = 0, access transistors off

Cross-coupled inverters maintain state entirely on their own; only leakage current flows

Strictly speaking, Hold is a state, not an operation — but datasheets list it alongside Read/Write because designers need leakage current figures for power budgeting

Read

Precharge BL and BLB to Vdd

Assert WL high; M5 and M6 turn on

The side storing 0 pulls its bitline down by ~100 mV

Sense amplifier amplifies the small differential → 1 bit out

Read Disturbance : the moment WL turns on, the high-voltage BLB can pull up Q' (the node storing 0) slightly through M6. If it rises past the switching threshold of INV_L, the cell flips — a Destructive Read . The fix is making the pull-down NMOS M2 stronger (wider) than the access transistor M6. This strength ratio is the Beta Ratio (β = W_pull-down / W_access), typically required to be > 1. This is why the six transistors in a standard bitcell are not all the same size.

Write

Write driver forces BL and BLB to target values (one high, one low)

Assert WL high

Write driver strength overcomes the cell's pull-up → forces the cell to flip

The sizing trade-off between these forces is called the pull-up ratio

Beyond 6T: Other Bitcell Types

6T is not the only option. Different use cases demand different trade-offs:

CellTransistorsKey propertyTypical use<br>6T6High density, standard read/writeL2/L3 caches<br>8T8Isolated read port, no read disturbL1 caches, register files<br>10T10Ultra-low voltage operationNear-threshold designs

The 8T cell adds a dedicated read path (two extra transistors) so the read operation never touches the storage nodes — eliminating read disturbance entirely at the cost of ~33% more area.

3. Why a Memory Compiler Exists

When a hardware team designs an SoC (System on Chip), they need SRAM — lots of it, at many different sizes. The fundamental unit they work with is a cell : the smallest verified building block of an SRAM array. But a chip might need an SRAM of depth 512 × width 32 in one place, and depth 4096 × width 64 in another. Redesigning a new cell from scratch for every configuration is not feasible.

The solution is...

compiler read memory sram bitcell cell

Related Articles