Update documentation for library

This commit is contained in:
Eren Dogan 2022-11-11 16:16:38 -08:00
parent e821b4a75e
commit be7c21ab64
14 changed files with 187 additions and 131 deletions

View File

@ -13,25 +13,25 @@ This is where simulations and DRC/LVS get run so there is no network
traffic. The directory name is unique for each person and run of traffic. The directory name is unique for each person and run of
OpenRAM to not clobber any files and allow simultaneous runs. If it OpenRAM to not clobber any files and allow simultaneous runs. If it
passes, the files are deleted. If it fails, you will see these files: passes, the files are deleted. If it fails, you will see these files:
+ temp.gds is the layout (.mag files too if using SCMOS) + `temp.gds` is the layout (.mag files too if using SCMOS)
+ temp.sp is the netlist + `temp.sp` is the netlist
+ test1.drc.err is the std err output of the DRC command + `test1.drc.err` is the std err output of the DRC command
+ test1.drc.out is the standard output of the DRC command + `test1.drc.out` is the standard output of the DRC command
+ test1.drc.results is the DRC results file + `test1.drc.results` is the DRC results file
+ test1.lvs.err is the std err output of the LVS command + `test1.lvs.err` is the std err output of the LVS command
+ test1.lvs.out is the standard output of the LVS command + `test1.lvs.out` is the standard output of the LVS command
+ test1.lvs.results is the DRC results file + `test1.lvs.results` is the DRC results file
Depending on your DRC/LVS tools, there will also be: Depending on your DRC/LVS tools, there will also be:
+ run_drc.sh is a script to run DRC + `run\_drc.sh` is a script to run DRC
+ run_ext.sh is a script to run extraction + `run\_ext.sh` is a script to run extraction
+ run_lvs.sh is a script to run LVS + `run\_lvs.sh` is a script to run LVS
If DRC/LVS fails, the first thing is to check if it ran in the .out and If DRC/LVS fails, the first thing is to check if it ran in the `.out` and
.err file. This shows the standard output and error output from `.err` file. This shows the standard output and error output from
running DRC/LVS. If there is a setup problem it will be shown here. running DRC/LVS. If there is a setup problem it will be shown here.
If DRC/LVS runs, but doesn't pass, you then should look at the .results If DRC/LVS runs, but doesn't pass, you then should look at the `.results`
file. If the DRC fails, it will typically show you the command that was used file. If the DRC fails, it will typically show you the command that was used
to run Calibre or Magic+Netgen. to run Calibre or Magic+Netgen.

View File

@ -7,9 +7,9 @@ This page of the documentation explains the base data structures of OpenRAM.
## Table of Contents ## Table of Contents
1. [Design Classes](#design-classes) 1. [Design Classes](#design-classes)
2. [Base Class Inheritance](#base-class-inheritance) 1. [Base Class Inheritance](#base-class-inheritance)
3. [Parameterized Transistor](#parameterized-transistor-ptx-or-pfinfet) 1. [Parameterized Transistor](#parameterized-transistor-ptx-or-pfinfet)
4. [Parameterized Cells](#parameterized-cells) 1. [Parameterized Cells](#parameterized-cells)
@ -69,4 +69,4 @@ Dynamically generated cells (in `$OPENRAM_HOME/pgates`)
* Buffer/drivers * Buffer/drivers
* `pbuf`, `pinvbuf`, `pdriver` * `pbuf`, `pinvbuf`, `pdriver`
* SRAM Logic * SRAM Logic
* `precharge`, `single_level_column_mux` * `precharge`, `single_level_column_mux`

View File

@ -13,35 +13,55 @@ In general, the OpenRAM compiler has very few dependencies:
+ Make + Make
+ Python 3.6 or higher + Python 3.6 or higher
+ Various Python packages (pip install -r requirements.txt) + Various Python packages (pip install -r requirements.txt)
+ [Git] + Git
## OpenRAM Library
OpenRAM is available as a Python library. There are a few ways to install it:
+ Install using Makefile (you need to clone the repo):
```
git clone git@github.com:VLSIDA/OpenRAM.git
cd OpenRAM
make library
```
+ Install the latest _dev_ version:
```
pip3 install git+ssh://git@github.com/VLSIDA/OpenramRAM.git@dev
```
## Docker ## Docker
We have a [docker setup](./docker) to run OpenRAM. To use this, you should run: We have a [docker setup](../../docker) to run OpenRAM. To use this, you should run:
``` ```
cd OpenRAM/docker cd OpenRAM/docker
make build make build
``` ```
This must be run once and will take a while to build all the tools. This must be run once and will take a while to build all the tools. If you have the
OpenRAM library installed, you can also run the docker setup from the package
installation directory.
## Environment ## Environment
You must set two environment variables: If you haven't installed the OpenRAM library or you want to use a different OpenRAM installation,
you can set two environment variables:
+ OPENRAM\_HOME should point to the compiler source directory. + OPENRAM\_HOME should point to the compiler source directory.
+ OPENERAM\_TECH should point to one or more root technology directories (colon separated). + OPENRAM\_TECH should point to one or more root technology directories (colon separated).
You should also add OPENRAM\_HOME to your PYTHONPATH. If you have the library installed and OPENRAM\_HOME set, the library will use the installation on
the OPENRAM\_HOME path.
For example add this to your .bashrc: If you don't have the library, you should also add OPENRAM\_HOME to your PYTHONPATH. This is not
needed if you have the library.
You can add these environment variables to your `.bashrc`:
``` ```
export OPENRAM_HOME="$HOME/OpenRAM/compiler" export OPENRAM_HOME="$HOME/OpenRAM/compiler"
export OPENRAM_TECH="$HOME/OpenRAM/technology" export OPENRAM_TECH="$HOME/OpenRAM/technology"
```
You should also add OPENRAM\_HOME to your PYTHONPATH:
```
export PYTHONPATH=$OPENRAM_HOME export PYTHONPATH=$OPENRAM_HOME
``` ```
@ -51,17 +71,17 @@ directory that you use and any custom technology modules as well. For example:
export PYTHONPATH="$OPENRAM_HOME:$OPENRAM_TECH/sky130:$OPENRAM_TECH/sky130/custom" export PYTHONPATH="$OPENRAM_HOME:$OPENRAM_TECH/sky130:$OPENRAM_TECH/sky130/custom"
``` ```
We include the tech files necessary for [SCMOS] SCN4M_SUBM, We include the tech files necessary for [SCMOS] SCN4M\_SUBM,
[FreePDK45]. The [SCMOS] spice models, however, are [FreePDK45]. The [SCMOS] spice models, however, are
generic and should be replaced with foundry models. You may get the generic and should be replaced with foundry models. You may get the
entire [FreePDK45 PDK here][FreePDK45]. entire [FreePDK45 PDK here][FreePDK45].
### Sky130 Setup ### Sky130 Setup
To install [Sky130], you must have the open_pdks files installed in $PDK_ROOT. To install [Sky130], you must have the open\_pdks files installed in $PDK\_ROOT.
To install this automatically, you can run: To install this automatically, you can run:
``` ```
cd $HOME/OpenRAM cd $HOME/OpenRAM
make pdk make pdk
@ -69,8 +89,15 @@ make pdk
Then you must also install the [Sky130] SRAM build space and the appropriate cell views Then you must also install the [Sky130] SRAM build space and the appropriate cell views
by running: by running:
``` ```
cd $HOME/OpenRAM cd $HOME/OpenRAM
make install make install
``` ```
You can also run these from the package installation directory if you have the OpenRAM library.
[SCMOS]: https://www.mosis.com/files/scmos/scmos.pdf
[FreePDK45]: https://www.eda.ncsu.edu/wiki/FreePDK45:Contents
[Sky130]: https://github.com/google/skywater-pdk-libs-sky130_fd_bd_sram.git

View File

@ -7,16 +7,19 @@ This page of the documentation explains the basic usage of OpenRAM.
## Table of Contents ## Table of Contents
1. [Environment Variable Setup](#environment-variable-setup-assuming-bash) 1. [Environment Variable Setup](#environment-variable-setup-assuming-bash)
2. [Command Line Usage](#command-line-usage) 1. [Script Usage (with library)](#script-usage-with-library)
3. [Configuration Files](#configuration-files) 1. [Command Line Usage (with library)](#command-line-usage-with-library)
4. [Common Configuration File Options](#common-configuration-file-options) 1. [Command Line Usage (without library)](#command-line-usage-without-library)
5. [Output Files](#output-files) 1. [Configuration Files](#configuration-files)
6. [Data Sheets](#data-sheets) 1. [Common Configuration File Options](#common-configuration-file-options)
1. [Output Files](#output-files)
1. [Data Sheets](#data-sheets)
## Environment Variable Setup (assuming bash) ## Environment Variable Setup (assuming bash)
* OPENRAM_HOME defines where the compiler directory is > **Note**: This is optional if you have the OpenRAM library. See [basic setup](./basic_setup.md#go-back) for details.
* OPENRAM\_HOME defines where the compiler directory is
* ```export OPENRAM_HOME="$HOME/openram/compiler"``` * ```export OPENRAM_HOME="$HOME/openram/compiler"```
* OPENRAM_TECH defines list of paths where the technologies exist * OPENRAM_TECH defines list of paths where the technologies exist
* `export OPENRAM_TECH="$HOME/openram/technology"` * `export OPENRAM_TECH="$HOME/openram/technology"`
@ -27,14 +30,41 @@ This page of the documentation explains the basic usage of OpenRAM.
## Command Line Usage ## Script Usage (with library)
If you have the library installed, you can use OpenRAM in any Python script. You can import "openram" as follows:
```python
import openram
import globals
globals.init_openram("myconfig.py") # Config files are explained on this page
```
Note that you should import "openram" in this order so that the modules are imported properly. You can also look
at `sram_compiler.py` as an example on how to use "openram."
## Command Line Usage (with library)
You can run OpenRAM from the command line using the `sram_compiler.py` script that is included in the
library's installation. You can the package directory on a path like:
```
/home/mrg/.local/lib/python3.8/site-packages/openram
```
Alternatively, you can run the following command to find that path:
```
echo -e "import os\nimport openram\nprint(os.path.dirname(openram.__file__))" | python3 -
```
You can continue with following section for more details.
## Command Line Usage (without library)
Once you have defined the environment, you can run OpenRAM from the command line Once you have defined the environment, you can run OpenRAM from the command line
using a single configuration file written in Python. using a single configuration file written in Python.
For example, create a file called *myconfig.py* specifying the following For example, create a file called *myconfig.py* specifying the following
parameters for your memory: parameters for your memory:
``` ```python
# Data word size # Data word size
word_size = 2 word_size = 2
# Number of words in the memory # Number of words in the memory
@ -65,7 +95,7 @@ output_name = "sram_{0}_{1}_{2}".format(word_size,num_words,tech_name)
You can then run OpenRAM by executing: You can then run OpenRAM by executing:
``` ```
python3 $OPENRAM_HOME/openram.py myconfig python3 $OPENRAM_HOME/../sram_compiler.py myconfig
``` ```
You can see all of the options for the configuration file in You can see all of the options for the configuration file in
$OPENRAM\_HOME/options.py $OPENRAM\_HOME/options.py

View File

@ -7,8 +7,8 @@ This page of the documentation explains the bitcells supported by OpenRAM.
## Table of Contents ## Table of Contents
1. [Multiport Bitcells](#multiport-bitcells) 1. [Multiport Bitcells](#multiport-bitcells)
2. [Relative Bitcell Sizes](#relative-bitcell-sizes-035um-scmos) 1. [Relative Bitcell Sizes](#relative-bitcell-sizes-035um-scmos)
3. [Thin SRAM Bitcells](#thin-sram-bitcells-130nm) 1. [Thin SRAM Bitcells](#thin-sram-bitcells-130nm)
@ -37,4 +37,4 @@ This page of the documentation explains the bitcells supported by OpenRAM.
| <img height="707" src="../assets/images/bitcells/dff_reference.png"> | | <img height="707" src="../assets/images/bitcells/dff_reference.png"> |
| :----------------------------------------------------------: | | :----------------------------------------------------------: |
| DFF (for reference) 5.83um x 7.07 um | | DFF (for reference) 5.83um x 7.07 um |

View File

@ -6,19 +6,19 @@ This page of the documentation explains the characterization of OpenRAM.
## Table of Contents ## Table of Contents
1. [Characterization Overview](#characterization-overview) 1. [Characterization Overview](#characterization-overview)
2. [Characterizer Organization](#characterizer-organization) 1. [Characterizer Organization](#characterizer-organization)
3. [Characterization Options](#characterization-options) 1. [Characterization Options](#characterization-options)
4. [Characterization Measurements](#characterization-measurements) 1. [Characterization Measurements](#characterization-measurements)
5. [Analytical Characterization](#analytical-characterization) 1. [Analytical Characterization](#analytical-characterization)
6. [Multiport Characterization](#multiport-characterization) 1. [Multiport Characterization](#multiport-characterization)
7. [Characterizer Unit Test Use](#characterizer-unit-test-use) 1. [Characterizer Unit Test Use](#characterizer-unit-test-use)
8. [Functional Simulation](#functional-simulation) 1. [Functional Simulation](#functional-simulation)
9. [Power/Delay Characterization](#powerdelay-characterization) 1. [Power/Delay Characterization](#powerdelay-characterization)
10. [Timing Graph](#timing-graph) 1. [Timing Graph](#timing-graph)
11. [Graph Creation Example: Buffer](#graph-creation-example-buffer) 1. [Graph Creation Example: Buffer](#graph-creation-example-buffer)
12. [Graph Module Exclusion](#graph-module-exclusion) 1. [Graph Module Exclusion](#graph-module-exclusion)
13. [Timing Measurement Checks](#timing-measurement-checks) 1. [Timing Measurement Checks](#timing-measurement-checks)
@ -62,9 +62,9 @@ Measures the timing/power through SPICE simulation:
## Characterization Measurements ## Characterization Measurements
* Characterization is performed primarily to generate tables in .lib file * Characterization is performed primarily to generate tables in .lib file
* cell_rise/cell_fall - Delay of from negative clock edge to DOUT when reading a 1 or 0 respectively * cell\_rise/cell\_fall - Delay of from negative clock edge to DOUT when reading a 1 or 0 respectively
* rise_transition/fall_transition - Slew of DOUT when read 1 or 0 respectively * rise\_transition/fall\_transition - Slew of DOUT when read 1 or 0 respectively
* Setup and hold time for inputs (setup_rising, hold_rising) * Setup and hold time for inputs (setup\_rising, hold\_rising)
* Total power and leakage power * Total power and leakage power
* Delays and slews and intended to be independent of clock period. * Delays and slews and intended to be independent of clock period.
* Fall delays are copied to rise delays after characterization* * Fall delays are copied to rise delays after characterization*
@ -175,4 +175,4 @@ In addition to measurements done for characterization. Several measurements are
* Bitline measurements - Voltage of bitlines measured the checked to have at least a 10% difference * Bitline measurements - Voltage of bitlines measured the checked to have at least a 10% difference
* Bitcell Measurements - Voltage measured on internal storage of cells and check that they match the operation. * Bitcell Measurements - Voltage measured on internal storage of cells and check that they match the operation.
* Output voltage measurements - Output voltage (`DOUT`) checked at end of cycle so it matches operation. * Output voltage measurements - Output voltage (`DOUT`) checked at end of cycle so it matches operation.
* Sense Amp Enable Timing - Delay of `S_EN` should not exceed a half-period * Sense Amp Enable Timing - Delay of `S_EN` should not exceed a half-period

View File

@ -7,13 +7,13 @@ This page of the documentation explains the control logic and timing of OpenRAM.
## Table of Contents ## Table of Contents
1. [Read Timing](#read-timing) 1. [Read Timing](#read-timing)
2. [Write Timing](#write-timing) 1. [Write Timing](#write-timing)
3. [External Control Signals](#external-control-signals) 1. [External Control Signals](#external-control-signals)
4. [Internal Control Signals](#internal-control-signals) 1. [Internal Control Signals](#internal-control-signals)
5. [Replica Bitline (RBL)](#replica-bitline-rbl) 1. [Replica Bitline (RBL)](#replica-bitline-rbl)
6. [Internal Control Signals Diagram (Read)](#internal-control-signals-diagram-read) 1. [Internal Control Signals Diagram (Read)](#internal-control-signals-diagram-read)
7. [Internal Control Signals Diagram (Write)](#internal-control-signals-diagram-write) 1. [Internal Control Signals Diagram (Write)](#internal-control-signals-diagram-write)
8. [Clock Distribution](#clock-distribution) 1. [Clock Distribution](#clock-distribution)
@ -97,4 +97,4 @@ This page of the documentation explains the control logic and timing of OpenRAM.
* This is LOW when disabled * This is LOW when disabled
* `gated_clk_bar = cs && clk_bar` * `gated_clk_bar = cs && clk_bar`
* This is LOW when disabled * This is LOW when disabled
* `gated_clk = cs && clk_buf` * `gated_clk = cs && clk_buf`

View File

@ -7,11 +7,11 @@ This page of the documentation explains the debugging and unit testing of OpenRA
## Table of Contents ## Table of Contents
1. [Unit Tests](#unit-tests) 1. [Unit Tests](#unit-tests)
2. [Unit Test Organization](#unit-test-organization) 1. [Unit Test Organization](#unit-test-organization)
3. [Running Unit Tests](#running-unit-tests) 1. [Running Unit Tests](#running-unit-tests)
4. [Successful Unit Tests](#successful-unit-tests) 1. [Successful Unit Tests](#successful-unit-tests)
5. [Debugging Unsuccessful Unit Tests](#debugging-unsuccessful-unit-tests-or-openrampy) 1. [Debugging Unsuccessful Unit Tests](#debugging-unsuccessful-unit-tests-or-sram_compilerpy)
6. [Temporary Output Files](#temporary-output-files) 1. [Temporary Output Files](#temporary-output-files)
@ -124,7 +124,7 @@ OK
## Debugging Unsuccessful Unit Tests (or openram.py) ## Debugging Unsuccessful Unit Tests (or sram\_compiler.py)
* You will get an ERROR during unit test and see a stack trace * You will get an ERROR during unit test and see a stack trace
* Examine the temporary output files in the temp directory (/tmp/mydir) * Examine the temporary output files in the temp directory (/tmp/mydir)
```console ```console

View File

@ -6,17 +6,17 @@ This page of the documentation explains the hierarchical design modules of OpenR
## Table of Contents ## Table of Contents
1. [Hierarchical Design Modules](#hierarchical-design-modules-1) 1. [Hierarchical Design Modules](#hierarchical-design-modules-1)
2. [Bank](#bank) 1. [Bank](#bank)
3. [Port Data](#port-data) 1. [Port Data](#port-data)
4. [Port Address](#port-address) 1. [Port Address](#port-address)
5. [Plain Bitcell Array](#plain-bitcell-array) 1. [Plain Bitcell Array](#plain-bitcell-array)
6. [Variations of Bitcells Needed](#variations-of-bitcells-needed) 1. [Variations of Bitcells Needed](#variations-of-bitcells-needed)
7. [Replica Bitcell Array](#replica-bitcell-array) 1. [Replica Bitcell Array](#replica-bitcell-array)
8. [1D Arrays](#1d-arrays) 1. [1D Arrays](#1d-arrays)
9. [2D Arrays](#2d-arrays) 1. [2D Arrays](#2d-arrays)
10. [Delay Line](#delay-line) 1. [Delay Line](#delay-line)
11. [Hierarchical (Address) Decoder](#hierarchical-address-decoder) 1. [Hierarchical (Address) Decoder](#hierarchical-address-decoder)
@ -61,7 +61,7 @@ This page of the documentation explains the hierarchical design modules of OpenR
## Port Address ## Port Address
* Encapsulates the row decoder and wordline driver for easier placement next to a bank * Encapsulates the row decoder and wordline driver for easier placement next to a bank
* Each port will have its own port_address module * Each port will have its own port\_address module
@ -149,4 +149,4 @@ This page of the documentation explains the hierarchical design modules of OpenR
* `hierarchical_predecode_4x16` * `hierarchical_predecode_4x16`
* Hierarchical decoder uses predecoder + another decode stage * Hierarchical decoder uses predecoder + another decode stage
* Predecoders are also used for the column mux decode and bank select decode * Predecoders are also used for the column mux decode and bank select decode
* Wish list: Handle thin bitcell height * Wish list: Handle thin bitcell height

View File

@ -6,15 +6,15 @@ These pages provide the documentation of OpenRAM. You can use the links below to
## Table of Contents ## Table of Contents
1. [OpenRAM Dependencies](#openram-dependencies) 1. [OpenRAM Dependencies](#openram-dependencies)
1. [Supported Technologies](#supported-technologies) 1. [Supported Technologies](#supported-technologies)
1. [Basic Setup](./basic_setup.md#go-back) 1. [Basic Setup](./basic_setup.md#go-back)
1. [Basic Usage](./basic_usage.md#go-back) 1. [Basic Usage](./basic_usage.md#go-back)
1. [Bitcells](./bitcells.md#go-back) 1. [Bitcells](./bitcells.md#go-back)
1. [Architecture](./architecture.md#go-back) 1. [Architecture](./architecture.md#go-back)
1. [Implementation](#implementation) 1. [Implementation](#implementation)
1. [Technology and Tool Portability](#technology-and-tool-portability) 1. [Technology and Tool Portability](#technology-and-tool-portability)
1. [Tutorials](./tutorials.md#go-back) 1. [Tutorials](./tutorials.md#go-back)
1. [Debugging and Unit Testing](./debug.md#go-back) 1. [Debugging and Unit Testing](./debug.md#go-back)
1. [Technology Setup](./technology_setup.md#go-back) 1. [Technology Setup](./technology_setup.md#go-back)
1. [Library Cells](./library_cells.md#go-back) 1. [Library Cells](./library_cells.md#go-back)
@ -25,13 +25,12 @@ These pages provide the documentation of OpenRAM. You can use the links below to
1. [Characterization](./characterization.md#go-back) 1. [Characterization](./characterization.md#go-back)
1. [Results](./results.md#go-back) 1. [Results](./results.md#go-back)
1. [FAQ](./FAQ.md#go-back) 1. [FAQ](./FAQ.md#go-back)
1. [Contributors/Collaborators](#contributorscollaborators) 1. [Contributors/Collaborators](#contributorscollaborators)
## OpenRAM Dependencies ## OpenRAM Dependencies
Please see the Dockerfile for the required versions of tools. Please see the Dockerfile for the required versions of tools.
In general, the OpenRAM compiler has very few dependencies: In general, the OpenRAM compiler has very few dependencies:
@ -39,16 +38,16 @@ In general, the OpenRAM compiler has very few dependencies:
+ Make + Make
+ Python 3.6 or higher + Python 3.6 or higher
+ Various Python packages (pip install -r requirements.txt) + Various Python packages (pip install -r requirements.txt)
+ [Git] + Git
Commercial tools (optional): Commercial tools (optional):
* Spice Simulator * Spice Simulator
* Hspice I-2013.12-1 (or later) * Hspice I-2013.12-1 (or later)
* CustomSim 2017 (or later) * CustomSim 2017 (or later)
* DRC * DRC
* Calibre 2017.3_29.23 * Calibre 2017.3\_29.23
* LVS * LVS
* Calibre 2017.3_29.23 * Calibre 2017.3\_29.23
@ -56,7 +55,7 @@ Commercial tools (optional):
* NCSU FreePDK 45nm * NCSU FreePDK 45nm
* Non-fabricable but contains DSM rules * Non-fabricable but contains DSM rules
* Calibre or klayout for DRC/LVS * Calibre or klayout for DRC/LVS
* MOSIS 0.35um (SCN4M_SUBM) * MOSIS 0.35um (SCN4M\_SUBM)
* Fabricable technology * Fabricable technology
* Magic/Netgen or Calibre for DRC/LVS * Magic/Netgen or Calibre for DRC/LVS
* Skywater 130nm (sky130) * Skywater 130nm (sky130)

View File

@ -7,12 +7,12 @@ This page of the documentation explains the library cells of OpenRAM.
## Table of Contents ## Table of Contents
1. [Required Hard/Custom Cells](#required-hardcustom-cells) 1. [Required Hard/Custom Cells](#required-hardcustom-cells)
2. [Bitcell(s)](#bitcells) 1. [Bitcell(s)](#bitcells)
3. [Multiport Bitcells](#multiport-bitcells) 1. [Multiport Bitcells](#multiport-bitcells)
4. [Parameterized Bitcell](#parameterized-bitcell) 1. [Parameterized Bitcell](#parameterized-bitcell)
5. [Sense Amplifier](#sense-amplifier) 1. [Sense Amplifier](#sense-amplifier)
6. [DFF](#dff) 1. [DFF](#dff)
7. [Tristate/Write Driver](#tristatewrite-driver) 1. [Tristate/Write Driver](#tristatewrite-driver)
@ -93,4 +93,4 @@ This page of the documentation explains the library cells of OpenRAM.
## Tristate/Write Driver ## Tristate/Write Driver
* Tristate is used for multi-bank implementations * Tristate is used for multi-bank implementations
* Write driver drives the data onto the bitlines * Write driver drives the data onto the bitlines
* Both of these are currently library cells, but plans are to make them dynamically generated (`ptristate.py` and `pwrite_driver.py`) * Both of these are currently library cells, but plans are to make them dynamically generated (`ptristate.py` and `pwrite_driver.py`)

View File

@ -6,13 +6,13 @@ This page of the documentation explains the results of OpenRAM.
## Table of Contents ## Table of Contents
1. [Small Layouts](#small-layouts) 1. [Small Layouts](#small-layouts)
2. [Relative Planar Bitcells](#relative-planar-bitcells-035um-scmos) 1. [Relative Planar Bitcells](#relative-planar-bitcells-035um-scmos)
3. [SRAM Area](#sram-area) 1. [SRAM Area](#sram-area)
4. [Generated Layout by OpenRAM](#generated-layout-by-openram-for-a-multiport-6r2w-sram-in-32-nm-soi-cmos-technology) 1. [Generated Layout by OpenRAM](#generated-layout-by-openram-for-a-multiport-6r2w-sram-in-32-nm-soi-cmos-technology)
5. [Timing and Density Results for Generated SRAMs](#timing-and-density-results-for-generated-srams) 1. [Timing and Density Results for Generated SRAMs](#timing-and-density-results-for-generated-srams)
6. [Comparison with Fabricated SRAMs](#comparison-with-fabricated-srams) 1. [Comparison with Fabricated SRAMs](#comparison-with-fabricated-srams)
7. [Conclusions](#conclusions) 1. [Conclusions](#conclusions)
@ -64,4 +64,4 @@ This page of the documentation explains the results of OpenRAM.
* OpenRAM is open-sourced, flexible, and portable and can be adapted to various technologies. * OpenRAM is open-sourced, flexible, and portable and can be adapted to various technologies.
* OpenRAM generates the circuit, functional model, and layout of variable-sized SRAMs. * OpenRAM generates the circuit, functional model, and layout of variable-sized SRAMs.
* OpenRAM provides a memory characterizer for synthesis timing/power models. * OpenRAM provides a memory characterizer for synthesis timing/power models.
* We are also actively introducing new features, such as non-6T memories, variability characterization, word-line segmenting, characterization speed-up, etc. * We are also actively introducing new features, such as non-6T memories, variability characterization, word-line segmenting, characterization speed-up, etc.

View File

@ -7,9 +7,9 @@ This page of the documentation explains the routing of OpenRAM.
## Table of Contents ## Table of Contents
1. [Power Supply Options](#power-supply-options) 1. [Power Supply Options](#power-supply-options)
2. [Power Routing](#power-routing) 1. [Power Routing](#power-routing)
3. [Power Supply Algorithm](#power-supply-algorithm) 1. [Power Supply Algorithm](#power-supply-algorithm)
4. [Channel Router](#channel-router) 1. [Channel Router](#channel-router)
@ -53,4 +53,4 @@ This page of the documentation explains the routing of OpenRAM.
| <img height="200" src="../assets/images/routing/channel_router_book.png"> | <img height="200" src="../assets/images/routing/channel_router_connection.png"> | | <img height="200" src="../assets/images/routing/channel_router_book.png"> | <img height="200" src="../assets/images/routing/channel_router_connection.png"> |
| :-------------------------------------------------------------------------: | :---------------------------------------------------------------------: | | :-------------------------------------------------------------------------: | :---------------------------------------------------------------------: |
| Credit: Chen & Chang, EDA Handbook, Chapter 12, Global and detailed routing | Sense amp to data flop connection | | Credit: Chen & Chang, EDA Handbook, Chapter 12, Global and detailed routing | Sense amp to data flop connection |

View File

@ -7,17 +7,17 @@ This page of the documentation explains the technology setup of OpenRAM.
## Table of Contents ## Table of Contents
1. [Technology Directories](#technology-directories) 1. [Technology Directories](#technology-directories)
2. Technology Configuration: 1. Technology Configuration:
1. [Layer Map](#technology-configuration-layer-map) 1. [Layer Map](#technology-configuration-layer-map)
2. [GDS](#technology-configuration-gds) 1. [GDS](#technology-configuration-gds)
3. [DRC](#technology-configuration-drc) 1. [DRC](#technology-configuration-drc)
4. [SPICE](#technology-configuration-spice) 1. [SPICE](#technology-configuration-spice)
5. [Parameters](#technology-configuration-parameters) 1. [Parameters](#technology-configuration-parameters)
## Technology Directories ## Technology Directories
* Environment variable OPENRAM_TECH specifies list of technology directories * Environment variable OPENRAM\_TECH specifies list of technology directories
* Similar to `*nix $PATH` * Similar to `*nix $PATH`
* Directory structure: * Directory structure:
``` ```
@ -73,7 +73,7 @@ This page of the documentation explains the technology setup of OpenRAM.
## Technology Configuration: DRC ## Technology Configuration: DRC
* Creates the design_rule class with several parts: * Creates the design\_rule class with several parts:
* Grid size * Grid size
* Location of DRC, LVS, PEX rules and layer map * Location of DRC, LVS, PEX rules and layer map
* Subset of design rules for FEOL and BEOL * Subset of design rules for FEOL and BEOL
@ -122,4 +122,4 @@ drc["metal3_to_metal3"] = drc_lut({(0.00, 0.0) : 0.07,
* Rise/fall input slews * Rise/fall input slews
* Analytical parameters * Analytical parameters
* Used for analytical delay and power estimation * Used for analytical delay and power estimation
* E.g. device capacitance and "on" resistance * E.g. device capacitance and "on" resistance