diff --git a/docs/figs/sense_amp_schem.pdf b/docs/figs/sense_amp_schem.pdf
index 12e78492..0b062ffe 100644
Binary files a/docs/figs/sense_amp_schem.pdf and b/docs/figs/sense_amp_schem.pdf differ
diff --git a/docs/figs/sense_amp_schem.svg b/docs/figs/sense_amp_schem.svg
index 086a1153..749b6803 100644
--- a/docs/figs/sense_amp_schem.svg
+++ b/docs/figs/sense_amp_schem.svg
@@ -13,8 +13,8 @@
height="1052.3622047"
id="svg2"
version="1.1"
- inkscape:version="0.48.3.1 r9886"
- sodipodi:docname="sense_amp.svg">
+ inkscape:version="0.92.2 5c3e80d, 2017-08-06"
+ sodipodi:docname="sense_amp_schem.svg">
image/svg+xml
-
+
@@ -55,37 +55,6 @@
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
-
-
-
-
-
-
-
-
-
-
-
@@ -148,37 +117,6 @@
inkscape:connector-curvature="0" />
-
-
-
-
-
-
-
-
-
-
-
@@ -357,18 +295,18 @@
id="path4592"
inkscape:connector-curvature="0" />
+ transform="matrix(1.25,0,0,1,125,112.20718)">
VDD
+ y="172.36218"
+ style="font-size:16px;line-height:1.25;font-family:sans-serif">vdd
DATA
+ y="297.36218"
+ style="font-size:16px;line-height:1.25;font-family:sans-serif">DATA
BL_bar
+ x="621"
+ y="577.36218"
+ style="font-size:16px;line-height:1.25;font-family:sans-serif">br
BL
+ y="580.36218"
+ style="font-size:16px;line-height:1.25;font-family:sans-serif">bl
EN
+ y="588.36218"
+ style="font-size:16px;line-height:1.25;font-family:sans-serif">en
EN
+ x="538"
+ y="382.36218"
+ style="font-size:16px;line-height:1.25;font-family:sans-serif">en
EN
+ x="177.87868"
+ y="376.02765"
+ style="font-size:16px;line-height:1.25;font-family:sans-serif">en
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/figs/timing_read.pdf b/docs/figs/timing_read.pdf
index 850a0704..6f859889 100644
Binary files a/docs/figs/timing_read.pdf and b/docs/figs/timing_read.pdf differ
diff --git a/docs/figs/timing_read.svg b/docs/figs/timing_read.svg
index f7c218de..16fafe00 100644
--- a/docs/figs/timing_read.svg
+++ b/docs/figs/timing_read.svg
@@ -13,7 +13,7 @@
height="744.09448"
id="svg3956"
version="1.1"
- inkscape:version="0.48.3.1 r9886"
+ inkscape:version="0.92.2 5c3e80d, 2017-08-06"
sodipodi:docname="timing_read.svg">
@@ -248,15 +248,15 @@
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1"
- inkscape:cx="427.64919"
+ inkscape:cx="286.14919"
inkscape:cy="216.91628"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
- inkscape:window-width="1366"
- inkscape:window-height="744"
+ inkscape:window-width="3440"
+ inkscape:window-height="1392"
inkscape:window-x="0"
- inkscape:window-y="24"
+ inkscape:window-y="0"
inkscape:window-maximized="1">
CLK
+ y="372.36218"
+ style="font-size:16px;line-height:1.25;font-family:sans-serif">CLK
ADDR
+ y="452.36218"
+ style="font-size:16px;line-height:1.25;font-family:sans-serif">ADDR
CSb
+ y="532.36218"
+ style="font-size:16px;line-height:1.25;font-family:sans-serif">CSb
OEb
+ y="612.36218"
+ style="font-size:16px;line-height:1.25;font-family:sans-serif">OEb
WEb
+ y="692.36218"
+ style="font-size:16px;line-height:1.25;font-family:sans-serif">WEb
DATA OUT
+ y="852.36218"
+ style="font-size:16px;line-height:1.25;font-family:sans-serif">DATA OUT
A0
+ y="452.36218"
+ style="font-size:16px;line-height:1.25;font-family:sans-serif">A0
A1
-
-
-
-
-
-
-
-
+ y="452.36218"
+ style="font-size:16px;line-height:1.25;font-family:sans-serif">A1
+
+
+
+
D0
+ x="555"
+ y="851.36218"
+ style="font-size:16px;line-height:1.25;font-family:sans-serif">D0
D1
+ x="719"
+ y="851.36218"
+ style="font-size:16px;line-height:1.25;font-family:sans-serif">D1
Setup
+ style="font-size:12px;line-height:1.25;font-family:sans-serif">Setup
Hold
+ style="font-size:12px;line-height:1.25;font-family:sans-serif">Hold
Setup
+ style="font-size:12px;line-height:1.25;font-family:sans-serif">Setup
Hold
+ style="font-size:12px;line-height:1.25;font-family:sans-serif">Hold
Read Delay
+ x="379"
+ y="840.36218"
+ style="font-size:14px;line-height:1.25;font-family:sans-serif">Read Delay
Setup
+ style="font-size:12px;line-height:1.25;font-family:sans-serif">Setup
SCLK
+ y="772.36218"
+ style="font-size:16px;line-height:1.25;font-family:sans-serif">SCLK
+
+
diff --git a/docs/figs/timing_write.pdf b/docs/figs/timing_write.pdf
index 74811468..810ec2bb 100644
Binary files a/docs/figs/timing_write.pdf and b/docs/figs/timing_write.pdf differ
diff --git a/docs/figs/timing_write.svg b/docs/figs/timing_write.svg
index eb5290c6..6bbfdcb5 100644
--- a/docs/figs/timing_write.svg
+++ b/docs/figs/timing_write.svg
@@ -13,7 +13,7 @@
height="744.09448"
id="svg3956"
version="1.1"
- inkscape:version="0.48.3.1 r9886"
+ inkscape:version="0.92.2 5c3e80d, 2017-08-06"
sodipodi:docname="timing_write.svg">
@@ -332,15 +332,15 @@
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1"
- inkscape:cx="412.2745"
+ inkscape:cx="270.7745"
inkscape:cy="329.51856"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
- inkscape:window-width="1366"
- inkscape:window-height="744"
+ inkscape:window-width="3440"
+ inkscape:window-height="1392"
inkscape:window-x="0"
- inkscape:window-y="24"
+ inkscape:window-y="0"
inkscape:window-maximized="1">
CLK
+ y="372.36218"
+ style="font-size:16px;line-height:1.25;font-family:sans-serif">CLK
ADDR
+ y="452.36218"
+ style="font-size:16px;line-height:1.25;font-family:sans-serif">ADDR
CSb
+ y="532.36218"
+ style="font-size:16px;line-height:1.25;font-family:sans-serif">CSb
OEb
+ y="692.36218"
+ style="font-size:16px;line-height:1.25;font-family:sans-serif">OEb
WEb
+ y="612.36218"
+ style="font-size:16px;line-height:1.25;font-family:sans-serif">WEb
DATA IN
+ x="59"
+ y="785.36218"
+ style="font-size:16px;line-height:1.25;font-family:sans-serif">DATA IN
A0
+ y="452.36218"
+ style="font-size:16px;line-height:1.25;font-family:sans-serif">A0
A1
+ y="452.36218"
+ style="font-size:16px;line-height:1.25;font-family:sans-serif">A1
D0
+ x="403"
+ y="797.36218"
+ style="font-size:16px;line-height:1.25;font-family:sans-serif">D0
D1
+ x="621"
+ y="784.36218"
+ style="font-size:16px;line-height:1.25;font-family:sans-serif;fill:#000000">D1
Setup
+ style="font-size:12px;line-height:1.25;font-family:sans-serif">Setup
Hold
+ style="font-size:12px;line-height:1.25;font-family:sans-serif">Hold
Setup
+ style="font-size:12px;line-height:1.25;font-family:sans-serif">Setup
Hold
+ style="font-size:12px;line-height:1.25;font-family:sans-serif">Hold
Setup
+ style="font-size:12px;line-height:1.25;font-family:sans-serif">Setup
-
- WD_EN
-
-
Setup
+ x="369"
+ y="765.36218"
+ style="font-size:12px;line-height:1.25;font-family:sans-serif">Setup
Hold
+ x="432"
+ y="766.36218"
+ style="font-size:12px;line-height:1.25;font-family:sans-serif">Hold
+ inkscape:connector-curvature="0" />
+ inkscape:connector-curvature="0" />
+ inkscape:connector-curvature="0" />
D0
+ x="550"
+ y="863.36218"
+ style="font-size:16px;line-height:1.25;font-family:sans-serif">D0
D1
+ x="770"
+ y="863.36218"
+ style="font-size:16px;line-height:1.25;font-family:sans-serif;fill:#000000">D1
XXMem Cell
+ style="font-size:10px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle">Mem Cell
+ inkscape:connector-curvature="0" />
Write Delay
+ x="421"
+ y="855.36218"
+ style="font-size:13px;line-height:1.25;font-family:sans-serif">Write Delay
+
diff --git a/docs/figs/write_driver_schem.pdf b/docs/figs/write_driver_schem.pdf
index 53427630..e943ee80 100644
Binary files a/docs/figs/write_driver_schem.pdf and b/docs/figs/write_driver_schem.pdf differ
diff --git a/docs/figs/write_driver_schem.svg b/docs/figs/write_driver_schem.svg
index 05c2693f..3882dffc 100644
--- a/docs/figs/write_driver_schem.svg
+++ b/docs/figs/write_driver_schem.svg
@@ -13,8 +13,8 @@
height="1052.3622047"
id="svg4759"
version="1.1"
- inkscape:version="0.48.3.1 r9886"
- sodipodi:docname="write_driver.svg">
+ inkscape:version="0.92.2 5c3e80d, 2017-08-06"
+ sodipodi:docname="write_driver_schem.svg">
image/svg+xml
-
+
@@ -113,16 +113,16 @@
inkscape:connector-curvature="0" />
VDD
+ sodipodi:role="line"
+ style="font-size:16px;line-height:1.25;font-family:sans-serif">vdd
EN
+ y="536.36218"
+ style="font-size:16px;line-height:1.25;font-family:sans-serif">en
@@ -583,15 +583,15 @@
inkscape:connector-curvature="0" />
DATA
+ y="356.36218"
+ style="font-size:16px;line-height:1.25;font-family:sans-serif">DATA
BL
+ y="476.36218"
+ style="font-size:16px;line-height:1.25;font-family:sans-serif">bl
BL_bar
+ y="477.36218"
+ style="font-size:16px;line-height:1.25;font-family:sans-serif">br
diff --git a/docs/modules.tex b/docs/modules.tex
index 19ed7e82..a232cd1f 100644
--- a/docs/modules.tex
+++ b/docs/modules.tex
@@ -407,13 +407,10 @@ bitlines are automatically pitch-matched to the bitcell array.
\subsection{Sense Amplifier}
\label{sec:senseamp}
The sense amplifier is used to sense the difference between the
-bitline and bitline bar while a read operation is performed. The
-sense amp is necessary to recover the signals from the bitlines
-because they do not experience full voltage swing. As the size of the
-memory array grows, the load of the bitlines increases and the voltage
-swing is limited by the small memory cell driving this large load. A
-differential sense amplifier is used to``sense'' the small voltage
-difference between the bitlines.
+bitline and bitline bar while a read operation is performed.
+The sense amplifier also includes two PMOS transistors for bitline
+isolation to speed-up read operations. The schematic for the sense amp is shown in
+Figure~\ref{fig:sense_amp}.
\begin{figure}[h!]
\centering
@@ -422,33 +419,47 @@ difference between the bitlines.
\label{fig:sense_amp}
\end{figure}
-The schematic for the sense amp is shown in
-Figure~\ref{fig:sense_amp}. The sense amplifier is enable by the SCLK
-signal, which initiates the read operation. Before the sense
-amplifier is enable, the bitlines are precharged to Vdd by the
-precharge unit. When the sense amp is enabled, one of the bitlines
-experiences a voltage drop based on the value stored in the memory
-cell. If a zero is stored, the bitline voltage drops. If a one is
-stored, the bitline bar voltage drops. The output signal is then
+During address decoding (while the wordline is not asserted), the sense
+amplifier is disabled and the bitlines are precharged to vdd by the
+precharge unit. The two PMOS transistors also connect the bitlines to the sense amplifier.
+
+The en signal comes from the control logic (Section~\ref{sec:control})
+including the timing and replica bitline (Section~\ref{sec:RBL}). It
+is only enabled after sufficient swing is seen on the bitlines so that
+the value can be accurately sensed.
+
+The sense amplifier is enabled by the en signal, which initiates the
+read operation, and also isolates the sense amplifier from the
+bitlines. This allows the sense amplifier to drive a smaller
+capacitance rather than the whole bitline. At this time, the footer
+transistor is also enabled which allows the sense amplifier to use
+feedback to sense the bitline differential voltage.
+
+When the sense amp is enabled, one of the bitlines experiences a
+voltage drop based on the value stored in the memory cell. If a zero
+is stored, the bitline voltage drops. If a one is stored, the bitline
+bar voltage drops. The output signal is then
taken to a true logic level and latched for output to the data bus.
In OpenRAM, the sense amplifier is a libray cell. The associated
-layout and spice netlist can be found in the \verb|gds_lib| and \verb|sp_lib| in
-the FreePDK45 directory. The \verb|sense_amp| class in \verb|sense_amp.py|
-instantiates a single instance of the sense amp library cell. The
-\verb|sense_amp_array| class handles the tiling of the sense amps cells.
-One sense amp cell is needed per data bit and the sense amp cells need
-to be appropriately spaced so that they can hook up to the column mux
-bitline pairs. The spacing is determined based on the number of words
-per row in the memory array. Instances are added and then Vdd, Gnd
-and SCLK rails that span the entire width of the array are drawn using
-the add\_rect() function.
+layout and spice netlist can be found in the \verb|gds_lib| and
+\verb|sp_lib| in the technology directory. The sense\_amp class in
+\verb|modules/sense_amp.py| is a single instance of the sense amp
+library cell.
-We chose to leave the sense amp as a libray cell so that custom
+
+The sense\_amp\_array class in \verb|modules/sense_amp_array.py|
+handles the tiling of the sense amps cells. One sense amp cell is
+needed per data bit and the sense amp cells need to be appropriately
+spaced so that they can hook up to the column mux bitline pairs. The
+spacing is determined based on the number of words per row in the
+memory array.
+
+The sense amp is a library cell so that custom
amplifier designs could be swapped into the memory as needed. The two
major things that need to be considered while designing the sense
amplifier cell are the size of the cell and the bitline/input pitches.
-Optimally, the cell should be no larger than the 6T cell so that it
+Optimally, the cell should be no wider than the 6T cell so that it
abuts to the column mux and no extra routing or space is needed.
Also, the bitline inputs of the sense amp need to line up with the
outputs of the write driver. In the current version of OpenRAM, the
@@ -460,6 +471,7 @@ connect the write driver to the column mux without any extra routing.
\subsection{Write Driver}
\label{sec:writedriver}
+
The write driver is used to drive the input signal into the memory
cell during a write operation. It can be seen in
Figure~\ref{fig:write_driver} that the write driver consists of two
diff --git a/docs/timing.tex b/docs/timing.tex
index d022d208..7cf0f6d2 100644
--- a/docs/timing.tex
+++ b/docs/timing.tex
@@ -10,7 +10,7 @@ Top-Level Signals:
\setlength{\itemsep}{0pt}
\item ADDR - address bus.
\item DATA - bi-directional data bus.
-\item CLK - the global clock.
+\item clk - the global clock.
\item OEb - active low output enable.
\item CSb - active low chip select.
\item WEb - active low write enable.
@@ -34,7 +34,7 @@ The main timing considerations for an SRAM are:
\item Setup Time - time an input needs to be stable before the positive/negative clock edge.
\item Hold Time - time an input needs to stay valid after the positive/negative clock edge.
\item Minimun Cycle Time - time inbetween subsequent memory operations.
-\item Memory Read Time - time from positive clock edge until valid data appears on the data bus.
+\item Memory Read Time - time from negative clock edge until valid data appears on the data bus.
\item Memory Write Time - time from negative clock edge until data has been driven into a memory cell.
\end{itemize}
@@ -66,9 +66,9 @@ Read Operation:
\end{enumerate}
\item On the falling edge of the clock (CLK):
\begin{enumerate}
- \item Word line has been asserted, the value stored in the memory cells pulls down one of the bitlines (BL if a 0 is stored, BL\_bar if a 1 is stored).
+ \item Word line is driven onto the bitlines, the value stored in the memory cells pulls down one of the bitlines (bl if a 0 is stored, br if a 1 is stored).
\item s\_en enables the sense amplifier which senses the voltage difference of the bit lines, produces the output and keeps the value in its latch circuitry.
- \item Tri-gate enables and put the output data on data bus. Data remains valid on the data bus for a complete clock cycle.
+ \item Tri-gate drives (tri\_en and tri\_en\_bar) the output data on data bus. Data remains valid on the data bus for a complete clock cycle.
\end{enumerate}
\end{enumerate}