Updating documentation for the Skywater ReRAM technology.

This doc update includes programming instructions, and technology
details not included in the original release.

Signed-off-by: Ethan Mahintorabi <ethanmoon@google.com>
Signed-off-by: Tim Ansell <tansell@google.com>
diff --git a/docs/background.rst b/docs/background.rst
new file mode 100644
index 0000000..5396dec
--- /dev/null
+++ b/docs/background.rst
@@ -0,0 +1,218 @@
+############
+ Background
+############
+
+.. |HfO2| replace::
+
+   HfO\ :sub:`2`
+
+.. |HfOx| replace::
+
+   HfO\ :sub:`x`
+
+.. |TaOx| replace::
+
+   TaO\ :sub:`x`
+
+.. |TiOx| replace::
+
+   TiO\ :sub:`x`
+
+.. |AlOx| replace::
+
+   AlO\ :sub:`x`
+
+A typical Resistive RAM (RRAM) device consists of a metal-oxide
+switching layer (e.g., |HfOx|, |TaOx|, |TiOx|, |AlOx| by atomic layer
+deposition) sandwiched by top and bottom metal electrodes, forming a
+two-terminal metal-insulator-metal (MIM) structure. As a CMOS-compatible
+NVM device, RRAM can be directly fabricated in the back-end-of-line
+(BEOL) process without impacting the front-end-of-line (FEOL) portion of
+a silicon chip. [[1]_] At SkyWater Technology Foundry, a |HfO2|-based
+RRAM layer is fabricated within the BEOL process at multiple points as
+described in the physical design rules.
+
+*******************
+ General Operation
+*******************
+
+RRAM's general operation is as follows: an applied electric field across
+the electrodes induces the creation and motion of oxygen vacancies
+within the insulator oxide, resulting in the formation of conductive
+filaments in the oxide. This changes the device resistance, which varies
+between high and low states. [[2]_] There are thus three distinct modes
+of operation:
+
+#. Forming, (also referred herein as FORM) during which an initial
+   oxygen filament is created.
+#. Writing, during which the conductivity of this filament is
+   manipulated by the application of electric field.
+#. Reading, during which the resistance or conductivity of the filament
+   is sensed and converted into a digital value.
+
+During forming, a high electric field is applied to form the filament.
+The fresh (un-formed) RRAM cell starts at an ultra-high resistance
+(ultra-low conductance state), through the creation of the initial
+filament via the formation of oxygen vacancies, a low resistance state
+(high conductance state) is reached. Writing can be further broken down
+into two distinct modes:
+
+#. RESET – in which resistance is increased (conductance decreased) by
+   applying a negative electric field across the device bringing it from
+   a low resistance state (LRS) to a high resistance state (HRS)
+
+#. SET – in which resistance is decreased (conductance increased) by
+   applying a positive electric field across the device brining it from
+   HRS to LRS. The voltages applied during SET/RESET are usually of
+   lower magnitude than forming. Reading is usually performed with a
+   low-applied voltage (e.g., 0.1-0.2V) using current sensing to
+   determine the state of the RRAM device; often the HRS is used to
+   store a logical ‘0’ and the LRS stores a logical ‘1’. RRAM setup
+   usually follows this sequence: FORM -> RESET -> SET. Leaving cells
+   all in a LRS ‘1’ state. Additional SET/RESET cycling can be performed
+   to improve the switching reliability, and leave cells in a specified
+   state.
+
+Beyond a single RRAM cell, arrays require the use of a control
+transistor, creating a 1T-1R structure. This control device is used both
+to select the cell within the array but also controls the compliance
+current during the FORM, SET, and RESET operations. When thinking about
+an RRAM-based system, all three modes must be supported in order to
+enable system functionality: e.g., built-in forming must be enabled,
+otherwise the RRAM will be non-functional (e.g., SET and RESET
+operations have no impact unless the cell filament is first FORMed).
+
+A general RRAM cell schematic, technology, and array architecture are
+shown in :numref:`cell_schematic` and :numref:`rram_array` shows the
+schematic of the three inputs to an RRAM cell, namely the bitline (BL),
+wordline (WL), and source line (SL). The voltages at these inputs can be
+used as “knobs” to program the cell resistance to a target range. The
+wordline voltage (VWL) controls the compliance current through the RRAM
+cell, while the bitline voltage (VBL) and source line voltage (VSL)
+control the potential across the cell. In order to perform a SET
+operation, VBL is increased while VSL is grounded. To perform a RESET
+operation, VSL is increased while VBL is grounded. For both SET and
+RESET, VWL must be above the threshold voltage of the control transistor
+to enable current flow through the cell.
+
+.. _cell_schematic:
+
+.. figure:: figures/reram_document_figures/technology_figure.png
+   :scale: 50 %
+   :align: center
+
+   \(a) Cell schematic, (b) RRAM cell TEM, and (c) die photo of array.
+
+.. _rram_array:
+
+.. figure:: figures/reram_document_figures/rram_array.png
+   :scale: 50 %
+   :align: center
+
+   1T1R RRAM array architecture
+
+Beyond monolithic integration, the use of RRAM arrays offers many
+benefits at the system level:
+
+#. RRAM inherently promises higher memory density compared to SRAM due
+   to its 1T1R structure.
+
+#. RRAM offers low read energy and latency, due the low voltage of
+   reading and large resistance window between HRS and LRS.
+
+#. RRAM is non-volatile, power is not required to maintain an RRAM’s
+   resistance value; RRAM-based systems can thus be quickly turned on
+   and off enabling fine-grained temporal power gating [[4]_].
+
+#. Additional structures beyond 1T1R (e.g., 1TnR), when monolithically
+   integrated, provide RRAM even greater densities [[3]_].
+
+#. RRAM can support multiple bits-per-cell storage, effectively boosting
+   storage density [[3]_].
+
+Multiple bits-per-cell storage in RRAM requires dividing up the
+resistance range into multiple levels (e.g., not just the single LRS and
+HRS of a binary 1-bit cell). These levels can be specified by a set of
+ranges and gaps, where cells are considered to be in one digital level
+if their resistance is within the corresponding range, and a cell is in
+error if left in the gap. This scheme is demonstrated in
+:numref:`ranges_and_gaps`.
+
+.. _ranges_and_gaps:
+
+.. figure:: figures/reram_document_figures/ranges_and_gaps.png
+   :scale: 50 %
+   :align: center
+
+   Ranges and gaps in 2 bits-per-cell RRAM
+
+RRAM cells, after forming, have an available resistance window between
+the lowest resistance states achievable and the highest resistance state
+achievable (e.g., the LRS and HRS used in binary storage). Determining
+how to optimally partition this window for the additional levels in
+2-bit, 3-bit and beyond storage is currently under research. In later
+sections we will discuss one such technique and show the measured
+performance achievable with the SkyWater RRAM technology. Two additional
+ideas that are key to understanding RRAM’s capabilities are the
+following: retention, e.g., the ability for the RRAM’s resistance to
+stay constant throughout time (either with or without power) and
+endurance, the limited number of SET-(writing a ‘1’)–RESET-(writing a
+‘0’) cycles a memory cell can undergo before permanent write failure
+(stuck at the ‘1’ or ‘0’ state). RRAM’s major benefits come with some
+additional challenges that must be considered in design, namely:
+
+#. Compared to reads, RRAM has relatively higher write energies and
+   latencies.
+
+#. RRAM has limited endurance compared to volatile technologies like
+   SRAM and DRAM
+
+#. RRAM faces potential retention challenges at very high temperatures,
+   especially if using multiple bits-per-cell storage (this will be In
+   the following sections, we provide detailed data quantifying the RRAM
+   technology provided at SkyWater.
+
+This technology is still under development and the following procedures
+do not guarantee the results indicated. This document will be updated as
+necessary to provide the most current data on the process.
+
+************
+ References
+************
+
+.. [1]
+
+   Rich D\. et al\. (2020) Heterogeneous 3D Nano-systems: The N3XT
+   Approach?. In: Murmann B., Hoefflinger B. (eds) NANO-CHIPS 2030. The
+   Frontiers Collection. Springer, Cham.
+   https://doi-org.stanford.idm.oclc.org/10.1007/978-3-030-18338-7_9
+
+.. [2]
+
+   Wong, HS., Salahuddin, S. Memory leads the way to better computing.
+   Nature Nanotech 10, 191–194 (2015).
+   https://doi-org.stanford.idm.oclc.org/10.1038/nnano.2015.29
+
+.. [3]
+
+   E\. R\. Hsieh et al., "High-Density Multiple Bits-per-Cell 1T4R RRAM
+   Array with Gradual SET/RESET and its Effectiveness for Deep Learning,"
+   2019 IEEE International Electron Devices Meeting (IEDM), San Francisco,
+   CA, USA, 2019, pp. 35.6.1-35.6.4, doi: 10.1109/IEDM19573.2019.8993514.
+
+.. [4]
+
+   T\. F\. Wu, B. Q. Le, R. Radway, A. Bartolo, W. Hwang, S. Jeong, H. Li,
+   P. Tandon, E. Vianello, P. Vivet, E. Nowak, M. K. Wooters, H.-S. P.
+   Wong, M. M. Sabry Aly, E. Beigne, S. Mitra "14.3 A 43pJ/Cycle
+   Non-Volatile Microcontroller with 4.7μs Shutdown/Wake-up Integrating
+   2.3-bit/Cell Resistive RAM and Resilience Techniques," 2019 IEEE
+   International Solid- State Circuits Conference - (ISSCC), San Francisco,
+   CA, USA, 2019, pp. 226-228, DOI: 10.1109/ISSCC.2019.8662402
+
+.. [5]
+
+   B\. Q\. Le, A. Grossi, E. Vianello, T. Wu, G. Lama, E. Beigne, H.-S. P.
+   Wong, S. Mitra, "Resistive RAM with Multiple Bits per Cell: Array-Level
+   Demonstration of 3 Bits per Cell," IEEE Transactions on Electron Devices
+   Journal, vol. 66, Issue 1, Jan. 2019. 10.1109/TED.2018.2879788
diff --git a/docs/figures/reram_document_figures/1T1R_5.csv b/docs/figures/reram_document_figures/1T1R_5.csv
new file mode 100644
index 0000000..b0afe03
--- /dev/null
+++ b/docs/figures/reram_document_figures/1T1R_5.csv
@@ -0,0 +1,5 @@
+1T1R #5,WL (V),BL (V),SL (V),PW (ns),Yield (%)

+Pristine,,,,,99.90

+Form,1.4 - 2.0 (0.1 step),2.6 - 3.1 (0.1 step),0,1000,92.73

+Reset,2.5,0,2.6,1000,90.83

+Set,1.7,2.4,0,1000,97.45

diff --git a/docs/figures/reram_document_figures/1T4R_4.csv b/docs/figures/reram_document_figures/1T4R_4.csv
new file mode 100644
index 0000000..5ba48b6
--- /dev/null
+++ b/docs/figures/reram_document_figures/1T4R_4.csv
@@ -0,0 +1,5 @@
+1T4R #4,WL (V),BL (V),SL (V),PW (ns),Yield (%)

+Pristine,,,,,100.00

+Form,1.4 - 2.5 (0.1 step),2.4 - 3.3 (0.1 step),0,1000,98.24

+Reset,2.5,0,2.6,1000,91.25

+Set,1.7,2.4,0,1000,99.78

diff --git a/docs/figures/reram_document_figures/1T4R_9.csv b/docs/figures/reram_document_figures/1T4R_9.csv
new file mode 100644
index 0000000..25b7235
--- /dev/null
+++ b/docs/figures/reram_document_figures/1T4R_9.csv
@@ -0,0 +1,5 @@
+1T4R #9,WL (V),BL (V),SL (V),PW (ns),Yield (%)

+Pristine,,,,,100.00

+Form,1.4 - 2.5 (0.1 step),2.4 - 3.3 (0.1 step),0,1000,99.80

+Reset,2.5 - 3.0 (0.1 step),0,2.4 - 3.0 (0.1 step),1000,99.41

+Set,1.7,2.4,0,1000,100.00
\ No newline at end of file
diff --git a/docs/figures/reram_document_figures/1T4R_forming_waveform.png b/docs/figures/reram_document_figures/1T4R_forming_waveform.png
new file mode 100644
index 0000000..69239c8
--- /dev/null
+++ b/docs/figures/reram_document_figures/1T4R_forming_waveform.png
Binary files differ
diff --git a/docs/figures/reram_document_figures/1T4R_schematic.png b/docs/figures/reram_document_figures/1T4R_schematic.png
new file mode 100644
index 0000000..9be3ab2
--- /dev/null
+++ b/docs/figures/reram_document_figures/1T4R_schematic.png
Binary files differ
diff --git a/docs/figures/reram_document_figures/1T8R_schematic.png b/docs/figures/reram_document_figures/1T8R_schematic.png
new file mode 100644
index 0000000..bc4c665
--- /dev/null
+++ b/docs/figures/reram_document_figures/1T8R_schematic.png
Binary files differ
diff --git a/docs/figures/reram_document_figures/forming.png b/docs/figures/reram_document_figures/forming.png
new file mode 100644
index 0000000..32b712a
--- /dev/null
+++ b/docs/figures/reram_document_figures/forming.png
Binary files differ
diff --git a/docs/figures/reram_document_figures/forming_pulse.png b/docs/figures/reram_document_figures/forming_pulse.png
new file mode 100644
index 0000000..381c63a
--- /dev/null
+++ b/docs/figures/reram_document_figures/forming_pulse.png
Binary files differ
diff --git a/docs/figures/reram_document_figures/multirram_forming.png b/docs/figures/reram_document_figures/multirram_forming.png
new file mode 100644
index 0000000..44b7d00
--- /dev/null
+++ b/docs/figures/reram_document_figures/multirram_forming.png
Binary files differ
diff --git a/docs/figures/reram_document_figures/original_tables.png b/docs/figures/reram_document_figures/original_tables.png
new file mode 100644
index 0000000..9322155
--- /dev/null
+++ b/docs/figures/reram_document_figures/original_tables.png
Binary files differ
diff --git a/docs/figures/reram_document_figures/pulse_resistance_diagram.png b/docs/figures/reram_document_figures/pulse_resistance_diagram.png
new file mode 100644
index 0000000..386ae34
--- /dev/null
+++ b/docs/figures/reram_document_figures/pulse_resistance_diagram.png
Binary files differ
diff --git a/docs/figures/reram_document_figures/ranges_and_gaps.png b/docs/figures/reram_document_figures/ranges_and_gaps.png
new file mode 100644
index 0000000..632ff2a
--- /dev/null
+++ b/docs/figures/reram_document_figures/ranges_and_gaps.png
Binary files differ
diff --git a/docs/figures/reram_document_figures/rram_array.png b/docs/figures/reram_document_figures/rram_array.png
new file mode 100644
index 0000000..1331b61
--- /dev/null
+++ b/docs/figures/reram_document_figures/rram_array.png
Binary files differ
diff --git a/docs/figures/reram_document_figures/technology_figure.png b/docs/figures/reram_document_figures/technology_figure.png
new file mode 100644
index 0000000..164f457
--- /dev/null
+++ b/docs/figures/reram_document_figures/technology_figure.png
Binary files differ
diff --git a/docs/figures/reram_document_figures/tuning_knob_v.png b/docs/figures/reram_document_figures/tuning_knob_v.png
new file mode 100644
index 0000000..008cc71
--- /dev/null
+++ b/docs/figures/reram_document_figures/tuning_knob_v.png
Binary files differ
diff --git a/docs/index.rst b/docs/index.rst
index 01e410a..4e7f3bd 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -7,3 +7,5 @@
 
   user_guide
   references
+  background
+  technology_specifications
diff --git a/docs/technology_specifications.rst b/docs/technology_specifications.rst
new file mode 100644
index 0000000..46bb5f9
--- /dev/null
+++ b/docs/technology_specifications.rst
@@ -0,0 +1,199 @@
+###########################
+ Technology Specifications
+###########################
+
+.. |HfO2| replace::
+
+   HfO\ :sub:`2`
+
+*********
+ FORMing
+*********
+
+The figure below shows forming data on a 1Mbit RRAM array. At fresh
+(e.g., unformed) the starting conductance of the RRAM ranges below 0.1
+uS (e.g., resistance above 10MOhms). To form the cells, voltages from
+2.2 to 3.1V are required (average 2.5V), with very high yields (above
+99%) achieved with a max forming voltage of 3.1V. After FORM, the RRAMs
+end up in an ultra-low LRS of 30-120uS. Resetting the cells after
+forming results in an HRS. The forming pulse widths are 1,000ns (e.g.,
+1us).
+
+.. image:: figures/reram_document_figures/forming.png
+
+The initial forming conditions impact the final resistance range
+achievable with the RRAM cells. Using a higher forming voltage (and
+longer forming pulses) result in an initial LRS state with a lower
+resistance. Depending on the initial LRS resistance, the sharpness of
+the SET/RESET transition and the window between the final LRS/HRS
+changes as demonstrated in the figures below. This becomes critical when
+determining the multiple bits per cell as a gradual SET/RESET procedure
+is needed to fine tune the resistance.
+
+.. image:: figures/reram_document_figures/pulse_resistance_diagram.png
+
+Fig. 10 provides a possible explanation for the results in Figs.7-9. We
+can divide the transition curve of conductance into 4 stages. During
+FORMing, in Stage 0, a major filament with a wide radius is created in
+|HfO2|. In addition, small filaments extend from the tip of the major
+filament to the top electrode. During RESET, in Stage 1, the major
+filament recesses resulting in abrupt drop in conductance. In Stage 2,
+the small filaments slowly recess resulting in gradual reduction of
+conductance. During SET, in Stage 3, the major filament reconnects and
+the conductance jumps. In Stage 4, the small filaments re-connect and
+the conductance slowly increases.
+
+.. figure:: figures/reram_document_figures/forming_pulse.png
+
+   Figure extracted from [[1]_]
+
+*****************
+ SETing/RESETing
+*****************
+
+The standard SET/RESET pulses used with the SkyWater RRAM
+characteristics are summarized below for binary (e.g., 1-bit/cell) RRAM.
+Note that these are dependent on the initial forming conditions used (as
+discussed above). For completeness we give those conditions as well.
+Where a range is given, the procedure is as follows: first fix the BL
+voltage (for FORM/SET, SL voltage for RESET) and increase the WL pulse
+amplitude by the step size given until the cell is successfully
+formed/set/reset. If the cell is unsuccessful, then increase the BL
+voltage by the step size, and so forth.
+
+The following tables were manually transcribed into this format the
+original :download:`png
+<figures/reram_document_figures/original_tables.png>` is is provided so
+that others may check the transcription.
+
+.. csv-table:: 1T1R #5
+   :file: figures/reram_document_figures/1T1R_5.csv
+   :header-rows: 1
+   :align: center
+
+.. csv-table:: 1T4R #4
+   :file: figures/reram_document_figures/1T4R_4.csv
+   :header-rows: 1
+   :align: center
+
+.. csv-table:: 1T4R #9
+   :file: figures/reram_document_figures/1T4R_9.csv
+   :header-rows: 1
+   :align: center
+
+Alternative programming schemes can be used. For example, from our data
+on the 1T4R test #9 above, one could consider using a fixed reset pulse
+of WL=3V, SL=3V with a 1000ns pulse to ensure high RESET yields.
+Additionally, a lower voltage can be tried multiple times (e.g., a
+SET/READ and verify, or RESET/READ and verify) until the operation is
+successful. The pulse length is also a free variable, shorter (e.g.,
+100-200ns SET/RESET) pulses, with a verify scheme can also be used to
+reduce average write time.
+
+**************************************************************
+ Technology Specs: SkyWater 1T(n)R and Multiple Bits-Per-Cell
+**************************************************************
+
+1T(n)R
+======
+
+Multiple RRAM cells can be controlled with a single transistor. Such a
+layout increases density, especially when integrated monolithically
+(with multiple RRAM’s stacked above a single transistor). Below we give
+schematics of such 1T4R and 1T8R arrays.
+
+.. image:: figures/reram_document_figures/1T4R_schematic.png
+
+.. image:: figures/reram_document_figures/1T8R_schematic.png
+
+FORMing 1T(n)R
+==============
+
+Such arrays require a different forming scheme. The operation of a 1T4R
+RRAM array is much more complex (vs. a 1T1R array) since interactions
+between multiple cells (in the same 1T4R structure) Fig. 4 presents our
+forming approach for 1T4R RRAM array. The conventional approach for 1T1R
+FORMs a cell (i.e., induces LRS in that cell) and then proceeds to the
+next cell. However, if this conventional scheme is directly applied to
+1T4R (Fig. 4a), the FORMed cell, which is already in the low-resistance
+state (LRS), will experience additional SET (over-SET) as another cell
+inside the same 4R structure is being FORMed. After experiencing
+multiple over-SETs, the resistance of a FROMed cell may fall to an
+ultra-low value, and it may not be possible to RESET that cell anymore.
+The FORMing scheme in Fig. 4b overcomes this challenge by RESETting a
+cell (to the high-resistance state or HRS) immediately after it is
+FORMed. Therefore, when a cell is being FORMed, the adjacent FROMed but
+RESET cells (in the same 1T4R structure) are no longer over-SET.
+Occasionally, an adjacent RESET cell may be SET accidentally. It is
+necessary to check and RESET all cells in the 1T4R structure before the
+next cell is FORMed. Using this strategy, the FORMing yield is 99%. The
+forming voltages were given in the tables above.
+
+.. image:: figures/reram_document_figures/multirram_forming.png
+
+SETing/RESETing 1T(n)R
+======================
+
+While the voltages of SET/RESET are given in the tables above, there are
+additional considerations in writing a 1TnR cell. Multiple bits-per-cell
+operation of 1T4R RRAM requires more precise control (vs. 1T1R) since
+disturbances between adjacent cells (in the same 1T4R structure) will be
+more serious. For example, Fig. 14 shows that when a cell in 1T4R is
+selected to be SET, the other 3 (unselected) cells can experience a
+small RESET, which can disturb the values stored in those (unselected)
+cells. Therefore, additional compensating SET operations are needed to
+restore the values in those (unselected) cells. By applying the
+compensating SETs, the disturbances in the unselected cells can be well
+alleviated, as shown in the insert of Fig. 14. The few low- voltage
+compensating SET pulses do not affect the other cells.
+
+.. image:: figures/reram_document_figures/1T4R_forming_waveform.png
+
+Multiple Bits-Per-Cell: 1T1R with 2 or 3 Bits-Per-Cell
+======================================================
+
+Programming
+-----------
+
+Multiple bits-per-cell programming requires fine control over the cell
+resistance in order for the cells to end up in the desired range. There
+are two techniques that have been explored on the SkyWater RRAM, the
+first is demonstrated on a 1T1R structure and can achieve 2 or 3
+bits-percell. Adjusting VWL allows for “coarse” tuning of the RRAM
+resistance (relatively large resistance change per pulse, but with less
+accuracy), while VBL and VSL allow for “fine” tuning (relatively small
+resistance change per pulse, but with more accuracy). Fig. 4 depicts the
+“tuning curves” at 6kOhm (representative resistance for illustration) in
+the SkyWater technology, which shows how the cell resistance (slope) is
+more sensitive to changes in VWL than to changes in VBL (for SET) and
+VSL (for RESET). A smaller slope signifies that the resistance can be
+tuned more slowly/accurately and indicates that voltage noise has a
+reduced impact on the change in resistance. We see that SET operations
+allow for finer tuning than RESET operations, since the SET operation
+results in an increasing voltage drop across the select transistor and a
+decreasing voltage drop across the RRAM cell.
+
+.. _tuning_knob:
+
+.. figure:: figures/reram_document_figures/tuning_knob_v.png
+
+   Tuning curves showing the sensitivity of resistance change to different
+   input knobs for a representative starting resistance of 6kΩ. Slopes
+   are measured at 5.5kΩ for SET and 6.5kΩ for RESET. During VSL RESET
+   tuning, VWL=3.5V; during VBL SET tuning, VWL=3V; for VWL
+   RESET tuning, VSL=2.8V; for VWL SET tuning, VBL=2V. Data is averaged
+   across 50 cells with 10 samples per cell. We also tested different
+   starting resistances and step sizes (not plotted for clarity). For all
+   parameters tested, the data showed that resistance change is more gradual when
+   tuning with VBL/VSL rather than VWL.
+
+************
+ References
+************
+
+.. [1]
+
+   E\. R\. Hsieh et al., "High-Density Multiple Bits-per-Cell 1T4R RRAM
+   Array with Gradual SET/RESET and its Effectiveness for Deep Learning,"
+   2019 IEEE International Electron Devices Meeting (IEDM), San Francisco,
+   CA, USA, 2019, pp. 35.6.1-35.6.4, doi: 10.1109/IEDM19573.2019.8993514.