mirror of https://github.com/VLSIDA/OpenRAM.git
3.2 KiB
3.2 KiB
Go Back
Control Logic and Timing
This page of the documentation explains the control logic and timing of OpenRAM.
Table of Contents
- Read Timing
- Write Timing
- External Control Signals
- Internal Control Signals
- Replica Bitline (RBL)
- Internal Control Signals Diagram (Read)
- Internal Control Signals Diagram (Write)
- Clock Distribution
Read Timing
Read Timing Simulation
Write Timing
Write Timing Simulation
External Control Signals
- Behaves as a synchronous register interface
- Address and data captured on positive edge
- Data is available after the negative edge (before next positive edge)
- Clock is used for internal control generation
- Clock cycle
- Clock high: capture inputs + precharge + decode
- Clock low: read/write
- Reads and writes on multiple ports to the same address in the same cycle "feed through" but the noise margins of the bitcell must be able to handle this
Internal Control Signals
- Sense Enable (
s_en) -- Active high sense amp enable from Replica Bit Line (RB)- RBL input:
rbl_wl = gated_clk_bar & we_bar - Delayed RBL output:
pre_s_en = DELAY(rbl_bl) - Buffered enable:
s_en = BUF(pre_s_en)
- RBL input:
- Write Driver Enable (
w_en) -- Active high write driver enablew_en = weweis directly from control flops
- Precharge Enable Bar (
p_en_bar) -- Active low enable of prechargep_en_bar = !(gated_clk_bar)- Active for writes as well to prevent half select destruction
- Word line enable (
wl_en) -- Active high word line enablewl_en = BUF(gated_clk_bar)
Replica Bitline (RBL)
- Determines when to start sensing by replicating a bitcell array column
- Replica Bitline Column (RBC) matches transition of column
rbl_bl = RBC(rbl_wl)
- Delay Line delays the input signal to match word line driver
pre_s_en = DELAY(rbl_bl)
- Buffer drives
s_ensignal to sense amps
Internal Control Signals Diagram (Read)
Internal Control Signals Diagram (Write)
Clock Distribution
- External clock (
clk) - Buffered clock (
clk_buf) drives all DFFs in the designclk_buf = BUF(clk)
- Buffered clock bar (
clk_bar) used in control logicclk_bar = INV(clk_buf)
- Gated Clocks (
gated_clkandgated_clk_bar) used in control logic- This is LOW when disabled
gated_clk_bar = cs && clk_bar
- This is LOW when disabled
gated_clk = cs && clk_buf
- This is LOW when disabled





