This page of the documentation explains the hierarchical design modules of OpenRAM.
- Hierarchical Design Modules
- Bank
- Port Data
- Port Address
- Plain Bitcell Array
- Variations of Bitcells Needed
- Replica Bitcell Array
- 1D Arrays
- 2D Arrays
- Delay Line
- Hierarchical (Address) Decoder
- Memory building blocks
- SRAM, Bank, Control Logic, Decoders, Column Mux, Various arrays (DFF, drivers)
- Can override every module with a custom one in the configuration file
- Each module must:
- Create netlist
- Define inputs/outputs
- Instantiate and connect sub-modules and cells
- Create layout
- Place and route itself
- Route vdd/gnd to M3
- (Optional) Run DRC/LVS
- Analytically model timing and power
- Create netlist
- Encompasses everything except
- Data and Address Flops
- Control logic
- Multi-bank logic
- Arranges ports
- Port 0 is left/bottom
- Port 1 is right/top
- Encapsulates all of the datapath logic for a rw, w, or r port
- Sense amplifiers (read types)
- Write drivers (write types)
- Column mux (if any)
- Precharge (read or write type) (write to not destroy half selected cells in a row)
- Also includes a precharge for the replica columns
- Encapsulates the row decoder and wordline driver for easier placement next to a bank
- Each port will have its own port_address module
- 2D Array of bit cells
- Each row alternately flips vertically
- Assume bitcells tile
- Boundary is determined by boundary layer in GDS
- Word line must abut
- Bit lines must abut
- Normal bitcell for data storage
- Replica bitcell that is fixed to output a 0 value
- Dummy bitcell with bitlines disconnected (purely for wordline load and lithography regularity)
- Bitcells: B=regular, D=dummy, R=replica
- Main bitcell array (
$\color{green}{\textrm{green}}$ ) - Replica cols for each read port (
$\color{skyblue}{\textrm{blue}}$ ) on left or right (any number) - Dummy bitcells on the top, bottom, left, and right for lithography regularity (
$\color{red}{\textrm{red}}$ ) - Replica columns activate two replica bitcells
-
$\color{blue}{\textrm{One}}$ driven by replica wordline -
$\color{royalblue}{\textrm{Second}}$ driven by one of the normal wordlines (dark blue)
-
- Second port word and bit lines not shown
- Would be on right and top
- Several modules have 1D arrays:
sense_amp_array
write_driver_array
precharge_array
single_level_column_mux_array
tri_gate_array
wordline_driver
(*should change name to _array)
sense_amp_array
,write_driver_array
,tri_gate_array
match column mux stride to space out- Wish list: Allow wide sense amplifier array to use multiple rows of sense amplifiers.
- Regular DFF arrays (
dff_array.py
) - Buffered DFF arrays (
dff_buf_array.py
) - Inverted DFF array (
dff_inv_array.py
) - Can be $1N$ or $N1$ or
$M*N$ - Wish list:
$M*N$ routes pins to edges
- Wish list:
- Configurable fanout and stages
[4,4,4]
means 3 FO4 stages[1,1,4,4]
means 2 FO1 stages followed by FO4
- Generic
hierarchical_predecode
class- Places routing rails and decode inverters
- Derived to implement multiple predecoders
hierarchical_predecode_2x4
hierarchical_predecode_3x8
hierarchical_predecode_4x16
- Hierarchical decoder uses predecoder + another decode stage
- Predecoders are also used for the column mux decode and bank select decode
- Wish list: Handle thin bitcell height