diff --git a/OpenRAM_ICCAD_2016_presentation.pdf b/OpenRAM_ICCAD_2016_presentation.pdf
deleted file mode 100644
index 0575e52b..00000000
Binary files a/OpenRAM_ICCAD_2016_presentation.pdf and /dev/null differ
diff --git a/README.md b/README.md
index d6a5b581..9acca5b4 100644
--- a/README.md
+++ b/README.md
@@ -24,6 +24,13 @@ other views necessary to use SRAMs in ASIC design. OpenRAM supports
integration in both commercial and open-source flows with both
predictive and fabricable technologies.
+# Documentation
+
+Please take a look at our presentation We have created a detailed
+presentation that serves as our [documentation][documentation].
+This is the most up-to-date information, so please let us know if you see
+things that need to be fixed.
+
# Basic Setup
## Docker Image
@@ -67,7 +74,7 @@ You may also wish to add OPENRAM\_HOME to your PYTHONPATH:
export PYTHONPATH="$PYTHONPATH:$OPENRAM_HOME"
```
-We include the tech files necessary for [FreePDK45] and [SCMOS]
+We include the tech files necessary for [SCMOS]
SCN4M_SUBM. The [SCMOS] spice models, however, are generic and should
be replaced with foundry models. If you are using [FreePDK45], you
should also have that set up and have the environment variable point
@@ -196,6 +203,7 @@ Each specific technology (e.g., [FreePDK45]) should be a subdirectory
# Further Help
+ [Additional hints](./HINTS.md)
++ [Documentation][documentation]
+ [OpenRAM Slack Workspace][Slack]
+ [OpenRAM Users Group][user-group] ([subscribe here][user-group-subscribe])
+ [OpenRAM Developers Group][dev-group] ([subscribe here][dev-group-subscribe])
@@ -232,7 +240,7 @@ If I forgot to add you, please let me know!
[Github pull request]: https://github.com/VLSIDA/OpenRAM/pulls
[Github projects]: https://github.com/VLSIDA/OpenRAM/projects
-[email me]: mailto:mrg+openram@ucsc.edu
+[documentation]: https://docs.google.com/presentation/d/10InGB33N51I6oBHnqpU7_w9DXlx-qe9zdrlco2Yc5co/edit?usp=sharing
[dev-group]: mailto:openram-dev-group@ucsc.edu
[user-group]: mailto:openram-user-group@ucsc.edu
[dev-group-subscribe]: mailto:openram-dev-group+subscribe@ucsc.edu
diff --git a/compiler/base/hierarchy_design.py b/compiler/base/hierarchy_design.py
index 1dc052e3..5b45abe1 100644
--- a/compiler/base/hierarchy_design.py
+++ b/compiler/base/hierarchy_design.py
@@ -25,33 +25,6 @@ class hierarchy_design(hierarchy_spice.spice, hierarchy_layout.layout):
hierarchy_spice.spice.__init__(self, name)
- # Check if the name already exists, if so, give an error
- # because each reference must be a unique name.
- # These modules ensure unique names or have no changes if they
- # aren't unique
- ok_list = ['contact',
- 'ptx',
- 'pbitcell',
- 'replica_pbitcell',
- 'sram',
- 'hierarchical_predecode2x4',
- 'hierarchical_predecode3x8']
-
- # Library cells don't change
- if self.is_library_cell:
- return
- # Name is unique so far
- elif name not in hierarchy_design.name_map:
- hierarchy_design.name_map.append(name)
- else:
- # Name is in our list of exceptions (they don't change)
- for ok_names in ok_list:
- if ok_names == self.__class__.__name__:
- break
- else:
- debug.error("Duplicate layout reference name {0} of class {1}. GDS2 requires names be unique.".format(name,self.__class__),-1)
-
-
def get_layout_pins(self,inst):
""" Return a map of pin locations of the instance offset """
# find the instance
diff --git a/compiler/characterizer/delay.py b/compiler/characterizer/delay.py
index 29b12ae9..9c15cd2a 100644
--- a/compiler/characterizer/delay.py
+++ b/compiler/characterizer/delay.py
@@ -42,8 +42,8 @@ class delay(simulation):
#Altering the names will crash the characterizer. TODO: object orientated approach to the measurements.
self.delay_meas_names = ["delay_lh", "delay_hl", "slew_lh", "slew_hl"]
self.power_meas_names = ["read0_power", "read1_power", "write0_power", "write1_power"]
- self.voltage_when_names = ["volt_bl", "volt_br"]
- self.bitline_delay_names = ["delay_bl", "delay_br"]
+ #self.voltage_when_names = ["volt_bl", "volt_br"]
+ #self.bitline_delay_names = ["delay_bl", "delay_br"]
def create_measurement_objects(self):
"""Create the measurements used for read and write ports"""
@@ -84,8 +84,8 @@ class delay(simulation):
bl_name = "Xsram.Xbank0.bl{}_{}".format(port_format, self.bitline_column)
br_name = "Xsram.Xbank0.br{}_{}".format(port_format, self.bitline_column)
- self.read_meas_objs.append(voltage_when_measure(self.voltage_when_names[0], trig_name, bl_name, "RISE", .5))
- self.read_meas_objs.append(voltage_when_measure(self.voltage_when_names[1], trig_name, br_name, "RISE", .5))
+ # self.read_meas_objs.append(voltage_when_measure(self.voltage_when_names[0], trig_name, bl_name, "RISE", .5))
+ # self.read_meas_objs.append(voltage_when_measure(self.voltage_when_names[1], trig_name, br_name, "RISE", .5))
#These are read values but need to be separated for unique error checking.
self.create_bitline_delay_measurement_objects()
@@ -105,10 +105,10 @@ class delay(simulation):
targ_val = (self.vdd_voltage - tech.spice["v_threshold_typical"])/self.vdd_voltage #Calculate as a percentage of vdd
targ_name = "{0}{1}_{2}".format(self.dout_name,"{}",self.probe_data) #Empty values are the port and probe data bit
- self.bitline_delay_objs.append(delay_measure(self.bitline_delay_names[0], trig_name, bl_name, "FALL", "FALL", targ_vdd=targ_val, measure_scale=1e9))
- self.bitline_delay_objs[-1].meta_str = "read0"
- self.bitline_delay_objs.append(delay_measure(self.bitline_delay_names[1], trig_name, br_name, "FALL", "FALL", targ_vdd=targ_val, measure_scale=1e9))
- self.bitline_delay_objs[-1].meta_str = "read1"
+ # self.bitline_delay_objs.append(delay_measure(self.bitline_delay_names[0], trig_name, bl_name, "FALL", "FALL", targ_vdd=targ_val, measure_scale=1e9))
+ # self.bitline_delay_objs[-1].meta_str = "read0"
+ # self.bitline_delay_objs.append(delay_measure(self.bitline_delay_names[1], trig_name, br_name, "FALL", "FALL", targ_vdd=targ_val, measure_scale=1e9))
+ # self.bitline_delay_objs[-1].meta_str = "read1"
#Enforces the time delay on the bitline measurements for read0 or read1
for obj in self.bitline_delay_objs:
obj.meta_add_delay = True
@@ -966,7 +966,7 @@ class delay(simulation):
def get_empty_measure_data_dict(self):
"""Make a dict of lists for each type of delay and power measurement to append results to"""
- measure_names = self.delay_meas_names + self.power_meas_names + self.voltage_when_names + self.bitline_delay_names
+ measure_names = self.delay_meas_names + self.power_meas_names
#Create list of dicts. List lengths is # of ports. Each dict maps the measurement names to lists.
measure_data = [{mname:[] for mname in measure_names} for i in self.all_ports]
return measure_data
diff --git a/compiler/datasheet/add_db.py b/compiler/datasheet/add_db.py
new file mode 100644
index 00000000..862c1d8a
--- /dev/null
+++ b/compiler/datasheet/add_db.py
@@ -0,0 +1,41 @@
+from pathlib import Path
+import glob
+import os
+import sys
+
+# This is the path to the directory you would like to search
+# This directory is searched recursively for .html files
+
+path_to_files = sys.argv[1]
+
+
+def get_file_tree(path):
+ return list(Path(path).rglob("*.html"))
+
+
+def parse_html(file, comment):
+ start_tag = ''
+
+ with open(file, 'r') as f:
+
+ file_string = f.read()
+
+ with open(file, 'w') as f:
+
+ file_string = file_string.replace(start_tag,"")
+ file_string = file_string.replace(end_tag,"")
+
+ f.write(file_string)
+
+def uncomment(comments):
+ comment_files = []
+ for datasheet in datasheet_list:
+ for comment in comments:
+ if glob.glob(os.path.dirname(datasheet)+'/*' + comment):
+ parse_html(datasheet, comment)
+
+datasheet_list = get_file_tree(path_to_files)
+comments = ['.db']
+uncomment(comments)
+
diff --git a/compiler/datasheet/datasheet.py b/compiler/datasheet/datasheet.py
index a7700349..b48d217d 100644
--- a/compiler/datasheet/datasheet.py
+++ b/compiler/datasheet/datasheet.py
@@ -38,6 +38,9 @@ class datasheet():
with open(os.path.abspath(os.environ.get("OPENRAM_HOME")) + '/datasheet/assets/OpenRAM_logo.png', "rb") as image_file:
openram_logo = base64.b64encode(image_file.read())
+ #comment table rows which we may want to enable after compile time
+ comments = ['.db']
+
self.html += '
'.format(str(vlsi_logo)[2:-1], str(openram_logo)[2:-1])
self.html += '
' + \
@@ -51,11 +54,11 @@ class datasheet():
'Git commit id: ' + str(self.git_id) + '
'
# print port table
self.html += 'Ports and Configuration
'
- self.html += self.io_table.to_html()
+ self.html += self.io_table.to_html(comments)
# print operating condidition information
self.html += 'Operating Conditions
'
- self.html += self.operating_table.to_html()
+ self.html += self.operating_table.to_html(comments)
# check if analytical model is being used
self.html += 'Timing Data
'
@@ -66,13 +69,14 @@ class datasheet():
model = "spice characterizer"
# display timing data
self.html += 'Using '+model+'
'
- self.html += self.timing_table.to_html()
+ self.html += self.timing_table.to_html(comments)
# display power data
self.html += 'Power Data
'
- self.html += self.power_table.to_html()
+ self.html += self.power_table.to_html(comments)
# display corner information
self.html += 'Characterization Corners
'
- self.html += self.corners_table.to_html()
+ self.html += self.corners_table.to_html(comments)
# display deliverables table
self.html += 'Deliverables
'
- self.html += self.dlv_table.to_html()
+ self.dlv_table.sort()
+ self.html += self.dlv_table.to_html(comments)
diff --git a/compiler/datasheet/datasheet_gen.py b/compiler/datasheet/datasheet_gen.py
index 3b4fe2ac..e6c728f0 100644
--- a/compiler/datasheet/datasheet_gen.py
+++ b/compiler/datasheet/datasheet_gen.py
@@ -386,6 +386,9 @@ def parse_characterizer_csv(f, pages):
[PROC, VOLT, TEMP, LIB_NAME.replace(OUT_DIR, '').replace(NAME, '')])
new_sheet.dlv_table.add_row(
['.lib', 'Synthesis models', '{1}'.format(LIB_NAME, LIB_NAME.replace(OUT_DIR, ''))])
+ new_sheet.dlv_table.add_row(
+ ['.db', 'Compiled .lib', '{1}'.format(LIB_NAME[:-3] + 'db', LIB_NAME.replace(OUT_DIR, '')[:-3] + 'db')])
+
if found == 0:
@@ -603,6 +606,8 @@ def parse_characterizer_csv(f, pages):
['.html', 'This datasheet', '{0}.{1}'.format(OPTS.output_name, 'html')])
new_sheet.dlv_table.add_row(
['.lib', 'Synthesis models', '{1}'.format(LIB_NAME, LIB_NAME.replace(OUT_DIR, ''))])
+ new_sheet.dlv_table.add_row(
+ ['.db', 'Compiled .lib', '{1}'.format(LIB_NAME[:-3] + 'db', LIB_NAME.replace(OUT_DIR, '')[:-3] + 'db')])
new_sheet.dlv_table.add_row(
['.py', 'OpenRAM configuration file', '{0}.{1}'.format(OPTS.output_name, 'py')])
new_sheet.dlv_table.add_row(
diff --git a/compiler/datasheet/table_gen.py b/compiler/datasheet/table_gen.py
index 8f94e896..227bb5c4 100644
--- a/compiler/datasheet/table_gen.py
+++ b/compiler/datasheet/table_gen.py
@@ -22,27 +22,38 @@ class table_gen:
html += ''
return html
- def gen_table_body(self):
+ def gen_table_body(self,comments):
"""generate html body (used after gen_table_head)"""
html = ''
html += ''
html += ''
for row in self.rows[1:]:
- html += '
'
- for col in row:
- html += '| ' + str(col) + ' | '
- html += '
'
+
+ if row[0] not in comments:
+ html += ''
+ for col in row:
+ html += '| ' + str(col) + ' | '
+ html += '
'
+
+ else:
+ html += ''
+
html += ''
html += ''
return html
+ def sort(self):
+ self.rows[1:] = sorted(self.rows[1:], key=lambda x : x[0])
- def to_html(self):
+ def to_html(self,comments):
"""writes table_gen object to inline html"""
html = ''
html += ''
html += self.gen_table_head()
- html += self.gen_table_body()
- html += '
'
+ html += self.gen_table_body(comments)
+ html += '\n'
return html
diff --git a/compiler/globals.py b/compiler/globals.py
index c1422592..590fc97f 100644
--- a/compiler/globals.py
+++ b/compiler/globals.py
@@ -128,6 +128,8 @@ def init_openram(config_file, is_unit_test=True):
import_tech()
+ set_default_corner()
+
init_paths()
from sram_factory import factory
@@ -135,10 +137,6 @@ def init_openram(config_file, is_unit_test=True):
setup_bitcell()
- # Reset the static duplicate name checker for unit tests.
- import hierarchy_design
- hierarchy_design.hierarchy_design.name_map=[]
-
global OPTS
global CHECKPOINT_OPTS
@@ -187,11 +185,12 @@ def setup_bitcell():
# See if a custom bitcell exists
from importlib import find_loader
- bitcell_loader = find_loader(OPTS.bitcell)
- replica_bitcell_loader = find_loader(OPTS.replica_bitcell)
- # Use the pbitcell if we couldn't find a custom bitcell
- # or its custom replica bitcell
- if bitcell_loader==None or replica_bitcell_loader==None:
+ try:
+ __import__(OPTS.bitcell)
+ __import__(OPTS.replica_bitcell)
+ except ImportError:
+ # Use the pbitcell if we couldn't find a custom bitcell
+ # or its custom replica bitcell
# Use the pbitcell (and give a warning if not in unit test mode)
OPTS.bitcell = "pbitcell"
OPTS.replica_bitcell = "replica_pbitcell"
@@ -392,9 +391,20 @@ def init_paths():
except:
debug.error("Unable to make output directory.",-1)
+def set_default_corner():
+ """ Set the default corner. """
+
+ # Set some default options now based on the technology...
+ if (OPTS.process_corners == ""):
+ OPTS.process_corners = tech.spice["fet_models"].keys()
+ if (OPTS.supply_voltages == ""):
+ OPTS.supply_voltages = tech.spice["supply_voltages"]
+ if (OPTS.temperatures == ""):
+ OPTS.temperatures = tech.spice["temperatures"]
+
-# imports correct technology directories for testing
def import_tech():
+ """ Dynamically adds the tech directory to the path and imports it. """
global OPTS
debug.info(2,"Importing technology: " + OPTS.tech_name)
@@ -403,34 +413,30 @@ def import_tech():
try:
OPENRAM_TECH = os.path.abspath(os.environ.get("OPENRAM_TECH"))
except:
- debug.error("$OPENRAM_TECH is not properly defined.",1)
- debug.check(os.path.isdir(OPENRAM_TECH),"$OPENRAM_TECH does not exist: {0}".format(OPENRAM_TECH))
-
- OPTS.openram_tech = OPENRAM_TECH + "/" + OPTS.tech_name
- if not OPTS.openram_tech.endswith('/'):
- OPTS.openram_tech += "/"
- debug.info(1, "Technology path is " + OPTS.openram_tech)
+ debug.error("$OPENRAM_TECH environment variable is not defined.",1)
+ # Add all of the paths
+ for tech_path in OPENRAM_TECH.split(":"):
+ debug.check(os.path.isdir(tech_path),"$OPENRAM_TECH does not exist: {0}".format(tech_path))
+ sys.path.append(tech_path)
+ debug.info(1, "Adding technology path: {}".format(tech_path))
+
+ # Import the tech
try:
- filename = "setup_openram_{0}".format(OPTS.tech_name)
- # we assume that the setup scripts (and tech dirs) are located at the
- # same level as the compielr itself, probably not a good idea though.
- path = "{0}/setup_scripts".format(os.environ.get("OPENRAM_TECH"))
- debug.check(os.path.isdir(path),"OPENRAM_TECH does not exist: {0}".format(path))
- sys.path.append(os.path.abspath(path))
- __import__(filename)
+ tech_mod = __import__(OPTS.tech_name)
except ImportError:
- debug.error("Nonexistent technology_setup_file: {0}.py".format(filename))
- sys.exit(1)
+ debug.error("Nonexistent technology_setup_file: {0}.py".format(filename), -1)
- import tech
- # Set some default options now based on the technology...
- if (OPTS.process_corners == ""):
- OPTS.process_corners = tech.spice["fet_models"].keys()
- if (OPTS.supply_voltages == ""):
- OPTS.supply_voltages = tech.spice["supply_voltages"]
- if (OPTS.temperatures == ""):
- OPTS.temperatures = tech.spice["temperatures"]
+ OPTS.openram_tech = os.path.dirname(tech_mod.__file__) + "/"
+
+
+ # Add the tech directory
+ tech_path = OPTS.openram_tech
+ sys.path.append(tech_path)
+ try:
+ import tech
+ except ImportError:
+ debug.error("Could not load tech module.", -1)
def print_time(name, now_time, last_time=None, indentation=2):
diff --git a/compiler/modules/control_logic.py b/compiler/modules/control_logic.py
index b8532ee9..ac9aaa1f 100644
--- a/compiler/modules/control_logic.py
+++ b/compiler/modules/control_logic.py
@@ -14,7 +14,7 @@ class control_logic(design.design):
Dynamically generated Control logic for the total SRAM circuit.
"""
- def __init__(self, num_rows, words_per_row, word_size, sram=None, port_type="rw"):
+ def __init__(self, num_rows, words_per_row, word_size, sram=None, port_type="rw", name=""):
""" Constructor """
name = "control_logic_" + port_type
design.design.__init__(self, name)
diff --git a/compiler/modules/tri_gate_array.py b/compiler/modules/tri_gate_array.py
index c9dee703..913c6097 100644
--- a/compiler/modules/tri_gate_array.py
+++ b/compiler/modules/tri_gate_array.py
@@ -10,9 +10,9 @@ class tri_gate_array(design.design):
Dynamically generated tri gate array of all bitlines. words_per_row
"""
- def __init__(self, columns, word_size):
+ def __init__(self, columns, word_size, name):
"""Intial function of tri gate array """
- design.design.__init__(self, "tri_gate_array")
+ design.design.__init__(self, name)
debug.info(1, "Creating {0}".format(self.name))
self.columns = columns
diff --git a/compiler/options.py b/compiler/options.py
index 4d3461e6..f3410f86 100644
--- a/compiler/options.py
+++ b/compiler/options.py
@@ -13,8 +13,12 @@ class options(optparse.Values):
# This is the name of the technology.
tech_name = ""
# This is the temp directory where all intermediate results are stored.
- openram_temp = "/tmp/openram_{0}_{1}_temp/".format(getpass.getuser(),os.getpid())
- #openram_temp = "{0}/openram_temp/".format(os.getenv("HOME"))
+ try:
+ # If user defined the temporary location in their environment, use it
+ openram_temp = os.path.abspath(os.environ.get("OPENRAM_TMP"))
+ except:
+ # Else use a unique temporary directory
+ openram_temp = "/tmp/openram_{0}_{1}_temp/".format(getpass.getuser(),os.getpid())
# This is the verbosity level to control debug information. 0 is none, 1
# is minimal, etc.
debug_level = 0
diff --git a/compiler/sram_factory.py b/compiler/sram_factory.py
index 7b420a6b..1b4041d4 100644
--- a/compiler/sram_factory.py
+++ b/compiler/sram_factory.py
@@ -58,7 +58,7 @@ class sram_factory:
(obj_kwargs, obj_item) = obj
# Must have the same dictionary exactly (conservative)
if obj_kwargs == kwargs:
- #debug.info(1, "Existing module: type={0} name={1} kwargs={2}".format(module_type, obj_item.name, str(kwargs)))
+ debug.info(3, "Existing module: type={0} name={1} kwargs={2}".format(module_type, obj_item.name, str(kwargs)))
return obj_item
# Use the default name if there are default arguments
diff --git a/compiler/tests/01_library_drc_test.py b/compiler/tests/01_library_drc_test.py
index 046e6378..1f4aa853 100755
--- a/compiler/tests/01_library_drc_test.py
+++ b/compiler/tests/01_library_drc_test.py
@@ -12,7 +12,7 @@ import debug
class library_drc_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
import verify
(gds_dir, gds_files) = setup_files()
diff --git a/compiler/tests/02_library_lvs_test.py b/compiler/tests/02_library_lvs_test.py
index 4ec40dc7..f312c298 100755
--- a/compiler/tests/02_library_lvs_test.py
+++ b/compiler/tests/02_library_lvs_test.py
@@ -12,7 +12,7 @@ import debug
class library_lvs_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
import verify
(gds_dir, sp_dir, allnames) = setup_files()
diff --git a/compiler/tests/03_contact_test.py b/compiler/tests/03_contact_test.py
index 33aa45ae..29d7ca0e 100755
--- a/compiler/tests/03_contact_test.py
+++ b/compiler/tests/03_contact_test.py
@@ -12,7 +12,7 @@ import debug
class contact_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
import contact
diff --git a/compiler/tests/03_path_test.py b/compiler/tests/03_path_test.py
index f0fc2299..78abc9e3 100755
--- a/compiler/tests/03_path_test.py
+++ b/compiler/tests/03_path_test.py
@@ -12,7 +12,7 @@ import debug
class path_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
import wire_path
import tech
import design
diff --git a/compiler/tests/03_ptx_1finger_nmos_test.py b/compiler/tests/03_ptx_1finger_nmos_test.py
index 9a81810e..a5ea028c 100755
--- a/compiler/tests/03_ptx_1finger_nmos_test.py
+++ b/compiler/tests/03_ptx_1finger_nmos_test.py
@@ -7,19 +7,20 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
+from sram_factory import factory
import debug
-class ptx_test(openram_test):
+class ptx_1finger_nmos_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
- import ptx
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
import tech
debug.info(2, "Checking min size NMOS with 1 finger")
- fet = ptx.ptx(width=tech.drc["minwidth_tx"],
- mults=1,
- tx_type="nmos")
+ fet = factory.create(module_type="ptx",
+ width=tech.drc["minwidth_tx"],
+ mults=1,
+ tx_type="nmos")
self.local_drc_check(fet)
globals.end_openram()
diff --git a/compiler/tests/03_ptx_1finger_pmos_test.py b/compiler/tests/03_ptx_1finger_pmos_test.py
index a3ed99ff..f1a4de56 100755
--- a/compiler/tests/03_ptx_1finger_pmos_test.py
+++ b/compiler/tests/03_ptx_1finger_pmos_test.py
@@ -7,19 +7,20 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
+from sram_factory import factory
import debug
-class ptx_test(openram_test):
+class ptx_1finger_pmos_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
- import ptx
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
import tech
debug.info(2, "Checking min size PMOS with 1 finger")
- fet = ptx.ptx(width=tech.drc["minwidth_tx"],
- mults=1,
- tx_type="pmos")
+ fet = factory.create(module_type="ptx",
+ width=tech.drc["minwidth_tx"],
+ mults=1,
+ tx_type="pmos")
self.local_drc_check(fet)
globals.end_openram()
diff --git a/compiler/tests/03_ptx_3finger_nmos_test.py b/compiler/tests/03_ptx_3finger_nmos_test.py
index e1febdbc..535560e1 100755
--- a/compiler/tests/03_ptx_3finger_nmos_test.py
+++ b/compiler/tests/03_ptx_3finger_nmos_test.py
@@ -7,21 +7,22 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
+from sram_factory import factory
import debug
-class ptx_test(openram_test):
+class ptx_3finger_nmos_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
- import ptx
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
import tech
debug.info(2, "Checking three fingers NMOS")
- fet = ptx.ptx(width=tech.drc["minwidth_tx"],
- mults=3,
- tx_type="nmos",
- connect_active=True,
- connect_poly=True)
+ fet = factory.create(module_type="ptx",
+ width=tech.drc["minwidth_tx"],
+ mults=3,
+ tx_type="nmos",
+ connect_active=True,
+ connect_poly=True)
self.local_drc_check(fet)
globals.end_openram()
diff --git a/compiler/tests/03_ptx_3finger_pmos_test.py b/compiler/tests/03_ptx_3finger_pmos_test.py
index af9a5d42..fd2abc0b 100755
--- a/compiler/tests/03_ptx_3finger_pmos_test.py
+++ b/compiler/tests/03_ptx_3finger_pmos_test.py
@@ -7,21 +7,22 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
+from sram_factory import factory
import debug
-class ptx_test(openram_test):
+class ptx_3finger_pmos_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
- import ptx
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
import tech
debug.info(2, "Checking three fingers PMOS")
- fet = ptx.ptx(width=tech.drc["minwidth_tx"],
- mults=3,
- tx_type="pmos",
- connect_active=True,
- connect_poly=True)
+ fet = factory.create(module_type="ptx",
+ width=tech.drc["minwidth_tx"],
+ mults=3,
+ tx_type="pmos",
+ connect_active=True,
+ connect_poly=True)
self.local_drc_check(fet)
globals.end_openram()
diff --git a/compiler/tests/03_ptx_4finger_nmos_test.py b/compiler/tests/03_ptx_4finger_nmos_test.py
index 08a20898..56102419 100755
--- a/compiler/tests/03_ptx_4finger_nmos_test.py
+++ b/compiler/tests/03_ptx_4finger_nmos_test.py
@@ -7,21 +7,22 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
+from sram_factory import factory
import debug
-class ptx_test(openram_test):
+class ptx_4finger_nmos_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
- import ptx
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
import tech
debug.info(2, "Checking three fingers NMOS")
- fet = ptx.ptx(width=tech.drc["minwidth_tx"],
- mults=4,
- tx_type="nmos",
- connect_active=True,
- connect_poly=True)
+ fet = factory.create(module_type="ptx",
+ width= tech.drc["minwidth_tx"],
+ mults=4,
+ tx_type="nmos",
+ connect_active=True,
+ connect_poly=True)
self.local_drc_check(fet)
globals.end_openram()
diff --git a/compiler/tests/03_ptx_4finger_pmos_test.py b/compiler/tests/03_ptx_4finger_pmos_test.py
index 01857eda..4d7181b1 100755
--- a/compiler/tests/03_ptx_4finger_pmos_test.py
+++ b/compiler/tests/03_ptx_4finger_pmos_test.py
@@ -7,21 +7,22 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
+from sram_factory import factory
import debug
class ptx_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
- import ptx
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
import tech
debug.info(2, "Checking three fingers PMOS")
- fet = ptx.ptx(width=tech.drc["minwidth_tx"],
- mults=4,
- tx_type="pmos",
- connect_active=True,
- connect_poly=True)
+ fet = factory.create(module_type="ptx",
+ width=tech.drc["minwidth_tx"],
+ mults=4,
+ tx_type="pmos",
+ connect_active=True,
+ connect_poly=True)
self.local_drc_check(fet)
globals.end_openram()
diff --git a/compiler/tests/03_wire_test.py b/compiler/tests/03_wire_test.py
index 1b18e14b..1cce5f08 100755
--- a/compiler/tests/03_wire_test.py
+++ b/compiler/tests/03_wire_test.py
@@ -12,7 +12,7 @@ import debug
class wire_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
import wire
import tech
import design
diff --git a/compiler/tests/04_pand2_test.py b/compiler/tests/04_pand2_test.py
index 91b3458e..8dd900fe 100755
--- a/compiler/tests/04_pand2_test.py
+++ b/compiler/tests/04_pand2_test.py
@@ -9,12 +9,13 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
+from sram_factory import factory
import debug
class pand2_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
global verify
import verify
diff --git a/compiler/tests/04_pbitcell_test.py b/compiler/tests/04_pbitcell_test.py
index c78b3284..b1edb5d7 100755
--- a/compiler/tests/04_pbitcell_test.py
+++ b/compiler/tests/04_pbitcell_test.py
@@ -16,15 +16,14 @@ from sram_factory import factory
class pbitcell_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
- from pbitcell import pbitcell
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
OPTS.num_rw_ports=1
OPTS.num_w_ports=1
OPTS.num_r_ports=1
factory.reset()
debug.info(2, "Bitcell with 1 of each port: read/write, write, and read")
- tx = pbitcell(name="pbc")
+ tx = factory.create(module_type="pbitcell")
self.local_check(tx)
OPTS.num_rw_ports=0
@@ -32,7 +31,7 @@ class pbitcell_test(openram_test):
OPTS.num_r_ports=1
factory.reset()
debug.info(2, "Bitcell with 0 read/write ports")
- tx = pbitcell(name="pbc")
+ tx = factory.create(module_type="pbitcell")
self.local_check(tx)
OPTS.num_rw_ports=1
@@ -40,7 +39,7 @@ class pbitcell_test(openram_test):
OPTS.num_r_ports=1
factory.reset()
debug.info(2, "Bitcell with 0 write ports")
- tx = pbitcell(name="pbc")
+ tx = factory.create(module_type="pbitcell")
self.local_check(tx)
OPTS.num_rw_ports=1
@@ -48,7 +47,7 @@ class pbitcell_test(openram_test):
OPTS.num_r_ports=0
factory.reset()
debug.info(2, "Bitcell with 0 read ports")
- tx = pbitcell(name="pbc")
+ tx = factory.create(module_type="pbitcell")
self.local_check(tx)
OPTS.num_rw_ports=1
@@ -56,7 +55,7 @@ class pbitcell_test(openram_test):
OPTS.num_r_ports=0
factory.reset()
debug.info(2, "Bitcell with 0 read ports and 0 write ports")
- tx = pbitcell(name="pbc")
+ tx = factory.create(module_type="pbitcell")
self.local_check(tx)
OPTS.num_rw_ports=2
@@ -64,7 +63,7 @@ class pbitcell_test(openram_test):
OPTS.num_r_ports=2
factory.reset()
debug.info(2, "Bitcell with 2 of each port: read/write, write, and read")
- tx = pbitcell(name="pbc")
+ tx = factory.create(module_type="pbitcell")
self.local_check(tx)
OPTS.num_rw_ports=0
@@ -72,7 +71,7 @@ class pbitcell_test(openram_test):
OPTS.num_r_ports=2
factory.reset()
debug.info(2, "Bitcell with 0 read/write ports")
- tx = pbitcell(name="pbc")
+ tx = factory.create(module_type="pbitcell")
self.local_check(tx)
OPTS.num_rw_ports=2
@@ -80,7 +79,7 @@ class pbitcell_test(openram_test):
OPTS.num_r_ports=2
factory.reset()
debug.info(2, "Bitcell with 0 write ports")
- tx = pbitcell(name="pbc")
+ tx = factory.create(module_type="pbitcell")
self.local_check(tx)
OPTS.num_rw_ports=2
@@ -88,7 +87,7 @@ class pbitcell_test(openram_test):
OPTS.num_r_ports=0
factory.reset()
debug.info(2, "Bitcell with 0 read ports")
- tx = pbitcell(name="pbc")
+ tx = factory.create(module_type="pbitcell")
self.local_check(tx)
OPTS.num_rw_ports=2
@@ -96,7 +95,7 @@ class pbitcell_test(openram_test):
OPTS.num_r_ports=0
factory.reset()
debug.info(2, "Bitcell with 0 read ports and 0 write ports")
- tx = pbitcell(name="pbc")
+ tx = factory.create(module_type="pbitcell")
self.local_check(tx)
globals.end_openram()
diff --git a/compiler/tests/04_pbuf_test.py b/compiler/tests/04_pbuf_test.py
index ed5b8627..7ee53781 100755
--- a/compiler/tests/04_pbuf_test.py
+++ b/compiler/tests/04_pbuf_test.py
@@ -9,19 +9,16 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
+from sram_factory import factory
import debug
class pbuf_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
- global verify
- import verify
-
- import pbuf
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
debug.info(2, "Testing inverter/buffer 4x 8x")
- a = pbuf.pbuf(name="pbufx8", size=8)
+ a = factory.create(module_type="pbuf", size=8)
self.local_check(a)
globals.end_openram()
diff --git a/compiler/tests/04_pdriver_test.py b/compiler/tests/04_pdriver_test.py
index ba89961f..65cc3ee3 100755
--- a/compiler/tests/04_pdriver_test.py
+++ b/compiler/tests/04_pdriver_test.py
@@ -9,35 +9,32 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
+from sram_factory import factory
import debug
class pdriver_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
- global verify
- import verify
-
- import pdriver
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
debug.info(2, "Testing inverter/buffer 4x 8x")
# a tests the error message for specifying conflicting conditions
#a = pdriver.pdriver(fanout = 4,size_list = [1,2,4,8])
#self.local_check(a)
- b = pdriver.pdriver(name="pdriver1", size_list = [1,2,4,8])
+ b = factory.create(module_type="pdriver", size_list = [1,2,4,8])
self.local_check(b)
- c = pdriver.pdriver(name="pdriver2", fanout = 50)
+ c = factory.create(module_type="pdriver", fanout = 50)
self.local_check(c)
- d = pdriver.pdriver(name="pdriver3", fanout = 50, neg_polarity = True)
+ d = factory.create(module_type="pdriver", fanout = 50, neg_polarity = True)
self.local_check(d)
- e = pdriver.pdriver(name="pdriver4", fanout = 64)
+ e = factory.create(module_type="pdriver", fanout = 64)
self.local_check(e)
- f = pdriver.pdriver(name="pdriver5", fanout = 64, neg_polarity = True)
+ f = factory.create(module_type="pdriver", fanout = 64, neg_polarity = True)
self.local_check(f)
globals.end_openram()
diff --git a/compiler/tests/04_pinv_10x_test.py b/compiler/tests/04_pinv_10x_test.py
index 42c38ca1..d24b3ef4 100755
--- a/compiler/tests/04_pinv_10x_test.py
+++ b/compiler/tests/04_pinv_10x_test.py
@@ -9,17 +9,16 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
+from sram_factory import factory
import debug
class pinv_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
- import pinv
- import tech
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
- debug.info(2, "Checking 10x inverter")
- tx = pinv.pinv(name="pinvx10",size=8)
+ debug.info(2, "Checking 8x inverter")
+ tx = factory.create(module_type="pinv", size=8)
self.local_check(tx)
globals.end_openram()
diff --git a/compiler/tests/04_pinv_1x_beta_test.py b/compiler/tests/04_pinv_1x_beta_test.py
index 9ac66a65..0786ed80 100755
--- a/compiler/tests/04_pinv_1x_beta_test.py
+++ b/compiler/tests/04_pinv_1x_beta_test.py
@@ -9,17 +9,16 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
+from sram_factory import factory
import debug
class pinv_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
- import pinv
- import tech
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
debug.info(2, "Checking 1x beta=3 size inverter")
- tx = pinv.pinv(name="pinvx1b", size=1, beta=3)
+ tx = factory.create(module_type="pinv", size=1, beta=3)
self.local_check(tx)
globals.end_openram()
diff --git a/compiler/tests/04_pinv_1x_test.py b/compiler/tests/04_pinv_1x_test.py
index 850aa78e..a83fc6ee 100755
--- a/compiler/tests/04_pinv_1x_test.py
+++ b/compiler/tests/04_pinv_1x_test.py
@@ -8,17 +8,16 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
+from sram_factory import factory
import debug
class pinv_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
- import pinv
- import tech
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
debug.info(2, "Checking 1x size inverter")
- tx = pinv.pinv(name="pinvx1", size=1)
+ tx = factory.create(module_type="pinv", size=1)
self.local_check(tx)
globals.end_openram()
diff --git a/compiler/tests/04_pinv_2x_test.py b/compiler/tests/04_pinv_2x_test.py
index 33950da9..517c5b0a 100755
--- a/compiler/tests/04_pinv_2x_test.py
+++ b/compiler/tests/04_pinv_2x_test.py
@@ -9,17 +9,16 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
+from sram_factory import factory
import debug
class pinv_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
- import pinv
- import tech
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
debug.info(2, "Checking 2x size inverter")
- tx = pinv.pinv(name="pinvx2", size=2)
+ tx = factory.create(module_type="pinv", size=2)
self.local_check(tx)
globals.end_openram()
diff --git a/compiler/tests/04_pinvbuf_test.py b/compiler/tests/04_pinvbuf_test.py
index 53814628..2febfab3 100755
--- a/compiler/tests/04_pinvbuf_test.py
+++ b/compiler/tests/04_pinvbuf_test.py
@@ -9,16 +9,16 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
+from sram_factory import factory
import debug
class pinvbuf_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
- import pinvbuf
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
debug.info(2, "Testing inverter/buffer 4x 8x")
- a = pinvbuf.pinvbuf(name="pinvufx8", size=8)
+ a = factory.create(module_type="pinvbuf", size=8)
self.local_check(a)
globals.end_openram()
diff --git a/compiler/tests/04_pnand2_test.py b/compiler/tests/04_pnand2_test.py
index cb0b65c6..b8e25d52 100755
--- a/compiler/tests/04_pnand2_test.py
+++ b/compiler/tests/04_pnand2_test.py
@@ -11,17 +11,16 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
+from sram_factory import factory
import debug
class pnand2_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
- import pnand2
- import tech
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
debug.info(2, "Checking 2-input nand gate")
- tx = pnand2.pnand2(name="pnand2", size=1)
+ tx = factory.create(module_type="pnand2", size=1)
self.local_check(tx)
globals.end_openram()
diff --git a/compiler/tests/04_pnand3_test.py b/compiler/tests/04_pnand3_test.py
index f3bbdb73..9d0d8241 100755
--- a/compiler/tests/04_pnand3_test.py
+++ b/compiler/tests/04_pnand3_test.py
@@ -11,17 +11,16 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
+from sram_factory import factory
import debug
class pnand3_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
- import pnand3
- import tech
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
debug.info(2, "Checking 3-input nand gate")
- tx = pnand3.pnand3(name="pnand3", size=1)
+ tx = factory.create(module_type="pnand3", size=1)
self.local_check(tx)
globals.end_openram()
diff --git a/compiler/tests/04_pnor2_test.py b/compiler/tests/04_pnor2_test.py
index 32214ded..bb458b63 100755
--- a/compiler/tests/04_pnor2_test.py
+++ b/compiler/tests/04_pnor2_test.py
@@ -11,17 +11,16 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
+from sram_factory import factory
import debug
class pnor2_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
- import pnor2
- import tech
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
debug.info(2, "Checking 2-input nor gate")
- tx = pnor2.pnor2(name="pnor2", size=1)
+ tx = factory.create(module_type="pnor2", size=1)
self.local_check(tx)
globals.end_openram()
diff --git a/compiler/tests/04_precharge_test.py b/compiler/tests/04_precharge_test.py
index a73595eb..ccf05090 100755
--- a/compiler/tests/04_precharge_test.py
+++ b/compiler/tests/04_precharge_test.py
@@ -9,19 +9,17 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
-import debug
from sram_factory import factory
+import debug
class precharge_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
- import precharge
- import tech
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
# check precharge in single port
debug.info(2, "Checking precharge for handmade bitcell")
- tx = precharge.precharge(name="precharge_driver", size=1)
+ tx = factory.create(module_type="precharge", size=1)
self.local_check(tx)
# check precharge in multi-port
@@ -32,15 +30,17 @@ class precharge_test(openram_test):
factory.reset()
debug.info(2, "Checking precharge for pbitcell (innermost connections)")
- tx = precharge.precharge(name="precharge_driver", size=1, bitcell_bl="bl0", bitcell_br="br0")
+ tx = factory.create(module_type="precharge", size=1, bitcell_bl="bl0", bitcell_br="br0")
self.local_check(tx)
+ factory.reset()
debug.info(2, "Checking precharge for pbitcell (innermost connections)")
- tx = precharge.precharge(name="precharge_driver", size=1, bitcell_bl="bl1", bitcell_br="br1")
+ tx = factory.create(module_type="precharge", size=1, bitcell_bl="bl1", bitcell_br="br1")
self.local_check(tx)
+ factory.reset()
debug.info(2, "Checking precharge for pbitcell (outermost connections)")
- tx = precharge.precharge(name="precharge_driver", size=1, bitcell_bl="bl2", bitcell_br="br2")
+ tx = factory.create(module_type="precharge", size=1, bitcell_bl="bl2", bitcell_br="br2")
self.local_check(tx)
globals.end_openram()
diff --git a/compiler/tests/04_replica_pbitcell_test.py b/compiler/tests/04_replica_pbitcell_test.py
index 9a672419..7ce1b9cf 100755
--- a/compiler/tests/04_replica_pbitcell_test.py
+++ b/compiler/tests/04_replica_pbitcell_test.py
@@ -9,13 +9,13 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
-import debug
from sram_factory import factory
+import debug
class replica_pbitcell_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
import replica_pbitcell
OPTS.bitcell = "pbitcell"
diff --git a/compiler/tests/04_single_level_column_mux_test.py b/compiler/tests/04_single_level_column_mux_test.py
index 2a107b9a..58d79ca4 100755
--- a/compiler/tests/04_single_level_column_mux_test.py
+++ b/compiler/tests/04_single_level_column_mux_test.py
@@ -9,21 +9,19 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
-import debug
from sram_factory import factory
+import debug
#@unittest.skip("SKIPPING 04_driver_test")
class single_level_column_mux_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
- import single_level_column_mux
- import tech
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
# check single level column mux in single port
debug.info(2, "Checking column mux")
- tx = single_level_column_mux.single_level_column_mux(name="mux8", tx_size=8)
+ tx = factory.create(module_type="single_level_column_mux", tx_size=8)
self.local_check(tx)
# check single level column mux in multi-port
@@ -34,12 +32,12 @@ class single_level_column_mux_test(openram_test):
factory.reset()
debug.info(2, "Checking column mux for pbitcell (innermost connections)")
- tx = single_level_column_mux.single_level_column_mux(name="mux8_2", tx_size=8, bitcell_bl="bl0", bitcell_br="br0")
+ tx = factory.create(module_type="single_level_column_mux", tx_size=8, bitcell_bl="bl0", bitcell_br="br0")
self.local_check(tx)
factory.reset()
debug.info(2, "Checking column mux for pbitcell (outermost connections)")
- tx = single_level_column_mux.single_level_column_mux(name="mux8_3", tx_size=8, bitcell_bl="bl2", bitcell_br="br2")
+ tx = factory.create(module_type="single_level_column_mux",tx_size=8, bitcell_bl="bl2", bitcell_br="br2")
self.local_check(tx)
globals.end_openram()
diff --git a/compiler/tests/05_bitcell_1rw_1r_array_test.py b/compiler/tests/05_bitcell_1rw_1r_array_test.py
index 1223085e..9ea0cc32 100755
--- a/compiler/tests/05_bitcell_1rw_1r_array_test.py
+++ b/compiler/tests/05_bitcell_1rw_1r_array_test.py
@@ -9,6 +9,7 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
+from sram_factory import factory
import debug
#@unittest.skip("SKIPPING 05_bitcell_1rw_1r_array_test")
@@ -16,15 +17,14 @@ import debug
class bitcell_1rw_1r_array_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
- import bitcell_array
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
debug.info(2, "Testing 4x4 array for cell_1rw_1r")
OPTS.bitcell = "bitcell_1rw_1r"
OPTS.num_rw_ports = 1
OPTS.num_r_ports = 1
OPTS.num_w_ports = 0
- a = bitcell_array.bitcell_array(name="bitcell_1rw_1r_array", cols=4, rows=4)
+ a = factory.create(module_type="bitcell_array", cols=4, rows=4)
self.local_check(a)
globals.end_openram()
diff --git a/compiler/tests/05_bitcell_array_test.py b/compiler/tests/05_bitcell_array_test.py
index 93668e05..82eaf256 100755
--- a/compiler/tests/05_bitcell_array_test.py
+++ b/compiler/tests/05_bitcell_array_test.py
@@ -9,6 +9,7 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
+from sram_factory import factory
import debug
#@unittest.skip("SKIPPING 05_array_test")
@@ -16,11 +17,10 @@ import debug
class array_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
- import bitcell_array
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
debug.info(2, "Testing 4x4 array for 6t_cell")
- a = bitcell_array.bitcell_array(name="bitcell_array", cols=4, rows=4)
+ a = factory.create(module_type="bitcell_array", cols=4, rows=4)
self.local_check(a)
globals.end_openram()
diff --git a/compiler/tests/05_pbitcell_array_test.py b/compiler/tests/05_pbitcell_array_test.py
index 4da5bec9..15040649 100755
--- a/compiler/tests/05_pbitcell_array_test.py
+++ b/compiler/tests/05_pbitcell_array_test.py
@@ -9,21 +9,21 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
+from sram_factory import factory
import debug
#@unittest.skip("SKIPPING 05_pbitcell_array_test")
class pbitcell_array_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
- import bitcell_array
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
debug.info(2, "Testing 4x4 array for multiport bitcell, with read ports at the edge of the bit cell")
OPTS.bitcell = "pbitcell"
OPTS.num_rw_ports = 2
OPTS.num_r_ports = 2
OPTS.num_w_ports = 2
- a = bitcell_array.bitcell_array(name="pbitcell_array_Rport_edge", cols=4, rows=4)
+ a = factory.create(module_type="bitcell_array", cols=4, rows=4)
self.local_check(a)
debug.info(2, "Testing 4x4 array for multiport bitcell, with write ports at the edge of the bit cell")
@@ -31,7 +31,7 @@ class pbitcell_array_test(openram_test):
OPTS.num_rw_ports = 2
OPTS.num_r_ports = 0
OPTS.num_w_ports = 2
- a = bitcell_array.bitcell_array(name="pbitcell_array_Wport_edge", cols=4, rows=4)
+ a = factory.create(module_type="bitcell_array", cols=4, rows=4)
self.local_check(a)
debug.info(2, "Testing 4x4 array for multiport bitcell, with read/write ports at the edge of the bit cell")
@@ -39,7 +39,7 @@ class pbitcell_array_test(openram_test):
OPTS.num_rw_ports = 2
OPTS.num_r_ports = 0
OPTS.num_w_ports = 0
- a = bitcell_array.bitcell_array(name="pbitcell_array_RWport_edge", cols=4, rows=4)
+ a = factory.create(module_type="bitcell_array", cols=4, rows=4)
self.local_check(a)
globals.end_openram()
diff --git a/compiler/tests/06_hierarchical_decoder_test.py b/compiler/tests/06_hierarchical_decoder_test.py
index 2400d3c2..f2277335 100755
--- a/compiler/tests/06_hierarchical_decoder_test.py
+++ b/compiler/tests/06_hierarchical_decoder_test.py
@@ -9,16 +9,13 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
-import debug
from sram_factory import factory
+import debug
class hierarchical_decoder_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
- import hierarchical_decoder
- import tech
-
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
# Doesn't require hierarchical decoder
# debug.info(1, "Testing 4 row sample for hierarchical_decoder")
# a = hierarchical_decoder.hierarchical_decoder(name="hd1, rows=4)
@@ -31,19 +28,19 @@ class hierarchical_decoder_test(openram_test):
# check hierarchical decoder for single port
debug.info(1, "Testing 16 row sample for hierarchical_decoder")
- a = hierarchical_decoder.hierarchical_decoder(name="hd3", rows=16)
+ a = factory.create(module_type="hierarchical_decoder", rows=16)
self.local_check(a)
debug.info(1, "Testing 32 row sample for hierarchical_decoder")
- a = hierarchical_decoder.hierarchical_decoder(name="hd4", rows=32)
+ a = factory.create(module_type="hierarchical_decoder", rows=32)
self.local_check(a)
debug.info(1, "Testing 128 row sample for hierarchical_decoder")
- a = hierarchical_decoder.hierarchical_decoder(name="hd5", rows=128)
+ a = factory.create(module_type="hierarchical_decoder", rows=128)
self.local_check(a)
debug.info(1, "Testing 512 row sample for hierarchical_decoder")
- a = hierarchical_decoder.hierarchical_decoder(name="hd6", rows=512)
+ a = factory.create(module_type="hierarchical_decoder", rows=512)
self.local_check(a)
# check hierarchical decoder for multi-port
@@ -54,19 +51,19 @@ class hierarchical_decoder_test(openram_test):
factory.reset()
debug.info(1, "Testing 16 row sample for hierarchical_decoder (multi-port case)")
- a = hierarchical_decoder.hierarchical_decoder(name="hd7", rows=16)
+ a = factory.create(module_type="hierarchical_decoder", rows=16)
self.local_check(a)
debug.info(1, "Testing 32 row sample for hierarchical_decoder (multi-port case)")
- a = hierarchical_decoder.hierarchical_decoder(name="hd8", rows=32)
+ a = factory.create(module_type="hierarchical_decoder", rows=32)
self.local_check(a)
debug.info(1, "Testing 128 row sample for hierarchical_decoder (multi-port case)")
- a = hierarchical_decoder.hierarchical_decoder(name="hd9", rows=128)
+ a = factory.create(module_type="hierarchical_decoder", rows=128)
self.local_check(a)
debug.info(1, "Testing 512 row sample for hierarchical_decoder (multi-port case)")
- a = hierarchical_decoder.hierarchical_decoder(name="hd10", rows=512)
+ a = factory.create(module_type="hierarchical_decoder", rows=512)
self.local_check(a)
globals.end_openram()
diff --git a/compiler/tests/06_hierarchical_predecode2x4_test.py b/compiler/tests/06_hierarchical_predecode2x4_test.py
index 6fbba350..dce5069f 100755
--- a/compiler/tests/06_hierarchical_predecode2x4_test.py
+++ b/compiler/tests/06_hierarchical_predecode2x4_test.py
@@ -9,18 +9,17 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
+from sram_factory import factory
import debug
class hierarchical_predecode2x4_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
- import hierarchical_predecode2x4 as pre
- import tech
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
# checking hierarchical precode 2x4 for single port
debug.info(1, "Testing sample for hierarchy_predecode2x4")
- a = pre.hierarchical_predecode2x4(name="pre1")
+ a = factory.create(module_type="hierarchical_predecode2x4")
self.local_check(a)
# checking hierarchical precode 2x4 for multi-port
@@ -30,7 +29,7 @@ class hierarchical_predecode2x4_test(openram_test):
OPTS.num_r_ports = 0
debug.info(1, "Testing sample for hierarchy_predecode2x4 (multi-port case)")
- a = pre.hierarchical_predecode2x4(name="pre2")
+ a = factory.create(module_type="hierarchical_predecode2x4")
self.local_check(a)
globals.end_openram()
diff --git a/compiler/tests/06_hierarchical_predecode3x8_test.py b/compiler/tests/06_hierarchical_predecode3x8_test.py
index b704a50d..1710b459 100755
--- a/compiler/tests/06_hierarchical_predecode3x8_test.py
+++ b/compiler/tests/06_hierarchical_predecode3x8_test.py
@@ -9,18 +9,17 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
+from sram_factory import factory
import debug
class hierarchical_predecode3x8_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
- import hierarchical_predecode3x8 as pre
- import tech
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
# checking hierarchical precode 3x8 for single port
debug.info(1, "Testing sample for hierarchy_predecode3x8")
- a = pre.hierarchical_predecode3x8(name="pre1")
+ a = factory.create(module_type="hierarchical_predecode3x8")
self.local_check(a)
# checking hierarchical precode 3x8 for multi-port
@@ -30,7 +29,7 @@ class hierarchical_predecode3x8_test(openram_test):
OPTS.num_r_ports = 0
debug.info(1, "Testing sample for hierarchy_predecode3x8 (multi-port case)")
- a = pre.hierarchical_predecode3x8(name="pre2")
+ a = factory.create(module_type="hierarchical_predecode3x8")
self.local_check(a)
globals.end_openram()
diff --git a/compiler/tests/07_single_level_column_mux_array_test.py b/compiler/tests/07_single_level_column_mux_array_test.py
index 8cc16f56..1ff0d65b 100755
--- a/compiler/tests/07_single_level_column_mux_array_test.py
+++ b/compiler/tests/07_single_level_column_mux_array_test.py
@@ -8,26 +8,26 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
-import debug
from sram_factory import factory
+import debug
class single_level_column_mux_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
import single_level_column_mux_array
# check single level column mux array in single port
debug.info(1, "Testing sample for 2-way column_mux_array")
- a = single_level_column_mux_array.single_level_column_mux_array(name="mux1", columns=16, word_size=8)
+ a = factory.create(module_type="single_level_column_mux_array", columns=16, word_size=8)
self.local_check(a)
debug.info(1, "Testing sample for 4-way column_mux_array")
- a = single_level_column_mux_array.single_level_column_mux_array(name="mux2", columns=16, word_size=4)
+ a = factory.create(module_type="single_level_column_mux_array", columns=16, word_size=4)
self.local_check(a)
debug.info(1, "Testing sample for 8-way column_mux_array")
- a = single_level_column_mux_array.single_level_column_mux_array(name="mux3", columns=32, word_size=4)
+ a = factory.create(module_type="single_level_column_mux_array", columns=32, word_size=4)
self.local_check(a)
# check single level column mux array in multi-port
@@ -38,19 +38,19 @@ class single_level_column_mux_test(openram_test):
factory.reset()
debug.info(1, "Testing sample for 2-way column_mux_array in multi-port")
- a = single_level_column_mux_array.single_level_column_mux_array(name="mux4", columns=16, word_size=8, bitcell_bl="bl0", bitcell_br="br0")
+ a = factory.create(module_type="single_level_column_mux_array", columns=16, word_size=8, bitcell_bl="bl0", bitcell_br="br0")
self.local_check(a)
debug.info(1, "Testing sample for 4-way column_mux_array in multi-port")
- a = single_level_column_mux_array.single_level_column_mux_array(name="mux5", columns=16, word_size=4, bitcell_bl="bl0", bitcell_br="br0")
+ a = factory.create(module_type="single_level_column_mux_array", columns=16, word_size=4, bitcell_bl="bl0", bitcell_br="br0")
self.local_check(a)
debug.info(1, "Testing sample for 8-way column_mux_array in multi-port (innermost connections)")
- a = single_level_column_mux_array.single_level_column_mux_array(name="mux6", columns=32, word_size=4, bitcell_bl="bl0", bitcell_br="br0")
+ a = factory.create(module_type="single_level_column_mux_array", columns=32, word_size=4, bitcell_bl="bl0", bitcell_br="br0")
self.local_check(a)
debug.info(1, "Testing sample for 8-way column_mux_array in multi-port (outermost connections)")
- a = single_level_column_mux_array.single_level_column_mux_array(name="mux7", columns=32, word_size=4, bitcell_bl="bl2", bitcell_br="br2")
+ a = factory.create(module_type="single_level_column_mux_array", columns=32, word_size=4, bitcell_bl="bl2", bitcell_br="br2")
self.local_check(a)
globals.end_openram()
diff --git a/compiler/tests/08_precharge_array_test.py b/compiler/tests/08_precharge_array_test.py
index c31f133a..eb6d75dd 100755
--- a/compiler/tests/08_precharge_array_test.py
+++ b/compiler/tests/08_precharge_array_test.py
@@ -9,18 +9,17 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
-import debug
from sram_factory import factory
+import debug
class precharge_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
- import precharge_array
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
# check precharge array in single port
debug.info(2, "Checking 3 column precharge")
- pc = precharge_array.precharge_array(name="pre1", columns=3)
+ pc = factory.create(module_type="precharge_array", columns=3)
self.local_check(pc)
# check precharge array in multi-port
@@ -31,7 +30,7 @@ class precharge_test(openram_test):
factory.reset()
debug.info(2, "Checking 3 column precharge array for 1RW/1R bitcell")
- pc = precharge_array.precharge_array(name="pre2", columns=3, bitcell_bl="bl0", bitcell_br="br0")
+ pc = factory.create(module_type="precharge_array", columns=3, bitcell_bl="bl0", bitcell_br="br0")
self.local_check(pc)
# debug.info(2, "Checking 3 column precharge array for pbitcell (innermost connections)")
diff --git a/compiler/tests/08_wordline_driver_test.py b/compiler/tests/08_wordline_driver_test.py
index bc69c776..12edf32e 100755
--- a/compiler/tests/08_wordline_driver_test.py
+++ b/compiler/tests/08_wordline_driver_test.py
@@ -9,20 +9,19 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
-import debug
from sram_factory import factory
+import debug
#@unittest.skip("SKIPPING 04_driver_test")
class wordline_driver_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
- import wordline_driver
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
# check wordline driver for single port
debug.info(2, "Checking driver")
- tx = wordline_driver.wordline_driver(name="wld1", rows=8, cols=32)
+ tx = factory.create(module_type="wordline_driver", rows=8, cols=32)
self.local_check(tx)
# check wordline driver for multi-port
@@ -33,7 +32,7 @@ class wordline_driver_test(openram_test):
factory.reset()
debug.info(2, "Checking driver (multi-port case)")
- tx = wordline_driver.wordline_driver(name="wld2", rows=8, cols=64)
+ tx = factory.create(module_type="wordline_driver", rows=8, cols=64)
self.local_check(tx)
globals.end_openram()
diff --git a/compiler/tests/09_sense_amp_array_test.py b/compiler/tests/09_sense_amp_array_test.py
index c144b12b..903e5512 100755
--- a/compiler/tests/09_sense_amp_array_test.py
+++ b/compiler/tests/09_sense_amp_array_test.py
@@ -9,22 +9,21 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
-import debug
from sram_factory import factory
+import debug
class sense_amp_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
- import sense_amp_array
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
# check sense amp array for single port
debug.info(2, "Testing sense_amp_array for word_size=4, words_per_row=2")
- a = sense_amp_array.sense_amp_array(name="sa1", word_size=4, words_per_row=2)
+ a = factory.create(module_type="sense_amp_array", word_size=4, words_per_row=2)
self.local_check(a)
debug.info(2, "Testing sense_amp_array for word_size=4, words_per_row=4")
- a = sense_amp_array.sense_amp_array(name="sa2", word_size=4, words_per_row=4)
+ a = factory.create(module_type="sense_amp_array", word_size=4, words_per_row=4)
self.local_check(a)
# check sense amp array for multi-port
@@ -35,11 +34,11 @@ class sense_amp_test(openram_test):
factory.reset()
debug.info(2, "Testing sense_amp_array for word_size=4, words_per_row=2 (multi-port case)")
- a = sense_amp_array.sense_amp_array(name="sa3", word_size=4, words_per_row=2)
+ a = factory.create(module_type="sense_amp_array", word_size=4, words_per_row=2)
self.local_check(a)
debug.info(2, "Testing sense_amp_array for word_size=4, words_per_row=4 (multi-port case)")
- a = sense_amp_array.sense_amp_array(name="sa4", word_size=4, words_per_row=4)
+ a = factory.create(module_type="sense_amp_array", word_size=4, words_per_row=4)
self.local_check(a)
globals.end_openram()
diff --git a/compiler/tests/10_write_driver_array_test.py b/compiler/tests/10_write_driver_array_test.py
index 98507b60..f3ed3ee6 100755
--- a/compiler/tests/10_write_driver_array_test.py
+++ b/compiler/tests/10_write_driver_array_test.py
@@ -9,22 +9,21 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
-import debug
from sram_factory import factory
+import debug
class write_driver_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
- import write_driver_array
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
# check write driver array for single port
debug.info(2, "Testing write_driver_array for columns=8, word_size=8")
- a = write_driver_array.write_driver_array(name="wd1", columns=8, word_size=8)
+ a = factory.create(module_type="write_driver_array", columns=8, word_size=8)
self.local_check(a)
debug.info(2, "Testing write_driver_array for columns=16, word_size=8")
- a = write_driver_array.write_driver_array(name="wd2", columns=16, word_size=8)
+ a = factory.create(module_type="write_driver_array", columns=16, word_size=8)
self.local_check(a)
# check write driver array for multi-port
@@ -35,11 +34,11 @@ class write_driver_test(openram_test):
factory.reset()
debug.info(2, "Testing write_driver_array for columns=8, word_size=8 (multi-port case)")
- a = write_driver_array.write_driver_array(name="wd3", columns=8, word_size=8)
+ a = factory.create(module_type="write_driver_array", columns=8, word_size=8)
self.local_check(a)
debug.info(2, "Testing write_driver_array for columns=16, word_size=8 (multi-port case)")
- a = write_driver_array.write_driver_array(name="wd4", columns=16, word_size=8)
+ a = factory.create(module_type="write_driver_array", columns=16, word_size=8)
self.local_check(a)
globals.end_openram()
diff --git a/compiler/tests/11_dff_array_test.py b/compiler/tests/11_dff_array_test.py
index eed41dda..5e3ce761 100755
--- a/compiler/tests/11_dff_array_test.py
+++ b/compiler/tests/11_dff_array_test.py
@@ -9,24 +9,24 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
+from sram_factory import factory
import debug
class dff_array_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
- import dff_array
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
debug.info(2, "Testing dff_array for 3x3")
- a = dff_array.dff_array(rows=3, columns=3)
+ a = factory.create(module_type="dff_array", rows=3, columns=3)
self.local_check(a)
debug.info(2, "Testing dff_array for 1x3")
- a = dff_array.dff_array(rows=1, columns=3)
+ a = factory.create(module_type="dff_array", rows=1, columns=3)
self.local_check(a)
debug.info(2, "Testing dff_array for 3x1")
- a = dff_array.dff_array(rows=3, columns=1)
+ a = factory.create(module_type="dff_array", rows=3, columns=1)
self.local_check(a)
globals.end_openram()
diff --git a/compiler/tests/11_dff_buf_array_test.py b/compiler/tests/11_dff_buf_array_test.py
index d2932cac..86d394e6 100755
--- a/compiler/tests/11_dff_buf_array_test.py
+++ b/compiler/tests/11_dff_buf_array_test.py
@@ -9,24 +9,24 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
+from sram_factory import factory
import debug
class dff_buf_array_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
- import dff_buf_array
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
debug.info(2, "Testing dff_buf_array for 3x3")
- a = dff_buf_array.dff_buf_array(rows=3, columns=3)
+ a = factory.create(module_type="dff_buf_array", rows=3, columns=3)
self.local_check(a)
debug.info(2, "Testing dff_buf_array for 1x3")
- a = dff_buf_array.dff_buf_array(rows=1, columns=3)
+ a = factory.create(module_type="dff_buf_array", rows=1, columns=3)
self.local_check(a)
debug.info(2, "Testing dff_buf_array for 3x1")
- a = dff_buf_array.dff_buf_array(rows=3, columns=1)
+ a = factory.create(module_type="dff_buf_array", rows=3, columns=1)
self.local_check(a)
globals.end_openram()
diff --git a/compiler/tests/11_dff_buf_test.py b/compiler/tests/11_dff_buf_test.py
index c9c25f16..30b56957 100755
--- a/compiler/tests/11_dff_buf_test.py
+++ b/compiler/tests/11_dff_buf_test.py
@@ -9,16 +9,16 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
+from sram_factory import factory
import debug
class dff_buf_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
- import dff_buf
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
debug.info(2, "Testing dff_buf 4x 8x")
- a = dff_buf.dff_buf(4, 8)
+ a = factory.create(module_type="dff_buf", inv1_size=4, inv2_size=8)
self.local_check(a)
globals.end_openram()
diff --git a/compiler/tests/12_tri_gate_array_test.py b/compiler/tests/12_tri_gate_array_test.py
index cb789155..04ef1369 100755
--- a/compiler/tests/12_tri_gate_array_test.py
+++ b/compiler/tests/12_tri_gate_array_test.py
@@ -9,20 +9,20 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
+from sram_factory import factory
import debug
class tri_gate_array_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
- import tri_gate_array
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
debug.info(1, "Testing tri_gate_array for columns=8, word_size=8")
- a = tri_gate_array.tri_gate_array(columns=8, word_size=8)
+ a = factory.create(module_type="tri_gate_array", columns=8, word_size=8)
self.local_check(a)
debug.info(1, "Testing tri_gate_array for columns=16, word_size=8")
- a = tri_gate_array.tri_gate_array(columns=16, word_size=8)
+ a = factory.create(module_type="tri_gate_array", columns=16, word_size=8)
self.local_check(a)
globals.end_openram()
diff --git a/compiler/tests/13_delay_chain_test.py b/compiler/tests/13_delay_chain_test.py
index bfe2b3ff..1dbfbc67 100755
--- a/compiler/tests/13_delay_chain_test.py
+++ b/compiler/tests/13_delay_chain_test.py
@@ -9,16 +9,16 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
+from sram_factory import factory
import debug
class delay_chain_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
- import delay_chain
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
debug.info(2, "Testing delay_chain")
- a = delay_chain.delay_chain(name="dc", fanout_list=[4, 4, 4, 4])
+ a = factory.create(module_type="delay_chain", fanout_list=[4, 4, 4, 4])
self.local_check(a)
globals.end_openram()
diff --git a/compiler/tests/14_replica_bitline_multiport_test.py b/compiler/tests/14_replica_bitline_multiport_test.py
index f379e0d2..3a83d397 100755
--- a/compiler/tests/14_replica_bitline_multiport_test.py
+++ b/compiler/tests/14_replica_bitline_multiport_test.py
@@ -9,14 +9,13 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
-import debug
from sram_factory import factory
+import debug
class replica_bitline_multiport_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
- import replica_bitline
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
stages=4
fanout=4
@@ -30,7 +29,7 @@ class replica_bitline_multiport_test(openram_test):
factory.reset()
debug.info(2, "Testing 1rw 1r RBL with {0} FO4 stages, {1} rows".format(stages,rows))
- a = replica_bitline.replica_bitline(name="rbl1", delay_fanout_list=stages*[fanout], bitcell_loads=rows)
+ a = factory.create(module_type="replica_bitline", delay_fanout_list=stages*[fanout], bitcell_loads=rows)
self.local_check(a)
# check replica bitline in pbitcell multi-port
@@ -42,7 +41,7 @@ class replica_bitline_multiport_test(openram_test):
factory.reset()
debug.info(2, "Testing RBL pbitcell 1rw with {0} FO4 stages, {1} rows".format(stages,rows))
- a = replica_bitline.replica_bitline(name="rbl2", delay_fanout_list=stages*[fanout], bitcell_loads=rows)
+ a = factory.create(module_type="replica_bitline", delay_fanout_list=stages*[fanout], bitcell_loads=rows)
self.local_check(a)
OPTS.num_rw_ports = 1
@@ -51,7 +50,7 @@ class replica_bitline_multiport_test(openram_test):
factory.reset()
debug.info(2, "Testing RBL pbitcell 1rw 1w 1r with {0} FO4 stages, {1} rows".format(stages,rows))
- a = replica_bitline.replica_bitline(name="rbl3", delay_fanout_list=stages*[fanout], bitcell_loads=rows)
+ a = factory.create(module_type="replica_bitline", delay_fanout_list=stages*[fanout], bitcell_loads=rows)
self.local_check(a)
globals.end_openram()
diff --git a/compiler/tests/14_replica_bitline_test.py b/compiler/tests/14_replica_bitline_test.py
index ca213d5c..8c1c306c 100755
--- a/compiler/tests/14_replica_bitline_test.py
+++ b/compiler/tests/14_replica_bitline_test.py
@@ -9,30 +9,28 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
+from sram_factory import factory
import debug
class replica_bitline_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
- import replica_bitline
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
# check replica bitline in single port
stages=4
fanout=4
rows=13
debug.info(2, "Testing RBL with {0} FO4 stages, {1} rows".format(stages,rows))
- a = replica_bitline.replica_bitline(name="rbl1", delay_fanout_list=stages*[fanout], bitcell_loads=rows)
+ a = factory.create(module_type="replica_bitline", delay_fanout_list=stages*[fanout], bitcell_loads=rows)
self.local_check(a)
- #debug.error("Exiting...", 1)
stages=8
rows=100
debug.info(2, "Testing RBL with {0} FO4 stages, {1} rows".format(stages,rows))
- a = replica_bitline.replica_bitline(name="rbl2", delay_fanout_list=stages*[fanout], bitcell_loads=rows)
+ a = factory.create(module_type="replica_bitline", delay_fanout_list=stages*[fanout], bitcell_loads=rows)
self.local_check(a)
-
globals.end_openram()
# run the test from the command line
diff --git a/compiler/tests/16_control_logic_test.py b/compiler/tests/16_control_logic_test.py
index e0545af4..2b9a8be2 100755
--- a/compiler/tests/16_control_logic_test.py
+++ b/compiler/tests/16_control_logic_test.py
@@ -9,18 +9,19 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
+from sram_factory import factory
import debug
class control_logic_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
import control_logic
import tech
# check control logic for single port
debug.info(1, "Testing sample for control_logic")
- a = control_logic.control_logic(num_rows=128, words_per_row=1, word_size=32)
+ a = factory.create(module_type="control_logic", num_rows=128, words_per_row=1, word_size=32)
self.local_check(a)
# check control logic for multi-port
@@ -31,7 +32,7 @@ class control_logic_test(openram_test):
OPTS.num_r_ports = 0
debug.info(1, "Testing sample for control_logic for multiport")
- a = control_logic.control_logic(num_rows=128, words_per_row=1, word_size=8)
+ a = factory.create(module_type="control_logic", num_rows=128, words_per_row=1, word_size=8)
self.local_check(a)
# Check port specific control logic
@@ -40,19 +41,19 @@ class control_logic_test(openram_test):
OPTS.num_r_ports = 0
debug.info(1, "Testing sample for control_logic for multiport, only write control logic")
- a = control_logic.control_logic(num_rows=128, words_per_row=1, word_size=8, port_type="rw")
+ a = factory.create(module_type="control_logic", num_rows=128, words_per_row=1, word_size=8, port_type="rw")
self.local_check(a)
OPTS.num_rw_ports = 0
OPTS.num_w_ports = 1
debug.info(1, "Testing sample for control_logic for multiport, only write control logic")
- a = control_logic.control_logic(num_rows=128, words_per_row=1, word_size=8, port_type="w")
+ a = factory.create(module_type="control_logic", num_rows=128, words_per_row=1, word_size=8, port_type="w")
self.local_check(a)
OPTS.num_w_ports = 0
OPTS.num_r_ports = 1
debug.info(1, "Testing sample for control_logic for multiport, only read control logic")
- a = control_logic.control_logic(num_rows=128, words_per_row=1, word_size=8, port_type="r")
+ a = factory.create(module_type="control_logic", num_rows=128, words_per_row=1, word_size=8, port_type="r")
self.local_check(a)
globals.end_openram()
diff --git a/compiler/tests/19_bank_select_test.py b/compiler/tests/19_bank_select_test.py
index 1245926b..9dcb6039 100755
--- a/compiler/tests/19_bank_select_test.py
+++ b/compiler/tests/19_bank_select_test.py
@@ -9,21 +9,21 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
+from sram_factory import factory
import debug
class bank_select_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
- import bank_select
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
debug.info(1, "No column mux, rw control logic")
- a = bank_select.bank_select(port="rw")
+ a = factory.create(module_type="bank_select", port="rw")
self.local_check(a)
OPTS.bitcell = "pbitcell"
debug.info(1, "No column mux, rw control logic")
- a = bank_select.bank_select(port="rw")
+ a = factory.create(module_type="bank_select", port="rw")
self.local_check(a)
OPTS.num_rw_ports = 0
@@ -31,11 +31,11 @@ class bank_select_test(openram_test):
OPTS.num_r_ports = 1
debug.info(1, "No column mux, w control logic")
- a = bank_select.bank_select(port="w")
+ a = factory.create(module_type="bank_select", port="w")
self.local_check(a)
debug.info(1, "No column mux, r control logic")
- a = bank_select.bank_select(port="r")
+ a = factory.create(module_type="bank_select", port="r")
self.local_check(a)
globals.end_openram()
diff --git a/compiler/tests/19_multi_bank_test.py b/compiler/tests/19_multi_bank_test.py
index 0eff040d..57a089aa 100755
--- a/compiler/tests/19_multi_bank_test.py
+++ b/compiler/tests/19_multi_bank_test.py
@@ -9,14 +9,14 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
+from sram_factory import factory
import debug
@unittest.skip("SKIPPING 19_multi_bank_test")
class multi_bank_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
- from bank import bank
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
from sram_config import sram_config
c = sram_config(word_size=4,
@@ -24,31 +24,35 @@ class multi_bank_test(openram_test):
c.num_banks=2
c.words_per_row=1
+ factory.reset()
c.recompute_sizes()
debug.info(1, "No column mux")
- a = bank(c, name="bank1_multi")
+ a = factory.create("bank", sram_config=c)
self.local_check(a)
c.num_words=32
c.words_per_row=2
+ factory.reset()
c.recompute_sizes()
debug.info(1, "Two way column mux")
- a = bank(c, name="bank2_multi")
+ a = factory.create("bank", sram_config=c)
self.local_check(a)
c.num_words=64
c.words_per_row=4
+ factory.reset()
c.recompute_sizes()
debug.info(1, "Four way column mux")
- a = bank(c, name="bank3_multi")
+ a = factory.create("bank", sram_config=c)
self.local_check(a)
c.word_size=2
c.num_words=128
c.words_per_row=8
+ factory.reset()
c.recompute_sizes()
debug.info(1, "Eight way column mux")
- a = bank(c, name="bank4_multi")
+ a = factory.create("bank", sram_config=c)
self.local_check(a)
globals.end_openram()
diff --git a/compiler/tests/19_pmulti_bank_test.py b/compiler/tests/19_pmulti_bank_test.py
index 32d3917a..f201c778 100755
--- a/compiler/tests/19_pmulti_bank_test.py
+++ b/compiler/tests/19_pmulti_bank_test.py
@@ -9,14 +9,14 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
+from sram_factory import factory
import debug
@unittest.skip("SKIPPING 19_pmulti_bank_test")
class multi_bank_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
- from bank import bank
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
from sram_config import sram_config
OPTS.bitcell = "pbitcell"
@@ -29,27 +29,35 @@ class multi_bank_test(openram_test):
c.num_banks=2
c.words_per_row=1
+ factory.reset()
+ c.recompute_sizes()
debug.info(1, "No column mux")
- a = bank(c, name="bank1_multi")
+ a = factory.create("bank", sram_config=c)
self.local_check(a)
c.num_words=32
c.words_per_row=2
+ factory.reset()
+ c.recompute_sizes()
debug.info(1, "Two way column mux")
- a = bank(c, name="bank2_multi")
+ a = factory.create("bank", sram_config=c)
self.local_check(a)
c.num_words=64
c.words_per_row=4
+ factory.reset()
+ c.recompute_sizes()
debug.info(1, "Four way column mux")
- a = bank(c, name="bank3_multi")
+ a = factory.create("bank", sram_config=c)
self.local_check(a)
c.word_size=2
c.num_words=128
c.words_per_row=8
+ factory.reset()
+ c.recompute_sizes()
debug.info(1, "Eight way column mux")
- a = bank(c, name="bank4_multi")
+ a = factory.create("bank", sram_config=c)
self.local_check(a)
globals.end_openram()
diff --git a/compiler/tests/19_psingle_bank_test.py b/compiler/tests/19_psingle_bank_test.py
index 8e462318..c36df8ef 100755
--- a/compiler/tests/19_psingle_bank_test.py
+++ b/compiler/tests/19_psingle_bank_test.py
@@ -9,14 +9,14 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
-import debug
from sram_factory import factory
+import debug
#@unittest.skip("SKIPPING 19_psingle_bank_test")
class psingle_bank_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
from bank import bank
from sram_config import sram_config
OPTS.bitcell = "pbitcell"
diff --git a/compiler/tests/19_single_bank_1rw_1r_test.py b/compiler/tests/19_single_bank_1rw_1r_test.py
index 93bfd35a..96fc2512 100755
--- a/compiler/tests/19_single_bank_1rw_1r_test.py
+++ b/compiler/tests/19_single_bank_1rw_1r_test.py
@@ -9,13 +9,13 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
+from sram_factory import factory
import debug
class single_bank_1rw_1r_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
- from bank import bank
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
OPTS.bitcell = "bitcell_1rw_1r"
OPTS.num_rw_ports = 1
@@ -27,27 +27,35 @@ class single_bank_1rw_1r_test(openram_test):
num_words=16)
c.words_per_row=1
+ factory.reset()
+ c.recompute_sizes()
debug.info(1, "No column mux")
- a = bank(c, name="bank1_single")
+ a = factory.create(module_type="bank", sram_config=c)
self.local_check(a)
c.num_words=32
c.words_per_row=2
+ factory.reset()
+ c.recompute_sizes()
debug.info(1, "Two way column mux")
- a = bank(c, name="bank2_single")
+ a = factory.create(module_type="bank", sram_config=c)
self.local_check(a)
c.num_words=64
c.words_per_row=4
+ factory.reset()
+ c.recompute_sizes()
debug.info(1, "Four way column mux")
- a = bank(c, name="bank3_single")
+ a = factory.create(module_type="bank", sram_config=c)
self.local_check(a)
c.word_size=2
c.num_words=128
c.words_per_row=8
+ factory.reset()
+ c.recompute_sizes()
debug.info(1, "Eight way column mux")
- a = bank(c, name="bank4_single")
+ a = factory.create(module_type="bank", sram_config=c)
self.local_check(a)
globals.end_openram()
diff --git a/compiler/tests/19_single_bank_test.py b/compiler/tests/19_single_bank_test.py
index e7179d96..368a7cad 100755
--- a/compiler/tests/19_single_bank_test.py
+++ b/compiler/tests/19_single_bank_test.py
@@ -9,40 +9,48 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
+from sram_factory import factory
import debug
class single_bank_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
- from bank import bank
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
from sram_config import sram_config
c = sram_config(word_size=4,
num_words=16)
c.words_per_row=1
+ factory.reset()
+ c.recompute_sizes()
debug.info(1, "No column mux")
- a = bank(c, name="bank1_single")
+ a = factory.create("bank", sram_config=c)
self.local_check(a)
c.num_words=32
c.words_per_row=2
+ factory.reset()
+ c.recompute_sizes()
debug.info(1, "Two way column mux")
- a = bank(c, name="bank2_single")
+ a = factory.create("bank", sram_config=c)
self.local_check(a)
c.num_words=64
c.words_per_row=4
+ factory.reset()
+ c.recompute_sizes()
debug.info(1, "Four way column mux")
- a = bank(c, name="bank3_single")
+ a = factory.create("bank", sram_config=c)
self.local_check(a)
c.word_size=2
c.num_words=128
c.words_per_row=8
+ factory.reset()
+ c.recompute_sizes()
debug.info(1, "Eight way column mux")
- a = bank(c, name="bank4_single")
+ a = factory.create("bank", sram_config=c)
self.local_check(a)
globals.end_openram()
diff --git a/compiler/tests/20_psram_1bank_2mux_1rw_1w_test.py b/compiler/tests/20_psram_1bank_2mux_1rw_1w_test.py
index f2f6386c..22b878b9 100755
--- a/compiler/tests/20_psram_1bank_2mux_1rw_1w_test.py
+++ b/compiler/tests/20_psram_1bank_2mux_1rw_1w_test.py
@@ -9,14 +9,14 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
+from sram_factory import factory
import debug
#@unittest.skip("SKIPPING 20_psram_1bank_test, multiport layout not complete")
class psram_1bank_2mux_1rw_1w_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
- from sram import sram
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
from sram_config import sram_config
OPTS.bitcell = "pbitcell"
OPTS.replica_bitcell="replica_pbitcell"
@@ -31,14 +31,16 @@ class psram_1bank_2mux_1rw_1w_test(openram_test):
c.num_words=32
c.words_per_row=2
c.recompute_sizes()
- debug.info(1, "Layout test for {}rw,{}r,{}w psram with {} bit words, {} words, {} words per row, {} banks".format(OPTS.num_rw_ports,
- OPTS.num_r_ports,
- OPTS.num_w_ports,
- c.word_size,
- c.num_words,
- c.words_per_row,
- c.num_banks))
- a = sram(c, "sram")
+ debug.info(1, "Layout test for {}rw,{}r,{}w psram "
+ "with {} bit words, {} words, {} words per "
+ "row, {} banks".format(OPTS.num_rw_ports,
+ OPTS.num_r_ports,
+ OPTS.num_w_ports,
+ c.word_size,
+ c.num_words,
+ c.words_per_row,
+ c.num_banks))
+ a = factory.create(module_type="sram", sram_config=c)
self.local_check(a, final_verification=True)
globals.end_openram()
diff --git a/compiler/tests/20_psram_1bank_2mux_1w_1r_test.py b/compiler/tests/20_psram_1bank_2mux_1w_1r_test.py
index 3d049aef..61d636d9 100755
--- a/compiler/tests/20_psram_1bank_2mux_1w_1r_test.py
+++ b/compiler/tests/20_psram_1bank_2mux_1w_1r_test.py
@@ -9,14 +9,14 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
+from sram_factory import factory
import debug
#@unittest.skip("SKIPPING 20_psram_1bank_2mux_1w_1r_test, odd supply routing error")
class psram_1bank_2mux_1w_1r_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
- from sram import sram
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
from sram_config import sram_config
OPTS.bitcell = "pbitcell"
OPTS.replica_bitcell="replica_pbitcell"
@@ -38,7 +38,7 @@ class psram_1bank_2mux_1w_1r_test(openram_test):
c.num_words,
c.words_per_row,
c.num_banks))
- a = sram(c, "sram")
+ a = factory.create(module_type="sram", sram_config=c)
self.local_check(a, final_verification=True)
globals.end_openram()
diff --git a/compiler/tests/20_psram_1bank_2mux_test.py b/compiler/tests/20_psram_1bank_2mux_test.py
index 3afd2c9b..7c38da90 100755
--- a/compiler/tests/20_psram_1bank_2mux_test.py
+++ b/compiler/tests/20_psram_1bank_2mux_test.py
@@ -9,14 +9,14 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
+from sram_factory import factory
import debug
#@unittest.skip("SKIPPING 20_psram_1bank_2mux_test, wide metal supply routing error")
class psram_1bank_2mux_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
- from sram import sram
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
from sram_config import sram_config
OPTS.bitcell = "pbitcell"
OPTS.replica_bitcell="replica_pbitcell"
@@ -32,14 +32,16 @@ class psram_1bank_2mux_test(openram_test):
c.num_words=32
c.words_per_row=2
c.recompute_sizes()
- debug.info(1, "Layout test for {}rw,{}r,{}w psram with {} bit words, {} words, {} words per row, {} banks".format(OPTS.num_rw_ports,
- OPTS.num_r_ports,
- OPTS.num_w_ports,
- c.word_size,
- c.num_words,
- c.words_per_row,
- c.num_banks))
- a = sram(c, "sram")
+ debug.info(1, "Layout test for {}rw,{}r,{}w psram "
+ "with {} bit words, {} words, {} words per "
+ "row, {} banks".format(OPTS.num_rw_ports,
+ OPTS.num_r_ports,
+ OPTS.num_w_ports,
+ c.word_size,
+ c.num_words,
+ c.words_per_row,
+ c.num_banks))
+ a = factory.create(module_type="sram", sram_config=c)
self.local_check(a, final_verification=True)
globals.end_openram()
diff --git a/compiler/tests/20_psram_1bank_4mux_1rw_1r_test.py b/compiler/tests/20_psram_1bank_4mux_1rw_1r_test.py
index 1be26ca7..f7cb57fc 100755
--- a/compiler/tests/20_psram_1bank_4mux_1rw_1r_test.py
+++ b/compiler/tests/20_psram_1bank_4mux_1rw_1r_test.py
@@ -9,13 +9,13 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
+from sram_factory import factory
import debug
class psram_1bank_4mux_1rw_1r_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
- from sram import sram
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
from sram_config import sram_config
OPTS.bitcell = "pbitcell"
OPTS.replica_bitcell="replica_pbitcell"
@@ -30,14 +30,16 @@ class psram_1bank_4mux_1rw_1r_test(openram_test):
c.num_words=64
c.words_per_row=4
c.recompute_sizes()
- debug.info(1, "Layout test for {}rw,{}r,{}w psram with {} bit words, {} words, {} words per row, {} banks".format(OPTS.num_rw_ports,
- OPTS.num_r_ports,
- OPTS.num_w_ports,
- c.word_size,
- c.num_words,
- c.words_per_row,
- c.num_banks))
- a = sram(c, "sram")
+ debug.info(1, "Layout test for {}rw,{}r,{}w psram "
+ "with {} bit words, {} words, {} words per "
+ "row, {} banks".format(OPTS.num_rw_ports,
+ OPTS.num_r_ports,
+ OPTS.num_w_ports,
+ c.word_size,
+ c.num_words,
+ c.words_per_row,
+ c.num_banks))
+ a = factory.create(module_type="sram", sram_config=c)
self.local_check(a, final_verification=True)
globals.end_openram()
diff --git a/compiler/tests/20_sram_1bank_2mux_1rw_1r_test.py b/compiler/tests/20_sram_1bank_2mux_1rw_1r_test.py
index ea5fba78..b13c8020 100755
--- a/compiler/tests/20_sram_1bank_2mux_1rw_1r_test.py
+++ b/compiler/tests/20_sram_1bank_2mux_1rw_1r_test.py
@@ -9,13 +9,13 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
+from sram_factory import factory
import debug
class sram_1bank_2mux_1rw_1r_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
- from sram import sram
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
from sram_config import sram_config
OPTS.bitcell = "bitcell_1rw_1r"
@@ -30,14 +30,16 @@ class sram_1bank_2mux_1rw_1r_test(openram_test):
c.words_per_row=2
c.recompute_sizes()
- debug.info(1, "Layout test for {}rw,{}r,{}w sram with {} bit words, {} words, {} words per row, {} banks".format(OPTS.num_rw_ports,
- OPTS.num_r_ports,
- OPTS.num_w_ports,
- c.word_size,
- c.num_words,
- c.words_per_row,
- c.num_banks))
- a = sram(c, "sram")
+ debug.info(1, "Layout test for {}rw,{}r,{}w sram "
+ "with {} bit words, {} words, {} words per "
+ "row, {} banks".format(OPTS.num_rw_ports,
+ OPTS.num_r_ports,
+ OPTS.num_w_ports,
+ c.word_size,
+ c.num_words,
+ c.words_per_row,
+ c.num_banks))
+ a = factory.create(module_type="sram", sram_config=c)
self.local_check(a, final_verification=True)
globals.end_openram()
diff --git a/compiler/tests/20_sram_1bank_2mux_1w_1r_test.py b/compiler/tests/20_sram_1bank_2mux_1w_1r_test.py
index 2954ffbc..a0d75054 100755
--- a/compiler/tests/20_sram_1bank_2mux_1w_1r_test.py
+++ b/compiler/tests/20_sram_1bank_2mux_1w_1r_test.py
@@ -9,14 +9,14 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
+from sram_factory import factory
import debug
#@unittest.skip("SKIPPING 20_psram_1bank_2mux_1w_1r_test, odd supply routing error")
class psram_1bank_2mux_1w_1r_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
- from sram import sram
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
from sram_config import sram_config
OPTS.bitcell = "bitcell_1w_1r"
OPTS.replica_bitcell="replica_bitcell_1w_1r"
@@ -31,14 +31,16 @@ class psram_1bank_2mux_1w_1r_test(openram_test):
c.num_words=32
c.words_per_row=2
c.recompute_sizes()
- debug.info(1, "Layout test for {}rw,{}r,{}w psram with {} bit words, {} words, {} words per row, {} banks".format(OPTS.num_rw_ports,
- OPTS.num_r_ports,
- OPTS.num_w_ports,
- c.word_size,
- c.num_words,
- c.words_per_row,
- c.num_banks))
- a = sram(c, "sram")
+ debug.info(1, "Layout test for {}rw,{}r,{}w sram "
+ "with {} bit words, {} words, {} words per "
+ "row, {} banks".format(OPTS.num_rw_ports,
+ OPTS.num_r_ports,
+ OPTS.num_w_ports,
+ c.word_size,
+ c.num_words,
+ c.words_per_row,
+ c.num_banks))
+ a = factory.create(module_type="sram", sram_config=c)
self.local_check(a, final_verification=True)
globals.end_openram()
diff --git a/compiler/tests/20_sram_1bank_2mux_test.py b/compiler/tests/20_sram_1bank_2mux_test.py
index 26a7755f..7f305c0e 100755
--- a/compiler/tests/20_sram_1bank_2mux_test.py
+++ b/compiler/tests/20_sram_1bank_2mux_test.py
@@ -9,14 +9,14 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
+from sram_factory import factory
import debug
#@unittest.skip("SKIPPING 20_sram_1bank_2mux_test")
class sram_1bank_2mux_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
- from sram import sram
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
from sram_config import sram_config
c = sram_config(word_size=4,
num_words=32,
@@ -24,14 +24,16 @@ class sram_1bank_2mux_test(openram_test):
c.words_per_row=2
c.recompute_sizes()
- debug.info(1, "Layout test for {}rw,{}r,{}w sram with {} bit words, {} words, {} words per row, {} banks".format(OPTS.num_rw_ports,
- OPTS.num_r_ports,
- OPTS.num_w_ports,
- c.word_size,
- c.num_words,
- c.words_per_row,
- c.num_banks))
- a = sram(c, "sram")
+ debug.info(1, "Layout test for {}rw,{}r,{}w sram "
+ "with {} bit words, {} words, {} words per "
+ "row, {} banks".format(OPTS.num_rw_ports,
+ OPTS.num_r_ports,
+ OPTS.num_w_ports,
+ c.word_size,
+ c.num_words,
+ c.words_per_row,
+ c.num_banks))
+ a = factory.create(module_type="sram", sram_config=c)
self.local_check(a, final_verification=True)
globals.end_openram()
diff --git a/compiler/tests/20_sram_1bank_4mux_test.py b/compiler/tests/20_sram_1bank_4mux_test.py
index 16654be5..96e8cfda 100755
--- a/compiler/tests/20_sram_1bank_4mux_test.py
+++ b/compiler/tests/20_sram_1bank_4mux_test.py
@@ -9,14 +9,14 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
+from sram_factory import factory
import debug
#@unittest.skip("SKIPPING 20_sram_1bank_4mux_test")
class sram_1bank_4mux_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
- from sram import sram
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
from sram_config import sram_config
c = sram_config(word_size=4,
num_words=64,
@@ -24,14 +24,16 @@ class sram_1bank_4mux_test(openram_test):
c.words_per_row=4
c.recompute_sizes()
- debug.info(1, "Layout test for {}rw,{}r,{}w sram with {} bit words, {} words, {} words per row, {} banks".format(OPTS.num_rw_ports,
- OPTS.num_r_ports,
- OPTS.num_w_ports,
- c.word_size,
- c.num_words,
- c.words_per_row,
- c.num_banks))
- a = sram(c, "sram")
+ debug.info(1, "Layout test for {}rw,{}r,{}w sram "
+ "with {} bit words, {} words, {} words per "
+ "row, {} banks".format(OPTS.num_rw_ports,
+ OPTS.num_r_ports,
+ OPTS.num_w_ports,
+ c.word_size,
+ c.num_words,
+ c.words_per_row,
+ c.num_banks))
+ a = factory.create(module_type="sram", sram_config=c)
self.local_check(a, final_verification=True)
globals.end_openram()
diff --git a/compiler/tests/20_sram_1bank_8mux_1rw_1r_test.py b/compiler/tests/20_sram_1bank_8mux_1rw_1r_test.py
index dfd8a6a1..b2cd395f 100755
--- a/compiler/tests/20_sram_1bank_8mux_1rw_1r_test.py
+++ b/compiler/tests/20_sram_1bank_8mux_1rw_1r_test.py
@@ -9,13 +9,13 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
+from sram_factory import factory
import debug
class sram_1bank_8mux_1rw_1r_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
- from sram import sram
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
from sram_config import sram_config
OPTS.bitcell = "bitcell_1rw_1r"
@@ -30,14 +30,16 @@ class sram_1bank_8mux_1rw_1r_test(openram_test):
c.words_per_row=8
c.recompute_sizes()
- debug.info(1, "Layout test for {}rw,{}r,{}w sram with {} bit words, {} words, {} words per row, {} banks".format(OPTS.num_rw_ports,
- OPTS.num_r_ports,
- OPTS.num_w_ports,
- c.word_size,
- c.num_words,
- c.words_per_row,
- c.num_banks))
- a = sram(c, "sram")
+ debug.info(1, "Layout test for {}rw,{}r,{}w sram "
+ "with {} bit words, {} words, {} words per "
+ "row, {} banks".format(OPTS.num_rw_ports,
+ OPTS.num_r_ports,
+ OPTS.num_w_ports,
+ c.word_size,
+ c.num_words,
+ c.words_per_row,
+ c.num_banks))
+ a = factory.create(module_type="sram", sram_config=c)
self.local_check(a, final_verification=True)
globals.end_openram()
diff --git a/compiler/tests/20_sram_1bank_8mux_test.py b/compiler/tests/20_sram_1bank_8mux_test.py
index dde1a448..f8b43835 100755
--- a/compiler/tests/20_sram_1bank_8mux_test.py
+++ b/compiler/tests/20_sram_1bank_8mux_test.py
@@ -9,14 +9,14 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
+from sram_factory import factory
import debug
#@unittest.skip("SKIPPING 20_sram_1bank_8mux_test")
class sram_1bank_8mux_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
- from sram import sram
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
from sram_config import sram_config
c = sram_config(word_size=2,
num_words=128,
@@ -24,14 +24,16 @@ class sram_1bank_8mux_test(openram_test):
c.words_per_row=8
c.recompute_sizes()
- debug.info(1, "Layout test for {}rw,{}r,{}w sram with {} bit words, {} words, {} words per row, {} banks".format(OPTS.num_rw_ports,
- OPTS.num_r_ports,
- OPTS.num_w_ports,
- c.word_size,
- c.num_words,
- c.words_per_row,
- c.num_banks))
- a = sram(c, "sram")
+ debug.info(1, "Layout test for {}rw,{}r,{}w sram "
+ "with {} bit words, {} words, {} words per "
+ "row, {} banks".format(OPTS.num_rw_ports,
+ OPTS.num_r_ports,
+ OPTS.num_w_ports,
+ c.word_size,
+ c.num_words,
+ c.words_per_row,
+ c.num_banks))
+ a = factory.create(module_type="sram", sram_config=c)
self.local_check(a, final_verification=True)
globals.end_openram()
diff --git a/compiler/tests/20_sram_1bank_nomux_1rw_1r_test.py b/compiler/tests/20_sram_1bank_nomux_1rw_1r_test.py
index 02e82687..b33ef2c4 100755
--- a/compiler/tests/20_sram_1bank_nomux_1rw_1r_test.py
+++ b/compiler/tests/20_sram_1bank_nomux_1rw_1r_test.py
@@ -9,13 +9,13 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
+from sram_factory import factory
import debug
class sram_1bank_nomux_1rw_1r_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
- from sram import sram
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
from sram_config import sram_config
OPTS.bitcell = "bitcell_1rw_1r"
@@ -30,14 +30,16 @@ class sram_1bank_nomux_1rw_1r_test(openram_test):
c.words_per_row=1
c.recompute_sizes()
- debug.info(1, "Layout test for {}rw,{}r,{}w sram with {} bit words, {} words, {} words per row, {} banks".format(OPTS.num_rw_ports,
- OPTS.num_r_ports,
- OPTS.num_w_ports,
- c.word_size,
- c.num_words,
- c.words_per_row,
- c.num_banks))
- a = sram(c, "sram")
+ debug.info(1, "Layout test for {}rw,{}r,{}w sram "
+ "with {} bit words, {} words, {} words per "
+ "row, {} banks".format(OPTS.num_rw_ports,
+ OPTS.num_r_ports,
+ OPTS.num_w_ports,
+ c.word_size,
+ c.num_words,
+ c.words_per_row,
+ c.num_banks))
+ a = factory.create(module_type="sram", sram_config=c)
self.local_check(a, final_verification=True)
globals.end_openram()
diff --git a/compiler/tests/20_sram_1bank_nomux_test.py b/compiler/tests/20_sram_1bank_nomux_test.py
index 7a03ce1e..004c7604 100755
--- a/compiler/tests/20_sram_1bank_nomux_test.py
+++ b/compiler/tests/20_sram_1bank_nomux_test.py
@@ -9,14 +9,14 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
+from sram_factory import factory
import debug
#@unittest.skip("SKIPPING 20_sram_1bank_nomux_test")
class sram_1bank_nomux_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
- from sram import sram
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
from sram_config import sram_config
c = sram_config(word_size=4,
num_words=16,
@@ -24,14 +24,16 @@ class sram_1bank_nomux_test(openram_test):
c.words_per_row=1
c.recompute_sizes()
- debug.info(1, "Layout test for {}rw,{}r,{}w sram with {} bit words, {} words, {} words per row, {} banks".format(OPTS.num_rw_ports,
- OPTS.num_r_ports,
- OPTS.num_w_ports,
- c.word_size,
- c.num_words,
- c.words_per_row,
- c.num_banks))
- a = sram(c, "sram")
+ debug.info(1, "Layout test for {}rw,{}r,{}w sram "
+ "with {} bit words, {} words, {} words per "
+ "row, {} banks".format(OPTS.num_rw_ports,
+ OPTS.num_r_ports,
+ OPTS.num_w_ports,
+ c.word_size,
+ c.num_words,
+ c.words_per_row,
+ c.num_banks))
+ a = factory.create(module_type="sram", sram_config=c)
self.local_check(a, final_verification=True)
globals.end_openram()
diff --git a/compiler/tests/20_sram_2bank_test.py b/compiler/tests/20_sram_2bank_test.py
index 59db981d..b63691ec 100755
--- a/compiler/tests/20_sram_2bank_test.py
+++ b/compiler/tests/20_sram_2bank_test.py
@@ -9,14 +9,14 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
+from sram_factory import factory
import debug
@unittest.skip("Multibank is not working yet.")
class sram_2bank_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
- from sram import sram
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
from sram_config import sram_config
c = sram_config(word_size=16,
num_words=32,
@@ -24,30 +24,66 @@ class sram_2bank_test(openram_test):
c.words_per_row=1
c.recompute_sizes()
- debug.info(1, "Two bank, no column mux with control logic")
- a = sram(c, "sram1")
+ debug.info(1, "Layout test for {}rw,{}r,{}w sram "
+ "with {} bit words, {} words, {} words per "
+ "row, {} banks".format(OPTS.num_rw_ports,
+ OPTS.num_r_ports,
+ OPTS.num_w_ports,
+ c.word_size,
+ c.num_words,
+ c.words_per_row,
+ c.num_banks))
+ factory.reset()
+ a = factory.create(module_type="sram", sram_config=c)
self.local_check(a, final_verification=True)
c.num_words=64
c.words_per_row=2
c.recompute_sizes()
- debug.info(1, "Two bank two way column mux with control logic")
- a = sram(c, "sram2")
+ debug.info(1, "Layout test for {}rw,{}r,{}w sram "
+ "with {} bit words, {} words, {} words per "
+ "row, {} banks".format(OPTS.num_rw_ports,
+ OPTS.num_r_ports,
+ OPTS.num_w_ports,
+ c.word_size,
+ c.num_words,
+ c.words_per_row,
+ c.num_banks))
+ factory.reset()
+ a = factory.create(module_type="sram", sram_config=c)
self.local_check(a, final_verification=True)
c.num_words=128
c.words_per_row=4
c.recompute_sizes()
- debug.info(1, "Two bank, four way column mux with control logic")
- a = sram(c, "sram3")
+ debug.info(1, "Layout test for {}rw,{}r,{}w sram "
+ "with {} bit words, {} words, {} words per "
+ "row, {} banks".format(OPTS.num_rw_ports,
+ OPTS.num_r_ports,
+ OPTS.num_w_ports,
+ c.word_size,
+ c.num_words,
+ c.words_per_row,
+ c.num_banks))
+ factory.reset()
+ a = factory.create(module_type="sram", sram_config=c)
self.local_check(a, final_verification=True)
c.word_size=2
c.num_words=256
c.words_per_row=8
c.recompute_sizes()
- debug.info(1, "Two bank, eight way column mux with control logic")
- a = sram(c, "sram4")
+ debug.info(1, "Layout test for {}rw,{}r,{}w sram "
+ "with {} bit words, {} words, {} words per "
+ "row, {} banks".format(OPTS.num_rw_ports,
+ OPTS.num_r_ports,
+ OPTS.num_w_ports,
+ c.word_size,
+ c.num_words,
+ c.words_per_row,
+ c.num_banks))
+ factory.reset()
+ a = factory.create(module_type="sram", sram_config=c)
self.local_check(a, final_verification=True)
globals.end_openram()
diff --git a/compiler/tests/21_hspice_delay_test.py b/compiler/tests/21_hspice_delay_test.py
index fa7fc35f..abe65b02 100755
--- a/compiler/tests/21_hspice_delay_test.py
+++ b/compiler/tests/21_hspice_delay_test.py
@@ -9,12 +9,13 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
+from sram_factory import factory
import debug
class timing_sram_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
OPTS.spice_name="hspice"
OPTS.analytical_delay = False
OPTS.netlist_only = True
@@ -24,7 +25,6 @@ class timing_sram_test(openram_test):
import characterizer
reload(characterizer)
from characterizer import delay
- from sram import sram
from sram_config import sram_config
c = sram_config(word_size=1,
num_words=16,
@@ -32,7 +32,7 @@ class timing_sram_test(openram_test):
c.words_per_row=1
c.recompute_sizes()
debug.info(1, "Testing timing for sample 1bit, 16words SRAM with 1 bank")
- s = sram(c, name="sram1")
+ s = factory.create(module_type="sram", sram_config=c)
tempspice = OPTS.openram_temp + "temp.sp"
s.sp_write(tempspice)
@@ -51,9 +51,7 @@ class timing_sram_test(openram_test):
data.update(port_data[0])
if OPTS.tech_name == "freepdk45":
- golden_data = {'delay_bl': [0.1980959],
- 'delay_br': [0.1946091],
- 'delay_hl': [0.2121267],
+ golden_data = {'delay_hl': [0.2121267],
'delay_lh': [0.2121267],
'leakage_power': 0.0023761999999999998,
'min_period': 0.43,
@@ -61,14 +59,10 @@ class timing_sram_test(openram_test):
'read1_power': [0.48940979999999995],
'slew_hl': [0.0516745],
'slew_lh': [0.0516745],
- 'volt_bl': [0.5374525],
- 'volt_br': [1.1058],
'write0_power': [0.46267169999999996],
'write1_power': [0.4670826]}
elif OPTS.tech_name == "scn4m_subm":
- golden_data = {'delay_bl': [1.1029],
- 'delay_br': [0.9656455999999999],
- 'delay_hl': [1.288],
+ golden_data = {'delay_hl': [1.288],
'delay_lh': [1.288],
'leakage_power': 0.0273896,
'min_period': 2.578,
@@ -76,8 +70,6 @@ class timing_sram_test(openram_test):
'read1_power': [16.2616],
'slew_hl': [0.47891700000000004],
'slew_lh': [0.47891700000000004],
- 'volt_bl': [4.2155],
- 'volt_br': [5.8142],
'write0_power': [16.0656],
'write1_power': [16.2616]}
diff --git a/compiler/tests/21_hspice_setuphold_test.py b/compiler/tests/21_hspice_setuphold_test.py
index c003f54a..11020365 100755
--- a/compiler/tests/21_hspice_setuphold_test.py
+++ b/compiler/tests/21_hspice_setuphold_test.py
@@ -9,12 +9,13 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
+from sram_factory import factory
import debug
class timing_setup_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
OPTS.spice_name="hspice"
OPTS.analytical_delay = False
OPTS.netlist_only = True
diff --git a/compiler/tests/21_ngspice_delay_test.py b/compiler/tests/21_ngspice_delay_test.py
index 5af44e69..c0b2c8fe 100755
--- a/compiler/tests/21_ngspice_delay_test.py
+++ b/compiler/tests/21_ngspice_delay_test.py
@@ -9,12 +9,13 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
+from sram_factory import factory
import debug
class timing_sram_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
OPTS.spice_name="ngspice"
OPTS.analytical_delay = False
OPTS.netlist_only = True
@@ -24,7 +25,6 @@ class timing_sram_test(openram_test):
import characterizer
reload(characterizer)
from characterizer import delay
- from sram import sram
from sram_config import sram_config
c = sram_config(word_size=1,
num_words=16,
@@ -32,7 +32,7 @@ class timing_sram_test(openram_test):
c.words_per_row=1
c.recompute_sizes()
debug.info(1, "Testing timing for sample 1bit, 16words SRAM with 1 bank")
- s = sram(c, name="sram1")
+ s = factory.create(module_type="sram", sram_config=c)
tempspice = OPTS.openram_temp + "temp.sp"
s.sp_write(tempspice)
@@ -51,9 +51,7 @@ class timing_sram_test(openram_test):
data.update(port_data[0])
if OPTS.tech_name == "freepdk45":
- golden_data = {'delay_bl': [0.2003652],
- 'delay_br': [0.198698],
- 'delay_hl': [0.2108836],
+ golden_data = {'delay_hl': [0.2108836],
'delay_lh': [0.2108836],
'leakage_power': 0.001564799,
'min_period': 0.508,
@@ -61,14 +59,10 @@ class timing_sram_test(openram_test):
'read1_power': [0.4198608],
'slew_hl': [0.0455126],
'slew_lh': [0.0455126],
- 'volt_bl': [0.6472883],
- 'volt_br': [1.114024],
'write0_power': [0.40681890000000004],
'write1_power': [0.4198608]}
elif OPTS.tech_name == "scn4m_subm":
- golden_data = {'delay_bl': [1.3937359999999999],
- 'delay_br': [1.2596429999999998],
- 'delay_hl': [1.5747600000000002],
+ golden_data = {'delay_hl': [1.5747600000000002],
'delay_lh': [1.5747600000000002],
'leakage_power': 0.00195795,
'min_period': 3.281,
@@ -76,8 +70,6 @@ class timing_sram_test(openram_test):
'read1_power': [14.369810000000001],
'slew_hl': [0.49631959999999997],
'slew_lh': [0.49631959999999997],
- 'volt_bl': [4.132618],
- 'volt_br': [5.573099],
'write0_power': [13.79953],
'write1_power': [14.369810000000001]}
diff --git a/compiler/tests/21_ngspice_setuphold_test.py b/compiler/tests/21_ngspice_setuphold_test.py
index 924d05a5..774e3e75 100755
--- a/compiler/tests/21_ngspice_setuphold_test.py
+++ b/compiler/tests/21_ngspice_setuphold_test.py
@@ -9,12 +9,13 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
+from sram_factory import factory
import debug
class timing_setup_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
OPTS.spice_name="ngspice"
OPTS.analytical_delay = False
OPTS.netlist_only = True
diff --git a/compiler/tests/22_psram_1bank_2mux_func_test.py b/compiler/tests/22_psram_1bank_2mux_func_test.py
index 87c8db48..8606fd5f 100755
--- a/compiler/tests/22_psram_1bank_2mux_func_test.py
+++ b/compiler/tests/22_psram_1bank_2mux_func_test.py
@@ -9,13 +9,14 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
+from sram_factory import factory
import debug
#@unittest.skip("SKIPPING 22_psram_1bank_2mux_1rw_1r_1w_func_test, third port reads are broken?")
class psram_1bank_2mux_1rw_1r_1w_func_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
OPTS.analytical_delay = False
OPTS.netlist_only = True
OPTS.trim_netlist = False
@@ -30,7 +31,6 @@ class psram_1bank_2mux_1rw_1r_1w_func_test(openram_test):
import characterizer
reload(characterizer)
from characterizer import functional, delay
- from sram import sram
from sram_config import sram_config
c = sram_config(word_size=4,
num_words=64,
@@ -44,7 +44,7 @@ class psram_1bank_2mux_1rw_1r_1w_func_test(openram_test):
c.num_words,
c.words_per_row,
c.num_banks))
- s = sram(c, name="sram")
+ s = factory.create(module_type="sram", sram_config=c)
tempspice = OPTS.openram_temp + "temp.sp"
s.sp_write(tempspice)
diff --git a/compiler/tests/22_psram_1bank_4mux_func_test.py b/compiler/tests/22_psram_1bank_4mux_func_test.py
index 16661483..45c4676d 100755
--- a/compiler/tests/22_psram_1bank_4mux_func_test.py
+++ b/compiler/tests/22_psram_1bank_4mux_func_test.py
@@ -9,13 +9,14 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
+from sram_factory import factory
import debug
#@unittest.skip("SKIPPING 22_psram_1bank_4mux_func_test, third port reads are broken?")
class psram_1bank_4mux_func_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
OPTS.analytical_delay = False
OPTS.netlist_only = True
OPTS.trim_netlist = False
@@ -30,7 +31,6 @@ class psram_1bank_4mux_func_test(openram_test):
import characterizer
reload(characterizer)
from characterizer import functional, delay
- from sram import sram
from sram_config import sram_config
c = sram_config(word_size=4,
num_words=256,
@@ -44,7 +44,7 @@ class psram_1bank_4mux_func_test(openram_test):
c.num_words,
c.words_per_row,
c.num_banks))
- s = sram(c, name="sram")
+ s = factory.create(module_type="sram", sram_config=c)
tempspice = OPTS.openram_temp + "temp.sp"
s.sp_write(tempspice)
diff --git a/compiler/tests/22_psram_1bank_8mux_func_test.py b/compiler/tests/22_psram_1bank_8mux_func_test.py
index 86cfd16f..7bc75e2e 100755
--- a/compiler/tests/22_psram_1bank_8mux_func_test.py
+++ b/compiler/tests/22_psram_1bank_8mux_func_test.py
@@ -9,13 +9,14 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
+from sram_factory import factory
import debug
#@unittest.skip("SKIPPING 22_psram_1bank_8mux_func_test")
class psram_1bank_8mux_func_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
OPTS.analytical_delay = False
OPTS.netlist_only = True
OPTS.trim_netlist = False
@@ -30,7 +31,6 @@ class psram_1bank_8mux_func_test(openram_test):
import characterizer
reload(characterizer)
from characterizer import functional, delay
- from sram import sram
from sram_config import sram_config
c = sram_config(word_size=4,
num_words=256,
@@ -44,7 +44,7 @@ class psram_1bank_8mux_func_test(openram_test):
c.num_words,
c.words_per_row,
c.num_banks))
- s = sram(c, name="sram")
+ s = factory.create(module_type="sram", sram_config=c)
tempspice = OPTS.openram_temp + "temp.sp"
s.sp_write(tempspice)
diff --git a/compiler/tests/22_psram_1bank_nomux_func_test.py b/compiler/tests/22_psram_1bank_nomux_func_test.py
index 3133eb03..1673c4f7 100755
--- a/compiler/tests/22_psram_1bank_nomux_func_test.py
+++ b/compiler/tests/22_psram_1bank_nomux_func_test.py
@@ -9,13 +9,14 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
+from sram_factory import factory
import debug
#@unittest.skip("SKIPPING 22_psram_1bank_nomux_func_test")
class psram_1bank_nomux_func_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
OPTS.analytical_delay = False
OPTS.netlist_only = True
OPTS.trim_netlist = False
@@ -30,7 +31,6 @@ class psram_1bank_nomux_func_test(openram_test):
import characterizer
reload(characterizer)
from characterizer import functional, delay
- from sram import sram
from sram_config import sram_config
c = sram_config(word_size=4,
num_words=32,
@@ -44,7 +44,7 @@ class psram_1bank_nomux_func_test(openram_test):
c.num_words,
c.words_per_row,
c.num_banks))
- s = sram(c, name="sram")
+ s = factory.create(module_type="sram", sram_config=c)
tempspice = OPTS.openram_temp + "temp.sp"
s.sp_write(tempspice)
diff --git a/compiler/tests/22_sram_1bank_2mux_func_test.py b/compiler/tests/22_sram_1bank_2mux_func_test.py
index f163216e..60e8929d 100755
--- a/compiler/tests/22_sram_1bank_2mux_func_test.py
+++ b/compiler/tests/22_sram_1bank_2mux_func_test.py
@@ -9,13 +9,14 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
+from sram_factory import factory
import debug
#@unittest.skip("SKIPPING 22_sram_1bank_2mux_func_test")
class sram_1bank_2mux_func_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
OPTS.analytical_delay = False
OPTS.netlist_only = True
OPTS.trim_netlist = False
@@ -25,7 +26,6 @@ class sram_1bank_2mux_func_test(openram_test):
import characterizer
reload(characterizer)
from characterizer import functional, delay
- from sram import sram
from sram_config import sram_config
c = sram_config(word_size=4,
num_words=64,
@@ -36,7 +36,7 @@ class sram_1bank_2mux_func_test(openram_test):
c.num_words,
c.words_per_row,
c.num_banks))
- s = sram(c, name="sram")
+ s = factory.create(module_type="sram", sram_config=c)
tempspice = OPTS.openram_temp + "temp.sp"
s.sp_write(tempspice)
diff --git a/compiler/tests/22_sram_1bank_4mux_func_test.py b/compiler/tests/22_sram_1bank_4mux_func_test.py
index 049d8459..b768a7b9 100755
--- a/compiler/tests/22_sram_1bank_4mux_func_test.py
+++ b/compiler/tests/22_sram_1bank_4mux_func_test.py
@@ -9,13 +9,14 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
+from sram_factory import factory
import debug
#@unittest.skip("SKIPPING 22_sram_1bank_4mux_func_test")
class sram_1bank_4mux_func_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
OPTS.analytical_delay = False
OPTS.netlist_only = True
OPTS.trim_netlist = False
@@ -25,7 +26,6 @@ class sram_1bank_4mux_func_test(openram_test):
import characterizer
reload(characterizer)
from characterizer import functional, delay
- from sram import sram
from sram_config import sram_config
c = sram_config(word_size=4,
num_words=256,
@@ -36,7 +36,7 @@ class sram_1bank_4mux_func_test(openram_test):
c.num_words,
c.words_per_row,
c.num_banks))
- s = sram(c, name="sram")
+ s = factory.create(module_type="sram", sram_config=c)
tempspice = OPTS.openram_temp + "temp.sp"
s.sp_write(tempspice)
diff --git a/compiler/tests/22_sram_1bank_8mux_func_test.py b/compiler/tests/22_sram_1bank_8mux_func_test.py
index d159f265..45aa2bff 100755
--- a/compiler/tests/22_sram_1bank_8mux_func_test.py
+++ b/compiler/tests/22_sram_1bank_8mux_func_test.py
@@ -9,13 +9,14 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
+from sram_factory import factory
import debug
#@unittest.skip("SKIPPING 22_sram_1bank_8mux_func_test")
class sram_1bank_8mux_func_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
OPTS.analytical_delay = False
OPTS.netlist_only = True
OPTS.trim_netlist = False
@@ -28,7 +29,6 @@ class sram_1bank_8mux_func_test(openram_test):
if not OPTS.spice_exe:
debug.error("Could not find {} simulator.".format(OPTS.spice_name),-1)
- from sram import sram
from sram_config import sram_config
c = sram_config(word_size=4,
num_words=256,
@@ -39,7 +39,7 @@ class sram_1bank_8mux_func_test(openram_test):
c.num_words,
c.words_per_row,
c.num_banks))
- s = sram(c, name="sram")
+ s = factory.create(module_type="sram", sram_config=c)
tempspice = OPTS.openram_temp + "temp.sp"
s.sp_write(tempspice)
diff --git a/compiler/tests/22_sram_1bank_nomux_func_test.py b/compiler/tests/22_sram_1bank_nomux_func_test.py
index 08a21d92..baf10e9e 100755
--- a/compiler/tests/22_sram_1bank_nomux_func_test.py
+++ b/compiler/tests/22_sram_1bank_nomux_func_test.py
@@ -9,13 +9,14 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
+from sram_factory import factory
import debug
#@unittest.skip("SKIPPING 22_sram_func_test")
class sram_1bank_nomux_func_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
OPTS.analytical_delay = False
OPTS.netlist_only = True
@@ -24,7 +25,6 @@ class sram_1bank_nomux_func_test(openram_test):
import characterizer
reload(characterizer)
from characterizer import functional
- from sram import sram
from sram_config import sram_config
c = sram_config(word_size=4,
num_words=32,
@@ -35,7 +35,7 @@ class sram_1bank_nomux_func_test(openram_test):
c.num_words,
c.words_per_row,
c.num_banks))
- s = sram(c, name="sram")
+ s = factory.create(module_type="sram", sram_config=c)
tempspice = OPTS.openram_temp + "temp.sp"
s.sp_write(tempspice)
diff --git a/compiler/tests/22_sram_1rw_1r_1bank_nomux_func_test.py b/compiler/tests/22_sram_1rw_1r_1bank_nomux_func_test.py
index a609460b..df0ad3a6 100755
--- a/compiler/tests/22_sram_1rw_1r_1bank_nomux_func_test.py
+++ b/compiler/tests/22_sram_1rw_1r_1bank_nomux_func_test.py
@@ -9,13 +9,14 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
+from sram_factory import factory
import debug
#@unittest.skip("SKIPPING 22_sram_1rw_1r_1bank_nomux_func_test")
class psram_1bank_nomux_func_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
OPTS.analytical_delay = False
OPTS.netlist_only = True
OPTS.trim_netlist = False
@@ -30,7 +31,6 @@ class psram_1bank_nomux_func_test(openram_test):
import characterizer
reload(characterizer)
from characterizer import functional, delay
- from sram import sram
from sram_config import sram_config
c = sram_config(word_size=4,
num_words=32,
@@ -41,7 +41,7 @@ class psram_1bank_nomux_func_test(openram_test):
c.num_words,
c.words_per_row,
c.num_banks))
- s = sram(c, name="sram")
+ s = factory.create(module_type="sram", sram_config=c)
tempspice = OPTS.openram_temp + "temp.sp"
s.sp_write(tempspice)
diff --git a/compiler/tests/23_lib_sram_model_corners_test.py b/compiler/tests/23_lib_sram_model_corners_test.py
index 431555bc..6cac68b1 100755
--- a/compiler/tests/23_lib_sram_model_corners_test.py
+++ b/compiler/tests/23_lib_sram_model_corners_test.py
@@ -14,7 +14,7 @@ import debug
class model_corners_lib_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
from characterizer import lib
from sram import sram
@@ -25,7 +25,10 @@ class model_corners_lib_test(openram_test):
c.words_per_row=1
c.recompute_sizes()
debug.info(1, "Testing analytical timing for sample 2 bit, 16 words SRAM with 1 bank")
- s = sram(c, "sram_2_16_1_{0}".format(OPTS.tech_name))
+
+ # This doesn't have to use the factory since worst case
+ # it will just replaece the top-level module of the same name
+ s = sram(c, name="sram_2_16_1_{0}".format(OPTS.tech_name))
tempspice = OPTS.openram_temp + "temp.sp"
s.sp_write(tempspice)
diff --git a/compiler/tests/23_lib_sram_model_test.py b/compiler/tests/23_lib_sram_model_test.py
index 8a996cb4..0b4e1efb 100755
--- a/compiler/tests/23_lib_sram_model_test.py
+++ b/compiler/tests/23_lib_sram_model_test.py
@@ -14,7 +14,7 @@ import debug
class lib_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
from characterizer import lib
from sram import sram
@@ -25,6 +25,9 @@ class lib_test(openram_test):
c.words_per_row=1
c.recompute_sizes()
debug.info(1, "Testing analytical timing for sample 2 bit, 16 words SRAM with 1 bank")
+
+ # This doesn't have to use the factory since worst case
+ # it will just replaece the top-level module of the same name
s = sram(c, "sram_2_16_1_{0}".format(OPTS.tech_name))
tempspice = OPTS.openram_temp + "temp.sp"
s.sp_write(tempspice)
diff --git a/compiler/tests/23_lib_sram_prune_test.py b/compiler/tests/23_lib_sram_prune_test.py
index 1b93d1fd..266d3ba3 100755
--- a/compiler/tests/23_lib_sram_prune_test.py
+++ b/compiler/tests/23_lib_sram_prune_test.py
@@ -14,7 +14,7 @@ import debug
class lib_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
OPTS.analytical_delay = False
OPTS.trim_netlist = True
@@ -34,6 +34,9 @@ class lib_test(openram_test):
c.words_per_row=1
c.recompute_sizes()
debug.info(1, "Testing pruned timing for sample 2 bit, 16 words SRAM with 1 bank")
+
+ # This doesn't have to use the factory since worst case
+ # it will just replaece the top-level module of the same name
s = sram(c, "sram_2_16_1_{0}".format(OPTS.tech_name))
tempspice = OPTS.openram_temp + "temp.sp"
diff --git a/compiler/tests/23_lib_sram_test.py b/compiler/tests/23_lib_sram_test.py
index 1c26fd45..a81b1479 100755
--- a/compiler/tests/23_lib_sram_test.py
+++ b/compiler/tests/23_lib_sram_test.py
@@ -14,7 +14,7 @@ import debug
class lib_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
OPTS.analytical_delay = False
OPTS.trim_netlist = False
@@ -34,6 +34,9 @@ class lib_test(openram_test):
c.words_per_row=1
c.recompute_sizes()
debug.info(1, "Testing timing for sample 2 bit, 16 words SRAM with 1 bank")
+
+ # This doesn't have to use the factory since worst case
+ # it will just replaece the top-level module of the same name
s = sram(c, "sram_2_16_1_{0}".format(OPTS.tech_name))
tempspice = OPTS.openram_temp + "temp.sp"
diff --git a/compiler/tests/24_lef_sram_test.py b/compiler/tests/24_lef_sram_test.py
index 983038a2..bd1fdc6a 100755
--- a/compiler/tests/24_lef_sram_test.py
+++ b/compiler/tests/24_lef_sram_test.py
@@ -15,7 +15,7 @@ import debug
class lef_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
from sram import sram
from sram_config import sram_config
@@ -25,6 +25,8 @@ class lef_test(openram_test):
c.words_per_row=1
c.recompute_sizes()
debug.info(1, "Testing LEF for sample 2 bit, 16 words SRAM with 1 bank")
+ # This doesn't have to use the factory since worst case
+ # it will just replaece the top-level module of the same name
s = sram(c, "sram_2_16_1_{0}".format(OPTS.tech_name))
gdsfile = s.name + ".gds"
diff --git a/compiler/tests/25_verilog_sram_test.py b/compiler/tests/25_verilog_sram_test.py
index f98475b4..63810357 100755
--- a/compiler/tests/25_verilog_sram_test.py
+++ b/compiler/tests/25_verilog_sram_test.py
@@ -14,7 +14,7 @@ import debug
class verilog_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
from sram import sram
from sram_config import sram_config
@@ -24,6 +24,8 @@ class verilog_test(openram_test):
c.words_per_row=1
c.recompute_sizes()
debug.info(1, "Testing Verilog for sample 2 bit, 16 words SRAM with 1 bank")
+ # This doesn't have to use the factory since worst case
+ # it will just replaece the top-level module of the same name
s = sram(c, "sram_2_16_1_{0}".format(OPTS.tech_name))
vfile = s.name + ".v"
diff --git a/compiler/tests/26_pex_test.py b/compiler/tests/26_pex_test.py
index d374e485..cd47a21c 100755
--- a/compiler/tests/26_pex_test.py
+++ b/compiler/tests/26_pex_test.py
@@ -9,13 +9,14 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
+from sram_factory import factory
import debug
@unittest.skip("SKIPPING 26_pex_test")
class sram_func_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
OPTS.use_pex = True
diff --git a/compiler/tests/27_worst_case_delay_test.py b/compiler/tests/27_worst_case_delay_test.py
index 834c6b69..0b208f62 100755
--- a/compiler/tests/27_worst_case_delay_test.py
+++ b/compiler/tests/27_worst_case_delay_test.py
@@ -9,6 +9,7 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
+from sram_factory import factory
import debug
@unittest.skip("SKIPPING 27_worst_case_delay_test")
@@ -16,7 +17,7 @@ class worst_case_timing_sram_test(openram_test):
def runTest(self):
OPTS.tech_name = "freepdk45"
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
OPTS.spice_name="hspice"
OPTS.analytical_delay = False
OPTS.netlist_only = True
@@ -33,7 +34,6 @@ class worst_case_timing_sram_test(openram_test):
debug.error("Could not find {} simulator.".format(OPTS.spice_name),-1)
word_size, num_words, num_banks = 2, 16, 1
- from sram import sram
from sram_config import sram_config
c = sram_config(word_size=word_size,
num_words=num_words,
@@ -42,7 +42,7 @@ class worst_case_timing_sram_test(openram_test):
c.recompute_sizes()
debug.info(1, "Testing the timing different bitecells inside a {}bit, {} words SRAM with {} bank".format(
word_size, num_words, num_banks))
- s = sram(c, name="sram1")
+ s = factory.create(module_type="sram", sram_config=c)
sp_netlist_file = OPTS.openram_temp + "temp.sp"
s.sp_write(sp_netlist_file)
diff --git a/compiler/tests/28_delay_model_test.py b/compiler/tests/28_delay_model_test.py
index a02a42e9..95db008b 100755
--- a/compiler/tests/28_delay_model_test.py
+++ b/compiler/tests/28_delay_model_test.py
@@ -9,12 +9,13 @@ import sys,os
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
+from sram_factory import factory
import debug
class delay_model_test(openram_test):
def runTest(self):
- globals.init_openram("config_20_{0}".format(OPTS.tech_name))
+ globals.init_openram("config_{0}".format(OPTS.tech_name))
OPTS.spice_name="hspice"
OPTS.analytical_delay = False
OPTS.netlist_only = True
@@ -27,7 +28,6 @@ class delay_model_test(openram_test):
reload(characterizer)
from characterizer import model_check
- from sram import sram
from sram_config import sram_config
c = sram_config(word_size=4,
num_words=16,
@@ -35,7 +35,7 @@ class delay_model_test(openram_test):
c.words_per_row=1
c.recompute_sizes()
debug.info(1, "Testing timing for sample 1bit, 16words SRAM with 1 bank")
- s = sram(c, name="sram1")
+ s = factory.create(module_type="sram", sram_config=c)
tempspice = OPTS.openram_temp + "temp.sp"
s.sp_write(tempspice)
diff --git a/compiler/tests/30_openram_test.py b/compiler/tests/30_openram_test.py
index 55ab9457..2681b351 100755
--- a/compiler/tests/30_openram_test.py
+++ b/compiler/tests/30_openram_test.py
@@ -11,6 +11,7 @@ import sys,os,re,shutil
sys.path.append(os.path.join(sys.path[0],".."))
import globals
from globals import OPTS
+from sram_factory import factory
import debug
import getpass
@@ -18,7 +19,7 @@ class openram_test(openram_test):
def runTest(self):
OPENRAM_HOME = os.path.abspath(os.environ.get("OPENRAM_HOME"))
- globals.init_openram("{0}/tests/config_20_{1}".format(OPENRAM_HOME,OPTS.tech_name))
+ globals.init_openram("{0}/tests/config_{1}".format(OPENRAM_HOME,OPTS.tech_name))
debug.info(1, "Testing top-level openram.py with 2-bit, 16 word SRAM.")
out_file = "testsram"
@@ -48,7 +49,7 @@ class openram_test(openram_test):
exe_name = "{0}/openram.py ".format(OPENRAM_HOME)
else:
exe_name = "coverage run -p {0}/openram.py ".format(OPENRAM_HOME)
- config_name = "{0}config_20_{1}.py".format(OPENRAM_HOME + "/tests/",OPTS.tech_name)
+ config_name = "{0}config_{1}.py".format(OPENRAM_HOME + "/tests/",OPTS.tech_name)
cmd = "{0} -n -o {1} -p {2} {3} {4} 2>&1 > {5}/output.log".format(exe_name,
out_file,
out_path,
diff --git a/compiler/tests/config_20_freepdk45.py b/compiler/tests/config_freepdk45.py
similarity index 100%
rename from compiler/tests/config_20_freepdk45.py
rename to compiler/tests/config_freepdk45.py
diff --git a/compiler/tests/config_20_scn3me_subm.py b/compiler/tests/config_scn3me_subm.py
similarity index 100%
rename from compiler/tests/config_20_scn3me_subm.py
rename to compiler/tests/config_scn3me_subm.py
diff --git a/compiler/tests/config_20_scn4m_subm.py b/compiler/tests/config_scn4m_subm.py
similarity index 100%
rename from compiler/tests/config_20_scn4m_subm.py
rename to compiler/tests/config_scn4m_subm.py
diff --git a/technology/setup_scripts/setup_openram_freepdk45.py b/technology/freepdk45/__init__.py
similarity index 83%
rename from technology/setup_scripts/setup_openram_freepdk45.py
rename to technology/freepdk45/__init__.py
index 3ba0aa16..f7f801ea 100644
--- a/technology/setup_scripts/setup_openram_freepdk45.py
+++ b/technology/freepdk45/__init__.py
@@ -8,7 +8,6 @@ import sys
import os
TECHNOLOGY = "freepdk45"
-LOCAL = "{0}/..".format(os.path.dirname(__file__))
##########################
# FreePDK45 paths
@@ -33,8 +32,3 @@ os.environ["DRCLVS_HOME"] = DRCLVS_HOME
# except:
# Always use the one in the PDK dir for FreePDK45
os.environ["SPICE_MODEL_DIR"] = PDK_DIR+"/ncsu_basekit/models/hspice/tran_models"
-
-##########################
-#Paths required for OPENRAM to function
-
-sys.path.append("{0}/{1}/tech".format(LOCAL,TECHNOLOGY))
diff --git a/technology/freepdk45/tech/__init__.py b/technology/freepdk45/tech/__init__.py
index 6b2d03b3..2573d2c2 100644
--- a/technology/freepdk45/tech/__init__.py
+++ b/technology/freepdk45/tech/__init__.py
@@ -2,5 +2,5 @@
Import tech specific modules.
"""
-from tech import *
+from .tech import *
diff --git a/technology/freepdk45/tf/SVRF_EULA_06Feb09.txt b/technology/freepdk45/tf/SVRF_EULA_06Feb09.txt
new file mode 100644
index 00000000..637a7627
--- /dev/null
+++ b/technology/freepdk45/tf/SVRF_EULA_06Feb09.txt
@@ -0,0 +1,84 @@
+ SVRF(TM) TECHNOLOGY LICENSE AGREEMENT
+ February 6, 2009
+
+This license is a legal "Agreement" concerning the use of SVRF
+Technology between you, the end user, either individually or as an
+authorized representative of the school or company acquiring the
+license ("You"), and Mentor Graphics Corporation and Mentor Graphics
+(Ireland) Limited acting directly or through their subsidiaries or
+authorized distributors (collectively "Mentor Graphics"). "SVRF
+Technology" shall mean Mentor Graphics' syntax for expressing process
+rules and controlling physical verification, principally the syntax
+expressed in Mentor Graphics. SVRF User Manual. USE OF SVRF TECHNOLOGY
+INDICATES YOUR COMPLETE AND UNCONDITIONAL ACCEPTANCE OF THE TERMS AND
+CONDITIONS SET FORTH IN THIS AGREEMENT. If you do not agree to these
+terms and conditions, promptly certify destruction of the SVRF
+Technology and all accompanying items within five days after receipt
+of SVRF Technology.
+
+1. GRANT OF LICENSE. This file includes SVRF Technology under license
+ by Mentor Graphics Corporation. Mentor Graphics grants to You a
+ nontransferable, nonexclusive license to use SVRF Technology solely
+ for use with Mentor Graphics' Calibre(R) tools and either: (a) in an
+ educational classroom or laboratory environment; or (b) for your
+ internal business purpose as allowed by an existing license
+ agreement between You and Mentor Graphics.
+
+2. RESTRICTIONS ON USE. All SVRF Technology constitutes or contains
+ trade secrets and confidential information of Mentor Graphics or
+ its licensors. You shall not make SVRF Technology available in any
+ form to any person other those persons whose performance requires
+ such access and who are under obligations of confidentiality. You
+ shall take appropriate action to protect the confidentiality of
+ SVRF Technology and ensure that persons permitted access to SVRF
+ Technology do not disclose it or use it except as permitted by this
+ Agreement. The provisions of this Section 2 shall survive the
+ termination or expiration of this Agreement.
+
+3. NO WARRANTY. Mentor Graphics expressly disclaims any warranty for
+ SVRF Technology. TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW,
+ SVRF TECHNOLOGY AND ANY RELATED DOCUMENTATION ARE PROVIDED "AS IS"
+ AND WITH ALL FAULTS AND WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, THE
+ IMPLIED WARRANTIES OR CONDITIONS OF MERCHANTABILITY, FITNESS FOR A
+ PARTICULAR PURPOSE, OR NONINFRINGEMENT. THE ENTIRE RISK ARISING OUT
+ OF USE OR PERFORMANCE OF SVRF TECHNOLOGY REMAINS WITH YOU.
+
+4. LIMITATION OF LIABILITY. EXCEPT WHERE THIS EXCLUSION OR RESTRICTION
+ OF LIABILITY WOULD BE VOID OR INEFFECTIVE UNDER APPLICABLE LAW, IN
+ NO EVENT WILL MENTOR GRAPHICS OR ITS LICENSORS BE LIABLE FOR
+ INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES (INCLUDING
+ LOST PROFITS OR SAVINGS) WHETHER BASED ON CONTRACT, TORT OR ANY
+ OTHER LEGAL THEORY, EVEN IF MENTOR GRAPHICS OR ITS LICENSORS HAVE
+ BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+5. TERM. This Agreement remains effective until termination. This
+ Agreement will immediately terminate upon notice if you exceed the
+ scope of license granted or otherwise fail to comply with the
+ provisions of Sections 1 or 2. For any other material breach under
+ this Agreement, Mentor Graphics may terminate this Agreement upon
+ 30 days written notice if you are in material breach and fail to
+ cure such breach within the 30-day notice period. Upon any
+ termination, you agree to cease all use of SVRF Technology and
+ certify destruction of SVRF Technology, including all copies, to
+ Mentor Graphics. reasonable satisfaction.
+
+6. GOVERNING LAW. This License shall be governed by and construed
+ under the laws of the State of Oregon, USA, if You are located in
+ North or South America, and the laws of Ireland if You are located
+ outside of North or South America.
+
+7. SEVERABILITY. If any provision of this Agreement is held by a court
+ of competent jurisdiction to be void, invalid, unenforceable or
+ illegal, such provision shall be severed from this Agreement and
+ the remaining provisions will remain in full force and effect.
+
+8. MISCELLANEOUS. This Agreement contains the parties' entire
+ understanding relating to its subject matter and supersedes all
+ prior or contemporaneous agreements, except valid license
+ agreements related to the subject matter of this Agreement (which
+ are physically signed by you and an authorized agent of Mentor
+ Graphics). This Agreement may only be modified in writing by
+ authorized representatives of the parties. Waiver of terms or
+ excuse of breach must be in writing and shall not constitute
+ subsequent consent, waiver or excuse.
diff --git a/technology/scn3me_subm/gds_lib/cell_6t.gds b/technology/scn3me_subm/gds_lib/cell_6t.gds
deleted file mode 100644
index 20e5367e..00000000
Binary files a/technology/scn3me_subm/gds_lib/cell_6t.gds and /dev/null differ
diff --git a/technology/scn3me_subm/gds_lib/dff.gds b/technology/scn3me_subm/gds_lib/dff.gds
deleted file mode 100644
index 07c37298..00000000
Binary files a/technology/scn3me_subm/gds_lib/dff.gds and /dev/null differ
diff --git a/technology/scn3me_subm/gds_lib/ms_flop.gds b/technology/scn3me_subm/gds_lib/ms_flop.gds
deleted file mode 100644
index e1c071be..00000000
Binary files a/technology/scn3me_subm/gds_lib/ms_flop.gds and /dev/null differ
diff --git a/technology/scn3me_subm/gds_lib/replica_cell_6t.gds b/technology/scn3me_subm/gds_lib/replica_cell_6t.gds
deleted file mode 100644
index 12d97796..00000000
Binary files a/technology/scn3me_subm/gds_lib/replica_cell_6t.gds and /dev/null differ
diff --git a/technology/scn3me_subm/gds_lib/sense_amp.gds b/technology/scn3me_subm/gds_lib/sense_amp.gds
deleted file mode 100644
index 0fc7eb56..00000000
Binary files a/technology/scn3me_subm/gds_lib/sense_amp.gds and /dev/null differ
diff --git a/technology/scn3me_subm/gds_lib/tri_gate.gds b/technology/scn3me_subm/gds_lib/tri_gate.gds
deleted file mode 100644
index a3f25a39..00000000
Binary files a/technology/scn3me_subm/gds_lib/tri_gate.gds and /dev/null differ
diff --git a/technology/scn3me_subm/gds_lib/write_driver.gds b/technology/scn3me_subm/gds_lib/write_driver.gds
deleted file mode 100644
index fdd3ad88..00000000
Binary files a/technology/scn3me_subm/gds_lib/write_driver.gds and /dev/null differ
diff --git a/technology/scn3me_subm/mag_lib/.magicrc b/technology/scn3me_subm/mag_lib/.magicrc
deleted file mode 100644
index f52d0592..00000000
--- a/technology/scn3me_subm/mag_lib/.magicrc
+++ /dev/null
@@ -1,5 +0,0 @@
-path sys +$::env(OPENRAM_TECH)/scn3me_subm/tech
-tech load SCN3ME_SUBM.30 -noprompt
-scalegrid 1 4
-set GND gnd
-set VDD vdd
diff --git a/technology/scn3me_subm/mag_lib/cell_6t.mag b/technology/scn3me_subm/mag_lib/cell_6t.mag
deleted file mode 100644
index f2e9906a..00000000
--- a/technology/scn3me_subm/mag_lib/cell_6t.mag
+++ /dev/null
@@ -1,117 +0,0 @@
-magic
-tech scmos
-timestamp 1536091415
-<< nwell >>
-rect -8 29 42 51
-<< pwell >>
-rect -8 -8 42 29
-<< ntransistor >>
-rect 7 10 9 18
-rect 29 10 31 18
-rect 10 3 14 5
-rect 24 3 28 5
-<< ptransistor >>
-rect 7 37 11 40
-rect 27 37 31 40
-<< ndiffusion >>
-rect -2 16 7 18
-rect 2 12 7 16
-rect -2 10 7 12
-rect 9 14 10 18
-rect 9 10 14 14
-rect 28 14 29 18
-rect 24 10 29 14
-rect 31 16 36 18
-rect 31 12 32 16
-rect 31 10 36 12
-rect 10 5 14 10
-rect 24 5 28 10
-rect 10 2 14 3
-rect 24 2 28 3
-<< pdiffusion >>
-rect 2 37 7 40
-rect 11 37 12 40
-rect 26 37 27 40
-rect 31 37 32 40
-<< ndcontact >>
-rect -2 12 2 16
-rect 10 14 14 18
-rect 24 14 28 18
-rect 32 12 36 16
-rect 10 -2 14 2
-rect 24 -2 28 2
-<< pdcontact >>
-rect -2 36 2 40
-rect 12 36 16 40
-rect 22 36 26 40
-rect 32 36 36 40
-<< psubstratepcontact >>
-rect -2 22 2 26
-rect 32 22 36 26
-<< nsubstratencontact >>
-rect 32 44 36 48
-<< polysilicon >>
-rect 7 40 11 42
-rect 27 40 31 42
-rect 7 35 11 37
-rect 7 21 9 35
-rect 27 34 31 37
-rect 15 33 31 34
-rect 19 32 31 33
-rect 7 20 21 21
-rect 7 19 24 20
-rect 7 18 9 19
-rect 29 18 31 32
-rect 7 8 9 10
-rect 17 5 21 6
-rect 29 8 31 10
-rect -2 3 10 5
-rect 14 3 24 5
-rect 28 3 36 5
-<< polycontact >>
-rect 15 29 19 33
-rect 21 20 25 24
-rect 17 6 21 10
-<< metal1 >>
-rect -2 44 15 48
-rect 19 44 32 48
-rect -2 40 2 44
-rect 32 40 36 44
-rect 11 36 12 40
-rect 26 36 27 40
-rect -2 26 2 29
-rect -2 16 2 22
-rect 11 18 15 36
-rect 23 24 27 36
-rect 25 20 27 24
-rect 14 14 15 18
-rect 23 18 27 20
-rect 32 26 36 29
-rect 23 14 24 18
-rect 32 16 36 22
-rect -2 6 17 9
-rect 21 6 36 9
-rect -2 5 36 6
-<< m2contact >>
-rect 15 44 19 48
-rect -2 29 2 33
-rect 32 29 36 33
-rect 6 -2 10 2
-rect 20 -2 24 2
-<< metal2 >>
-rect -2 33 2 48
-rect -2 -2 2 29
-rect 6 2 10 48
-rect 24 -2 28 48
-rect 32 33 36 48
-rect 32 -2 36 29
-<< bb >>
-rect 0 0 34 46
-<< labels >>
-rlabel metal2 0 0 0 0 1 gnd
-rlabel metal2 34 0 34 0 1 gnd
-rlabel m2contact 17 46 17 46 5 vdd
-rlabel metal2 8 43 8 43 1 bl
-rlabel metal2 26 43 26 43 1 br
-rlabel metal1 4 7 4 7 1 wl
-<< end >>
diff --git a/technology/scn3me_subm/mag_lib/convertall.sh b/technology/scn3me_subm/mag_lib/convertall.sh
deleted file mode 100755
index f5e2482c..00000000
--- a/technology/scn3me_subm/mag_lib/convertall.sh
+++ /dev/null
@@ -1,14 +0,0 @@
-magic -dnull -noconsole << EOF
-load dff
-gds write dff.gds
-load cell_6t
-gds write cell_6t.gds
-load replica_cell_6t
-gds write replica_cell_6t.gds
-load sense_amp
-gds write sense_amp.gds
-load tri_gate
-gds write tri_gate.gds
-load write_driver
-gds write write_driver.gds
-EOF
diff --git a/technology/scn3me_subm/mag_lib/dff.mag b/technology/scn3me_subm/mag_lib/dff.mag
deleted file mode 100644
index 46d22c84..00000000
--- a/technology/scn3me_subm/mag_lib/dff.mag
+++ /dev/null
@@ -1,279 +0,0 @@
-magic
-tech scmos
-timestamp 1536089597
-<< nwell >>
-rect 0 48 109 103
-<< pwell >>
-rect 0 -3 109 48
-<< ntransistor >>
-rect 11 6 13 26
-rect 19 6 21 16
-rect 24 6 26 16
-rect 33 6 35 16
-rect 38 6 40 16
-rect 47 6 49 16
-rect 63 6 65 16
-rect 68 6 70 16
-rect 78 6 80 16
-rect 83 6 85 16
-rect 91 6 93 26
-<< ptransistor >>
-rect 11 54 13 94
-rect 19 74 21 94
-rect 25 74 27 94
-rect 33 74 35 94
-rect 39 74 41 94
-rect 47 74 49 94
-rect 63 74 65 94
-rect 68 74 70 94
-rect 78 84 80 94
-rect 83 84 85 94
-rect 91 54 93 94
-<< ndiffusion >>
-rect 6 25 11 26
-rect 10 6 11 25
-rect 13 25 18 26
-rect 13 6 14 25
-rect 86 25 91 26
-rect 18 6 19 16
-rect 21 6 24 16
-rect 26 15 33 16
-rect 26 6 28 15
-rect 32 6 33 15
-rect 35 6 38 16
-rect 40 15 47 16
-rect 40 6 41 15
-rect 45 6 47 15
-rect 49 15 54 16
-rect 49 6 50 15
-rect 58 15 63 16
-rect 62 6 63 15
-rect 65 6 68 16
-rect 70 15 78 16
-rect 70 6 72 15
-rect 76 6 78 15
-rect 80 6 83 16
-rect 85 6 86 16
-rect 90 6 91 25
-rect 93 25 98 26
-rect 93 6 94 25
-<< pdiffusion >>
-rect 6 93 11 94
-rect 10 54 11 93
-rect 13 55 14 94
-rect 18 74 19 94
-rect 21 74 25 94
-rect 27 93 33 94
-rect 27 74 28 93
-rect 32 74 33 93
-rect 35 74 39 94
-rect 41 93 47 94
-rect 41 74 42 93
-rect 46 74 47 93
-rect 49 93 54 94
-rect 49 74 50 93
-rect 58 93 63 94
-rect 62 74 63 93
-rect 65 74 68 94
-rect 70 93 78 94
-rect 70 74 72 93
-rect 76 84 78 93
-rect 80 84 83 94
-rect 85 93 91 94
-rect 85 84 86 93
-rect 76 74 77 84
-rect 13 54 18 55
-rect 90 54 91 93
-rect 93 93 98 94
-rect 93 54 94 93
-<< ndcontact >>
-rect 6 6 10 25
-rect 14 6 18 25
-rect 28 6 32 15
-rect 41 6 45 15
-rect 50 6 54 15
-rect 58 6 62 15
-rect 72 6 76 15
-rect 86 6 90 25
-rect 94 6 98 25
-<< pdcontact >>
-rect 6 54 10 93
-rect 14 55 18 94
-rect 28 74 32 93
-rect 42 74 46 93
-rect 50 74 54 93
-rect 58 74 62 93
-rect 72 74 76 93
-rect 86 54 90 93
-rect 94 54 98 93
-<< psubstratepcontact >>
-rect 102 6 106 10
-<< nsubstratencontact >>
-rect 102 89 106 93
-<< polysilicon >>
-rect 11 94 13 96
-rect 19 94 21 96
-rect 25 94 27 96
-rect 33 94 35 96
-rect 39 94 41 96
-rect 47 94 49 96
-rect 63 94 65 96
-rect 68 94 70 96
-rect 78 94 80 96
-rect 83 94 85 96
-rect 91 94 93 96
-rect 11 37 13 54
-rect 19 46 21 74
-rect 11 26 13 33
-rect 19 16 21 42
-rect 25 38 27 74
-rect 33 54 35 74
-rect 33 29 35 50
-rect 24 27 35 29
-rect 39 71 41 74
-rect 24 16 26 27
-rect 39 23 41 67
-rect 47 61 49 74
-rect 63 73 65 74
-rect 54 71 65 73
-rect 34 19 35 23
-rect 33 16 35 19
-rect 38 19 39 23
-rect 38 16 40 19
-rect 47 16 49 57
-rect 53 19 55 67
-rect 68 63 70 74
-rect 78 67 80 84
-rect 76 65 80 67
-rect 63 61 70 63
-rect 61 24 63 33
-rect 68 31 70 61
-rect 83 53 85 84
-rect 79 51 85 53
-rect 78 31 80 47
-rect 91 45 93 54
-rect 89 41 93 45
-rect 68 29 75 31
-rect 61 22 70 24
-rect 53 17 65 19
-rect 63 16 65 17
-rect 68 16 70 22
-rect 73 19 75 29
-rect 78 27 79 31
-rect 73 17 80 19
-rect 78 16 80 17
-rect 83 16 85 31
-rect 91 26 93 41
-rect 11 4 13 6
-rect 19 4 21 6
-rect 24 4 26 6
-rect 33 4 35 6
-rect 38 4 40 6
-rect 47 4 49 6
-rect 63 4 65 6
-rect 68 4 70 6
-rect 78 4 80 6
-rect 83 4 85 6
-rect 91 4 93 6
-<< polycontact >>
-rect 17 42 21 46
-rect 10 33 14 37
-rect 31 50 35 54
-rect 25 34 29 38
-rect 39 67 43 71
-rect 45 57 49 61
-rect 30 19 34 23
-rect 39 19 43 23
-rect 53 67 57 71
-rect 59 59 63 63
-rect 74 61 78 65
-rect 59 33 63 37
-rect 77 47 81 51
-rect 85 41 89 45
-rect 79 27 83 31
-<< metal1 >>
-rect 0 97 109 103
-rect 14 94 18 97
-rect 6 93 10 94
-rect 28 93 32 94
-rect 22 74 28 77
-rect 42 93 46 97
-rect 50 93 54 94
-rect 58 93 62 97
-rect 71 93 77 94
-rect 71 74 72 93
-rect 76 74 77 93
-rect 86 93 90 97
-rect 50 71 53 74
-rect 43 68 53 71
-rect 26 57 45 60
-rect 52 60 59 63
-rect 52 54 55 60
-rect 71 56 74 65
-rect 10 50 31 52
-rect 35 51 55 54
-rect 62 53 74 56
-rect 94 93 98 94
-rect 102 93 106 97
-rect 6 49 34 50
-rect 21 43 38 46
-rect 18 34 25 37
-rect 62 37 65 53
-rect 94 51 98 54
-rect 81 48 94 51
-rect 74 41 85 44
-rect 29 34 59 37
-rect 6 25 10 26
-rect 14 25 18 26
-rect 31 23 34 34
-rect 63 34 65 37
-rect 94 31 98 47
-rect 83 28 98 31
-rect 94 25 98 28
-rect 43 19 53 22
-rect 50 16 53 19
-rect 22 15 32 16
-rect 22 13 28 15
-rect 41 15 46 16
-rect 45 6 46 15
-rect 50 15 54 16
-rect 58 15 62 16
-rect 70 15 77 16
-rect 70 13 72 15
-rect 71 6 72 13
-rect 76 6 77 15
-rect 14 3 18 6
-rect 41 3 46 6
-rect 58 3 62 6
-rect 86 3 90 6
-rect 102 3 106 6
-rect 0 -3 109 3
-<< m2contact >>
-rect 22 70 26 74
-rect 70 70 74 74
-rect 22 57 26 61
-rect 6 50 10 54
-rect 38 43 42 47
-rect 14 33 18 37
-rect 94 47 98 51
-rect 70 40 74 44
-rect 6 26 10 30
-rect 22 16 26 20
-rect 70 16 74 20
-<< metal2 >>
-rect 22 61 26 70
-rect 6 30 10 50
-rect 22 20 26 57
-rect 70 44 74 70
-rect 70 20 74 40
-<< bb >>
-rect 0 0 109 100
-<< labels >>
-rlabel m2contact 15 34 15 34 4 clk
-rlabel m2contact 40 45 40 45 4 D
-rlabel m2contact 96 49 96 49 4 Q
-rlabel metal1 32 98 32 98 4 vdd
-rlabel metal1 44 1 44 1 4 gnd
-<< properties >>
-string path 0.000 0.000 900.000 0.000 900.000 900.000 0.000 900.000 0.000 0.000
-<< end >>
diff --git a/technology/scn3me_subm/mag_lib/ms_flop.mag b/technology/scn3me_subm/mag_lib/ms_flop.mag
deleted file mode 100644
index 713d264f..00000000
--- a/technology/scn3me_subm/mag_lib/ms_flop.mag
+++ /dev/null
@@ -1,294 +0,0 @@
-magic
-tech scmos
-timestamp 1536089622
-<< nwell >>
-rect -2 0 18 200
-<< pwell >>
-rect 18 0 40 200
-<< ntransistor >>
-rect 24 178 27 180
-rect 24 162 27 164
-rect 24 138 27 140
-rect 24 130 27 132
-rect 24 112 27 114
-rect 24 93 27 95
-rect 24 77 27 79
-rect 24 50 27 52
-rect 24 42 27 44
-rect 24 24 27 26
-<< ptransistor >>
-rect 6 178 12 180
-rect 6 162 12 164
-rect 6 138 12 140
-rect 6 130 12 132
-rect 6 112 12 114
-rect 6 93 12 95
-rect 6 77 12 79
-rect 6 50 12 52
-rect 6 42 12 44
-rect 6 24 12 26
-<< ndiffusion >>
-rect 24 180 27 181
-rect 24 177 27 178
-rect 24 164 27 165
-rect 24 161 27 162
-rect 28 157 32 161
-rect 24 140 27 141
-rect 24 137 27 138
-rect 24 132 27 133
-rect 24 129 27 130
-rect 24 114 27 115
-rect 24 111 27 112
-rect 24 95 27 96
-rect 24 92 27 93
-rect 24 79 27 80
-rect 24 76 27 77
-rect 28 72 32 76
-rect 24 52 27 53
-rect 24 49 27 50
-rect 24 44 27 45
-rect 24 41 27 42
-rect 24 26 27 27
-rect 24 23 27 24
-<< pdiffusion >>
-rect 6 180 12 181
-rect 6 177 12 178
-rect 6 164 12 165
-rect 6 161 12 162
-rect 6 140 12 141
-rect 6 137 12 138
-rect 6 132 12 133
-rect 6 129 12 130
-rect 6 114 12 115
-rect 6 111 12 112
-rect 6 95 12 96
-rect 6 92 12 93
-rect 6 79 12 80
-rect 6 76 12 77
-rect 6 52 12 53
-rect 6 49 12 50
-rect 6 44 12 45
-rect 6 41 12 42
-rect 6 26 12 27
-rect 6 23 12 24
-rect 8 18 12 19
-<< ndcontact >>
-rect 24 181 28 185
-rect 24 173 28 177
-rect 24 165 28 169
-rect 24 157 28 161
-rect 24 141 28 145
-rect 24 133 28 137
-rect 24 125 28 129
-rect 24 115 28 119
-rect 24 107 28 111
-rect 24 96 28 100
-rect 24 88 28 92
-rect 24 80 28 84
-rect 24 72 28 76
-rect 24 53 28 57
-rect 24 45 28 49
-rect 24 37 28 41
-rect 24 27 28 31
-rect 24 19 28 23
-<< pdcontact >>
-rect 6 181 12 185
-rect 6 173 12 177
-rect 6 165 12 169
-rect 6 157 12 161
-rect 6 141 12 145
-rect 6 133 12 137
-rect 6 125 12 129
-rect 6 115 12 119
-rect 6 107 12 111
-rect 6 96 12 100
-rect 6 88 12 92
-rect 6 80 12 84
-rect 6 72 12 76
-rect 6 53 12 57
-rect 6 45 12 49
-rect 6 37 12 41
-rect 6 27 12 31
-rect 6 19 12 23
-<< psubstratepcontact >>
-rect 32 157 36 161
-rect 32 72 36 76
-<< nsubstratencontact >>
-rect 8 14 12 18
-<< polysilicon >>
-rect 4 178 6 180
-rect 12 178 24 180
-rect 27 178 29 180
-rect 17 173 19 178
-rect 4 162 6 164
-rect 12 163 24 164
-rect 12 162 17 163
-rect 21 162 24 163
-rect 27 162 29 164
-rect 3 148 13 150
-rect 3 140 5 148
-rect 3 138 6 140
-rect 12 138 14 140
-rect 17 138 24 140
-rect 27 138 29 140
-rect 17 132 19 138
-rect 3 130 6 132
-rect 12 130 19 132
-rect 22 130 24 132
-rect 27 130 31 132
-rect 3 114 5 130
-rect 29 122 31 130
-rect 20 120 31 122
-rect 3 112 6 114
-rect 12 112 24 114
-rect 27 112 29 114
-rect 4 93 6 95
-rect 12 93 24 95
-rect 27 93 29 95
-rect 19 89 21 93
-rect 4 77 6 79
-rect 12 78 24 79
-rect 12 77 17 78
-rect 21 77 24 78
-rect 27 77 29 79
-rect 3 60 13 62
-rect 3 52 5 60
-rect 3 50 6 52
-rect 12 50 14 52
-rect 17 50 24 52
-rect 27 50 29 52
-rect 17 44 19 50
-rect 3 42 6 44
-rect 12 42 19 44
-rect 22 42 24 44
-rect 27 42 31 44
-rect 3 26 5 42
-rect 29 34 31 42
-rect 20 32 31 34
-rect 3 24 6 26
-rect 12 24 24 26
-rect 27 24 29 26
-rect 16 14 18 24
-<< polycontact >>
-rect 16 169 20 173
-rect 17 159 21 163
-rect 13 148 17 152
-rect 16 118 20 122
-rect 15 108 19 112
-rect 17 85 21 89
-rect 17 74 21 78
-rect 13 60 17 64
-rect 16 30 20 34
-rect 15 10 19 14
-<< metal1 >>
-rect 16 182 24 185
-rect -2 173 6 177
-rect 28 173 36 177
-rect -2 164 2 173
-rect 12 166 20 169
-rect 2 160 6 161
-rect -2 157 6 160
-rect 33 161 36 173
-rect -2 111 2 157
-rect 28 157 32 161
-rect 12 142 24 145
-rect 12 134 20 137
-rect 12 126 20 129
-rect 20 118 24 119
-rect 16 116 24 118
-rect -2 107 6 111
-rect 33 111 36 153
-rect -2 92 2 107
-rect 28 107 36 111
-rect 12 97 24 100
-rect 33 92 36 107
-rect -2 88 6 92
-rect -2 76 2 88
-rect 28 88 36 92
-rect 6 84 20 85
-rect 12 82 20 84
-rect -2 72 6 76
-rect 33 76 36 88
-rect -2 41 2 72
-rect 28 72 32 76
-rect 12 54 24 57
-rect 12 46 20 49
-rect 12 38 20 41
-rect -2 22 2 37
-rect 20 30 24 31
-rect 16 28 24 30
-rect 33 23 36 68
-rect -2 19 6 22
-rect 28 20 36 23
-rect 8 18 12 19
-rect -2 10 15 11
-rect 19 10 36 11
-rect -2 8 36 10
-<< m2contact >>
-rect 12 181 16 185
-rect 20 166 24 170
-rect -2 160 2 164
-rect 17 155 21 159
-rect 32 153 36 157
-rect 6 145 10 149
-rect 17 148 21 152
-rect 20 133 24 137
-rect 20 125 24 129
-rect 12 115 16 119
-rect 15 104 19 108
-rect 6 100 10 104
-rect 20 81 24 85
-rect 17 70 21 74
-rect 32 68 36 72
-rect 6 57 10 61
-rect 17 60 21 64
-rect 20 45 24 49
-rect -2 37 2 41
-rect 20 37 24 41
-rect 12 27 16 31
-<< metal2 >>
-rect 6 185 10 200
-rect 15 196 19 200
-rect 15 192 24 196
-rect 6 181 12 185
-rect 6 149 9 181
-rect 20 170 24 192
-rect 21 155 27 159
-rect 18 143 21 148
-rect 13 140 21 143
-rect 13 119 16 140
-rect 24 133 27 155
-rect 5 100 6 104
-rect 5 61 8 100
-rect 15 93 19 104
-rect 11 90 19 93
-rect 11 67 14 90
-rect 24 81 27 129
-rect 21 70 27 74
-rect 11 64 16 67
-rect 5 57 6 61
-rect 13 60 17 64
-rect 13 31 16 60
-rect 24 45 27 70
-rect 24 8 27 41
-rect 19 4 27 8
-rect 15 0 19 4
-<< m3contact >>
-rect 15 4 19 8
-<< metal3 >>
-rect 14 8 20 9
-rect 14 4 15 8
-rect 19 4 20 8
-rect 14 3 20 4
-<< bb >>
-rect 0 0 34 200
-<< labels >>
-rlabel metal1 0 8 0 8 2 clk
-rlabel metal3 15 4 15 4 1 din
-rlabel metal2 6 196 6 196 5 dout_bar
-rlabel metal2 15 196 15 196 5 dout
-rlabel m2contact 34 70 34 70 1 gnd
-rlabel m2contact 34 154 34 154 1 gnd
-rlabel m2contact 0 162 0 162 3 vdd
-rlabel m2contact 0 38 0 38 3 vdd
-<< end >>
diff --git a/technology/scn3me_subm/mag_lib/replica_cell_6t.mag b/technology/scn3me_subm/mag_lib/replica_cell_6t.mag
deleted file mode 100644
index d0dc472f..00000000
--- a/technology/scn3me_subm/mag_lib/replica_cell_6t.mag
+++ /dev/null
@@ -1,118 +0,0 @@
-magic
-tech scmos
-timestamp 1536091380
-<< nwell >>
-rect -8 29 42 51
-<< pwell >>
-rect -8 -8 42 29
-<< ntransistor >>
-rect 7 10 9 18
-rect 29 10 31 18
-rect 10 3 14 5
-rect 24 3 28 5
-<< ptransistor >>
-rect 7 37 11 40
-rect 27 37 31 40
-<< ndiffusion >>
-rect -2 16 7 18
-rect 2 12 7 16
-rect -2 10 7 12
-rect 9 14 10 18
-rect 9 10 14 14
-rect 28 14 29 18
-rect 24 10 29 14
-rect 31 16 36 18
-rect 31 12 32 16
-rect 31 10 36 12
-rect 10 5 14 10
-rect 24 5 28 10
-rect 10 2 14 3
-rect 24 2 28 3
-<< pdiffusion >>
-rect 2 37 7 40
-rect 11 37 12 40
-rect 26 37 27 40
-rect 31 37 32 40
-<< ndcontact >>
-rect -2 12 2 16
-rect 10 14 14 18
-rect 24 14 28 18
-rect 32 12 36 16
-rect 10 -2 14 2
-rect 24 -2 28 2
-<< pdcontact >>
-rect -2 36 2 40
-rect 12 36 16 40
-rect 22 36 26 40
-rect 32 36 36 40
-<< psubstratepcontact >>
-rect -2 22 2 26
-rect 32 22 36 26
-<< nsubstratencontact >>
-rect 32 44 36 48
-<< polysilicon >>
-rect 7 40 11 42
-rect 27 40 31 42
-rect 7 35 11 37
-rect 7 21 9 35
-rect 27 34 31 37
-rect 15 33 31 34
-rect 19 32 31 33
-rect 7 20 21 21
-rect 7 19 24 20
-rect 7 18 9 19
-rect 29 18 31 32
-rect 7 8 9 10
-rect 17 5 21 6
-rect 29 8 31 10
-rect -2 3 10 5
-rect 14 3 24 5
-rect 28 3 36 5
-<< polycontact >>
-rect 15 29 19 33
-rect 21 20 25 24
-rect 17 6 21 10
-<< metal1 >>
-rect -2 44 15 48
-rect 19 44 32 48
-rect -2 40 2 44
-rect 32 40 36 44
-rect 11 36 12 40
-rect 26 36 27 40
-rect -2 26 2 29
-rect 11 22 15 36
-rect 23 24 27 36
-rect -2 18 15 22
-rect 25 20 27 24
-rect -2 16 2 18
-rect 14 14 15 18
-rect 23 18 27 20
-rect 32 26 36 29
-rect 23 14 24 18
-rect 32 16 36 22
-rect -2 6 17 9
-rect 21 6 36 9
-rect -2 5 36 6
-<< m2contact >>
-rect 15 44 19 48
-rect -2 29 2 33
-rect 32 29 36 33
-rect 6 -2 10 2
-rect 20 -2 24 2
-<< metal2 >>
-rect -2 33 2 48
-rect -2 -2 2 29
-rect 6 2 10 48
-rect 24 -2 28 48
-rect 32 33 36 48
-rect 32 -2 36 29
-<< bb >>
-rect 0 0 34 46
-<< labels >>
-rlabel metal2 0 0 0 0 1 gnd
-rlabel metal2 34 0 34 0 1 gnd
-rlabel m2contact 17 46 17 46 5 vdd
-rlabel metal2 8 43 8 43 1 bl
-rlabel metal2 26 43 26 43 1 br
-rlabel metal1 4 7 4 7 1 wl
-<< end >>
diff --git a/technology/scn3me_subm/mag_lib/sense_amp.mag b/technology/scn3me_subm/mag_lib/sense_amp.mag
deleted file mode 100644
index e5fa4373..00000000
--- a/technology/scn3me_subm/mag_lib/sense_amp.mag
+++ /dev/null
@@ -1,136 +0,0 @@
-magic
-tech scmos
-timestamp 1536089670
-<< nwell >>
-rect 0 0 40 102
-<< pwell >>
-rect 0 102 40 163
-<< ntransistor >>
-rect 21 130 23 139
-rect 12 108 14 117
-rect 20 108 22 117
-<< ptransistor >>
-rect 12 78 14 96
-rect 20 78 22 96
-rect 11 20 13 44
-rect 27 20 29 44
-<< ndiffusion >>
-rect 20 130 21 139
-rect 23 130 24 139
-rect 11 108 12 117
-rect 14 108 15 117
-rect 19 108 20 117
-rect 22 108 23 117
-<< pdiffusion >>
-rect 7 94 12 96
-rect 11 80 12 94
-rect 7 78 12 80
-rect 14 94 20 96
-rect 14 80 15 94
-rect 19 80 20 94
-rect 14 78 20 80
-rect 22 94 27 96
-rect 22 80 23 94
-rect 22 78 27 80
-rect 10 20 11 44
-rect 13 20 14 44
-rect 26 20 27 44
-rect 29 20 30 44
-<< ndcontact >>
-rect 16 130 20 139
-rect 24 130 28 139
-rect 7 108 11 117
-rect 15 108 19 117
-rect 23 108 27 117
-<< pdcontact >>
-rect 7 80 11 94
-rect 15 80 19 94
-rect 23 80 27 94
-rect 6 20 10 44
-rect 14 20 18 44
-rect 22 20 26 44
-rect 30 20 34 44
-<< psubstratepcontact >>
-rect 32 137 36 141
-<< nsubstratencontact >>
-rect 27 70 31 74
-<< polysilicon >>
-rect 21 139 23 149
-rect 21 129 23 130
-rect 3 127 23 129
-rect 3 47 5 127
-rect 12 122 34 124
-rect 12 117 14 122
-rect 20 117 22 119
-rect 12 96 14 108
-rect 20 96 22 108
-rect 32 105 34 122
-rect 30 101 34 105
-rect 12 76 14 78
-rect 20 69 22 78
-rect 13 67 22 69
-rect 9 55 11 65
-rect 32 55 34 101
-rect 33 51 34 55
-rect 3 45 13 47
-rect 11 44 13 45
-rect 27 44 29 46
-rect 11 19 13 20
-rect 27 19 29 20
-rect 11 17 29 19
-<< polycontact >>
-rect 20 149 24 153
-rect 26 101 30 105
-rect 9 65 13 69
-rect 9 51 13 55
-rect 29 51 33 55
-<< metal1 >>
-rect -2 149 20 153
-rect 24 149 36 153
-rect 28 133 32 137
-rect 16 117 19 130
-rect 7 94 11 108
-rect 23 105 27 108
-rect 23 101 26 105
-rect 7 69 11 80
-rect 15 94 19 96
-rect 15 78 19 80
-rect 23 94 27 101
-rect 23 78 27 80
-rect 15 75 18 78
-rect 15 74 31 75
-rect 15 72 27 74
-rect 7 65 9 69
-rect 6 44 9 54
-rect 33 51 34 55
-rect 31 44 34 51
-rect 3 20 6 23
-rect 3 15 7 20
-<< m2contact >>
-rect 32 133 36 137
-rect 27 66 31 70
-rect 13 44 17 48
-rect 22 44 26 48
-rect 3 11 7 15
-<< metal2 >>
-rect 10 48 14 163
-rect 20 48 24 163
-rect 32 129 36 133
-rect 27 62 31 66
-rect 10 44 13 48
-rect 20 44 22 48
-rect 3 0 7 11
-rect 10 0 14 44
-rect 20 0 24 44
-<< bb >>
-rect 0 0 34 163
-<< labels >>
-flabel metal1 0 149 0 149 4 FreeSans 26 0 0 0 en
-rlabel metal2 34 131 34 131 1 gnd
-rlabel metal2 29 64 29 64 1 vdd
-rlabel metal2 12 161 12 161 5 bl
-rlabel metal2 22 161 22 161 5 br
-rlabel metal2 5 3 5 3 1 dout
-<< properties >>
-string path 270.000 468.000 270.000 486.000 288.000 486.000 288.000 468.000 270.000 468.000
-<< end >>
diff --git a/technology/scn3me_subm/mag_lib/setup.tcl b/technology/scn3me_subm/mag_lib/setup.tcl
deleted file mode 100644
index af55a416..00000000
--- a/technology/scn3me_subm/mag_lib/setup.tcl
+++ /dev/null
@@ -1,15 +0,0 @@
-# Setup file for netgen
-ignore class c
-equate class {-circuit1 nfet} {-circuit2 n}
-equate class {-circuit1 pfet} {-circuit2 p}
-# This circuit has symmetries and needs to be flattened to resolve them
-# or the banks won't pass
-flatten class {-circuit1 precharge_array_1}
-flatten class {-circuit1 precharge_array_2}
-flatten class {-circuit1 precharge_array_3}
-flatten class {-circuit1 precharge_array_4}
-property {-circuit1 nfet} remove as ad ps pd
-property {-circuit1 pfet} remove as ad ps pd
-property {-circuit2 n} remove as ad ps pd
-property {-circuit2 p} remove as ad ps pd
-permute transistors
diff --git a/technology/scn3me_subm/mag_lib/tri_gate.mag b/technology/scn3me_subm/mag_lib/tri_gate.mag
deleted file mode 100644
index bda635c7..00000000
--- a/technology/scn3me_subm/mag_lib/tri_gate.mag
+++ /dev/null
@@ -1,98 +0,0 @@
-magic
-tech scmos
-timestamp 1536089695
-<< nwell >>
-rect -2 45 38 73
-<< pwell >>
-rect -2 0 38 45
-<< ntransistor >>
-rect 9 27 11 31
-rect 17 27 19 31
-rect 25 27 27 31
-<< ptransistor >>
-rect 9 53 11 61
-rect 17 53 19 61
-rect 25 53 27 61
-<< ndiffusion >>
-rect 8 27 9 31
-rect 11 27 12 31
-rect 16 27 17 31
-rect 19 27 20 31
-rect 24 27 25 31
-rect 27 27 28 31
-<< pdiffusion >>
-rect 8 53 9 61
-rect 11 53 12 61
-rect 16 53 17 61
-rect 19 53 20 61
-rect 24 53 25 61
-rect 27 53 28 61
-<< ndcontact >>
-rect 4 27 8 31
-rect 12 27 16 31
-rect 20 27 24 31
-rect 28 27 32 31
-<< pdcontact >>
-rect 4 53 8 61
-rect 12 53 16 61
-rect 20 53 24 61
-rect 28 53 32 61
-<< psubstratepcontact >>
-rect 12 19 16 23
-<< nsubstratencontact >>
-rect 12 65 16 69
-<< polysilicon >>
-rect 25 63 35 65
-rect 9 61 11 63
-rect 17 61 19 63
-rect 25 61 27 63
-rect 9 50 11 53
-rect 9 31 11 46
-rect 17 42 19 53
-rect 25 51 27 53
-rect 17 31 19 38
-rect 25 31 27 33
-rect 9 25 11 27
-rect 17 25 19 27
-rect 25 16 27 27
-rect 33 8 35 63
-rect 32 6 35 8
-<< polycontact >>
-rect 9 46 13 50
-rect 16 38 20 42
-rect 25 12 29 16
-rect 28 4 32 8
-<< metal1 >>
-rect 16 65 23 69
-rect 12 61 16 65
-rect 3 53 4 61
-rect 3 42 6 53
-rect 13 46 15 50
-rect 3 38 16 42
-rect 3 31 6 38
-rect 29 31 32 53
-rect 3 27 4 31
-rect 12 23 16 27
-rect 16 19 24 23
-rect 0 12 25 16
-rect 29 12 36 16
-rect 0 4 28 8
-rect 32 4 36 8
-<< m2contact >>
-rect 23 65 27 69
-rect 15 46 19 50
-rect 25 34 29 38
-rect 24 19 28 23
-<< metal2 >>
-rect 15 34 25 38
-rect 15 0 19 34
-<< bb >>
-rect 0 0 34 73
-<< labels >>
-rlabel metal1 0 12 0 12 3 en
-rlabel metal1 0 4 0 4 2 en_bar
-rlabel metal2 16 1 16 1 1 out
-rlabel m2contact 26 21 26 21 1 gnd
-rlabel m2contact 25 67 25 67 1 vdd
-rlabel m2contact 17 48 17 48 1 in
-<< end >>
diff --git a/technology/scn3me_subm/mag_lib/write_driver.mag b/technology/scn3me_subm/mag_lib/write_driver.mag
deleted file mode 100644
index ab2014aa..00000000
--- a/technology/scn3me_subm/mag_lib/write_driver.mag
+++ /dev/null
@@ -1,224 +0,0 @@
-magic
-tech scmos
-timestamp 1536089714
-<< nwell >>
-rect -3 101 37 138
-rect -3 0 37 51
-<< pwell >>
-rect -3 138 37 202
-rect -3 51 37 101
-<< ntransistor >>
-rect 9 177 11 189
-rect 17 177 19 189
-rect 15 162 27 164
-rect 9 144 11 148
-rect 17 144 19 148
-rect 10 82 12 89
-rect 18 82 20 89
-rect 8 57 10 64
-rect 16 57 18 64
-rect 24 60 26 64
-<< ptransistor >>
-rect 9 125 11 132
-rect 17 125 19 132
-rect 10 107 12 114
-rect 18 107 20 114
-rect 8 38 10 45
-rect 16 38 18 45
-rect 24 38 26 45
-<< ndiffusion >>
-rect 8 177 9 189
-rect 11 177 12 189
-rect 16 177 17 189
-rect 19 177 20 189
-rect 15 164 27 165
-rect 15 161 27 162
-rect 12 157 15 160
-rect 12 156 16 157
-rect 8 144 9 148
-rect 11 144 12 148
-rect 16 144 17 148
-rect 19 144 20 148
-rect 9 82 10 89
-rect 12 82 13 89
-rect 17 82 18 89
-rect 20 82 21 89
-rect 25 82 26 86
-rect 7 57 8 64
-rect 10 57 11 64
-rect 15 57 16 64
-rect 18 57 19 64
-rect 23 60 24 64
-rect 26 60 27 64
-<< pdiffusion >>
-rect 8 125 9 132
-rect 11 125 12 132
-rect 16 125 17 132
-rect 19 125 20 132
-rect 12 122 16 125
-rect 9 107 10 114
-rect 12 107 13 114
-rect 17 107 18 114
-rect 20 107 21 114
-rect 7 38 8 45
-rect 10 38 11 45
-rect 15 38 16 45
-rect 18 38 19 45
-rect 23 38 24 45
-rect 26 38 27 45
-rect 3 35 7 38
-<< ndcontact >>
-rect 4 177 8 189
-rect 12 177 16 189
-rect 20 177 24 189
-rect 15 165 27 169
-rect 15 157 27 161
-rect 4 144 8 148
-rect 12 144 16 148
-rect 20 144 24 148
-rect 5 82 9 89
-rect 13 82 17 89
-rect 21 82 25 89
-rect 3 57 7 64
-rect 11 57 15 64
-rect 19 57 23 64
-rect 27 60 31 64
-<< pdcontact >>
-rect 4 125 8 132
-rect 12 125 16 132
-rect 20 125 24 132
-rect 5 107 9 114
-rect 13 107 17 114
-rect 21 107 25 114
-rect 3 38 7 45
-rect 11 38 15 45
-rect 19 38 23 45
-rect 27 38 31 45
-<< psubstratepcontact >>
-rect 12 152 16 156
-rect 26 82 30 86
-<< nsubstratencontact >>
-rect 12 118 16 122
-rect 3 31 7 35
-<< polysilicon >>
-rect 9 194 30 196
-rect 9 189 11 194
-rect 17 189 19 191
-rect 28 185 30 194
-rect 9 175 11 177
-rect 17 172 19 177
-rect 6 170 19 172
-rect 6 167 8 170
-rect 13 162 15 164
-rect 27 162 33 164
-rect 9 148 11 150
-rect 17 148 19 150
-rect 9 132 11 144
-rect 17 132 19 144
-rect 9 124 11 125
-rect 2 122 11 124
-rect 17 124 19 125
-rect 17 122 28 124
-rect 2 75 4 122
-rect 10 114 12 116
-rect 18 114 20 116
-rect 10 89 12 107
-rect 18 106 20 107
-rect 16 104 20 106
-rect 16 92 18 104
-rect 26 100 28 122
-rect 27 96 28 100
-rect 16 90 20 92
-rect 18 89 20 90
-rect 10 81 12 82
-rect 10 79 13 81
-rect 2 71 3 75
-rect 11 71 13 79
-rect 18 79 20 82
-rect 18 77 23 79
-rect 31 71 33 162
-rect 11 69 33 71
-rect 11 67 13 69
-rect 8 65 13 67
-rect 8 64 10 65
-rect 16 64 18 66
-rect 24 64 26 66
-rect 8 45 10 57
-rect 16 52 18 57
-rect 24 52 26 60
-rect 16 50 26 52
-rect 16 45 18 50
-rect 24 45 26 50
-rect 8 28 10 38
-rect 16 14 18 38
-rect 24 36 26 38
-<< polycontact >>
-rect 28 181 32 185
-rect 4 163 8 167
-rect 23 96 27 100
-rect 3 71 7 75
-rect 23 75 27 79
-rect 7 24 11 28
-rect 15 10 19 14
-<< metal1 >>
-rect 5 192 10 196
-rect 5 189 8 192
-rect 32 181 33 185
-rect 13 169 16 177
-rect 13 165 15 169
-rect 4 148 8 163
-rect 12 157 15 161
-rect 12 156 16 157
-rect 12 148 16 152
-rect 4 132 8 144
-rect 20 142 24 144
-rect 30 142 33 181
-rect 20 138 33 142
-rect 20 132 24 138
-rect 12 122 16 125
-rect 13 114 17 118
-rect 5 104 9 107
-rect 21 104 25 107
-rect 5 101 25 104
-rect 5 89 9 101
-rect 21 100 25 101
-rect 21 96 23 100
-rect 25 82 26 90
-rect 4 64 7 71
-rect 27 64 31 79
-rect 3 51 7 57
-rect 3 48 15 51
-rect 11 45 15 48
-rect 27 45 31 60
-rect 3 35 7 38
-rect 19 35 23 38
-rect 7 31 19 35
-rect 0 24 7 28
-rect 11 24 36 28
-<< m2contact >>
-rect 10 192 14 196
-rect 20 189 24 193
-rect 23 153 27 157
-rect 16 118 20 122
-rect 26 86 30 90
-rect 19 64 23 68
-rect 19 31 23 35
-rect 15 6 19 10
-<< metal2 >>
-rect 10 196 14 202
-rect 20 193 24 202
-rect 20 177 24 189
-rect 15 0 19 6
-<< bb >>
-rect 0 0 34 202
-<< labels >>
-rlabel metal2 15 1 15 1 1 din
-rlabel metal1 2 25 2 25 3 en
-rlabel metal2 12 200 12 200 5 bl
-rlabel metal2 22 200 22 200 5 br
-rlabel m2contact 21 66 21 66 1 gnd
-rlabel m2contact 28 88 28 88 1 gnd
-rlabel m2contact 21 33 21 33 1 vdd
-rlabel m2contact 18 120 18 120 1 vdd
-rlabel m2contact 25 155 25 155 1 gnd
-<< end >>
diff --git a/technology/scn3me_subm/models/ff/nmos.sp b/technology/scn3me_subm/models/ff/nmos.sp
deleted file mode 100644
index 9711c533..00000000
--- a/technology/scn3me_subm/models/ff/nmos.sp
+++ /dev/null
@@ -1,10 +0,0 @@
-*********************************************
-* Transistor Models
-* Note: These models are approximate
-* and should be substituted with actual
-* models from MOSIS or SCN3ME
-*********************************************
-
-.MODEL n NMOS (LEVEL=49 VTHO=0.669845
-+ NSUB=6E16 U0=461 K1=0.5705 TOX=13.9n VERSION=3.3.0)
-
diff --git a/technology/scn3me_subm/models/ff/pmos.sp b/technology/scn3me_subm/models/ff/pmos.sp
deleted file mode 100644
index e08967e4..00000000
--- a/technology/scn3me_subm/models/ff/pmos.sp
+++ /dev/null
@@ -1,9 +0,0 @@
-*********************************************
-* Transistor Models
-* Note: These models are approximate
-* and should be substituted with actual
-* models from MOSIS or SCN3ME
-*********************************************
-
-.MODEL p PMOS (LEVEL=49 VTHO=-0.322431
-+ NSUB=6E16 U0=212 K1=0.0821 TOX=13.9n VERSION=3.3.0)
diff --git a/technology/scn3me_subm/models/nom/nmos.sp b/technology/scn3me_subm/models/nom/nmos.sp
deleted file mode 100644
index 59f88cfd..00000000
--- a/technology/scn3me_subm/models/nom/nmos.sp
+++ /dev/null
@@ -1,9 +0,0 @@
-*********************************************
-* Transistor Models
-* Note: These models are approximate
-* and should be substituted with actual
-* models from MOSIS or SCN3ME
-*********************************************
-
-.MODEL n NMOS (LEVEL=49 VTHO=0.669845
-+ NSUB=6E16 U0=458 K1=0.5705 TOX=13.9n VERSION=3.3.0)
diff --git a/technology/scn3me_subm/models/nom/pmos.sp b/technology/scn3me_subm/models/nom/pmos.sp
deleted file mode 100644
index 69f3aacd..00000000
--- a/technology/scn3me_subm/models/nom/pmos.sp
+++ /dev/null
@@ -1,9 +0,0 @@
-*********************************************
-* Transistor Models
-* Note: These models are approximate
-* and should be substituted with actual
-* models from MOSIS or SCN3ME
-*********************************************
-
-.MODEL p PMOS (LEVEL=49 VTHO=-0.322431
-+ NSUB=6E16 U0=212 K1=0.0821 TOX=13.9n VERSION=3.3.0)
diff --git a/technology/scn3me_subm/models/ss/nmos.sp b/technology/scn3me_subm/models/ss/nmos.sp
deleted file mode 100644
index 4e8a531f..00000000
--- a/technology/scn3me_subm/models/ss/nmos.sp
+++ /dev/null
@@ -1,10 +0,0 @@
-*********************************************
-* Transistor Models
-* Note: These models are approximate
-* and should be substituted with actual
-* models from MOSIS or SCN3ME
-*********************************************
-
-.MODEL n NMOS (LEVEL=49 VTHO=0.669845
-+ NSUB=6E16 U0=460 K1=0.5705 TOX=13.9n VERSION=3.3.0)
-
diff --git a/technology/scn3me_subm/models/ss/pmos.sp b/technology/scn3me_subm/models/ss/pmos.sp
deleted file mode 100644
index e08967e4..00000000
--- a/technology/scn3me_subm/models/ss/pmos.sp
+++ /dev/null
@@ -1,9 +0,0 @@
-*********************************************
-* Transistor Models
-* Note: These models are approximate
-* and should be substituted with actual
-* models from MOSIS or SCN3ME
-*********************************************
-
-.MODEL p PMOS (LEVEL=49 VTHO=-0.322431
-+ NSUB=6E16 U0=212 K1=0.0821 TOX=13.9n VERSION=3.3.0)
diff --git a/technology/scn3me_subm/sp_lib/cell_6t.sp b/technology/scn3me_subm/sp_lib/cell_6t.sp
deleted file mode 100644
index 76c40f31..00000000
--- a/technology/scn3me_subm/sp_lib/cell_6t.sp
+++ /dev/null
@@ -1,10 +0,0 @@
-
-*********************** "cell_6t" ******************************
-.SUBCKT cell_6t bl br wl vdd gnd
-M_1 Q Qb vdd vdd p W='0.9u' L=1.2u
-M_2 Qb Q vdd vdd p W='0.9u' L=1.2u
-M_3 br wl Qb gnd n W='1.2u' L=0.6u
-M_4 bl wl Q gnd n W='1.2u' L=0.6u
-M_5 Qb Q gnd gnd n W='2.4u' L=0.6u
-M_6 Q Qb gnd gnd n W='2.4u' L=0.6u
-.ENDS $ cell_6t
diff --git a/technology/scn3me_subm/sp_lib/dff.sp b/technology/scn3me_subm/sp_lib/dff.sp
deleted file mode 100644
index d3fa7635..00000000
--- a/technology/scn3me_subm/sp_lib/dff.sp
+++ /dev/null
@@ -1,27 +0,0 @@
-*********************** "dff" ******************************
-* Positive edge-triggered FF
-.SUBCKT dff D Q clk vdd gnd
-M0 vdd clk a_2_6# vdd p w=12u l=0.6u
-M1 a_17_74# D vdd vdd p w=6u l=0.6u
-M2 a_22_6# clk a_17_74# vdd p w=6u l=0.6u
-M3 a_31_74# a_2_6# a_22_6# vdd p w=6u l=0.6u
-M4 vdd a_34_4# a_31_74# vdd p w=6u l=0.6u
-M5 a_34_4# a_22_6# vdd vdd p w=6u l=0.6u
-M6 a_61_74# a_34_4# vdd vdd p w=6u l=0.6u
-M7 a_66_6# a_2_6# a_61_74# vdd p w=6u l=0.6u
-M8 a_76_84# clk a_66_6# vdd p w=3u l=0.6u
-M9 vdd Q a_76_84# vdd p w=3u l=0.6u
-M10 gnd clk a_2_6# gnd n w=6u l=0.6u
-M11 Q a_66_6# vdd vdd p w=12u l=0.6u
-M12 a_17_6# D gnd gnd n w=3u l=0.6u
-M13 a_22_6# a_2_6# a_17_6# gnd n w=3u l=0.6u
-M14 a_31_6# clk a_22_6# gnd n w=3u l=0.6u
-M15 gnd a_34_4# a_31_6# gnd n w=3u l=0.6u
-M16 a_34_4# a_22_6# gnd gnd n w=3u l=0.6u
-M17 a_61_6# a_34_4# gnd gnd n w=3u l=0.6u
-M18 a_66_6# clk a_61_6# gnd n w=3u l=0.6u
-M19 a_76_6# a_2_6# a_66_6# gnd n w=3u l=0.6u
-M20 gnd Q a_76_6# gnd n w=3u l=0.6u
-M21 Q a_66_6# gnd gnd n w=6u l=0.6u
-
-.ENDS dff
diff --git a/technology/scn3me_subm/sp_lib/ms_flop.sp b/technology/scn3me_subm/sp_lib/ms_flop.sp
deleted file mode 100644
index abf664e7..00000000
--- a/technology/scn3me_subm/sp_lib/ms_flop.sp
+++ /dev/null
@@ -1,29 +0,0 @@
-*master-slave flip-flop with both output and inverted ouput
-
-.subckt dlatch din dout dout_bar clk clk_bar vdd gnd
-*clk inverter
-mPff1 clk_bar clk vdd vdd p W=1.8u L=0.6u m=1
-mNff1 clk_bar clk gnd gnd n W=0.9u L=0.6u m=1
-
-*transmission gate 1
-mtmP1 din clk int1 vdd p W=1.8u L=0.6u m=1
-mtmN1 din clk_bar int1 gnd n W=0.9u L=0.6u m=1
-
-*foward inverter
-mPff3 dout_bar int1 vdd vdd p W=1.8u L=0.6u m=1
-mNff3 dout_bar int1 gnd gnd n W=0.9u L=0.6u m=1
-
-*backward inverter
-mPff4 dout dout_bar vdd vdd p W=1.8u L=0.6u m=1
-mNf4 dout dout_bar gnd gnd n W=0.9u L=0.6u m=1
-
-*transmission gate 2
-mtmP2 int1 clk_bar dout vdd p W=1.8u L=0.6u m=1
-mtmN2 int1 clk dout gnd n W=0.9u L=0.6u m=1
-.ends dlatch
-
-.subckt ms_flop din dout dout_bar clk vdd gnd
-xmaster din mout mout_bar clk clk_bar vdd gnd dlatch
-xslave mout_bar dout_bar dout clk_bar clk_nn vdd gnd dlatch
-.ends flop
-
diff --git a/technology/scn3me_subm/sp_lib/replica_cell_6t.sp b/technology/scn3me_subm/sp_lib/replica_cell_6t.sp
deleted file mode 100644
index 1fa75a55..00000000
--- a/technology/scn3me_subm/sp_lib/replica_cell_6t.sp
+++ /dev/null
@@ -1,10 +0,0 @@
-
-*********************** "cell_6t" ******************************
-.SUBCKT replica_cell_6t bl br wl vdd gnd
-M_1 gnd net_2 vdd vdd p W='0.9u' L=1.2u
-M_2 net_2 gnd vdd vdd p W='0.9u' L=1.2u
-M_3 br wl net_2 gnd n W='1.2u' L=0.6u
-M_4 bl wl gnd gnd n W='1.2u' L=0.6u
-M_5 net_2 gnd gnd gnd n W='2.4u' L=0.6u
-M_6 gnd net_2 gnd gnd n W='2.4u' L=0.6u
-.ENDS $ replica_cell_6t
diff --git a/technology/scn3me_subm/sp_lib/sense_amp.sp b/technology/scn3me_subm/sp_lib/sense_amp.sp
deleted file mode 100644
index 1399228d..00000000
--- a/technology/scn3me_subm/sp_lib/sense_amp.sp
+++ /dev/null
@@ -1,12 +0,0 @@
-*********************** "sense_amp" ******************************
-
-.SUBCKT sense_amp bl br dout en vdd gnd
-M_1 dout net_1 vdd vdd p W='5.4*1u' L=0.6u
-M_2 dout net_1 net_2 gnd n W='2.7*1u' L=0.6u
-M_3 net_1 dout vdd vdd p W='5.4*1u' L=0.6u
-M_4 net_1 dout net_2 gnd n W='2.7*1u' L=0.6u
-M_5 bl en dout vdd p W='7.2*1u' L=0.6u
-M_6 br en net_1 vdd p W='7.2*1u' L=0.6u
-M_7 net_2 en gnd gnd n W='2.7*1u' L=0.6u
-.ENDS sense_amp
-
diff --git a/technology/scn3me_subm/sp_lib/tri_gate.sp b/technology/scn3me_subm/sp_lib/tri_gate.sp
deleted file mode 100644
index 0d298172..00000000
--- a/technology/scn3me_subm/sp_lib/tri_gate.sp
+++ /dev/null
@@ -1,13 +0,0 @@
-*********************** tri_gate ******************************
-
-.SUBCKT tri_gate in out en en_bar vdd gnd
-
-M_1 net_2 in_inv gnd gnd n W='1.2*1u' L=0.6u
-M_2 net_3 in_inv vdd vdd p W='2.4*1u' L=0.6u
-M_3 out en_bar net_3 vdd p W='2.4*1u' L=0.6u
-M_4 out en net_2 gnd n W='1.2*1u' L=0.6u
-M_5 in_inv in vdd vdd p W='2.4*1u' L=0.6u
-M_6 in_inv in gnd gnd n W='1.2*1u' L=0.6u
-
-
-.ENDS
diff --git a/technology/scn3me_subm/sp_lib/write_driver.sp b/technology/scn3me_subm/sp_lib/write_driver.sp
deleted file mode 100644
index 88f80361..00000000
--- a/technology/scn3me_subm/sp_lib/write_driver.sp
+++ /dev/null
@@ -1,38 +0,0 @@
-*********************** Write_Driver ******************************
-.SUBCKT write_driver din bl br en vdd gnd
-
-**** Inverter to conver Data_in to data_in_bar ******
-* din_bar = inv(din)
-M_1 din_bar din gnd gnd n W=1.2u L=0.6u
-M_2 din_bar din vdd vdd p W=2.1u L=0.6u
-
-**** 2input nand gate follwed by inverter to drive BL ******
-* din_bar_gated = nand(en, din)
-M_3 din_bar_gated en net_7 gnd n W=2.1u L=0.6u
-M_4 net_7 din gnd gnd n W=2.1u L=0.6u
-M_5 din_bar_gated en vdd vdd p W=2.1u L=0.6u
-M_6 din_bar_gated din vdd vdd p W=2.1u L=0.6u
-* din_bar_gated_bar = inv(din_bar_gated)
-M_7 din_bar_gated_bar din_bar_gated vdd vdd p W=2.1u L=0.6u
-M_8 din_bar_gated_bar din_bar_gated gnd gnd n W=1.2u L=0.6u
-
-**** 2input nand gate follwed by inverter to drive BR******
-* din_gated = nand(en, din_bar)
-M_9 din_gated en vdd vdd p W=2.1u L=0.6u
-M_10 din_gated en net_8 gnd n W=2.1u L=0.6u
-M_11 net_8 din_bar gnd gnd n W=2.1u L=0.6u
-M_12 din_gated din_bar vdd vdd p W=2.1u L=0.6u
-* din_gated_bar = inv(din_gated)
-M_13 din_gated_bar din_gated vdd vdd p W=2.1u L=0.6u
-M_14 din_gated_bar din_gated gnd gnd n W=1.2u L=0.6u
-
-************************************************
-* pull down with en enable
-M_15 bl din_gated_bar net_5 gnd n W=3.6u L=0.6u
-M_16 br din_bar_gated_bar net_5 gnd n W=3.6u L=0.6u
-M_17 net_5 en gnd gnd n W=3.6u L=0.6u
-
-
-
-.ENDS $ write_driver
-
diff --git a/technology/scn3me_subm/sue_lib/cell_6t.sue b/technology/scn3me_subm/sue_lib/cell_6t.sue
deleted file mode 100644
index 427b1d05..00000000
--- a/technology/scn3me_subm/sue_lib/cell_6t.sue
+++ /dev/null
@@ -1,46 +0,0 @@
-# SUE version MMI_SUE5.0.7
-
-proc SCHEMATIC_cell_6t {} {
- make inout -name BL -origin {190 360}
- make inout -name BR -origin {830 360}
- make input -name WL -origin {240 120}
- make global -orient RXY -name vdd -origin {520 160}
- make global -name gnd -origin {510 600}
- make pmos -orient RY -W 0.9u -L 1.2u -origin {630 230}
- make pmos -orient RXY -W 0.9u -L 1.2u -origin {400 230}
- make nmos -orient R90 -W 1.2 -L 0.6u -origin {740 360}
- make nmos -orient R90X -W 1.2 -L 0.6u -origin {270 360}
- make nmos -W 2.4u -L 0.6u -origin {630 490}
- make nmos -orient RX -W 2.4u -L 0.6u -origin {400 490}
- make_wire 630 550 630 530
- make_wire 400 530 400 550
- make_wire 400 190 400 170
- make_wire 630 170 630 190
- make_wire 400 360 400 270
- make_wire 310 360 400 360
- make_wire 630 360 630 450
- make_wire 630 360 700 360
- make_wire 270 300 270 120
- make_wire 270 120 740 120
- make_wire 740 120 740 300
- make_wire 230 360 190 360
- make_wire 780 360 830 360
- make_wire 510 550 400 550
- make_wire 510 550 630 550
- make_wire 510 550 510 600
- make_wire 520 170 400 170
- make_wire 520 170 630 170
- make_wire 520 160 520 170
- make_wire 240 120 270 120
- make_wire 460 290 630 290
- make_wire 460 290 460 490
- make_wire 460 290 460 230
- make_wire 630 290 630 360
- make_wire 630 290 630 270
- make_wire 570 420 400 420
- make_wire 570 420 570 490
- make_wire 570 420 570 230
- make_wire 400 420 400 360
- make_wire 400 420 400 450
-}
-
diff --git a/technology/scn3me_subm/sue_lib/ms_flop.sue b/technology/scn3me_subm/sue_lib/ms_flop.sue
deleted file mode 100644
index 85cc8e03..00000000
--- a/technology/scn3me_subm/sue_lib/ms_flop.sue
+++ /dev/null
@@ -1,84 +0,0 @@
-# SUE version MMI_SUE5.0.7
-
-proc SCHEMATIC_ms_flop {} {
- make pmos -orient R90X -W 1.8u -L 0.6u -origin {40 250}
- make nmos -orient R270 -W 0.9u -L 0.6u -origin {40 380}
- make inverter -WP 1.8u -LP 0.6u -WN 0.9u -LN 0.6u -origin {-270 540}
- make inverter -WP 1.8u -LP 0.6u -WN 0.9u -LN 0.6u -origin {310 310}
- make inverter -orient RX -WP 1.8u -LP 0.6u -WN 0.9u -LN 0.6u -origin {430 730}
- make pmos -orient R90X -W 1.8u -L 0.6u -origin {190 670}
- make nmos -orient R270 -W 0.9u -L 0.6u -origin {190 780}
- make input -name clk -origin {-380 540}
- make input -name din -origin {-370 320}
- make pmos -orient R90X -W 1.8u -L 0.6u -origin {720 250}
- make nmos -orient R270 -W 0.9u -L 0.6u -origin {720 380}
- make inverter -WP 1.8u -LP 0.6u -WN 0.9u -LN 0.6u -origin {990 310}
- make pmos -orient R90X -W 1.8u -L 0.6u -origin {870 670}
- make nmos -orient R270 -W 0.9u -L 0.6u -origin {870 780}
- make inverter -WP 1.8u -LP 0.6u -WN 0.9u -LN 0.6u -origin {620 540}
- make output -name dout -origin {1410 310}
- make output -name dout_bar -origin {1430 930}
- make inverter -orient RX -WP 1.8u -LP 0.6u -WN 0.9u -LN 0.6u -origin {1110 730}
- make_wire -330 160 40 160
- make_wire 40 160 40 190
- make_wire -370 320 0 320
- make_wire 360 310 480 310
- make_wire 460 730 480 730
- make_wire 230 730 380 730
- make_wire 100 310 100 720
- make_wire 100 720 150 720
- make_wire 100 310 80 310
- make_wire 100 310 280 310
- make_wire 0 250 0 320
- make_wire 0 320 0 380
- make_wire 80 250 80 310
- make_wire 80 310 80 380
- make_wire 40 440 40 540
- make_wire -330 840 190 840
- make_wire 230 670 230 730
- make_wire 230 730 230 780
- make_wire 150 670 150 720
- make_wire 150 720 150 780
- make_wire 190 540 190 610
- make_wire -330 540 -330 840
- make_wire -220 540 40 540
- make_wire 40 540 190 540
- make_wire -380 540 -330 540
- make_wire -330 540 -300 540
- make_wire -330 540 -330 160
- make_wire 720 160 720 190
- make_wire 1140 730 1160 730
- make_wire 780 310 780 720
- make_wire 780 720 830 720
- make_wire 780 310 760 310
- make_wire 780 310 960 310
- make_wire 680 320 680 380
- make_wire 760 250 760 310
- make_wire 760 310 760 380
- make_wire 720 440 720 540
- make_wire 910 670 910 730
- make_wire 910 730 910 780
- make_wire 830 670 830 720
- make_wire 830 720 830 780
- make_wire 870 540 870 610
- make_wire 720 540 870 540
- make_wire 670 540 720 540
- make_wire 480 310 480 730
- make_wire 1160 310 1160 730
- make_wire 530 540 530 160
- make_wire 530 160 720 160
- make_wire 530 540 190 540
- make_wire 530 540 590 540
- make_wire 530 540 530 840
- make_wire 530 840 870 840
- make_wire 680 310 480 310
- make_wire 680 310 680 250
- make_wire 680 310 680 320
- make_wire 950 730 910 730
- make_wire 950 730 1060 730
- make_wire 1040 310 1160 310
- make_wire 1160 310 1410 310
- make_wire 950 930 1430 930
- make_wire 950 730 950 930
-}
-
diff --git a/technology/scn3me_subm/sue_lib/replica_cell_6t.sue b/technology/scn3me_subm/sue_lib/replica_cell_6t.sue
deleted file mode 100644
index 56e72056..00000000
--- a/technology/scn3me_subm/sue_lib/replica_cell_6t.sue
+++ /dev/null
@@ -1,49 +0,0 @@
-# SUE version MMI_SUE5.0.7
-
-proc SCHEMATIC_replica_cell_6t {} {
- make inout -name BL -origin {190 360}
- make inout -name BR -origin {830 360}
- make input -name WL -origin {240 120}
- make global -orient RXY -name vdd -origin {520 160}
- make global -name gnd -origin {510 600}
- make pmos -orient RY -W 0.9u -L 1.2u -origin {630 230}
- make pmos -orient RXY -W 0.9u -L 1.2u -origin {400 230}
- make nmos -orient R90 -W 1.2 -L 0.6u -origin {740 360}
- make nmos -orient R90X -W 1.2 -L 0.6u -origin {270 360}
- make nmos -W 2.4u -L 0.6u -origin {630 490}
- make nmos -orient RX -W 2.4u -L 0.6u -origin {400 490}
- make_wire 630 550 630 530
- make_wire 400 530 400 550
- make_wire 400 190 400 170
- make_wire 630 170 630 190
- make_wire 400 360 400 270
- make_wire 630 360 630 450
- make_wire 630 360 700 360
- make_wire 270 300 270 120
- make_wire 270 120 740 120
- make_wire 740 120 740 300
- make_wire 230 360 190 360
- make_wire 780 360 830 360
- make_wire 510 550 400 550
- make_wire 510 550 630 550
- make_wire 510 550 510 600
- make_wire 520 170 400 170
- make_wire 520 170 630 170
- make_wire 520 160 520 170
- make_wire 240 120 270 120
- make_wire 460 290 630 290
- make_wire 460 290 460 490
- make_wire 460 290 460 230
- make_wire 630 290 630 360
- make_wire 630 290 630 270
- make_wire 570 420 400 420
- make_wire 570 420 570 490
- make_wire 570 420 570 230
- make_wire 400 420 400 360
- make_wire 400 420 400 450
- make_wire 320 360 320 550
- make_wire 320 550 400 550
- make_wire 320 360 310 360
- make_wire 320 360 400 360
-}
-
diff --git a/technology/scn3me_subm/sue_lib/sense_amp.sue b/technology/scn3me_subm/sue_lib/sense_amp.sue
deleted file mode 100644
index 4d29e11a..00000000
--- a/technology/scn3me_subm/sue_lib/sense_amp.sue
+++ /dev/null
@@ -1,52 +0,0 @@
-# SUE version MMI_SUE5.0.7
-
-proc SCHEMATIC_sense_amp {} {
- make inout -name BL -origin {260 10}
- make global -orient RXY -name vdd -origin {490 170}
- make global -name gnd -origin {480 660}
- make input -name sclk -origin {180 610}
- make nmos -W 3.9u -L 0.6u -origin {600 500}
- make nmos -orient RX -W 3.9u -L 0.6u -origin {370 500}
- make pmos -orient RY -W 3u -L 0.6u -origin {600 240}
- make pmos -orient RXY -W 3u -L 0.6u -origin {370 240}
- make nmos -W 3.9u -L 0.6u -origin {480 610}
- make inout -name BR -origin {710 20}
- make pmos -W 3.9u -L 0.6u -origin {710 90}
- make pmos -orient RX -W 3.9u -L 0.6u -origin {260 90}
- make output -orient RXY -name dout -origin {110 370}
- make_wire 600 560 600 540
- make_wire 370 540 370 560
- make_wire 370 200 370 180
- make_wire 600 180 600 200
- make_wire 490 180 370 180
- make_wire 490 180 600 180
- make_wire 490 170 490 180
- make_wire 430 300 600 300
- make_wire 430 300 430 500
- make_wire 430 300 430 240
- make_wire 600 300 600 280
- make_wire 540 430 370 430
- make_wire 540 430 540 500
- make_wire 540 430 540 240
- make_wire 370 430 370 460
- make_wire 480 560 600 560
- make_wire 480 560 370 560
- make_wire 480 560 480 570
- make_wire 480 650 480 660
- make_wire 420 610 180 610
- make_wire 650 90 320 90
- make_wire 600 360 710 360
- make_wire 710 360 710 130
- make_wire 600 360 600 300
- make_wire 600 360 600 460
- make_wire 370 370 260 370
- make_wire 260 370 260 130
- make_wire 370 370 370 430
- make_wire 370 370 370 280
- make_wire 260 10 260 50
- make_wire 710 20 710 50
- make_wire 320 90 180 90
- make_wire 180 90 180 610
- make_wire 110 370 260 370
-}
-
diff --git a/technology/scn3me_subm/sue_lib/tri_gate.sue b/technology/scn3me_subm/sue_lib/tri_gate.sue
deleted file mode 100644
index d296171f..00000000
--- a/technology/scn3me_subm/sue_lib/tri_gate.sue
+++ /dev/null
@@ -1,37 +0,0 @@
-# SUE version MMI_SUE5.0.7
-
-proc SCHEMATIC_tri_gate {} {
- make global -orient RXY -name vdd -origin {630 150}
- make global -name gnd -origin {630 570}
- make input -name tri_in -origin {320 340}
- make output -name tri_out -origin {690 360}
- make input -name en -origin {570 410}
- make input -name en_bar -origin {570 310}
- make nmos -W 1.2u -L 0.6u -origin {630 490}
- make nmos -W 1.2u -L 0.6u -origin {630 410}
- make pmos -orient RY -W 2.4u -L 0.6u -origin {630 310}
- make pmos -orient RY -W 2.4u -L 0.6u -origin {630 230}
- make pmos -orient RY -W 2.4u -L 0.6u -origin {380 290}
- make nmos -W 1.2u -L 0.6u -origin {380 400}
- make_wire 570 490 470 490
- make_wire 470 230 570 230
- make_wire 630 550 380 550
- make_wire 380 550 380 440
- make_wire 630 550 630 570
- make_wire 630 550 630 530
- make_wire 630 170 380 170
- make_wire 380 170 380 250
- make_wire 630 170 630 190
- make_wire 630 170 630 150
- make_wire 320 340 320 400
- make_wire 320 340 320 290
- make_wire 380 340 470 340
- make_wire 380 340 380 330
- make_wire 380 340 380 360
- make_wire 470 340 470 490
- make_wire 470 340 470 230
- make_wire 630 360 630 350
- make_wire 630 360 630 370
- make_wire 630 360 690 360
-}
-
diff --git a/technology/scn3me_subm/sue_lib/write_driver.sue b/technology/scn3me_subm/sue_lib/write_driver.sue
deleted file mode 100644
index de3909a7..00000000
--- a/technology/scn3me_subm/sue_lib/write_driver.sue
+++ /dev/null
@@ -1,44 +0,0 @@
-# SUE version MMI_SUE5.0.7
-
-proc SCHEMATIC_write_driver {} {
- make inout -name BL -origin {550 260}
- make inout -name BR -origin {830 250}
- make inverter -WP 2.1u -LP 0.6u -WN 1.2u -LN 0.6u -origin {280 520}
- make nand2 -WP 2.1u -WN 2.1u -origin {90 360}
- make inverter -WP 2.1u -LP 0.6u -WN 1.2u -LN 0.6u -origin {270 360}
- make nmos -W 3.6u -L 0.6u -origin {830 410}
- make nmos -W 3.6u -L 0.6u -origin {710 610}
- make global -name gnd -origin {710 690}
- make nand2 -WP 2.1u -WN 2.1u -origin {90 520}
- make nmos -W 3.6u -L 0.6u -origin {550 410}
- make input -name wen -origin {-290 340}
- make input -name din -origin {-290 380}
- make inverter -WP 2.1u -LP 0.6u -WN 1.2u -LN 0.6u -origin {-80 540}
- make_wire 160 360 240 360
- make_wire 830 250 830 370
- make_wire 550 260 550 370
- make_wire 550 450 550 560
- make_wire 550 560 710 560
- make_wire 710 560 710 570
- make_wire 710 560 830 560
- make_wire 830 560 830 450
- make_wire 710 650 710 690
- make_wire 250 520 160 520
- make_wire 770 410 770 520
- make_wire 770 520 330 520
- make_wire 320 360 490 360
- make_wire 490 360 490 410
- make_wire -180 380 -290 380
- make_wire -180 380 70 380
- make_wire -180 540 -110 540
- make_wire -180 380 -180 540
- make_wire -30 540 70 540
- make_wire 20 340 20 500
- make_wire 20 500 70 500
- make_wire 20 340 70 340
- make_wire -240 340 -240 610
- make_wire -240 610 650 610
- make_wire -240 340 20 340
- make_wire -240 340 -290 340
-}
-
diff --git a/technology/scn3me_subm/tech/README b/technology/scn3me_subm/tech/README
deleted file mode 100644
index 0d923fcb..00000000
--- a/technology/scn3me_subm/tech/README
+++ /dev/null
@@ -1,10 +0,0 @@
-The file SCN3ME_SUBM.30.tech is from qflow 1.2 and has the following
-license information:
----------------------------------------------------------------
-Tim Edwards
-Open Circuit Design
-v1.0 April 2013
-v1.1 May 2015
-v1.2 April 2017
----------------------------------------------------------------
-GPL Copyright (c) 2017
diff --git a/technology/scn3me_subm/tech/SCN3ME_SUBM.30.tech b/technology/scn3me_subm/tech/SCN3ME_SUBM.30.tech
deleted file mode 100644
index be511001..00000000
--- a/technology/scn3me_subm/tech/SCN3ME_SUBM.30.tech
+++ /dev/null
@@ -1,7891 +0,0 @@
-tech
- format 32
- scmos
-end
-
-version
- version 2002a
- description "SCMOS: Submit as technology.lambda: SCN3ME_SUBM.30 [to process: AMIc5]"
-end
-
-planes
- well,w
- implant,i
- select,s
- cap,c
- active,a
- metal1,m1
- metal2,m2
- metal3,m3
- oxide,ox
- comment
- xp
- contact
- via1,v1
- via2,v2
- fill
-end
-
-types
- well nwell,nw
- well pwell,pw
- implant n_field_implant,nfi
- implant p_field_implant,pfi
- select nselect,ns
- select pselect,ps
- cap electrode,poly2,el,p2
- cap electrodecontact,poly2contact,poly2c,p2c,elc
- cap p2m12contact,p2m12c
- cap electrodecap,ecap,poly2cap,p2cap,pcap
- contact genericpoly2contact,gc2
- active ntransistor,nfet
- active ptransistor,pfet
- active diffusion,diff
- active transistor,fet
- active ndiffusion,ndif,green
- active pdiffusion,pdif,brown
- active ndcontact,ndc
- active pdcontact,pdc
- active psubstratepdiff,pohmicdiff,pod,ppdiff,ppd,psd
- active nsubstratendiff,nohmicdiff,nod,nndiff,nnd,nsd
- active psubstratepcontact,pohmiccontact,poc,pwcontact,pwc,psc
- active nsubstratencontact,nohmiccontact,noc,nwcontact,nwc,nsc
- active polysilicon,red,poly,p
- active polycontact,pcontact,polycut,pc
- contact genericcontact,gcontact,gc
- metal1 metal1,m1,blue
- metal1 pseudo_rmetal1,prm1
- metal1 rmetal1,rm1
- metal1 fillm1,fm1
- metal1 m2contact,m2cut,m2c,via1,v1
- metal2 metal2,m2,purple
- metal2 pseudo_rmetal2,prm2
- metal2 rmetal2,rm2
- metal2 fillm2,fm2
- via1 gv1
- metal2 m3contact,m3cut,m3c,via2,v2
- metal3 metal3,m3,cyan
- metal3 pseudo_rmetal3,prm3
- metal3 rmetal3,rm3
- metal3 fillm3,fm3
- via2 gv2
- metal3 pad
- oxide glass
- cap high_resist,hr
- cap poly2_high_resist,phr
- active pseudo_rpoly,prp
- active rpoly,rp
- cap pseudo_rpoly2,prp2
- cap rpoly2,rp2
- active pseudo_rndiffusion,prnd
- active rndiffusion,rndiff,rnd
- active pseudo_rpdiffusion,prpd
- active rpdiffusion,rpdiff,rpd
- active pseudo_rnwell,prnwell,prnw
- active rnwell,rnw
- implant filln,fn
- fill filla,fa
- fill fillb,fb
- active fillp,fp
- active fillapm,fapm
- xp xp
- xp m1p
- xp m2p
- xp m3p
- comment comment
- comment bb
-end
-
-contact
- pc poly metal1
- ndc ndiff metal1
- pdc pdiff metal1
- nsc nsd metal1
- psc psd metal1
- m2c metal1 metal2
- m3c metal2 metal3
- stackable pc m2c pm12contact,pm12c
- stackable pdc m2c pdm12contact,pdm12c
- stackable psc m2c psm12contact,psm12c,pom12c,pwm12c
- stackable ndc m2c ndm12contact,ndm12c
- stackable nsc m2c nsm12contact,nsm12c,nom12c,nwm12c
- stackable m2c m3c m123contact,m123c
-end
-
-styles
- styletype mos
- nwell 12
- pwell 13
- nfi 53
- pfi 54
- nselect 43
- pselect 44
- diff 25
- tran 2 4
- ndiff 2
- pdiff 4
- nsd 3
- psd 5
- nfet 6 7
- pfet 8 9
- ndc 2 20 32
- pdc 4 20 32
- nsc 3 20 32
- psc 5 20 32
- poly 1
- pcontact 1 20 32
- gc 32
- metal1 20
- rm1 20 48
- prm1 48
- m1p 20 34
- fm1 20 34
- fp 1 34
- fa 32
- fb 45 34
- fn 45 34
- fapm 1 20 21 34
- gv1 55
- m2contact 20 21 55
- p2m12contact 14 20 21 32 55
- metal2 21
- rm2 21 48
- prm2 48
- m2p 21 34
- fm2 21 34
- gv2 56
- m3contact 21 22 56
- metal3 22
- rm3 22 48
- prm3 48
- m3p 22 34
- fm3 22 34
- pad 22 23 34 38
- glass 34
- xp 25 34
- ecap 10 14
- poly2 14
- p2c 14 20 32
- gc2 19
- hr 10
- phr 14 48
- rp 47 48
- prp 48
- rp2 14 48
- prp2 48
- rnd 2 48
- prnd 48
- rpd 4 53
- prpd 53
- rnw 12 53
- prnw 54
- comment 45
- bb 32
- error_p 42
- error_s 42
- error_ps 42
- magnet 54
- rotate 57
- fence 59
-end
-
-compose
- compose nfet poly ndiff
- compose pfet poly pdiff
- paint diff nselect ndiff
- paint diff pselect pdiff
- compose tran poly diff
- paint tran nselect nfet
- paint tran pselect pfet
- paint psd ns ndiff
- paint nsd ps pdiff
- paint ndiff ps psd
- paint pdiff ns nsd
- paint pad m1 pad
- paint pad m2 pad
- paint pad m2c pad
- paint pfi nwell nfi
- paint nfi pwell pfi
- paint ndc nwell pdc
- paint nfet nwell pfet
- paint ndiff nwell pdiff
- paint psd nwell nsd
- paint psc nwell nsc
- paint pdc pwell ndc
- paint pfet pwell nfet
- paint pdiff pwell ndiff
- paint nsd pwell psd
- paint nsc pwell psc
- paint poly2 poly ecap
- erase ecap poly poly2
- paint p2c poly2 p2c
- paint p2c ecap p2c
- paint p2m12c poly2 p2m12c
- paint p2m12c ecap p2m12c
- paint pad m3 pad
- compose phr poly2 hr
- paint hr poly2 phr
- paint poly2 hr phr
- erase phr hr poly2
-#CRE/CRM
- compose rm1 prm1 m1
- compose rm2 prm2 m2
- compose rm3 prm3 m3
- compose rp prp poly
- compose rp2 prp2 poly2
- compose rnd prnd ndiff
- compose rpd prpd pdiff
- paint nwell rnw space
- paint nwell prnw space
- paint poly fp fp
- paint m1 fm1 fm1
- paint m2 fm2 fm2
- paint m3 fm3 fm3
-end
-
-connect
- nwell,nsc/a,nsd nwell,nsc/a,nsd
- pwell,psc/a,psd pwell,psc/a,psd
- m1,fm1,fapm,ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1,m2c/m1 m1,fm1,fapm,ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1,m2c/m1
- m2,fm2,fapm,m2c/m2,m3c/m2,m3c/m2 m2,fm2,fapm,m2c/m2,m3c/m2,m3c/m2
- m3,fm3,fapm,m3c/m3 m3,fm3,fapm,m3c/m3
- ndiff,ndc/a,pdiff,pdc/a ndiff,ndc/a,pdiff,pdc/a
- poly,fp,nfet,pfet,fet,fapm,pc/a poly,fp,nfet,pfet,fet,fapm,pc/a
- gc2 poly2,ecap,metal1
- p2c poly2,ecap,m1,fm1,fapm,m2c/m1
- p2m12c poly2,ecap,m1,fm1,fapm,m2c/m1,m2,fm2,fapm,m2c/m2,m3c/m2
- poly2,ecap,p2c,p2m12c poly2,ecap,p2c,p2m12c
- gc2 poly2,ecap,m1,fm1,fapm,m2c/m1
- gc poly,fp,ndiff,pdiff,nsd,psd,m1,fm1,fapm,m2c/m1
- gv1 m1,fm1,fapm,ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1,m2,fm2,fapm,m3c/m2
- gv2 m2,fm2,fapm,m2c/m2,m3c/m2,m3,fm3,fapm
- pad m1,fm1,m2,fm2,m3,fm3
- rm1 prm1
- rm2 prm2
- rm3 prm3
- rnw prnw
- rp prp
- rp2 prp2
- rnd prnd
- rpd prpd
- phr hr
-end
-
-cifoutput
-
-style lambda=0.30(p)
- scalefactor 30 15
-
- # This is a custom section to add bounding boxes in OpenRAM
- layer BB bb
- labels bb
- calma 63 0
-
- layer CWN nwell,rnw
- bloat-or pdiff,rpd,pdc/a,pfet * 180
- bloat-or nsd,nsc/a * 90
- bloat-or nfi * 120
- grow 90
- shrink 90
- labels nwell,rnw
- calma 42 0
-
- layer CWP pwell
- bloat-or ndiff,rnd,ndc/a,nfet * 180
- bloat-or psd,psc/a * 90
- bloat-or pfi * 120
- grow 90
- shrink 90
- and-not CWN
- labels pwell
- calma 41 0
-
- templayer TNS ns
-
- templayer TPS ps
-
-#we give priority to selects autogenerated around diffusions (vrs. ohmics)
-#XDP = (pdiff*60) Or ps
-#XDN = (ndiff*60) Or ns
-#FSP = ((pdiff*60,psc*60) Or XDP And-Not XDN Or ps shrink-grow
-#FSN = ((ndiff*60,nsc*60) Or XDN And-Not FDP Or ns shrink-grow
-#CSN = FSN
-#CSP = FSP
-
-#diffusion auto-nselect (will have priority)
- templayer XDN
- bloat-or ndiff,rnd,ndc/a * 60 psd,psc/a 0
- or TNS
-
-#diffusion auto-pselect (will have priority)
- templayer XDP
- bloat-or pdiff,rpd,pdc/a * 60 nsd,nsc/a 0
- or TPS
-
-#final pselect
- templayer FSP
- bloat-or pdiff,rpd,pfet,psd,pdc/a,psc/a,pfet * 60 ndiff,rnd,ndc/a,nsd,nsc/a,nfet 0
- or XDP
-#give diff nselect priority
- and-not XDN
- or TPS
- shrink 15
- grow 15
- grow 15
- shrink 15
-
-#final nselect
- templayer FSN
- bloat-or ndiff,rnd,nfet,nsd,ndc/a,nsc/a,nfet * 60 pdiff,rpd,pdc/a,psd,psc/a,pfet 0
- or XDN
-#never conflict with final pselect
- and-not FSP
-#drawn select always goes
- or TNS
- shrink 15
- grow 15
- grow 15
- shrink 15
-
- layer CSN FSN
- calma 45 0
-
- layer CSP FSP
- calma 44 0
-
- layer CAA diff,ndiff,rnd,nfet,nsd,pdiff,rpd,pfet,psd,ndc/a,nsc/a,pdc/a,psc/a,pfet,pfet,fet
- labels diff,ndiff,rnd,nfet,nsd,pdiff,rpd,pfet,psd,ndc/a,nsc/a,pdc/a,psc/a,pfet,pfet,fet
- calma 43 0
-
- layer CCA ndc/m1,nsc/m1
- squares 30 60 90
- calma 48 0
-
- layer CCA pdc/m1,psc/m1
- squares 30 60 90
- calma 48 0
-
- layer CPG poly,rp,nfet,pfet,fet,pc/a
- labels poly,rp,nfet,pfet,fet,pc/a
- calma 46 0
-
- layer CCP pc/m1
- squares 30 60 90
- calma 47 0
-
- layer CCE gc2
- squares 0 60 90
- calma 55 0
-
- layer CCE p2c,p2m12c
- squares 30 60 90
- calma 55 0
-
- layer CCE gc2
- squares 0 60 90
- calma 55 0
-
- layer CCC gc
- squares 0 60 90
- calma 25 0
-
- layer CV1 m2c/m1,p2m12c
- squares 30 60 90
- calma 50 0
-
- layer CV1 gv1
- squares 0 60 90
- calma 50 0
-
- layer CV2 m3c/m2
- squares 30 60 90
- calma 61 0
-
- layer CV2 gv2
- squares 0 60 90
- calma 61 0
-
-
- templayer XPAD1 pad
- shrink 180
-
- templayer XPAD2 XPAD1
- shrink 180
-
- layer CM3 pad
- labels pad
- calma 62 0
-
- layer CV2 XPAD2
- squares 240 60 300
- calma 61 0
-
- layer CM2 pad
- labels pad
- calma 51 0
-
- layer CV1 XPAD2
- squares 60 60 300
- calma 50 0
-
- layer CM1 pad
- calma 49 0
-
- layer CM1 m1,rm1,ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1,m2c/m1,p2c,p2m12c
- labels m1,rm1,ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1,m2c/m1,p2c,p2m12c
- calma 49 0
-
- layer CM2 m2,rm2,m2c/m2,m3c/m2,m3c/m2,p2m12c
- labels m2,rm2,m2c/m2,m3c/m2,m3c/m2,p2m12c
- calma 51 0
-
- layer CMFP m1p
- labels m1p
- calma 81 0
-
- layer CMSP m2p
- labels m2p
- calma 82 0
-
- layer 100 fp
- labels fp
- calma 100 0
-
- layer 101 fm1
- labels fm1
- calma 101 0
-
- layer 102 fm2
- labels fm2
- calma 102 0
-
- layer 103 fm3
- labels fm3
- calma 103 0
-
- layer 109 fa
- or fb
- squares 0 210 120
- labels fa
- calma 109 0
-
- layer 119 fn
- calma 119 0
-
- layer 110 fapm
- labels fapm
- calma 110 0
-
-# layer CPG fp
- layer CPG fp,fapm
- squares 0 210 120
- labels fp
- calma 46 0
-
-# layer CM1 fm1
- layer CM1 fm1,fapm
- squares 0 210 120
- labels fm1
- calma 49 0
-
-# layer CM2 fm2
- layer CM2 fm2,fapm
-
- squares 0 210 120
- labels fm2
- calma 51 0
-
-# layer CM3 fm3
- layer CM3 fm3,fapm
-
- squares 0 210 120
- labels fm3
- calma 62 0
-
- layer CM3 m3,rm3,m3c/m3
- labels m3,rm3,m3c/m3
- calma 62 0
-
- layer CMTP m3p
- labels m3p
- calma 83 0
-
- layer COG pad
- shrink 600
- labels pad
- calma 52 0
-
- layer COG glass
- labels glass
- calma 52 0
-
- layer CFI nfi,pfi
- labels nfi,pfi
- calma 27 0
-
- layer CHR hr,phr
- labels hr,phr
- calma 34 0
-
- layer CEL poly2,ecap,phr,p2c,p2m12c
- labels poly2,ecap,phr,p2c,p2m12c
- calma 56 0
-
-#CRE/CRM
- layer CRW rnw,prnw
- labels rnw,prnw
- calma 65 0
- layer CRG rp,prp
- labels rp,prp
- calma 67 0
- layer CRD rnd,rpd,prnd,prpd
- labels rnd,rpd,prnd,prpd
- calma 66 0
- layer CRE rnw,rp,rnd,rpd,rp2
- labels rnw,rp,rnd,rpd,rp2
- calma 64 0
- layer CRF rm1,prm1
- labels rm1,prm1
- calma 71 0
- layer CRS rm2,prm2
- labels rm2,prm2
- calma 72 0
- layer CRG2 rp2,prp2
- labels rp2,prp2
- calma 68 0
- layer CRT rm3,prm3
- labels rm3,prm3
- calma 73 0
-#CRE/CRM layer CRM rm1,prm1,rm2,prm2,rm3,prm3
-#CRE/CRM calma 70 0
-
- layer CX comment
- labels comment
- calma 63 0
-
- layer XP pad,xp
- labels pad,xp
- calma 26 0
-
-style fill-only
- scalefactor 30 15
-
- layer 100 fp
- calma 100 0
-
- layer 101 fm1
- calma 101 0
-
- layer 102 fm2
- calma 102 0
-
- layer 103 fm3
- calma 103 0
-
- layer 109 fa
- or fb
- calma 109 0
-
- layer 119 fn
- calma 119 0
-
-style fapm-boxes
-
-# this output style creates fill boxes automatically (to meet minimum
-# density requirements for poly and metal layers) 5 microns outside of
-# drawn layout IF: 1. you have a flattened version of your chip
-# 2. over which you paint the special fill layer 'fa', preferably with
-# a size that is a multiple of 7 + n * (7 + 4), 3. set 'cif
-# ostype fapm-boxes' and cif out to a file (this actually creates the
-# fill boxes on cif/strm layer '110' using the magic 'squares'
-# command), 4. cif in the resulting file (which creates boxes on magic
-# layer 'fapm') and place this cell onto your chip (and verify absence
-# of drc errors or shorts), then 5. cif out under your regular cif out
-# style, where the 'fapm' layer creates fill boxes on poly and all
-# metal layers.
-
- scalefactor 30 15
-
- templayer CRIT fapm,fn,diff,ndiff,rnd,nfet,nsd,pdiff,rpd,pfet,psd,ndc/a,nsc/a,pdc/a,psc/a,pfet,pfet,fet,poly,rp,nfet,pfet,fet,pc/a,poly2,ecap,phr,p2c,p2m12c
- or fm1,m1,rm1,ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1,m2c/m1,p2c,p2m12c
- or fm2,m2,rm2,m2c/m2,m3c/m2,m3c/m2,p2m12c
- or fm3,m3,rm3,m3c/m3
- or glass,pad
- grow 510
- and fa
-
- layer 110 fa
- squares 0 210 120
- and-not CRIT
- shrink 90
- grow 90
- or fapm
- labels fapm
- calma 110 0
-
-style fapm-stripes
- scalefactor 30 15
-
-# this output style creates the above layer 110 as stripes for reduced size
-# HOWEVER it requires each 'fa' box to first be an exact multiple as above
-# and then *replacing* the left side (1-lambda wide) stripe of each 'fa' box
-# to be a 1-lambda wide layer 'fb' box -- else you won't get strips!
-
- templayer CRIT fapm,fn,diff,ndiff,rnd,nfet,nsd,pdiff,rpd,pfet,psd,ndc/a,nsc/a,pdc/a,psc/a,pfet,pfet,fet,poly,rp,nfet,pfet,fet,pc/a,poly2,ecap,phr,p2c,p2m12c
- or fm1,m1,rm1,ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1,m2c/m1,p2c,p2m12c
- or fm2,m2,rm2,m2c/m2,m3c/m2,m3c/m2,p2m12c
- or fm3,m3,rm3,m3c/m3
- or glass,pad
- grow 510
- and fa
-
- templayer FB fa
- or fb
- squares 0 210 120
- and-not CRIT
-
- layer 110 fa
- squares 0 210 120
- and-not CRIT
- or FB
- shrink 90
- grow 90
- or fapm
- labels fapm
- calma 110 0
-
-
-style lambda=0.30(cp)
- scalefactor 30 15
-
- layer CWN nwell,rnw
- bloat-or pdiff,rpd,pdc/a,pfet * 180
- bloat-or nsd,nsc/a * 90
- bloat-or nfi * 120
- grow 90
- shrink 90
- labels nwell,rnw
- calma 42 0
-
- layer CWP pwell
- bloat-or ndiff,rnd,ndc/a,nfet * 180
- bloat-or psd,psc/a * 90
- bloat-or pfi * 120
- grow 90
- shrink 90
- and-not CWN
- labels pwell
- calma 41 0
-
- templayer TNS ns
-
- templayer TPS ps
-
-#we give priority to selects autogenerated around diffusions (vrs. ohmics)
-#XDP = (pdiff*60) Or ps
-#XDN = (ndiff*60) Or ns
-#FSP = ((pdiff*60,psc*60) Or XDP And-Not XDN Or ps shrink-grow
-#FSN = ((ndiff*60,nsc*60) Or XDN And-Not FDP Or ns shrink-grow
-#CSN = FSN
-#CSP = FSP
-
-#diffusion auto-nselect (will have priority)
- templayer XDN
- bloat-or ndiff,rnd,ndc/a * 60 psd,psc/a 0
- or TNS
-
-#diffusion auto-pselect (will have priority)
- templayer XDP
- bloat-or pdiff,rpd,pdc/a * 60 nsd,nsc/a 0
- or TPS
-
-#final pselect
- templayer FSP
- bloat-or pdiff,rpd,pfet,psd,pdc/a,psc/a,pfet * 60 ndiff,rnd,ndc/a,nsd,nsc/a,nfet 0
- or XDP
-#give diff nselect priority
- and-not XDN
- or TPS
- shrink 15
- grow 15
- grow 15
- shrink 15
-
-#final nselect
- templayer FSN
- bloat-or ndiff,rnd,nfet,nsd,ndc/a,nsc/a,nfet * 60 pdiff,rpd,pdc/a,psd,psc/a,pfet 0
- or XDN
-#never conflict with final pselect
- and-not FSP
-#drawn select always goes
- or TNS
- shrink 15
- grow 15
- grow 15
- shrink 15
-
- layer CSN FSN
- calma 45 0
-
- layer CSP FSP
- calma 44 0
-
- layer CAA diff,ndiff,rnd,nfet,nsd,pdiff,rpd,pfet,psd,ndc/a,nsc/a,pdc/a,psc/a,pfet,pfet,fet
- labels diff,ndiff,rnd,nfet,nsd,pdiff,rpd,pfet,psd,ndc/a,nsc/a,pdc/a,psc/a,pfet,pfet,fet
- calma 43 0
-
- layer CCC ndc/m1,nsc/m1
- squares 30 60 90
- calma 25 0
-
- layer CCC pdc/m1,psc/m1
- squares 30 60 90
- calma 25 0
-
- layer CPG poly,rp,nfet,pfet,fet,pc/a
- labels poly,rp,nfet,pfet,fet,pc/a
- calma 46 0
-
- layer CCC pc/m1
- squares 30 60 90
- calma 25 0
-
- layer CCC gc2
- squares 0 60 90
- calma 25 0
-
- layer CCC p2c,p2m12c
- squares 30 60 90
- calma 25 0
-
- layer CCC gc2
- squares 0 60 90
- calma 25 0
-
- layer CCC gc
- squares 0 60 90
- calma 25 0
-
- layer CV1 m2c/m1,p2m12c
- squares 30 60 90
- calma 50 0
-
- layer CV1 gv1
- squares 0 60 90
- calma 50 0
-
- layer CV2 m3c/m2
- squares 30 60 90
- calma 61 0
-
- layer CV2 gv2
- squares 0 60 90
- calma 61 0
-
-
- templayer XPAD1 pad
- shrink 180
-
- templayer XPAD2 XPAD1
- shrink 180
-
- layer CM3 pad
- labels pad
- calma 62 0
-
- layer CV2 XPAD2
- squares 240 60 300
- calma 61 0
-
- layer CM2 pad
- labels pad
- calma 51 0
-
- layer CV1 XPAD2
- squares 60 60 300
- calma 50 0
-
- layer CM1 pad
- calma 49 0
-
- layer CM1 m1,rm1,ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1,m2c/m1,p2c,p2m12c
- labels m1,rm1,ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1,m2c/m1,p2c,p2m12c
- calma 49 0
-
- layer CM2 m2,rm2,m2c/m2,m3c/m2,m3c/m2,p2m12c
- labels m2,rm2,m2c/m2,m3c/m2,m3c/m2,p2m12c
- calma 51 0
-
- layer CMFP m1p
- labels m1p
- calma 81 0
-
- layer CMSP m2p
- labels m2p
- calma 82 0
-
- layer 100 fp
- labels fp
- calma 100 0
-
- layer 101 fm1
- labels fm1
- calma 101 0
-
- layer 102 fm2
- labels fm2
- calma 102 0
-
- layer 103 fm3
- labels fm3
- calma 103 0
-
- layer 109 fa
- or fb
- squares 0 210 120
- labels fa
- calma 109 0
-
- layer 119 fn
- calma 119 0
-
- layer 110 fapm
- labels fapm
- calma 110 0
-
-# layer CPG fp
- layer CPG fp,fapm
- squares 0 210 120
- labels fp
- calma 46 0
-
-# layer CM1 fm1
- layer CM1 fm1,fapm
- squares 0 210 120
- labels fm1
- calma 49 0
-
-# layer CM2 fm2
- layer CM2 fm2,fapm
-
- squares 0 210 120
- labels fm2
- calma 51 0
-
-# layer CM3 fm3
- layer CM3 fm3,fapm
-
- squares 0 210 120
- labels fm3
- calma 62 0
-
- layer CM3 m3,rm3,m3c/m3
- labels m3,rm3,m3c/m3
- calma 62 0
-
- layer CMTP m3p
- labels m3p
- calma 83 0
-
- layer COG pad
- shrink 600
- labels pad
- calma 52 0
-
- layer COG glass
- labels glass
- calma 52 0
-
- layer CFI nfi,pfi
- labels nfi,pfi
- calma 27 0
-
- layer CHR hr,phr
- labels hr,phr
- calma 34 0
-
- layer CEL poly2,ecap,phr,p2c,p2m12c
- labels poly2,ecap,phr,p2c,p2m12c
- calma 56 0
-
-#CRE/CRM
- layer CRW rnw,prnw
- labels rnw,prnw
- calma 65 0
- layer CRG rp,prp
- labels rp,prp
- calma 67 0
- layer CRD rnd,rpd,prnd,prpd
- labels rnd,rpd,prnd,prpd
- calma 66 0
- layer CRE rnw,rp,rnd,rpd,rp2
- labels rnw,rp,rnd,rpd,rp2
- calma 64 0
- layer CRF rm1,prm1
- labels rm1,prm1
- calma 71 0
- layer CRS rm2,prm2
- labels rm2,prm2
- calma 72 0
- layer CRG2 rp2,prp2
- labels rp2,prp2
- calma 68 0
- layer CRT rm3,prm3
- labels rm3,prm3
- calma 73 0
-#CRE/CRM layer CRM rm1,prm1,rm2,prm2,rm3,prm3
-#CRE/CRM calma 70 0
-
- layer CX comment
- labels comment
- calma 63 0
-
- layer XP pad,xp
- labels pad,xp
- calma 26 0
-
-
-style lambda=0.30(c)
- scalefactor 30 15
-
- layer CWN nwell,rnw
- bloat-or pdiff,rpd,pdc/a,pfet * 180
- bloat-or nsd,nsc/a * 90
- bloat-or nfi * 120
- grow 90
- shrink 90
- labels nwell,rnw
- calma 42 0
-
- templayer TNS ns
-
- templayer TPS ps
-
-#we give priority to selects autogenerated around diffusions (vrs. ohmics)
-#XDP = (pdiff*60) Or ps
-#XDN = (ndiff*60) Or ns
-#FSP = ((pdiff*60,psc*60) Or XDP And-Not XDN Or ps shrink-grow
-#FSN = ((ndiff*60,nsc*60) Or XDN And-Not FDP Or ns shrink-grow
-#CSN = FSN
-#CSP = FSP
-
-#diffusion auto-nselect (will have priority)
- templayer XDN
- bloat-or ndiff,rnd,ndc/a * 60 psd,psc/a 0
- or TNS
-
-#diffusion auto-pselect (will have priority)
- templayer XDP
- bloat-or pdiff,rpd,pdc/a * 60 nsd,nsc/a 0
- or TPS
-
-#final pselect
- templayer FSP
- bloat-or pdiff,rpd,pfet,psd,pdc/a,psc/a,pfet * 60 ndiff,rnd,ndc/a,nsd,nsc/a,nfet 0
- or XDP
-#give diff nselect priority
- and-not XDN
- or TPS
- shrink 15
- grow 15
- grow 15
- shrink 15
-
-#final nselect
- templayer FSN
- bloat-or ndiff,rnd,nfet,nsd,ndc/a,nsc/a,nfet * 60 pdiff,rpd,pdc/a,psd,psc/a,pfet 0
- or XDN
-#never conflict with final pselect
- and-not FSP
-#drawn select always goes
- or TNS
- shrink 15
- grow 15
- grow 15
- shrink 15
-
- layer CSN FSN
- calma 45 0
-
- layer CSP FSP
- calma 44 0
-
- layer CAA diff,ndiff,rnd,nfet,nsd,pdiff,rpd,pfet,psd,ndc/a,nsc/a,pdc/a,psc/a,pfet,pfet,fet
- labels diff,ndiff,rnd,nfet,nsd,pdiff,rpd,pfet,psd,ndc/a,nsc/a,pdc/a,psc/a,pfet,pfet,fet
- calma 43 0
-
- layer CCC ndc/m1,nsc/m1
- squares 30 60 90
- calma 25 0
-
- layer CCC pdc/m1,psc/m1
- squares 30 60 90
- calma 25 0
-
- layer CPG poly,rp,nfet,pfet,fet,pc/a
- labels poly,rp,nfet,pfet,fet,pc/a
- calma 46 0
-
- layer CCC pc/m1
- squares 30 60 90
- calma 25 0
-
- layer CCC gc2
- squares 0 60 90
- calma 25 0
-
- layer CCC p2c,p2m12c
- squares 30 60 90
- calma 25 0
-
- layer CCC gc2
- squares 0 60 90
- calma 25 0
-
- layer CCC gc
- squares 0 60 90
- calma 25 0
-
- layer CV1 m2c/m1,p2m12c
- squares 30 60 90
- calma 50 0
-
- layer CV1 gv1
- squares 0 60 90
- calma 50 0
-
- layer CV2 m3c/m2
- squares 30 60 90
- calma 61 0
-
- layer CV2 gv2
- squares 0 60 90
- calma 61 0
-
-
- templayer XPAD1 pad
- shrink 180
-
- templayer XPAD2 XPAD1
- shrink 180
-
- layer CM3 pad
- labels pad
- calma 62 0
-
- layer CV2 XPAD2
- squares 240 60 300
- calma 61 0
-
- layer CM2 pad
- labels pad
- calma 51 0
-
- layer CV1 XPAD2
- squares 60 60 300
- calma 50 0
-
- layer CM1 pad
- calma 49 0
-
- layer CM1 m1,rm1,ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1,m2c/m1,p2c,p2m12c
- labels m1,rm1,ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1,m2c/m1,p2c,p2m12c
- calma 49 0
-
- layer CM2 m2,rm2,m2c/m2,m3c/m2,m3c/m2,p2m12c
- labels m2,rm2,m2c/m2,m3c/m2,m3c/m2,p2m12c
- calma 51 0
-
- layer CMFP m1p
- labels m1p
- calma 81 0
-
- layer CMSP m2p
- labels m2p
- calma 82 0
-
- layer 100 fp
- labels fp
- calma 100 0
-
- layer 101 fm1
- labels fm1
- calma 101 0
-
- layer 102 fm2
- labels fm2
- calma 102 0
-
- layer 103 fm3
- labels fm3
- calma 103 0
-
- layer 109 fa
- or fb
- squares 0 210 120
- labels fa
- calma 109 0
-
- layer 119 fn
- calma 119 0
-
- layer 110 fapm
- labels fapm
- calma 110 0
-
-# layer CPG fp
- layer CPG fp,fapm
- squares 0 210 120
- labels fp
- calma 46 0
-
-# layer CM1 fm1
- layer CM1 fm1,fapm
- squares 0 210 120
- labels fm1
- calma 49 0
-
-# layer CM2 fm2
- layer CM2 fm2,fapm
-
- squares 0 210 120
- labels fm2
- calma 51 0
-
-# layer CM3 fm3
- layer CM3 fm3,fapm
-
- squares 0 210 120
- labels fm3
- calma 62 0
-
- layer CM3 m3,rm3,m3c/m3
- labels m3,rm3,m3c/m3
- calma 62 0
-
- layer CMTP m3p
- labels m3p
- calma 83 0
-
- layer COG pad
- shrink 600
- labels pad
- calma 52 0
-
- layer COG glass
- labels glass
- calma 52 0
-
- layer CFI nfi,pfi
- labels nfi,pfi
- calma 27 0
-
- layer CHR hr,phr
- labels hr,phr
- calma 34 0
-
- layer CEL poly2,ecap,phr,p2c,p2m12c
- labels poly2,ecap,phr,p2c,p2m12c
- calma 56 0
-
-#CRE/CRM
- layer CRW rnw,prnw
- labels rnw,prnw
- calma 65 0
- layer CRG rp,prp
- labels rp,prp
- calma 67 0
- layer CRD rnd,rpd,prnd,prpd
- labels rnd,rpd,prnd,prpd
- calma 66 0
- layer CRE rnw,rp,rnd,rpd,rp2
- labels rnw,rp,rnd,rpd,rp2
- calma 64 0
- layer CRF rm1,prm1
- labels rm1,prm1
- calma 71 0
- layer CRS rm2,prm2
- labels rm2,prm2
- calma 72 0
- layer CRG2 rp2,prp2
- labels rp2,prp2
- calma 68 0
- layer CRT rm3,prm3
- labels rm3,prm3
- calma 73 0
-#CRE/CRM layer CRM rm1,prm1,rm2,prm2,rm3,prm3
-#CRE/CRM calma 70 0
-
- layer CX comment
- labels comment
- calma 63 0
-
- layer XP pad,xp
- labels pad,xp
- calma 26 0
-
-
-style lambda=0.30()
- scalefactor 30 15
-
- layer CWN nwell,rnw
- bloat-or pdiff,rpd,pdc/a,pfet * 180
- bloat-or nsd,nsc/a * 90
- bloat-or nfi * 120
- grow 90
- shrink 90
- labels nwell,rnw
- calma 42 0
-
- templayer TNS ns
-
- templayer TPS ps
-
-#we give priority to selects autogenerated around diffusions (vrs. ohmics)
-#XDP = (pdiff*60) Or ps
-#XDN = (ndiff*60) Or ns
-#FSP = ((pdiff*60,psc*60) Or XDP And-Not XDN Or ps shrink-grow
-#FSN = ((ndiff*60,nsc*60) Or XDN And-Not FDP Or ns shrink-grow
-#CSN = FSN
-#CSP = FSP
-
-#diffusion auto-nselect (will have priority)
- templayer XDN
- bloat-or ndiff,rnd,ndc/a * 60 psd,psc/a 0
- or TNS
-
-#diffusion auto-pselect (will have priority)
- templayer XDP
- bloat-or pdiff,rpd,pdc/a * 60 nsd,nsc/a 0
- or TPS
-
-#final pselect
- templayer FSP
- bloat-or pdiff,rpd,pfet,psd,pdc/a,psc/a,pfet * 60 ndiff,rnd,ndc/a,nsd,nsc/a,nfet 0
- or XDP
-#give diff nselect priority
- and-not XDN
- or TPS
- shrink 15
- grow 15
- grow 15
- shrink 15
-
-#final nselect
- templayer FSN
- bloat-or ndiff,rnd,nfet,nsd,ndc/a,nsc/a,nfet * 60 pdiff,rpd,pdc/a,psd,psc/a,pfet 0
- or XDN
-#never conflict with final pselect
- and-not FSP
-#drawn select always goes
- or TNS
- shrink 15
- grow 15
- grow 15
- shrink 15
-
- layer CSN FSN
- calma 45 0
-
- layer CSP FSP
- calma 44 0
-
- layer CAA diff,ndiff,rnd,nfet,nsd,pdiff,rpd,pfet,psd,ndc/a,nsc/a,pdc/a,psc/a,pfet,pfet,fet
- labels diff,ndiff,rnd,nfet,nsd,pdiff,rpd,pfet,psd,ndc/a,nsc/a,pdc/a,psc/a,pfet,pfet,fet
- calma 43 0
-
- layer CCA ndc/m1,nsc/m1
- squares 30 60 90
- calma 48 0
-
- layer CCA pdc/m1,psc/m1
- squares 30 60 90
- calma 48 0
-
- layer CPG poly,rp,nfet,pfet,fet,pc/a
- labels poly,rp,nfet,pfet,fet,pc/a
- calma 46 0
-
- layer CCP pc/m1
- squares 30 60 90
- calma 47 0
-
- layer CCE gc2
- squares 0 60 90
- calma 55 0
-
- layer CCE p2c,p2m12c
- squares 30 60 90
- calma 55 0
-
- layer CCE gc2
- squares 0 60 90
- calma 55 0
-
- layer CCC gc
- squares 0 60 90
- calma 25 0
-
- layer CV1 m2c/m1,p2m12c
- squares 30 60 90
- calma 50 0
-
- layer CV1 gv1
- squares 0 60 90
- calma 50 0
-
- layer CV2 m3c/m2
- squares 30 60 90
- calma 61 0
-
- layer CV2 gv2
- squares 0 60 90
- calma 61 0
-
-
- templayer XPAD1 pad
- shrink 180
-
- templayer XPAD2 XPAD1
- shrink 180
-
- layer CM3 pad
- labels pad
- calma 62 0
-
- layer CV2 XPAD2
- squares 240 60 300
- calma 61 0
-
- layer CM2 pad
- labels pad
- calma 51 0
-
- layer CV1 XPAD2
- squares 60 60 300
- calma 50 0
-
- layer CM1 pad
- calma 49 0
-
- layer CM1 m1,rm1,ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1,m2c/m1,p2c,p2m12c
- labels m1,rm1,ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1,m2c/m1,p2c,p2m12c
- calma 49 0
-
- layer CM2 m2,rm2,m2c/m2,m3c/m2,m3c/m2,p2m12c
- labels m2,rm2,m2c/m2,m3c/m2,m3c/m2,p2m12c
- calma 51 0
-
- layer CMFP m1p
- labels m1p
- calma 81 0
-
- layer CMSP m2p
- labels m2p
- calma 82 0
-
- layer 100 fp
- labels fp
- calma 100 0
-
- layer 101 fm1
- labels fm1
- calma 101 0
-
- layer 102 fm2
- labels fm2
- calma 102 0
-
- layer 103 fm3
- labels fm3
- calma 103 0
-
- layer 109 fa
- or fb
- squares 0 210 120
- labels fa
- calma 109 0
-
- layer 119 fn
- calma 119 0
-
- layer 110 fapm
- labels fapm
- calma 110 0
-
-# layer CPG fp
- layer CPG fp,fapm
- squares 0 210 120
- labels fp
- calma 46 0
-
-# layer CM1 fm1
- layer CM1 fm1,fapm
- squares 0 210 120
- labels fm1
- calma 49 0
-
-# layer CM2 fm2
- layer CM2 fm2,fapm
-
- squares 0 210 120
- labels fm2
- calma 51 0
-
-# layer CM3 fm3
- layer CM3 fm3,fapm
-
- squares 0 210 120
- labels fm3
- calma 62 0
-
- layer CM3 m3,rm3,m3c/m3
- labels m3,rm3,m3c/m3
- calma 62 0
-
- layer CMTP m3p
- labels m3p
- calma 83 0
-
- layer COG pad
- shrink 600
- labels pad
- calma 52 0
-
- layer COG glass
- labels glass
- calma 52 0
-
- layer CFI nfi,pfi
- labels nfi,pfi
- calma 27 0
-
- layer CHR hr,phr
- labels hr,phr
- calma 34 0
-
- layer CEL poly2,ecap,phr,p2c,p2m12c
- labels poly2,ecap,phr,p2c,p2m12c
- calma 56 0
-
-#CRE/CRM
- layer CRW rnw,prnw
- labels rnw,prnw
- calma 65 0
- layer CRG rp,prp
- labels rp,prp
- calma 67 0
- layer CRD rnd,rpd,prnd,prpd
- labels rnd,rpd,prnd,prpd
- calma 66 0
- layer CRE rnw,rp,rnd,rpd,rp2
- labels rnw,rp,rnd,rpd,rp2
- calma 64 0
- layer CRF rm1,prm1
- labels rm1,prm1
- calma 71 0
- layer CRS rm2,prm2
- labels rm2,prm2
- calma 72 0
- layer CRG2 rp2,prp2
- labels rp2,prp2
- calma 68 0
- layer CRT rm3,prm3
- labels rm3,prm3
- calma 73 0
-#CRE/CRM layer CRM rm1,prm1,rm2,prm2,rm3,prm3
-#CRE/CRM calma 70 0
-
- layer CX comment
- labels comment
- calma 63 0
-
- layer XP pad,xp
- labels pad,xp
- calma 26 0
-
-end
-
-cifinput
-
-style lambda=0.30(p)
- scalefactor 30
-
- # This is a custom section to add bounding boxes in OpenRAM
- layer bb BB
- labels BB
- calma 63 0
-
-layer nwell CWN
- and-not CWNR
- and-not CTA
- labels CWN
- calma CWN 42 *
-
- layer rnw CWN
- and-not CWNR
- and CRE
- and-not CSB
- and-not CRD
- and-not CAA
- and-not CPG
- calma CWN 42 *
-
- layer rnw CWN
- and-not CWNR
- and CRW
- and-not CRD
- and-not CAA
- and-not CPG
- calma CWN 42 *
-
- layer pseudo_rnwell CRW
- and-not CRE
- calma CRW 65 *
-
- layer pwell CWP
- and-not CTA
- labels CWP
- calma CWP 41 *
-
- layer diff CAA
- and-not CTA
- and-not CPG
- and-not CWNR
- and-not COP
- and-not CSN
- and-not CSP
- labels CAA
- calma CAA 43 *
-
- layer tran CAA
- and-not CTA
- and CPG
- and-not CWNR
- and-not COP
- and-not CSN
- and-not CSP
- labels CAA
- calma CAA 43 *
-
- calma CSN 45 *
-
- calma CSP 44 *
-
- layer ndiff CAA
- and CSN
- and-not CWNR
- and-not CTA
- and-not CRE
- and-not CSB
- and-not CPG
- and-not CWN
- and-not CSP
- and-not CBA
- labels CAA
- calma CAA 43 *
-
- layer rnd CAA
- and CSN
- and-not CWNR
- and CRE
- and-not CSB
- and-not CPG
- and-not CWN
- and-not CSP
- and-not CBA
- calma CAA 43 *
-
- layer rnd CAA
- and CSN
- and-not CWNR
- and CRD
- and-not CSB
- and-not CPG
- and-not CWN
- and-not CSP
- and-not CBA
- calma CAA 43 *
-
- layer pseudo_rndiff CRD
- and-not CRE
- and-not CAA
- and-not CSB
- and-not CPG
- and-not CWN
- and-not CSP
- and CSN
- and-not CBA
- calma CRD 66 *
-
- layer pdiff CAA
- and CSP
- and-not CWNR
- and-not CTA
- and-not CRE
- and-not CSB
- and-not CPG
- and CWN
- and-not CSN
- and-not CPS
- and CSP
- and-not CBA
- labels CAA
- calma CAA 43 *
-
- layer rpd CAA
- and CSP
- and-not CWNR
- and CRE
- and-not CSB
- and-not CPG
- and CWN
- and-not CSN
- and-not CPS
- and CSP
- and-not CBA
- calma CAA 43 *
-
- layer rpd CAA
- and CSP
- and-not CWNR
- and CRD
- and-not CPG
- and CWN
- and-not CSN
- and-not CPS
- and CSP
- and-not CBA
- calma CAA 43 *
-
- layer pseudo_rpdiff CRD
- and-not CRE
- and-not CAA
- and-not CSB
- and-not CPG
- and CWN
- and-not CSN
- and-not CPS
- and CSP
- and-not CBA
- calma CRD 66 *
-
- layer nfet CAA
- and CSN
- and-not CWNR
- and-not CTA
- and CPG
- and-not CEL
- and-not CWN
- and-not CSP
- and-not CBA
- labels CAA
- calma CAA 43 *
-
- layer pfet CAA
- and CSP
- and-not CWNR
- and-not CTA
- and CPG
- and-not CEL
- and CWN
- and-not CSN
- and-not CPS
- and CSP
- and-not CBA
- labels CAA
- calma CAA 43 *
-
- layer nsd CAA
- and CSN
- and-not CWNR
- and-not CTA
- and CWN
- and-not CSP
- and-not CBA
- labels CAA
- calma CAA 43 *
-
- layer psd CAA
- and CSP
- and-not CWNR
- and-not CTA
- and-not CWN
- and-not CSN
- and-not CPS
- and CSP
- and-not CBA
- labels CAA
- calma CAA 43 *
-
- layer ndc CAA
- and CSN
- and CCA
- and-not CV1
- and-not CWNR
- and-not CTA
-
- and-not CWN
- and CM1
- grow 30
- grow 15
- shrink 15
- calma CCA 48 *
-
- layer ndc CAA
- and CSN
- and CCC
- and-not CV1
- and-not CWNR
- and-not CTA
-
- and-not CWN
- and CM1
- grow 30
- grow 15
- shrink 15
- calma CCC 25 *
-
- layer nsc CAA
- and CSN
- and CCA
- and-not CV1
- and-not CWNR
- and-not CTA
-
- and CWN
- and CM1
- grow 30
- grow 15
- shrink 15
- calma CCA 48 *
-
- layer nsc CAA
- and CSN
- and CCC
- and-not CV1
- and-not CWNR
- and-not CTA
-
- and CWN
- and CM1
- grow 30
- grow 15
- shrink 15
- calma CCC 25 *
-
- layer pdc CAA
- and CSP
- and CCA
- and-not CV1
- and-not CTA
-
- and-not CPS
- and CWN
- and CM1
- grow 30
- grow 15
- shrink 15
- calma CCA 48 *
-
- layer pdc CAA
- and CSP
- and CCC
- and-not CV1
- and-not CTA
-
- and-not CPS
- and CWN
- and CM1
- grow 30
- grow 15
- shrink 15
- calma CCC 25 *
-
- layer psc CAA
- and CSP
- and CCA
- and-not CV1
- and-not CTA
-
- and-not CPS
- and-not CWN
- and CM1
- grow 30
- grow 15
- shrink 15
- calma CCA 48 *
-
- layer psc CAA
- and CSP
- and CCC
- and-not CV1
- and-not CWNR
- and-not CTA
-
- and-not CPS
- and-not CWN
- and CM1
- grow 30
- grow 15
- shrink 15
- calma CCC 25 *
-
- layer ndc CAA
- and CSN
- and CCA
- and CV1
- and CV2
- and-not CWNR
- and-not CTA
-
- and-not CWN
- and CM1
- grow 30
- grow 15
- shrink 15
- calma CCA 48 *
-
- layer ndc CAA
- and CSN
- and CCC
- and CV1
- and CV2
- and-not CWNR
- and-not CTA
-
- and-not CWN
- and CM1
- grow 30
- grow 15
- shrink 15
- calma CCC 25 *
-
- layer nsc CAA
- and CSN
- and CCA
- and CV1
- and CV2
- and-not CWNR
- and-not CTA
-
- and CWN
- and CM1
- grow 30
- grow 15
- shrink 15
- calma CCA 48 *
-
- layer nsc CAA
- and CSN
- and CCC
- and CV1
- and CV2
- and-not CWNR
- and-not CTA
-
- and CWN
- and CM1
- grow 30
- grow 15
- shrink 15
- calma CCC 25 *
-
- layer pdc CAA
- and CSP
- and CCA
- and CV1
- and CV2
- and-not CTA
-
- and-not CPS
- and CWN
- and CM1
- grow 30
- grow 15
- shrink 15
- calma CCA 48 *
-
- layer pdc CAA
- and CSP
- and CCC
- and CV1
- and CV2
- and-not CTA
-
- and-not CPS
- and CWN
- and CM1
- grow 30
- grow 15
- shrink 15
- calma CCC 25 *
-
- layer psc CAA
- and CSP
- and CCA
- and CV1
- and CV2
- and-not CTA
-
- and-not CPS
- and-not CWN
- and CM1
- grow 30
- grow 15
- shrink 15
- calma CCA 48 *
-
- layer psc CAA
- and CSP
- and CCC
- and CV1
- and CV2
- and-not CWNR
- and-not CTA
-
- and-not CPS
- and-not CWN
- and CM1
- grow 30
- grow 15
- shrink 15
- calma CCC 25 *
-
- layer poly CPG
- and-not CRE
- labels CPG
- calma CPG 46 *
-
- layer rp CPG
- and CRE
- and-not CSB
- calma CPG 46 *
-
- layer rp CPG
- and CRG
- calma CPG 46 *
-
- layer pseudo_rpoly CRG
- and-not CRE
- calma CRG 67 *
-
- layer pc CCP
- and-not CV1
- and CPG
- and-not CPC
- and-not CEL
- and-not CAA
- grow 30
- and CM1
- grow 15
- shrink 15
- calma CCP 47 *
-
- layer pc CCC
- and-not CV1
- and CPG
- and-not CPC
- and-not CEL
- and-not CAA
- grow 30
- and CM1
- grow 15
- shrink 15
- calma CCC 25 *
-
- layer pc CCP
- and CV1
- and CV2
- and CPG
- and-not CPC
- and-not CEL
- and-not CAA
- grow 30
- and CM1
- grow 15
- shrink 15
- calma CCP 47 *
-
- layer pc CCC
- and CV1
- and CV2
- and CPG
- and-not CPC
- and-not CEL
- and-not CAA
- grow 30
- and CM1
- grow 15
- shrink 15
- calma CCC 25 *
-
- layer p2c CCE
- and-not CV1
- and CPG
- and CEL
- and-not CPC
- and-not CAA
- grow 30
- and CM1
- grow 15
- shrink 15
- calma CCE 55 *
-
- layer p2c CCC
- and-not CV1
- and CPG
- and CEL
- and-not CPC
- and-not CAA
- grow 30
- and CM1
- grow 15
- shrink 15
- calma CCC 25 *
-
- layer p2c CCE
- and CV1
- and CV2
- and CPG
- and CEL
- and-not CPC
- and-not CAA
- grow 30
- and CM1
- grow 15
- shrink 15
- calma CCE 55 *
-
- layer p2c CCC
- and CV1
- and CV2
- and CPG
- and CEL
- and-not CPC
- and-not CAA
- grow 30
- and CM1
- grow 15
- shrink 15
- calma CCC 25 *
-
- layer gc CCP
- and-not CPG
- and-not CPC
- calma CCP 47 *
-
- layer gc CCP
- and-not CM1
- calma CCP 47 *
-
- layer gc CCA
- and-not COP
- and-not CAA
- and-not CBA
- calma CCA 48 *
-
- layer gc CCA
- and-not COP
- and-not CM1
- calma CCA 48 *
-
- layer gc CCC
- and-not COP
- and-not CPG
- and-not CPC
- and-not CEL
- and-not CAA
- and-not CBA
- calma CCC 25 *
-
- layer gc CCC
- and-not COP
- and-not CM1
- calma CCC 25 *
-
- layer gc2 CCE
- and-not CPC
- and-not CEL
- calma CCE 55 *
-
- layer gc2 CCE
- and-not CM1
- calma CCE 55 *
-
- layer gv1 CV1
- and-not COP
- and-not CM1
- calma CV1 50 *
-
- layer gv1 CV1
- and-not COP
- and-not CM2
- calma CV1 50 *
-
- layer gv2 CV2
- and-not COP
- and-not CM2
- calma CV2 61 *
-
- layer gv2 CV2
- and-not COP
- and-not CM3
- calma CV2 61 *
-
- layer m2c CV1
- and-not CV2
- and-not CCC
- and-not CCE
- and-not CCP
- and-not CCA
- and-not XP
- grow 30
- and CM2
- and CM1
- grow 15
- shrink 15
- calma CV1 50 *
-
-
-
- layer p2m12c CV1
- and-not CV2
- and CCE
- grow 30
- and CM2
- and CM1
- and CPG
- and CEL
- grow 15
- shrink 15
- calma CV1 50 *
-
- layer p2m12c CV1
- and-not CV2
- and CCC
- grow 30
- and CM2
- and CM1
- and CPG
- and CEL
- grow 15
- shrink 15
- calma CV1 50 *
-
- layer m1 CM1
- and-not CRM
- and-not CRF
- and-not XP
- labels CM1
- calma CM1 49 *
-
- layer rm1 CRM
- and CM1
- calma CRM 70 *
-
- layer rm1 CRF
- and CM1
- calma CRF 71 *
-
- layer pseudo_rmetal1 CRF
- and-not rm1
- calma CRF 71 *
-
- layer m1p CMFP
- labels CMFP
- calma CMFP 81 *
-
- layer m2 CM2
- and-not CRM
- and-not CRS
- and-not XP
- labels CM2
- calma CM2 51 *
-
- layer rm2 CRM
- and CM2
- calma CRM 70 *
-
- layer rm2 CRS
- and CM2
- calma CRS 72 *
-
- layer pseudo_rmetal2 CRS
- and-not rm2
- calma CRS 72 *
-
- layer m2p CMSP
- labels CMSP
- calma CMSP 82 *
-
-
-
-
-
-
-
-
-
- layer fp 100
- calma 100 100 *
-
- layer fm1 101
- calma 101 101 *
-
- layer fm2 102
- calma 102 102 *
-
- layer fm3 103
- calma 103 103 *
-
- layer fa 109
- calma 109 109 *
-
- layer fn 119
- calma 119 119 *
-
- layer fapm 110
- calma 110 110 *
-
- layer m3c CV2
-
- and-not CV1
- and-not XP
- grow 30
- and CM3
- and CM2
- grow 15
- shrink 15
- calma CV2 61 *
-
-
- layer m3 CM3
- and-not CRM
- and-not CRT
- and-not XP
- labels CM3
- calma CM3 62 *
-
- layer rm3 CRM
- and CM3
- calma CRM 70 *
-
- layer rm3 CRT
- and CM3
- calma CRT 73 *
-
- layer pseudo_rmetal3 CRT
- and-not rm3
- calma CRT 73 *
-
- layer m3p CMTP
- labels CMTP
- calma CMTP 83 *
-
- layer pad XP
- labels pad
- calma XP 26 *
-
- layer glass COG
- and-not COP
- and-not XP
- labels COG
- calma COG 52 *
-
- layer nfi CFI
- and CWN
- labels CFI
- calma CFI 27 *
-
- layer pfi CFI
- and-not CWN
- labels CFI
- calma CFI 27 *
-
- layer hr CHR
- labels CHR
- calma CHR 34 *
-
- layer phr CEL
- and CHR
- calma CEL 56 *
-
- layer ecap CEL
- and CPG
- labels CEL
- calma CEL 56 *
-
- layer poly2 CEL
- and-not CPG
- labels CEL
- calma CEL 56 *
-
- layer rp2 CEL
- and CRG2
- calma CEL 56 *
-
- layer pseudo_rpoly2 CRG2
- and-not CRE
- calma CRG2 68 *
-
- layer comment CX
- labels CX
- calma CX 63 *
-
- calma CTA 60 *
-
- calma CRW 65 *
- calma CRG 67 *
- calma CRD 66 *
- calma CRE 64 *
- calma CRF 71 *
- calma CRS 72 *
- calma CRT 73 *
- calma CRM 70 *
-
-
-style lambda=0.30(s)
- scalefactor 30
-
- layer nwell CWN
- and-not CWNR
- and-not CTA
- labels CWN
- calma CWN 42 *
-
- layer rnw CWN
- and-not CWNR
- and CRE
- and-not CSB
- and-not CRD
- and-not CAA
- and-not CPG
- calma CWN 42 *
-
- layer rnw CWN
- and-not CWNR
- and CRW
- and-not CRD
- and-not CAA
- and-not CPG
- calma CWN 42 *
-
- layer pseudo_rnwell CRW
- and-not CRE
- calma CRW 65 *
-
-
- ignore CWP
- calma CWP 41 *
-
- layer diff CAA
- and-not CTA
- and-not CPG
- and-not CWNR
- and-not COP
- and-not CSN
- and-not CSP
- labels CAA
- calma CAA 43 *
-
- layer tran CAA
- and-not CTA
- and CPG
- and-not CWNR
- and-not COP
- and-not CSN
- and-not CSP
- labels CAA
- calma CAA 43 *
-
- layer nselect CSN
- calma CSN 45 *
-
- layer pselect CSP
- calma CSP 44 *
-
- layer ndiff CAA
- and CSN
- and-not CWNR
- and-not CTA
- and-not CRE
- and-not CSB
- and-not CPG
- and-not CWN
- and-not CSP
- and-not CBA
- labels CAA
- calma CAA 43 *
-
- layer rnd CAA
- and CSN
- and-not CWNR
- and CRE
- and-not CSB
- and-not CPG
- and-not CWN
- and-not CSP
- and-not CBA
- calma CAA 43 *
-
- layer rnd CAA
- and CSN
- and-not CWNR
- and CRD
- and-not CSB
- and-not CPG
- and-not CWN
- and-not CSP
- and-not CBA
- calma CAA 43 *
-
- layer pseudo_rndiff CRD
- and-not CRE
- and-not CAA
- and-not CSB
- and-not CPG
- and-not CWN
- and-not CSP
- and CSN
- and-not CBA
- calma CRD 66 *
-
- layer pdiff CAA
- and CSP
- and-not CWNR
- and-not CTA
- and-not CRE
- and-not CSB
- and-not CPG
- and CWN
- and-not CSN
- and-not CPS
- and CSP
- and-not CBA
- labels CAA
- calma CAA 43 *
-
- layer rpd CAA
- and CSP
- and-not CWNR
- and CRE
- and-not CSB
- and-not CPG
- and CWN
- and-not CSN
- and-not CPS
- and CSP
- and-not CBA
- calma CAA 43 *
-
- layer rpd CAA
- and CSP
- and-not CWNR
- and CRD
- and-not CPG
- and CWN
- and-not CSN
- and-not CPS
- and CSP
- and-not CBA
- calma CAA 43 *
-
- layer pseudo_rpdiff CRD
- and-not CRE
- and-not CAA
- and-not CSB
- and-not CPG
- and CWN
- and-not CSN
- and-not CPS
- and CSP
- and-not CBA
- calma CRD 66 *
-
- layer nfet CAA
- and CSN
- and-not CWNR
- and-not CTA
- and CPG
- and-not CEL
- and-not CWN
- and-not CSP
- and-not CBA
- labels CAA
- calma CAA 43 *
-
- layer pfet CAA
- and CSP
- and-not CWNR
- and-not CTA
- and CPG
- and-not CEL
- and CWN
- and-not CSN
- and-not CPS
- and CSP
- and-not CBA
- labels CAA
- calma CAA 43 *
-
- layer nsd CAA
- and CSN
- and-not CWNR
- and-not CTA
- and CWN
- and-not CSP
- and-not CBA
- labels CAA
- calma CAA 43 *
-
- layer psd CAA
- and CSP
- and-not CWNR
- and-not CTA
- and-not CWN
- and-not CSN
- and-not CPS
- and CSP
- and-not CBA
- labels CAA
- calma CAA 43 *
-
- layer ndc CAA
- and CSN
- and CCA
- and-not CV1
- and-not CWNR
- and-not CTA
-
- and-not CWN
- and CM1
- grow 30
- grow 15
- shrink 15
- calma CCA 48 *
-
- layer ndc CAA
- and CSN
- and CCC
- and-not CV1
- and-not CWNR
- and-not CTA
-
- and-not CWN
- and CM1
- grow 30
- grow 15
- shrink 15
- calma CCC 25 *
-
- layer nsc CAA
- and CSN
- and CCA
- and-not CV1
- and-not CWNR
- and-not CTA
-
- and CWN
- and CM1
- grow 30
- grow 15
- shrink 15
- calma CCA 48 *
-
- layer nsc CAA
- and CSN
- and CCC
- and-not CV1
- and-not CWNR
- and-not CTA
-
- and CWN
- and CM1
- grow 30
- grow 15
- shrink 15
- calma CCC 25 *
-
- layer pdc CAA
- and CSP
- and CCA
- and-not CV1
- and-not CTA
-
- and-not CPS
- and CWN
- and CM1
- grow 30
- grow 15
- shrink 15
- calma CCA 48 *
-
- layer pdc CAA
- and CSP
- and CCC
- and-not CV1
- and-not CTA
-
- and-not CPS
- and CWN
- and CM1
- grow 30
- grow 15
- shrink 15
- calma CCC 25 *
-
- layer psc CAA
- and CSP
- and CCA
- and-not CV1
- and-not CTA
-
- and-not CPS
- and-not CWN
- and CM1
- grow 30
- grow 15
- shrink 15
- calma CCA 48 *
-
- layer psc CAA
- and CSP
- and CCC
- and-not CV1
- and-not CWNR
- and-not CTA
-
- and-not CPS
- and-not CWN
- and CM1
- grow 30
- grow 15
- shrink 15
- calma CCC 25 *
-
- layer ndc CAA
- and CSN
- and CCA
- and CV1
- and CV2
- and-not CWNR
- and-not CTA
-
- and-not CWN
- and CM1
- grow 30
- grow 15
- shrink 15
- calma CCA 48 *
-
- layer ndc CAA
- and CSN
- and CCC
- and CV1
- and CV2
- and-not CWNR
- and-not CTA
-
- and-not CWN
- and CM1
- grow 30
- grow 15
- shrink 15
- calma CCC 25 *
-
- layer nsc CAA
- and CSN
- and CCA
- and CV1
- and CV2
- and-not CWNR
- and-not CTA
-
- and CWN
- and CM1
- grow 30
- grow 15
- shrink 15
- calma CCA 48 *
-
- layer nsc CAA
- and CSN
- and CCC
- and CV1
- and CV2
- and-not CWNR
- and-not CTA
-
- and CWN
- and CM1
- grow 30
- grow 15
- shrink 15
- calma CCC 25 *
-
- layer pdc CAA
- and CSP
- and CCA
- and CV1
- and CV2
- and-not CTA
-
- and-not CPS
- and CWN
- and CM1
- grow 30
- grow 15
- shrink 15
- calma CCA 48 *
-
- layer pdc CAA
- and CSP
- and CCC
- and CV1
- and CV2
- and-not CTA
-
- and-not CPS
- and CWN
- and CM1
- grow 30
- grow 15
- shrink 15
- calma CCC 25 *
-
- layer psc CAA
- and CSP
- and CCA
- and CV1
- and CV2
- and-not CTA
-
- and-not CPS
- and-not CWN
- and CM1
- grow 30
- grow 15
- shrink 15
- calma CCA 48 *
-
- layer psc CAA
- and CSP
- and CCC
- and CV1
- and CV2
- and-not CWNR
- and-not CTA
-
- and-not CPS
- and-not CWN
- and CM1
- grow 30
- grow 15
- shrink 15
- calma CCC 25 *
-
- layer poly CPG
- and-not CRE
- labels CPG
- calma CPG 46 *
-
- layer rp CPG
- and CRE
- and-not CSB
- calma CPG 46 *
-
- layer rp CPG
- and CRG
- calma CPG 46 *
-
- layer pseudo_rpoly CRG
- and-not CRE
- calma CRG 67 *
-
- layer pc CCP
- and-not CV1
- and CPG
- and-not CPC
- and-not CEL
- and-not CAA
- grow 30
- and CM1
- grow 15
- shrink 15
- calma CCP 47 *
-
- layer pc CCC
- and-not CV1
- and CPG
- and-not CPC
- and-not CEL
- and-not CAA
- grow 30
- and CM1
- grow 15
- shrink 15
- calma CCC 25 *
-
- layer pc CCP
- and CV1
- and CV2
- and CPG
- and-not CPC
- and-not CEL
- and-not CAA
- grow 30
- and CM1
- grow 15
- shrink 15
- calma CCP 47 *
-
- layer pc CCC
- and CV1
- and CV2
- and CPG
- and-not CPC
- and-not CEL
- and-not CAA
- grow 30
- and CM1
- grow 15
- shrink 15
- calma CCC 25 *
-
- layer p2c CCE
- and-not CV1
- and CPG
- and CEL
- and-not CPC
- and-not CAA
- grow 30
- and CM1
- grow 15
- shrink 15
- calma CCE 55 *
-
- layer p2c CCC
- and-not CV1
- and CPG
- and CEL
- and-not CPC
- and-not CAA
- grow 30
- and CM1
- grow 15
- shrink 15
- calma CCC 25 *
-
- layer p2c CCE
- and CV1
- and CV2
- and CPG
- and CEL
- and-not CPC
- and-not CAA
- grow 30
- and CM1
- grow 15
- shrink 15
- calma CCE 55 *
-
- layer p2c CCC
- and CV1
- and CV2
- and CPG
- and CEL
- and-not CPC
- and-not CAA
- grow 30
- and CM1
- grow 15
- shrink 15
- calma CCC 25 *
-
- layer gc CCP
- and-not CPG
- and-not CPC
- calma CCP 47 *
-
- layer gc CCP
- and-not CM1
- calma CCP 47 *
-
- layer gc CCA
- and-not COP
- and-not CAA
- and-not CBA
- calma CCA 48 *
-
- layer gc CCA
- and-not COP
- and-not CM1
- calma CCA 48 *
-
- layer gc CCC
- and-not COP
- and-not CPG
- and-not CPC
- and-not CEL
- and-not CAA
- and-not CBA
- calma CCC 25 *
-
- layer gc CCC
- and-not COP
- and-not CM1
- calma CCC 25 *
-
- layer gc2 CCE
- and-not CPC
- and-not CEL
- calma CCE 55 *
-
- layer gc2 CCE
- and-not CM1
- calma CCE 55 *
-
- layer gv1 CV1
- and-not COP
- and-not CM1
- calma CV1 50 *
-
- layer gv1 CV1
- and-not COP
- and-not CM2
- calma CV1 50 *
-
- layer gv2 CV2
- and-not COP
- and-not CM2
- calma CV2 61 *
-
- layer gv2 CV2
- and-not COP
- and-not CM3
- calma CV2 61 *
-
- layer m2c CV1
- and-not CV2
- and-not CCC
- and-not CCE
- and-not CCP
- and-not CCA
- and-not XP
- grow 30
- and CM2
- and CM1
- grow 15
- shrink 15
- calma CV1 50 *
-
-
-
- layer p2m12c CV1
- and-not CV2
- and CCE
- grow 30
- and CM2
- and CM1
- and CPG
- and CEL
- grow 15
- shrink 15
- calma CV1 50 *
-
- layer p2m12c CV1
- and-not CV2
- and CCC
- grow 30
- and CM2
- and CM1
- and CPG
- and CEL
- grow 15
- shrink 15
- calma CV1 50 *
-
- layer m1 CM1
- and-not CRM
- and-not CRF
- and-not XP
- labels CM1
- calma CM1 49 *
-
- layer rm1 CRM
- and CM1
- calma CRM 70 *
-
- layer rm1 CRF
- and CM1
- calma CRF 71 *
-
- layer pseudo_rmetal1 CRF
- and-not rm1
- calma CRF 71 *
-
- layer m1p CMFP
- labels CMFP
- calma CMFP 81 *
-
- layer m2 CM2
- and-not CRM
- and-not CRS
- and-not XP
- labels CM2
- calma CM2 51 *
-
- layer rm2 CRM
- and CM2
- calma CRM 70 *
-
- layer rm2 CRS
- and CM2
- calma CRS 72 *
-
- layer pseudo_rmetal2 CRS
- and-not rm2
- calma CRS 72 *
-
- layer m2p CMSP
- labels CMSP
- calma CMSP 82 *
-
-
-
-
-
-
-
-
-
- layer fp 100
- calma 100 100 *
-
- layer fm1 101
- calma 101 101 *
-
- layer fm2 102
- calma 102 102 *
-
- layer fm3 103
- calma 103 103 *
-
- layer fa 109
- calma 109 109 *
-
- layer fn 119
- calma 119 119 *
-
- layer fapm 110
- calma 110 110 *
-
- layer m3c CV2
-
- and-not CV1
- and-not XP
- grow 30
- and CM3
- and CM2
- grow 15
- shrink 15
- calma CV2 61 *
-
-
- layer m3 CM3
- and-not CRM
- and-not CRT
- and-not XP
- labels CM3
- calma CM3 62 *
-
- layer rm3 CRM
- and CM3
- calma CRM 70 *
-
- layer rm3 CRT
- and CM3
- calma CRT 73 *
-
- layer pseudo_rmetal3 CRT
- and-not rm3
- calma CRT 73 *
-
- layer m3p CMTP
- labels CMTP
- calma CMTP 83 *
-
- layer pad XP
- labels pad
- calma XP 26 *
-
- layer glass COG
- and-not COP
- and-not XP
- labels COG
- calma COG 52 *
-
- layer nfi CFI
- and CWN
- labels CFI
- calma CFI 27 *
-
- layer pfi CFI
- and-not CWN
- labels CFI
- calma CFI 27 *
-
- layer hr CHR
- labels CHR
- calma CHR 34 *
-
- layer phr CEL
- and CHR
- calma CEL 56 *
-
- layer ecap CEL
- and CPG
- labels CEL
- calma CEL 56 *
-
- layer poly2 CEL
- and-not CPG
- labels CEL
- calma CEL 56 *
-
- layer rp2 CEL
- and CRG2
- calma CEL 56 *
-
- layer pseudo_rpoly2 CRG2
- and-not CRE
- calma CRG2 68 *
-
- layer comment CX
- labels CX
- calma CX 63 *
-
- calma CTA 60 *
-
- calma CRW 65 *
- calma CRG 67 *
- calma CRD 66 *
- calma CRE 64 *
- calma CRF 71 *
- calma CRS 72 *
- calma CRT 73 *
- calma CRM 70 *
-
-
-style lambda=0.30(ps)
- scalefactor 30
-
- layer nwell CWN
- and-not CWNR
- and-not CTA
- labels CWN
- calma CWN 42 *
-
- layer rnw CWN
- and-not CWNR
- and CRE
- and-not CSB
- and-not CRD
- and-not CAA
- and-not CPG
- calma CWN 42 *
-
- layer rnw CWN
- and-not CWNR
- and CRW
- and-not CRD
- and-not CAA
- and-not CPG
- calma CWN 42 *
-
- layer pseudo_rnwell CRW
- and-not CRE
- calma CRW 65 *
-
- layer pwell CWP
- and-not CTA
- labels CWP
- calma CWP 41 *
-
- layer diff CAA
- and-not CTA
- and-not CPG
- and-not CWNR
- and-not COP
- and-not CSN
- and-not CSP
- labels CAA
- calma CAA 43 *
-
- layer tran CAA
- and-not CTA
- and CPG
- and-not CWNR
- and-not COP
- and-not CSN
- and-not CSP
- labels CAA
- calma CAA 43 *
-
- layer nselect CSN
- calma CSN 45 *
-
- layer pselect CSP
- calma CSP 44 *
-
- layer ndiff CAA
- and CSN
- and-not CWNR
- and-not CTA
- and-not CRE
- and-not CSB
- and-not CPG
- and-not CWN
- and-not CSP
- and-not CBA
- labels CAA
- calma CAA 43 *
-
- layer rnd CAA
- and CSN
- and-not CWNR
- and CRE
- and-not CSB
- and-not CPG
- and-not CWN
- and-not CSP
- and-not CBA
- calma CAA 43 *
-
- layer rnd CAA
- and CSN
- and-not CWNR
- and CRD
- and-not CSB
- and-not CPG
- and-not CWN
- and-not CSP
- and-not CBA
- calma CAA 43 *
-
- layer pseudo_rndiff CRD
- and-not CRE
- and-not CAA
- and-not CSB
- and-not CPG
- and-not CWN
- and-not CSP
- and CSN
- and-not CBA
- calma CRD 66 *
-
- layer pdiff CAA
- and CSP
- and-not CWNR
- and-not CTA
- and-not CRE
- and-not CSB
- and-not CPG
- and CWN
- and-not CSN
- and-not CPS
- and CSP
- and-not CBA
- labels CAA
- calma CAA 43 *
-
- layer rpd CAA
- and CSP
- and-not CWNR
- and CRE
- and-not CSB
- and-not CPG
- and CWN
- and-not CSN
- and-not CPS
- and CSP
- and-not CBA
- calma CAA 43 *
-
- layer rpd CAA
- and CSP
- and-not CWNR
- and CRD
- and-not CPG
- and CWN
- and-not CSN
- and-not CPS
- and CSP
- and-not CBA
- calma CAA 43 *
-
- layer pseudo_rpdiff CRD
- and-not CRE
- and-not CAA
- and-not CSB
- and-not CPG
- and CWN
- and-not CSN
- and-not CPS
- and CSP
- and-not CBA
- calma CRD 66 *
-
- layer nfet CAA
- and CSN
- and-not CWNR
- and-not CTA
- and CPG
- and-not CEL
- and-not CWN
- and-not CSP
- and-not CBA
- labels CAA
- calma CAA 43 *
-
- layer pfet CAA
- and CSP
- and-not CWNR
- and-not CTA
- and CPG
- and-not CEL
- and CWN
- and-not CSN
- and-not CPS
- and CSP
- and-not CBA
- labels CAA
- calma CAA 43 *
-
- layer nsd CAA
- and CSN
- and-not CWNR
- and-not CTA
- and CWN
- and-not CSP
- and-not CBA
- labels CAA
- calma CAA 43 *
-
- layer psd CAA
- and CSP
- and-not CWNR
- and-not CTA
- and-not CWN
- and-not CSN
- and-not CPS
- and CSP
- and-not CBA
- labels CAA
- calma CAA 43 *
-
- layer ndc CAA
- and CSN
- and CCA
- and-not CV1
- and-not CWNR
- and-not CTA
-
- and-not CWN
- and CM1
- grow 30
- grow 15
- shrink 15
- calma CCA 48 *
-
- layer ndc CAA
- and CSN
- and CCC
- and-not CV1
- and-not CWNR
- and-not CTA
-
- and-not CWN
- and CM1
- grow 30
- grow 15
- shrink 15
- calma CCC 25 *
-
- layer nsc CAA
- and CSN
- and CCA
- and-not CV1
- and-not CWNR
- and-not CTA
-
- and CWN
- and CM1
- grow 30
- grow 15
- shrink 15
- calma CCA 48 *
-
- layer nsc CAA
- and CSN
- and CCC
- and-not CV1
- and-not CWNR
- and-not CTA
-
- and CWN
- and CM1
- grow 30
- grow 15
- shrink 15
- calma CCC 25 *
-
- layer pdc CAA
- and CSP
- and CCA
- and-not CV1
- and-not CTA
-
- and-not CPS
- and CWN
- and CM1
- grow 30
- grow 15
- shrink 15
- calma CCA 48 *
-
- layer pdc CAA
- and CSP
- and CCC
- and-not CV1
- and-not CTA
-
- and-not CPS
- and CWN
- and CM1
- grow 30
- grow 15
- shrink 15
- calma CCC 25 *
-
- layer psc CAA
- and CSP
- and CCA
- and-not CV1
- and-not CTA
-
- and-not CPS
- and-not CWN
- and CM1
- grow 30
- grow 15
- shrink 15
- calma CCA 48 *
-
- layer psc CAA
- and CSP
- and CCC
- and-not CV1
- and-not CWNR
- and-not CTA
-
- and-not CPS
- and-not CWN
- and CM1
- grow 30
- grow 15
- shrink 15
- calma CCC 25 *
-
- layer ndc CAA
- and CSN
- and CCA
- and CV1
- and CV2
- and-not CWNR
- and-not CTA
-
- and-not CWN
- and CM1
- grow 30
- grow 15
- shrink 15
- calma CCA 48 *
-
- layer ndc CAA
- and CSN
- and CCC
- and CV1
- and CV2
- and-not CWNR
- and-not CTA
-
- and-not CWN
- and CM1
- grow 30
- grow 15
- shrink 15
- calma CCC 25 *
-
- layer nsc CAA
- and CSN
- and CCA
- and CV1
- and CV2
- and-not CWNR
- and-not CTA
-
- and CWN
- and CM1
- grow 30
- grow 15
- shrink 15
- calma CCA 48 *
-
- layer nsc CAA
- and CSN
- and CCC
- and CV1
- and CV2
- and-not CWNR
- and-not CTA
-
- and CWN
- and CM1
- grow 30
- grow 15
- shrink 15
- calma CCC 25 *
-
- layer pdc CAA
- and CSP
- and CCA
- and CV1
- and CV2
- and-not CTA
-
- and-not CPS
- and CWN
- and CM1
- grow 30
- grow 15
- shrink 15
- calma CCA 48 *
-
- layer pdc CAA
- and CSP
- and CCC
- and CV1
- and CV2
- and-not CTA
-
- and-not CPS
- and CWN
- and CM1
- grow 30
- grow 15
- shrink 15
- calma CCC 25 *
-
- layer psc CAA
- and CSP
- and CCA
- and CV1
- and CV2
- and-not CTA
-
- and-not CPS
- and-not CWN
- and CM1
- grow 30
- grow 15
- shrink 15
- calma CCA 48 *
-
- layer psc CAA
- and CSP
- and CCC
- and CV1
- and CV2
- and-not CWNR
- and-not CTA
-
- and-not CPS
- and-not CWN
- and CM1
- grow 30
- grow 15
- shrink 15
- calma CCC 25 *
-
- layer poly CPG
- and-not CRE
- labels CPG
- calma CPG 46 *
-
- layer rp CPG
- and CRE
- and-not CSB
- calma CPG 46 *
-
- layer rp CPG
- and CRG
- calma CPG 46 *
-
- layer pseudo_rpoly CRG
- and-not CRE
- calma CRG 67 *
-
- layer pc CCP
- and-not CV1
- and CPG
- and-not CPC
- and-not CEL
- and-not CAA
- grow 30
- and CM1
- grow 15
- shrink 15
- calma CCP 47 *
-
- layer pc CCC
- and-not CV1
- and CPG
- and-not CPC
- and-not CEL
- and-not CAA
- grow 30
- and CM1
- grow 15
- shrink 15
- calma CCC 25 *
-
- layer pc CCP
- and CV1
- and CV2
- and CPG
- and-not CPC
- and-not CEL
- and-not CAA
- grow 30
- and CM1
- grow 15
- shrink 15
- calma CCP 47 *
-
- layer pc CCC
- and CV1
- and CV2
- and CPG
- and-not CPC
- and-not CEL
- and-not CAA
- grow 30
- and CM1
- grow 15
- shrink 15
- calma CCC 25 *
-
- layer p2c CCE
- and-not CV1
- and CPG
- and CEL
- and-not CPC
- and-not CAA
- grow 30
- and CM1
- grow 15
- shrink 15
- calma CCE 55 *
-
- layer p2c CCC
- and-not CV1
- and CPG
- and CEL
- and-not CPC
- and-not CAA
- grow 30
- and CM1
- grow 15
- shrink 15
- calma CCC 25 *
-
- layer p2c CCE
- and CV1
- and CV2
- and CPG
- and CEL
- and-not CPC
- and-not CAA
- grow 30
- and CM1
- grow 15
- shrink 15
- calma CCE 55 *
-
- layer p2c CCC
- and CV1
- and CV2
- and CPG
- and CEL
- and-not CPC
- and-not CAA
- grow 30
- and CM1
- grow 15
- shrink 15
- calma CCC 25 *
-
- layer gc CCP
- and-not CPG
- and-not CPC
- calma CCP 47 *
-
- layer gc CCP
- and-not CM1
- calma CCP 47 *
-
- layer gc CCA
- and-not COP
- and-not CAA
- and-not CBA
- calma CCA 48 *
-
- layer gc CCA
- and-not COP
- and-not CM1
- calma CCA 48 *
-
- layer gc CCC
- and-not COP
- and-not CPG
- and-not CPC
- and-not CEL
- and-not CAA
- and-not CBA
- calma CCC 25 *
-
- layer gc CCC
- and-not COP
- and-not CM1
- calma CCC 25 *
-
- layer gc2 CCE
- and-not CPC
- and-not CEL
- calma CCE 55 *
-
- layer gc2 CCE
- and-not CM1
- calma CCE 55 *
-
- layer gv1 CV1
- and-not COP
- and-not CM1
- calma CV1 50 *
-
- layer gv1 CV1
- and-not COP
- and-not CM2
- calma CV1 50 *
-
- layer gv2 CV2
- and-not COP
- and-not CM2
- calma CV2 61 *
-
- layer gv2 CV2
- and-not COP
- and-not CM3
- calma CV2 61 *
-
- layer m2c CV1
- and-not CV2
- and-not CCC
- and-not CCE
- and-not CCP
- and-not CCA
- and-not XP
- grow 30
- and CM2
- and CM1
- grow 15
- shrink 15
- calma CV1 50 *
-
-
-
- layer p2m12c CV1
- and-not CV2
- and CCE
- grow 30
- and CM2
- and CM1
- and CPG
- and CEL
- grow 15
- shrink 15
- calma CV1 50 *
-
- layer p2m12c CV1
- and-not CV2
- and CCC
- grow 30
- and CM2
- and CM1
- and CPG
- and CEL
- grow 15
- shrink 15
- calma CV1 50 *
-
- layer m1 CM1
- and-not CRM
- and-not CRF
- and-not XP
- labels CM1
- calma CM1 49 *
-
- layer rm1 CRM
- and CM1
- calma CRM 70 *
-
- layer rm1 CRF
- and CM1
- calma CRF 71 *
-
- layer pseudo_rmetal1 CRF
- and-not rm1
- calma CRF 71 *
-
- layer m1p CMFP
- labels CMFP
- calma CMFP 81 *
-
- layer m2 CM2
- and-not CRM
- and-not CRS
- and-not XP
- labels CM2
- calma CM2 51 *
-
- layer rm2 CRM
- and CM2
- calma CRM 70 *
-
- layer rm2 CRS
- and CM2
- calma CRS 72 *
-
- layer pseudo_rmetal2 CRS
- and-not rm2
- calma CRS 72 *
-
- layer m2p CMSP
- labels CMSP
- calma CMSP 82 *
-
-
-
-
-
-
-
-
-
- layer fp 100
- calma 100 100 *
-
- layer fm1 101
- calma 101 101 *
-
- layer fm2 102
- calma 102 102 *
-
- layer fm3 103
- calma 103 103 *
-
- layer fa 109
- calma 109 109 *
-
- layer fn 119
- calma 119 119 *
-
- layer fapm 110
- calma 110 110 *
-
- layer m3c CV2
-
- and-not CV1
- and-not XP
- grow 30
- and CM3
- and CM2
- grow 15
- shrink 15
- calma CV2 61 *
-
-
- layer m3 CM3
- and-not CRM
- and-not CRT
- and-not XP
- labels CM3
- calma CM3 62 *
-
- layer rm3 CRM
- and CM3
- calma CRM 70 *
-
- layer rm3 CRT
- and CM3
- calma CRT 73 *
-
- layer pseudo_rmetal3 CRT
- and-not rm3
- calma CRT 73 *
-
- layer m3p CMTP
- labels CMTP
- calma CMTP 83 *
-
- layer pad XP
- labels pad
- calma XP 26 *
-
- layer glass COG
- and-not COP
- and-not XP
- labels COG
- calma COG 52 *
-
- layer nfi CFI
- and CWN
- labels CFI
- calma CFI 27 *
-
- layer pfi CFI
- and-not CWN
- labels CFI
- calma CFI 27 *
-
- layer hr CHR
- labels CHR
- calma CHR 34 *
-
- layer phr CEL
- and CHR
- calma CEL 56 *
-
- layer ecap CEL
- and CPG
- labels CEL
- calma CEL 56 *
-
- layer poly2 CEL
- and-not CPG
- labels CEL
- calma CEL 56 *
-
- layer rp2 CEL
- and CRG2
- calma CEL 56 *
-
- layer pseudo_rpoly2 CRG2
- and-not CRE
- calma CRG2 68 *
-
- layer comment CX
- labels CX
- calma CX 63 *
-
- calma CTA 60 *
-
- calma CRW 65 *
- calma CRG 67 *
- calma CRD 66 *
- calma CRE 64 *
- calma CRF 71 *
- calma CRS 72 *
- calma CRT 73 *
- calma CRM 70 *
-
-
-style lambda=0.30()
- scalefactor 30
-
- layer nwell CWN
- and-not CWNR
- and-not CTA
- labels CWN
- calma CWN 42 *
-
- layer rnw CWN
- and-not CWNR
- and CRE
- and-not CSB
- and-not CRD
- and-not CAA
- and-not CPG
- calma CWN 42 *
-
- layer rnw CWN
- and-not CWNR
- and CRW
- and-not CRD
- and-not CAA
- and-not CPG
- calma CWN 42 *
-
- layer pseudo_rnwell CRW
- and-not CRE
- calma CRW 65 *
-
-
- ignore CWP
- calma CWP 41 *
-
- layer diff CAA
- and-not CTA
- and-not CPG
- and-not CWNR
- and-not COP
- and-not CSN
- and-not CSP
- labels CAA
- calma CAA 43 *
-
- layer tran CAA
- and-not CTA
- and CPG
- and-not CWNR
- and-not COP
- and-not CSN
- and-not CSP
- labels CAA
- calma CAA 43 *
-
- calma CSN 45 *
-
- calma CSP 44 *
-
- layer ndiff CAA
- and CSN
- and-not CWNR
- and-not CTA
- and-not CRE
- and-not CSB
- and-not CPG
- and-not CWN
- and-not CSP
- and-not CBA
- labels CAA
- calma CAA 43 *
-
- layer rnd CAA
- and CSN
- and-not CWNR
- and CRE
- and-not CSB
- and-not CPG
- and-not CWN
- and-not CSP
- and-not CBA
- calma CAA 43 *
-
- layer rnd CAA
- and CSN
- and-not CWNR
- and CRD
- and-not CSB
- and-not CPG
- and-not CWN
- and-not CSP
- and-not CBA
- calma CAA 43 *
-
- layer pseudo_rndiff CRD
- and-not CRE
- and-not CAA
- and-not CSB
- and-not CPG
- and-not CWN
- and-not CSP
- and CSN
- and-not CBA
- calma CRD 66 *
-
- layer pdiff CAA
- and CSP
- and-not CWNR
- and-not CTA
- and-not CRE
- and-not CSB
- and-not CPG
- and CWN
- and-not CSN
- and-not CPS
- and CSP
- and-not CBA
- labels CAA
- calma CAA 43 *
-
- layer rpd CAA
- and CSP
- and-not CWNR
- and CRE
- and-not CSB
- and-not CPG
- and CWN
- and-not CSN
- and-not CPS
- and CSP
- and-not CBA
- calma CAA 43 *
-
- layer rpd CAA
- and CSP
- and-not CWNR
- and CRD
- and-not CPG
- and CWN
- and-not CSN
- and-not CPS
- and CSP
- and-not CBA
- calma CAA 43 *
-
- layer pseudo_rpdiff CRD
- and-not CRE
- and-not CAA
- and-not CSB
- and-not CPG
- and CWN
- and-not CSN
- and-not CPS
- and CSP
- and-not CBA
- calma CRD 66 *
-
- layer nfet CAA
- and CSN
- and-not CWNR
- and-not CTA
- and CPG
- and-not CEL
- and-not CWN
- and-not CSP
- and-not CBA
- labels CAA
- calma CAA 43 *
-
- layer pfet CAA
- and CSP
- and-not CWNR
- and-not CTA
- and CPG
- and-not CEL
- and CWN
- and-not CSN
- and-not CPS
- and CSP
- and-not CBA
- labels CAA
- calma CAA 43 *
-
- layer nsd CAA
- and CSN
- and-not CWNR
- and-not CTA
- and CWN
- and-not CSP
- and-not CBA
- labels CAA
- calma CAA 43 *
-
- layer psd CAA
- and CSP
- and-not CWNR
- and-not CTA
- and-not CWN
- and-not CSN
- and-not CPS
- and CSP
- and-not CBA
- labels CAA
- calma CAA 43 *
-
- layer ndc CAA
- and CSN
- and CCA
- and-not CV1
- and-not CWNR
- and-not CTA
-
- and-not CWN
- and CM1
- grow 30
- grow 15
- shrink 15
- calma CCA 48 *
-
- layer ndc CAA
- and CSN
- and CCC
- and-not CV1
- and-not CWNR
- and-not CTA
-
- and-not CWN
- and CM1
- grow 30
- grow 15
- shrink 15
- calma CCC 25 *
-
- layer nsc CAA
- and CSN
- and CCA
- and-not CV1
- and-not CWNR
- and-not CTA
-
- and CWN
- and CM1
- grow 30
- grow 15
- shrink 15
- calma CCA 48 *
-
- layer nsc CAA
- and CSN
- and CCC
- and-not CV1
- and-not CWNR
- and-not CTA
-
- and CWN
- and CM1
- grow 30
- grow 15
- shrink 15
- calma CCC 25 *
-
- layer pdc CAA
- and CSP
- and CCA
- and-not CV1
- and-not CTA
-
- and-not CPS
- and CWN
- and CM1
- grow 30
- grow 15
- shrink 15
- calma CCA 48 *
-
- layer pdc CAA
- and CSP
- and CCC
- and-not CV1
- and-not CTA
-
- and-not CPS
- and CWN
- and CM1
- grow 30
- grow 15
- shrink 15
- calma CCC 25 *
-
- layer psc CAA
- and CSP
- and CCA
- and-not CV1
- and-not CTA
-
- and-not CPS
- and-not CWN
- and CM1
- grow 30
- grow 15
- shrink 15
- calma CCA 48 *
-
- layer psc CAA
- and CSP
- and CCC
- and-not CV1
- and-not CWNR
- and-not CTA
-
- and-not CPS
- and-not CWN
- and CM1
- grow 30
- grow 15
- shrink 15
- calma CCC 25 *
-
- layer ndc CAA
- and CSN
- and CCA
- and CV1
- and CV2
- and-not CWNR
- and-not CTA
-
- and-not CWN
- and CM1
- grow 30
- grow 15
- shrink 15
- calma CCA 48 *
-
- layer ndc CAA
- and CSN
- and CCC
- and CV1
- and CV2
- and-not CWNR
- and-not CTA
-
- and-not CWN
- and CM1
- grow 30
- grow 15
- shrink 15
- calma CCC 25 *
-
- layer nsc CAA
- and CSN
- and CCA
- and CV1
- and CV2
- and-not CWNR
- and-not CTA
-
- and CWN
- and CM1
- grow 30
- grow 15
- shrink 15
- calma CCA 48 *
-
- layer nsc CAA
- and CSN
- and CCC
- and CV1
- and CV2
- and-not CWNR
- and-not CTA
-
- and CWN
- and CM1
- grow 30
- grow 15
- shrink 15
- calma CCC 25 *
-
- layer pdc CAA
- and CSP
- and CCA
- and CV1
- and CV2
- and-not CTA
-
- and-not CPS
- and CWN
- and CM1
- grow 30
- grow 15
- shrink 15
- calma CCA 48 *
-
- layer pdc CAA
- and CSP
- and CCC
- and CV1
- and CV2
- and-not CTA
-
- and-not CPS
- and CWN
- and CM1
- grow 30
- grow 15
- shrink 15
- calma CCC 25 *
-
- layer psc CAA
- and CSP
- and CCA
- and CV1
- and CV2
- and-not CTA
-
- and-not CPS
- and-not CWN
- and CM1
- grow 30
- grow 15
- shrink 15
- calma CCA 48 *
-
- layer psc CAA
- and CSP
- and CCC
- and CV1
- and CV2
- and-not CWNR
- and-not CTA
-
- and-not CPS
- and-not CWN
- and CM1
- grow 30
- grow 15
- shrink 15
- calma CCC 25 *
-
- layer poly CPG
- and-not CRE
- labels CPG
- calma CPG 46 *
-
- layer rp CPG
- and CRE
- and-not CSB
- calma CPG 46 *
-
- layer rp CPG
- and CRG
- calma CPG 46 *
-
- layer pseudo_rpoly CRG
- and-not CRE
- calma CRG 67 *
-
- layer pc CCP
- and-not CV1
- and CPG
- and-not CPC
- and-not CEL
- and-not CAA
- grow 30
- and CM1
- grow 15
- shrink 15
- calma CCP 47 *
-
- layer pc CCC
- and-not CV1
- and CPG
- and-not CPC
- and-not CEL
- and-not CAA
- grow 30
- and CM1
- grow 15
- shrink 15
- calma CCC 25 *
-
- layer pc CCP
- and CV1
- and CV2
- and CPG
- and-not CPC
- and-not CEL
- and-not CAA
- grow 30
- and CM1
- grow 15
- shrink 15
- calma CCP 47 *
-
- layer pc CCC
- and CV1
- and CV2
- and CPG
- and-not CPC
- and-not CEL
- and-not CAA
- grow 30
- and CM1
- grow 15
- shrink 15
- calma CCC 25 *
-
- layer p2c CCE
- and-not CV1
- and CPG
- and CEL
- and-not CPC
- and-not CAA
- grow 30
- and CM1
- grow 15
- shrink 15
- calma CCE 55 *
-
- layer p2c CCC
- and-not CV1
- and CPG
- and CEL
- and-not CPC
- and-not CAA
- grow 30
- and CM1
- grow 15
- shrink 15
- calma CCC 25 *
-
- layer p2c CCE
- and CV1
- and CV2
- and CPG
- and CEL
- and-not CPC
- and-not CAA
- grow 30
- and CM1
- grow 15
- shrink 15
- calma CCE 55 *
-
- layer p2c CCC
- and CV1
- and CV2
- and CPG
- and CEL
- and-not CPC
- and-not CAA
- grow 30
- and CM1
- grow 15
- shrink 15
- calma CCC 25 *
-
- layer gc CCP
- and-not CPG
- and-not CPC
- calma CCP 47 *
-
- layer gc CCP
- and-not CM1
- calma CCP 47 *
-
- layer gc CCA
- and-not COP
- and-not CAA
- and-not CBA
- calma CCA 48 *
-
- layer gc CCA
- and-not COP
- and-not CM1
- calma CCA 48 *
-
- layer gc CCC
- and-not COP
- and-not CPG
- and-not CPC
- and-not CEL
- and-not CAA
- and-not CBA
- calma CCC 25 *
-
- layer gc CCC
- and-not COP
- and-not CM1
- calma CCC 25 *
-
- layer gc2 CCE
- and-not CPC
- and-not CEL
- calma CCE 55 *
-
- layer gc2 CCE
- and-not CM1
- calma CCE 55 *
-
- layer gv1 CV1
- and-not COP
- and-not CM1
- calma CV1 50 *
-
- layer gv1 CV1
- and-not COP
- and-not CM2
- calma CV1 50 *
-
- layer gv2 CV2
- and-not COP
- and-not CM2
- calma CV2 61 *
-
- layer gv2 CV2
- and-not COP
- and-not CM3
- calma CV2 61 *
-
- layer m2c CV1
- and-not CV2
- and-not CCC
- and-not CCE
- and-not CCP
- and-not CCA
- and-not XP
- grow 30
- and CM2
- and CM1
- grow 15
- shrink 15
- calma CV1 50 *
-
-
-
- layer p2m12c CV1
- and-not CV2
- and CCE
- grow 30
- and CM2
- and CM1
- and CPG
- and CEL
- grow 15
- shrink 15
- calma CV1 50 *
-
- layer p2m12c CV1
- and-not CV2
- and CCC
- grow 30
- and CM2
- and CM1
- and CPG
- and CEL
- grow 15
- shrink 15
- calma CV1 50 *
-
- layer m1 CM1
- and-not CRM
- and-not CRF
- and-not XP
- labels CM1
- calma CM1 49 *
-
- layer rm1 CRM
- and CM1
- calma CRM 70 *
-
- layer rm1 CRF
- and CM1
- calma CRF 71 *
-
- layer pseudo_rmetal1 CRF
- and-not rm1
- calma CRF 71 *
-
- layer m1p CMFP
- labels CMFP
- calma CMFP 81 *
-
- layer m2 CM2
- and-not CRM
- and-not CRS
- and-not XP
- labels CM2
- calma CM2 51 *
-
- layer rm2 CRM
- and CM2
- calma CRM 70 *
-
- layer rm2 CRS
- and CM2
- calma CRS 72 *
-
- layer pseudo_rmetal2 CRS
- and-not rm2
- calma CRS 72 *
-
- layer m2p CMSP
- labels CMSP
- calma CMSP 82 *
-
-
-
-
-
-
-
-
-
- layer fp 100
- calma 100 100 *
-
- layer fm1 101
- calma 101 101 *
-
- layer fm2 102
- calma 102 102 *
-
- layer fm3 103
- calma 103 103 *
-
- layer fa 109
- calma 109 109 *
-
- layer fn 119
- calma 119 119 *
-
- layer fapm 110
- calma 110 110 *
-
- layer m3c CV2
-
- and-not CV1
- and-not XP
- grow 30
- and CM3
- and CM2
- grow 15
- shrink 15
- calma CV2 61 *
-
-
- layer m3 CM3
- and-not CRM
- and-not CRT
- and-not XP
- labels CM3
- calma CM3 62 *
-
- layer rm3 CRM
- and CM3
- calma CRM 70 *
-
- layer rm3 CRT
- and CM3
- calma CRT 73 *
-
- layer pseudo_rmetal3 CRT
- and-not rm3
- calma CRT 73 *
-
- layer m3p CMTP
- labels CMTP
- calma CMTP 83 *
-
- layer pad XP
- labels pad
- calma XP 26 *
-
- layer glass COG
- and-not COP
- and-not XP
- labels COG
- calma COG 52 *
-
- layer nfi CFI
- and CWN
- labels CFI
- calma CFI 27 *
-
- layer pfi CFI
- and-not CWN
- labels CFI
- calma CFI 27 *
-
- layer hr CHR
- labels CHR
- calma CHR 34 *
-
- layer phr CEL
- and CHR
- calma CEL 56 *
-
- layer ecap CEL
- and CPG
- labels CEL
- calma CEL 56 *
-
- layer poly2 CEL
- and-not CPG
- labels CEL
- calma CEL 56 *
-
- layer rp2 CEL
- and CRG2
- calma CEL 56 *
-
- layer pseudo_rpoly2 CRG2
- and-not CRE
- calma CRG2 68 *
-
- layer comment CX
- labels CX
- calma CX 63 *
-
- calma CTA 60 *
-
- calma CRW 65 *
- calma CRG 67 *
- calma CRD 66 *
- calma CRE 64 *
- calma CRF 71 *
- calma CRS 72 *
- calma CRT 73 *
- calma CRM 70 *
-
-
-style lambda=0.30(c)
- scalefactor 30
-
- layer nwell CWN
- and-not CWNR
- and-not CTA
- labels CWN
- calma CWN 42 *
-
- layer rnw CWN
- and-not CWNR
- and CRE
- and-not CSB
- and-not CRD
- and-not CAA
- and-not CPG
- calma CWN 42 *
-
- layer rnw CWN
- and-not CWNR
- and CRW
- and-not CRD
- and-not CAA
- and-not CPG
- calma CWN 42 *
-
- layer pseudo_rnwell CRW
- and-not CRE
- calma CRW 65 *
-
-
- ignore CWP
- calma CWP 41 *
-
- layer diff CAA
- and-not CTA
- and-not CPG
- and-not CWNR
- and-not COP
- and-not CSN
- and-not CSP
- labels CAA
- calma CAA 43 *
-
- layer tran CAA
- and-not CTA
- and CPG
- and-not CWNR
- and-not COP
- and-not CSN
- and-not CSP
- labels CAA
- calma CAA 43 *
-
- calma CSN 45 *
-
- calma CSP 44 *
-
- layer ndiff CAA
- and CSN
- and-not CWNR
- and-not CTA
- and-not CRE
- and-not CSB
- and-not CPG
- and-not CWN
- and-not CSP
- and-not CBA
- labels CAA
- calma CAA 43 *
-
- layer rnd CAA
- and CSN
- and-not CWNR
- and CRE
- and-not CSB
- and-not CPG
- and-not CWN
- and-not CSP
- and-not CBA
- calma CAA 43 *
-
- layer rnd CAA
- and CSN
- and-not CWNR
- and CRD
- and-not CSB
- and-not CPG
- and-not CWN
- and-not CSP
- and-not CBA
- calma CAA 43 *
-
- layer pseudo_rndiff CRD
- and-not CRE
- and-not CAA
- and-not CSB
- and-not CPG
- and-not CWN
- and-not CSP
- and CSN
- and-not CBA
- calma CRD 66 *
-
- layer pdiff CAA
- and CSP
- and-not CWNR
- and-not CTA
- and-not CRE
- and-not CSB
- and-not CPG
- and CWN
- and-not CSN
- and-not CPS
- and CSP
- and-not CBA
- labels CAA
- calma CAA 43 *
-
- layer rpd CAA
- and CSP
- and-not CWNR
- and CRE
- and-not CSB
- and-not CPG
- and CWN
- and-not CSN
- and-not CPS
- and CSP
- and-not CBA
- calma CAA 43 *
-
- layer rpd CAA
- and CSP
- and-not CWNR
- and CRD
- and-not CPG
- and CWN
- and-not CSN
- and-not CPS
- and CSP
- and-not CBA
- calma CAA 43 *
-
- layer pseudo_rpdiff CRD
- and-not CRE
- and-not CAA
- and-not CSB
- and-not CPG
- and CWN
- and-not CSN
- and-not CPS
- and CSP
- and-not CBA
- calma CRD 66 *
-
- layer nfet CAA
- and CSN
- and-not CWNR
- and-not CTA
- and CPG
- and-not CEL
- and-not CWN
- and-not CSP
- and-not CBA
- labels CAA
- calma CAA 43 *
-
- layer pfet CAA
- and CSP
- and-not CWNR
- and-not CTA
- and CPG
- and-not CEL
- and CWN
- and-not CSN
- and-not CPS
- and CSP
- and-not CBA
- labels CAA
- calma CAA 43 *
-
- layer nsd CAA
- and CSN
- and-not CWNR
- and-not CTA
- and CWN
- and-not CSP
- and-not CBA
- labels CAA
- calma CAA 43 *
-
- layer psd CAA
- and CSP
- and-not CWNR
- and-not CTA
- and-not CWN
- and-not CSN
- and-not CPS
- and CSP
- and-not CBA
- labels CAA
- calma CAA 43 *
-
- layer gc2 CCA
- and CEL
- calma CCA 48 *
-
- layer gc2 CCP
- and CEL
- calma CCP 47 *
-
- layer gc2 CCC
- and CEL
- calma CCC 25 *
-
- layer gc2 CCE
- and CEL
- calma CCE 55 *
-
- layer gc2 CCA
- and CPC
- and-not CPG
- calma CCA 48 *
-
- layer gc2 CCP
- and CPC
- and-not CPG
- calma CCP 47 *
-
- layer gc2 CCC
- and CPC
- and-not CPG
- calma CCC 25 *
-
- layer gc2 CCE
- and CPC
- and-not CPG
- calma CCE 55 *
-
- layer gc CCA
- and CPG
- and-not CEL
- calma CCA 48 *
-
- layer gc CCP
- and CPG
- and-not CEL
- calma CCP 47 *
-
- layer gc CCC
- and CPG
- and-not CEL
- calma CCC 25 *
-
- layer gc CCE
- and CPG
- and-not CEL
- calma CCE 55 *
-
- layer gc CCA
- and-not COP
- and-not CPC
- and-not CEL
- calma CCA 48 *
-
- layer gc CCP
- and-not COP
- and-not CPC
- and-not CEL
- calma CCP 47 *
-
- layer gc CCC
- and-not COP
- and-not CPC
- and-not CEL
- calma CCC 25 *
-
- layer gc CCE
- and-not COP
- and-not CPC
- and-not CEL
- calma CCE 55 *
-
- layer poly CPG
- and-not CRE
- labels CPG
- calma CPG 46 *
-
- layer rp CPG
- and CRE
- and-not CSB
- calma CPG 46 *
-
- layer rp CPG
- and CRG
- calma CPG 46 *
-
- layer pseudo_rpoly CRG
- and-not CRE
- calma CRG 67 *
-
- layer m1 CM1
- and-not CRM
- and-not CRF
- labels CM1
- calma CM1 49 *
-
- layer rm1 CRM
- and CM1
- calma CRM 70 *
-
- layer rm1 CRF
- and CM1
- calma CRF 71 *
-
- layer pseudo_rmetal1 CRF
- and-not rm1
- calma CRF 71 *
-
- layer m1p CMFP
- labels CMFP
- calma CMFP 81 *
-
- layer gv1 CV1
- calma CV1 50 *
-
- layer m2 CM2
- and-not CRM
- and-not CRS
- labels CM2
- calma CM2 51 *
-
- layer rm2 CRM
- and CM2
- calma CRM 70 *
-
- layer rm2 CRS
- and CM2
- calma CRS 72 *
-
- layer pseudo_rmetal2 CRS
- and-not rm2
- calma CRS 72 *
-
- layer m2p CMSP
- labels CMSP
- calma CMSP 82 *
-
- layer fp 100
- calma 100 100 *
-
- layer fm1 101
- calma 101 101 *
-
- layer fm2 102
- calma 102 102 *
-
- layer fm3 103
- calma 103 103 *
-
- layer fa 109
- calma 109 109 *
-
- layer fn 119
- calma 119 119 *
-
- layer fapm 110
- calma 110 110 *
-
- layer gv2 CV2
- calma CV2 61 *
-
- layer m3 CM3
- and-not CRM
- and-not CRT
- labels CM3
- calma CM3 62 *
-
- layer rm3 CRM
- and CM3
- calma CRM 70 *
-
- layer rm3 CRT
- and CM3
- calma CRT 73 *
-
- layer pseudo_rmetal3 CRT
- and-not rm3
- calma CRT 73 *
-
- layer m3p CMTP
- labels CMTP
- calma CMTP 83 *
-
- layer xp XP
- calma XP 26 *
-
- layer glass COG
- and-not COP
- labels COG
- calma COG 52 *
-
- layer nfi CFI
- and CWN
- labels CFI
- calma CFI 27 *
-
- layer pfi CFI
- and-not CWN
- labels CFI
- calma CFI 27 *
-
- layer hr CHR
- labels CHR
- calma CHR 34 *
-
- layer phr CEL
- and CHR
- calma CEL 56 *
-
- layer ecap CEL
- and CPG
- labels CEL
- calma CEL 56 *
-
- layer poly2 CEL
- and-not CPG
- labels CEL
- calma CEL 56 *
-
- layer rp2 CEL
- and CRG2
- calma CEL 56 *
-
- layer pseudo_rpoly2 CRG2
- and-not CRE
- calma CRG2 68 *
-
- layer comment CX
- labels CX
- calma CX 63 *
-
- calma CTA 60 *
-
- calma CRW 65 *
- calma CRG 67 *
- calma CRD 66 *
- calma CRE 64 *
- calma CRF 71 *
- calma CRS 72 *
- calma CRT 73 *
- calma CRM 70 *
-
-
-style lambda=0.30(cs)
- scalefactor 30
-
- layer nwell CWN
- and-not CWNR
- and-not CTA
- labels CWN
- calma CWN 42 *
-
- layer rnw CWN
- and-not CWNR
- and CRE
- and-not CSB
- and-not CRD
- and-not CAA
- and-not CPG
- calma CWN 42 *
-
- layer rnw CWN
- and-not CWNR
- and CRW
- and-not CRD
- and-not CAA
- and-not CPG
- calma CWN 42 *
-
- layer pseudo_rnwell CRW
- and-not CRE
- calma CRW 65 *
-
-
- ignore CWP
- calma CWP 41 *
-
- layer diff CAA
- and-not CTA
- and-not CPG
- and-not CWNR
- and-not COP
- and-not CSN
- and-not CSP
- labels CAA
- calma CAA 43 *
-
- layer tran CAA
- and-not CTA
- and CPG
- and-not CWNR
- and-not COP
- and-not CSN
- and-not CSP
- labels CAA
- calma CAA 43 *
-
- layer nselect CSN
- calma CSN 45 *
-
- layer pselect CSP
- calma CSP 44 *
-
- layer ndiff CAA
- and CSN
- and-not CWNR
- and-not CTA
- and-not CRE
- and-not CSB
- and-not CPG
- and-not CWN
- and-not CSP
- and-not CBA
- labels CAA
- calma CAA 43 *
-
- layer rnd CAA
- and CSN
- and-not CWNR
- and CRE
- and-not CSB
- and-not CPG
- and-not CWN
- and-not CSP
- and-not CBA
- calma CAA 43 *
-
- layer rnd CAA
- and CSN
- and-not CWNR
- and CRD
- and-not CSB
- and-not CPG
- and-not CWN
- and-not CSP
- and-not CBA
- calma CAA 43 *
-
- layer pseudo_rndiff CRD
- and-not CRE
- and-not CAA
- and-not CSB
- and-not CPG
- and-not CWN
- and-not CSP
- and CSN
- and-not CBA
- calma CRD 66 *
-
- layer pdiff CAA
- and CSP
- and-not CWNR
- and-not CTA
- and-not CRE
- and-not CSB
- and-not CPG
- and CWN
- and-not CSN
- and-not CPS
- and CSP
- and-not CBA
- labels CAA
- calma CAA 43 *
-
- layer rpd CAA
- and CSP
- and-not CWNR
- and CRE
- and-not CSB
- and-not CPG
- and CWN
- and-not CSN
- and-not CPS
- and CSP
- and-not CBA
- calma CAA 43 *
-
- layer rpd CAA
- and CSP
- and-not CWNR
- and CRD
- and-not CPG
- and CWN
- and-not CSN
- and-not CPS
- and CSP
- and-not CBA
- calma CAA 43 *
-
- layer pseudo_rpdiff CRD
- and-not CRE
- and-not CAA
- and-not CSB
- and-not CPG
- and CWN
- and-not CSN
- and-not CPS
- and CSP
- and-not CBA
- calma CRD 66 *
-
- layer nfet CAA
- and CSN
- and-not CWNR
- and-not CTA
- and CPG
- and-not CEL
- and-not CWN
- and-not CSP
- and-not CBA
- labels CAA
- calma CAA 43 *
-
- layer pfet CAA
- and CSP
- and-not CWNR
- and-not CTA
- and CPG
- and-not CEL
- and CWN
- and-not CSN
- and-not CPS
- and CSP
- and-not CBA
- labels CAA
- calma CAA 43 *
-
- layer nsd CAA
- and CSN
- and-not CWNR
- and-not CTA
- and CWN
- and-not CSP
- and-not CBA
- labels CAA
- calma CAA 43 *
-
- layer psd CAA
- and CSP
- and-not CWNR
- and-not CTA
- and-not CWN
- and-not CSN
- and-not CPS
- and CSP
- and-not CBA
- labels CAA
- calma CAA 43 *
-
- layer gc2 CCA
- and CEL
- calma CCA 48 *
-
- layer gc2 CCP
- and CEL
- calma CCP 47 *
-
- layer gc2 CCC
- and CEL
- calma CCC 25 *
-
- layer gc2 CCE
- and CEL
- calma CCE 55 *
-
- layer gc2 CCA
- and CPC
- and-not CPG
- calma CCA 48 *
-
- layer gc2 CCP
- and CPC
- and-not CPG
- calma CCP 47 *
-
- layer gc2 CCC
- and CPC
- and-not CPG
- calma CCC 25 *
-
- layer gc2 CCE
- and CPC
- and-not CPG
- calma CCE 55 *
-
- layer gc CCA
- and CPG
- and-not CEL
- calma CCA 48 *
-
- layer gc CCP
- and CPG
- and-not CEL
- calma CCP 47 *
-
- layer gc CCC
- and CPG
- and-not CEL
- calma CCC 25 *
-
- layer gc CCE
- and CPG
- and-not CEL
- calma CCE 55 *
-
- layer gc CCA
- and-not COP
- and-not CPC
- and-not CEL
- calma CCA 48 *
-
- layer gc CCP
- and-not COP
- and-not CPC
- and-not CEL
- calma CCP 47 *
-
- layer gc CCC
- and-not COP
- and-not CPC
- and-not CEL
- calma CCC 25 *
-
- layer gc CCE
- and-not COP
- and-not CPC
- and-not CEL
- calma CCE 55 *
-
- layer poly CPG
- and-not CRE
- labels CPG
- calma CPG 46 *
-
- layer rp CPG
- and CRE
- and-not CSB
- calma CPG 46 *
-
- layer rp CPG
- and CRG
- calma CPG 46 *
-
- layer pseudo_rpoly CRG
- and-not CRE
- calma CRG 67 *
-
- layer m1 CM1
- and-not CRM
- and-not CRF
- labels CM1
- calma CM1 49 *
-
- layer rm1 CRM
- and CM1
- calma CRM 70 *
-
- layer rm1 CRF
- and CM1
- calma CRF 71 *
-
- layer pseudo_rmetal1 CRF
- and-not rm1
- calma CRF 71 *
-
- layer m1p CMFP
- labels CMFP
- calma CMFP 81 *
-
- layer gv1 CV1
- calma CV1 50 *
-
- layer m2 CM2
- and-not CRM
- and-not CRS
- labels CM2
- calma CM2 51 *
-
- layer rm2 CRM
- and CM2
- calma CRM 70 *
-
- layer rm2 CRS
- and CM2
- calma CRS 72 *
-
- layer pseudo_rmetal2 CRS
- and-not rm2
- calma CRS 72 *
-
- layer m2p CMSP
- labels CMSP
- calma CMSP 82 *
-
- layer fp 100
- calma 100 100 *
-
- layer fm1 101
- calma 101 101 *
-
- layer fm2 102
- calma 102 102 *
-
- layer fm3 103
- calma 103 103 *
-
- layer fa 109
- calma 109 109 *
-
- layer fn 119
- calma 119 119 *
-
- layer fapm 110
- calma 110 110 *
-
- layer gv2 CV2
- calma CV2 61 *
-
- layer m3 CM3
- and-not CRM
- and-not CRT
- labels CM3
- calma CM3 62 *
-
- layer rm3 CRM
- and CM3
- calma CRM 70 *
-
- layer rm3 CRT
- and CM3
- calma CRT 73 *
-
- layer pseudo_rmetal3 CRT
- and-not rm3
- calma CRT 73 *
-
- layer m3p CMTP
- labels CMTP
- calma CMTP 83 *
-
- layer xp XP
- calma XP 26 *
-
- layer glass COG
- and-not COP
- labels COG
- calma COG 52 *
-
- layer nfi CFI
- and CWN
- labels CFI
- calma CFI 27 *
-
- layer pfi CFI
- and-not CWN
- labels CFI
- calma CFI 27 *
-
- layer hr CHR
- labels CHR
- calma CHR 34 *
-
- layer phr CEL
- and CHR
- calma CEL 56 *
-
- layer ecap CEL
- and CPG
- labels CEL
- calma CEL 56 *
-
- layer poly2 CEL
- and-not CPG
- labels CEL
- calma CEL 56 *
-
- layer rp2 CEL
- and CRG2
- calma CEL 56 *
-
- layer pseudo_rpoly2 CRG2
- and-not CRE
- calma CRG2 68 *
-
- layer comment CX
- labels CX
- calma CX 63 *
-
- calma CTA 60 *
-
- calma CRW 65 *
- calma CRG 67 *
- calma CRD 66 *
- calma CRE 64 *
- calma CRF 71 *
- calma CRS 72 *
- calma CRT 73 *
- calma CRM 70 *
-
-
-style lambda=0.30(cps)
- scalefactor 30
-
- layer nwell CWN
- and-not CWNR
- and-not CTA
- labels CWN
- calma CWN 42 *
-
- layer rnw CWN
- and-not CWNR
- and CRE
- and-not CSB
- and-not CRD
- and-not CAA
- and-not CPG
- calma CWN 42 *
-
- layer rnw CWN
- and-not CWNR
- and CRW
- and-not CRD
- and-not CAA
- and-not CPG
- calma CWN 42 *
-
- layer pseudo_rnwell CRW
- and-not CRE
- calma CRW 65 *
-
- layer pwell CWP
- and-not CTA
- labels CWP
- calma CWP 41 *
-
- layer diff CAA
- and-not CTA
- and-not CPG
- and-not CWNR
- and-not COP
- and-not CSN
- and-not CSP
- labels CAA
- calma CAA 43 *
-
- layer tran CAA
- and-not CTA
- and CPG
- and-not CWNR
- and-not COP
- and-not CSN
- and-not CSP
- labels CAA
- calma CAA 43 *
-
- layer nselect CSN
- calma CSN 45 *
-
- layer pselect CSP
- calma CSP 44 *
-
- layer ndiff CAA
- and CSN
- and-not CWNR
- and-not CTA
- and-not CRE
- and-not CSB
- and-not CPG
- and-not CWN
- and-not CSP
- and-not CBA
- labels CAA
- calma CAA 43 *
-
- layer rnd CAA
- and CSN
- and-not CWNR
- and CRE
- and-not CSB
- and-not CPG
- and-not CWN
- and-not CSP
- and-not CBA
- calma CAA 43 *
-
- layer rnd CAA
- and CSN
- and-not CWNR
- and CRD
- and-not CSB
- and-not CPG
- and-not CWN
- and-not CSP
- and-not CBA
- calma CAA 43 *
-
- layer pseudo_rndiff CRD
- and-not CRE
- and-not CAA
- and-not CSB
- and-not CPG
- and-not CWN
- and-not CSP
- and CSN
- and-not CBA
- calma CRD 66 *
-
- layer pdiff CAA
- and CSP
- and-not CWNR
- and-not CTA
- and-not CRE
- and-not CSB
- and-not CPG
- and CWN
- and-not CSN
- and-not CPS
- and CSP
- and-not CBA
- labels CAA
- calma CAA 43 *
-
- layer rpd CAA
- and CSP
- and-not CWNR
- and CRE
- and-not CSB
- and-not CPG
- and CWN
- and-not CSN
- and-not CPS
- and CSP
- and-not CBA
- calma CAA 43 *
-
- layer rpd CAA
- and CSP
- and-not CWNR
- and CRD
- and-not CPG
- and CWN
- and-not CSN
- and-not CPS
- and CSP
- and-not CBA
- calma CAA 43 *
-
- layer pseudo_rpdiff CRD
- and-not CRE
- and-not CAA
- and-not CSB
- and-not CPG
- and CWN
- and-not CSN
- and-not CPS
- and CSP
- and-not CBA
- calma CRD 66 *
-
- layer nfet CAA
- and CSN
- and-not CWNR
- and-not CTA
- and CPG
- and-not CEL
- and-not CWN
- and-not CSP
- and-not CBA
- labels CAA
- calma CAA 43 *
-
- layer pfet CAA
- and CSP
- and-not CWNR
- and-not CTA
- and CPG
- and-not CEL
- and CWN
- and-not CSN
- and-not CPS
- and CSP
- and-not CBA
- labels CAA
- calma CAA 43 *
-
- layer nsd CAA
- and CSN
- and-not CWNR
- and-not CTA
- and CWN
- and-not CSP
- and-not CBA
- labels CAA
- calma CAA 43 *
-
- layer psd CAA
- and CSP
- and-not CWNR
- and-not CTA
- and-not CWN
- and-not CSN
- and-not CPS
- and CSP
- and-not CBA
- labels CAA
- calma CAA 43 *
-
- layer gc2 CCA
- and CEL
- calma CCA 48 *
-
- layer gc2 CCP
- and CEL
- calma CCP 47 *
-
- layer gc2 CCC
- and CEL
- calma CCC 25 *
-
- layer gc2 CCE
- and CEL
- calma CCE 55 *
-
- layer gc2 CCA
- and CPC
- and-not CPG
- calma CCA 48 *
-
- layer gc2 CCP
- and CPC
- and-not CPG
- calma CCP 47 *
-
- layer gc2 CCC
- and CPC
- and-not CPG
- calma CCC 25 *
-
- layer gc2 CCE
- and CPC
- and-not CPG
- calma CCE 55 *
-
- layer gc CCA
- and CPG
- and-not CEL
- calma CCA 48 *
-
- layer gc CCP
- and CPG
- and-not CEL
- calma CCP 47 *
-
- layer gc CCC
- and CPG
- and-not CEL
- calma CCC 25 *
-
- layer gc CCE
- and CPG
- and-not CEL
- calma CCE 55 *
-
- layer gc CCA
- and-not COP
- and-not CPC
- and-not CEL
- calma CCA 48 *
-
- layer gc CCP
- and-not COP
- and-not CPC
- and-not CEL
- calma CCP 47 *
-
- layer gc CCC
- and-not COP
- and-not CPC
- and-not CEL
- calma CCC 25 *
-
- layer gc CCE
- and-not COP
- and-not CPC
- and-not CEL
- calma CCE 55 *
-
- layer poly CPG
- and-not CRE
- labels CPG
- calma CPG 46 *
-
- layer rp CPG
- and CRE
- and-not CSB
- calma CPG 46 *
-
- layer rp CPG
- and CRG
- calma CPG 46 *
-
- layer pseudo_rpoly CRG
- and-not CRE
- calma CRG 67 *
-
- layer m1 CM1
- and-not CRM
- and-not CRF
- labels CM1
- calma CM1 49 *
-
- layer rm1 CRM
- and CM1
- calma CRM 70 *
-
- layer rm1 CRF
- and CM1
- calma CRF 71 *
-
- layer pseudo_rmetal1 CRF
- and-not rm1
- calma CRF 71 *
-
- layer m1p CMFP
- labels CMFP
- calma CMFP 81 *
-
- layer gv1 CV1
- calma CV1 50 *
-
- layer m2 CM2
- and-not CRM
- and-not CRS
- labels CM2
- calma CM2 51 *
-
- layer rm2 CRM
- and CM2
- calma CRM 70 *
-
- layer rm2 CRS
- and CM2
- calma CRS 72 *
-
- layer pseudo_rmetal2 CRS
- and-not rm2
- calma CRS 72 *
-
- layer m2p CMSP
- labels CMSP
- calma CMSP 82 *
-
- layer fp 100
- calma 100 100 *
-
- layer fm1 101
- calma 101 101 *
-
- layer fm2 102
- calma 102 102 *
-
- layer fm3 103
- calma 103 103 *
-
- layer fa 109
- calma 109 109 *
-
- layer fn 119
- calma 119 119 *
-
- layer fapm 110
- calma 110 110 *
-
- layer gv2 CV2
- calma CV2 61 *
-
- layer m3 CM3
- and-not CRM
- and-not CRT
- labels CM3
- calma CM3 62 *
-
- layer rm3 CRM
- and CM3
- calma CRM 70 *
-
- layer rm3 CRT
- and CM3
- calma CRT 73 *
-
- layer pseudo_rmetal3 CRT
- and-not rm3
- calma CRT 73 *
-
- layer m3p CMTP
- labels CMTP
- calma CMTP 83 *
-
- layer xp XP
- calma XP 26 *
-
- layer glass COG
- and-not COP
- labels COG
- calma COG 52 *
-
- layer nfi CFI
- and CWN
- labels CFI
- calma CFI 27 *
-
- layer pfi CFI
- and-not CWN
- labels CFI
- calma CFI 27 *
-
- layer hr CHR
- labels CHR
- calma CHR 34 *
-
- layer phr CEL
- and CHR
- calma CEL 56 *
-
- layer ecap CEL
- and CPG
- labels CEL
- calma CEL 56 *
-
- layer poly2 CEL
- and-not CPG
- labels CEL
- calma CEL 56 *
-
- layer rp2 CEL
- and CRG2
- calma CEL 56 *
-
- layer pseudo_rpoly2 CRG2
- and-not CRE
- calma CRG2 68 *
-
- layer comment CX
- labels CX
- calma CX 63 *
-
- calma CTA 60 *
-
- calma CRW 65 *
- calma CRG 67 *
- calma CRD 66 *
- calma CRE 64 *
- calma CRF 71 *
- calma CRS 72 *
- calma CRT 73 *
- calma CRM 70 *
-
-
-style lambda=0.30(cp)
- scalefactor 30
-
- layer nwell CWN
- and-not CWNR
- and-not CTA
- labels CWN
- calma CWN 42 *
-
- layer rnw CWN
- and-not CWNR
- and CRE
- and-not CSB
- and-not CRD
- and-not CAA
- and-not CPG
- calma CWN 42 *
-
- layer rnw CWN
- and-not CWNR
- and CRW
- and-not CRD
- and-not CAA
- and-not CPG
- calma CWN 42 *
-
- layer pseudo_rnwell CRW
- and-not CRE
- calma CRW 65 *
-
- layer pwell CWP
- and-not CTA
- labels CWP
- calma CWP 41 *
-
- layer diff CAA
- and-not CTA
- and-not CPG
- and-not CWNR
- and-not COP
- and-not CSN
- and-not CSP
- labels CAA
- calma CAA 43 *
-
- layer tran CAA
- and-not CTA
- and CPG
- and-not CWNR
- and-not COP
- and-not CSN
- and-not CSP
- labels CAA
- calma CAA 43 *
-
- calma CSN 45 *
-
- calma CSP 44 *
-
- layer ndiff CAA
- and CSN
- and-not CWNR
- and-not CTA
- and-not CRE
- and-not CSB
- and-not CPG
- and-not CWN
- and-not CSP
- and-not CBA
- labels CAA
- calma CAA 43 *
-
- layer rnd CAA
- and CSN
- and-not CWNR
- and CRE
- and-not CSB
- and-not CPG
- and-not CWN
- and-not CSP
- and-not CBA
- calma CAA 43 *
-
- layer rnd CAA
- and CSN
- and-not CWNR
- and CRD
- and-not CSB
- and-not CPG
- and-not CWN
- and-not CSP
- and-not CBA
- calma CAA 43 *
-
- layer pseudo_rndiff CRD
- and-not CRE
- and-not CAA
- and-not CSB
- and-not CPG
- and-not CWN
- and-not CSP
- and CSN
- and-not CBA
- calma CRD 66 *
-
- layer pdiff CAA
- and CSP
- and-not CWNR
- and-not CTA
- and-not CRE
- and-not CSB
- and-not CPG
- and CWN
- and-not CSN
- and-not CPS
- and CSP
- and-not CBA
- labels CAA
- calma CAA 43 *
-
- layer rpd CAA
- and CSP
- and-not CWNR
- and CRE
- and-not CSB
- and-not CPG
- and CWN
- and-not CSN
- and-not CPS
- and CSP
- and-not CBA
- calma CAA 43 *
-
- layer rpd CAA
- and CSP
- and-not CWNR
- and CRD
- and-not CPG
- and CWN
- and-not CSN
- and-not CPS
- and CSP
- and-not CBA
- calma CAA 43 *
-
- layer pseudo_rpdiff CRD
- and-not CRE
- and-not CAA
- and-not CSB
- and-not CPG
- and CWN
- and-not CSN
- and-not CPS
- and CSP
- and-not CBA
- calma CRD 66 *
-
- layer nfet CAA
- and CSN
- and-not CWNR
- and-not CTA
- and CPG
- and-not CEL
- and-not CWN
- and-not CSP
- and-not CBA
- labels CAA
- calma CAA 43 *
-
- layer pfet CAA
- and CSP
- and-not CWNR
- and-not CTA
- and CPG
- and-not CEL
- and CWN
- and-not CSN
- and-not CPS
- and CSP
- and-not CBA
- labels CAA
- calma CAA 43 *
-
- layer nsd CAA
- and CSN
- and-not CWNR
- and-not CTA
- and CWN
- and-not CSP
- and-not CBA
- labels CAA
- calma CAA 43 *
-
- layer psd CAA
- and CSP
- and-not CWNR
- and-not CTA
- and-not CWN
- and-not CSN
- and-not CPS
- and CSP
- and-not CBA
- labels CAA
- calma CAA 43 *
-
- layer gc2 CCA
- and CEL
- calma CCA 48 *
-
- layer gc2 CCP
- and CEL
- calma CCP 47 *
-
- layer gc2 CCC
- and CEL
- calma CCC 25 *
-
- layer gc2 CCE
- and CEL
- calma CCE 55 *
-
- layer gc2 CCA
- and CPC
- and-not CPG
- calma CCA 48 *
-
- layer gc2 CCP
- and CPC
- and-not CPG
- calma CCP 47 *
-
- layer gc2 CCC
- and CPC
- and-not CPG
- calma CCC 25 *
-
- layer gc2 CCE
- and CPC
- and-not CPG
- calma CCE 55 *
-
- layer gc CCA
- and CPG
- and-not CEL
- calma CCA 48 *
-
- layer gc CCP
- and CPG
- and-not CEL
- calma CCP 47 *
-
- layer gc CCC
- and CPG
- and-not CEL
- calma CCC 25 *
-
- layer gc CCE
- and CPG
- and-not CEL
- calma CCE 55 *
-
- layer gc CCA
- and-not COP
- and-not CPC
- and-not CEL
- calma CCA 48 *
-
- layer gc CCP
- and-not COP
- and-not CPC
- and-not CEL
- calma CCP 47 *
-
- layer gc CCC
- and-not COP
- and-not CPC
- and-not CEL
- calma CCC 25 *
-
- layer gc CCE
- and-not COP
- and-not CPC
- and-not CEL
- calma CCE 55 *
-
- layer poly CPG
- and-not CRE
- labels CPG
- calma CPG 46 *
-
- layer rp CPG
- and CRE
- and-not CSB
- calma CPG 46 *
-
- layer rp CPG
- and CRG
- calma CPG 46 *
-
- layer pseudo_rpoly CRG
- and-not CRE
- calma CRG 67 *
-
- layer m1 CM1
- and-not CRM
- and-not CRF
- labels CM1
- calma CM1 49 *
-
- layer rm1 CRM
- and CM1
- calma CRM 70 *
-
- layer rm1 CRF
- and CM1
- calma CRF 71 *
-
- layer pseudo_rmetal1 CRF
- and-not rm1
- calma CRF 71 *
-
- layer m1p CMFP
- labels CMFP
- calma CMFP 81 *
-
- layer gv1 CV1
- calma CV1 50 *
-
- layer m2 CM2
- and-not CRM
- and-not CRS
- labels CM2
- calma CM2 51 *
-
- layer rm2 CRM
- and CM2
- calma CRM 70 *
-
- layer rm2 CRS
- and CM2
- calma CRS 72 *
-
- layer pseudo_rmetal2 CRS
- and-not rm2
- calma CRS 72 *
-
- layer m2p CMSP
- labels CMSP
- calma CMSP 82 *
-
- layer fp 100
- calma 100 100 *
-
- layer fm1 101
- calma 101 101 *
-
- layer fm2 102
- calma 102 102 *
-
- layer fm3 103
- calma 103 103 *
-
- layer fa 109
- calma 109 109 *
-
- layer fn 119
- calma 119 119 *
-
- layer fapm 110
- calma 110 110 *
-
- layer gv2 CV2
- calma CV2 61 *
-
- layer m3 CM3
- and-not CRM
- and-not CRT
- labels CM3
- calma CM3 62 *
-
- layer rm3 CRM
- and CM3
- calma CRM 70 *
-
- layer rm3 CRT
- and CM3
- calma CRT 73 *
-
- layer pseudo_rmetal3 CRT
- and-not rm3
- calma CRT 73 *
-
- layer m3p CMTP
- labels CMTP
- calma CMTP 83 *
-
- layer xp XP
- calma XP 26 *
-
- layer glass COG
- and-not COP
- labels COG
- calma COG 52 *
-
- layer nfi CFI
- and CWN
- labels CFI
- calma CFI 27 *
-
- layer pfi CFI
- and-not CWN
- labels CFI
- calma CFI 27 *
-
- layer hr CHR
- labels CHR
- calma CHR 34 *
-
- layer phr CEL
- and CHR
- calma CEL 56 *
-
- layer ecap CEL
- and CPG
- labels CEL
- calma CEL 56 *
-
- layer poly2 CEL
- and-not CPG
- labels CEL
- calma CEL 56 *
-
- layer rp2 CEL
- and CRG2
- calma CEL 56 *
-
- layer pseudo_rpoly2 CRG2
- and-not CRE
- calma CRG2 68 *
-
- layer comment CX
- labels CX
- calma CX 63 *
-
- calma CTA 60 *
-
- calma CRW 65 *
- calma CRG 67 *
- calma CRD 66 *
- calma CRE 64 *
- calma CRF 71 *
- calma CRS 72 *
- calma CRT 73 *
- calma CRM 70 *
-
-style fill-only
- scalefactor 30
-# scalefactor 100
-
- layer fp 100
- calma 100 100 *
-
- layer fm1 101
- calma 101 101 *
-
- layer fm2 102
- calma 102 102 *
-
- layer fm3 103
- calma 103 103 *
-
- layer fa 109
- or fb
- calma 109 109 *
-
- layer fn 119
- calma 119 119 *
-
- layer fapm 110
- calma 110 110 *
-
-end
-
-mzrouter
- style irouter
-# layer hCost vCost jogCost hintCost
- layer metal3 1 2 2 1
- layer metal2 2 1 2 1
- layer metal1 2 3 2 1
- layer poly 10 10 11 1
- contact m3contact metal3 metal2 5
- contact m2contact metal2 metal1 6
- contact pcontact metal1 poly 7
- notactive poly pcontact
-
-style garouter
- layer m2 32 64 256 1
- layer m1 64 32 256 1
- contact m2contact metal1 metal2 1024
-
-end
-
-drc
- width nwell 12 \
- "N-well width < 12 (Mosis #1.1)"
-
- width rnw 12 \
- "rnwell (for resistor L/W extraction) width < 12 (Mosis #1.1)"
-
- width pwell 12 \
- "P-well width < 12 (Mosis #1.1)"
-
- width diff,ndiff,rnd,nfet,nsd,pdiff,rpd,pfet,psd,ndc/a,nsc/a,pdc/a,psc/a 3 \
- "Diffusion width < 3 (Mosis #2.1)"
-
- width poly,fp,rp,pc/a,nfet,pfet,fet 2 \
- "Poly width < 2 (Mosis #3.1)"
-
- width nselect 2 \
- "N-Select width < 2 (Mosis #4.4)"
-
- width pselect 2 \
- "P-Select width < 2 (Mosis #4.4)"
-
- width pc/m1 4 \
- "Poly contact width < 4 (Mosis #5.1)"
-
-
- width gc 2 \
- "GC contact width < 2 (Mosis #6.1)"
-
- width ndc/m1 4 \
- "Diffusion contact width < 4 (Mosis #6.1)"
-
-
- width nsc/m1 4 \
- "Diffusion contact width < 4 (Mosis #6.1)"
-
-
- width pdc/m1 4 \
- "Diffusion contact width < 4 (Mosis #6.1)"
-
-
- width psc/m1 4 \
- "Diffusion contact width < 4 (Mosis #6.1)"
-
-
- width m1,fm1,rm1,ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1,m2c/m1 3 \
- "Metal1 width < 3 (Mosis #7.1)"
-
- width gv1 2 \
- "GV1 via width < 2 (Mosis #8.1)"
-
- width m2c/m1 4 \
- "Metal2 contact width < 4 (Mosis #8.1)"
-
-
-
-
-
-
-
- width p2m12c 4 \
- "Metal2 contact width < 4 (Mosis #8.1)"
-
- width p2m12c 4 \
- "stacked p2m12c width < 4 (Mosis #8.1)"
-
- width m2,fm2,rm2,m2c/m2,m3c/m2 3 \
- "Metal2 width < 3 (Mosis #9.1)"
-
- width poly2,ecap,phr,p2c,p2m12c,p2c,p2m12c 5 \
- "Poly2 width < 5 (Mosis #11.1)"
-
- width gc2 2 \
- "Generic contact2 width < 2 (Mosis #13.1)"
-
- width p2c 4 \
- "Poly2 contact width < 4 (Mosis #13.1)"
-
- width p2m12c 4 \
- "Poly2 contact width < 4 (Mosis #13.1)"
-
- width gv2 2 \
- "GV2 via width < 2 (Mosis #14.1)"
-
- width m3c/m2 4 \
- "Metal3 contact width < 4 (Mosis #14.1)"
-
-
- width m3,fm3,rm3,m3c/m3,pad 5 \
- "Metal3 width < 5 (Mosis #15.1)"
-
- width hr,phr 4 \
- "High-Resist width < 4 (Mosis #27.1)"
-
- width phr 5 \
- "High-Resist poly2R width < 5 (Mosis #27.7)"
-
- width nfi,pfi 4 \
- "N/P_field-implant width < 4 (Mosis #29.1)"
-
- spacing nwell nwell 6 touching_ok \
- "N-well(at-same-potential) spacing < 6 (Mosis #1.3)"
-
- spacing pwell pwell 6 touching_ok \
- "P-well(at-same-potential) spacing < 6 (Mosis #1.3)"
-
- spacing rnw nwell 18 touching_illegal \
- "rnw (for resistor L/W extraction) spacing to N-well < 18 (Mosis #2.3)"
-
- edge4way ~(pwell)/well pwell 1 ~(rnw)/active 0 0 \
- "P-well cannot touch rnw (for resistor L/W extraction) (Mosis #1.4)" active
-
- spacing diff,ndiff,rnd,nfet,nsd,pdiff,rpd,pfet,psd,ndc/a,nsc/a,pdc/a,psc/a diff,ndiff,rnd,nfet,nsd,pdiff,rpd,pfet,psd,ndc/a,nsc/a,pdc/a,psc/a 3 touching_ok \
- "Diffusion spacing < 3 (Mosis #2.2)"
-
- spacing nwell ndiff,rnd,nfet,ndc/a 6 touching_illegal \
- "N-well spacing to N-Diffusion < 6 (Mosis #2.3)"
-
- spacing pwell pdiff,rpd,pfet,pdc/a 6 touching_illegal \
- "P-well spacing to P-Diffusion < 6 (Mosis #2.3)"
-
- spacing ndiff,rnd,nfet,ndc/a pdiff,rpd,pfet,pdc/a 12 touching_illegal \
- "N-Diffusion spacing to P-Diffusion < 12 (Mosis #2.3+2.3)"
-
- edge4way ~(nwell)/well nwell 6 ~(pdiff,rpd,pfet,pdc/a)/active nwell 6 \
- "N-well overlap of P-Diffusion < 6 (Mosis #2.4)" active
-
- edge4way ~(pwell)/well pwell 6 ~(ndiff,rnd,nfet,ndc/a)/active pwell 6 \
- "P-well overlap of N-Diffusion < 6 (Mosis #2.4)" active
-
- edge4way ~(nwell)/well nwell 3 ~(nsd,nsc/a)/active nwell 3 \
- "N-well overlap of N-Ohmic < 3 (Mosis #2.4)" active
-
- edge4way ~(pwell)/well pwell 3 ~(psd,psc/a)/active pwell 3 \
- "P-well overlap of P-Ohmic < 3 (Mosis #2.4)" active
-
- spacing ndiff,rnd,ndc/a nsd,nsc/a 9 touching_illegal \
- "N-Diffusion spacing to N-Ohmic < 9 (Mosis #2.3+2.4)"
-
- spacing pdiff,rpd,pdc/a psd,psc/a 9 touching_illegal \
- "P-Diffusion spacing to P-Ohmic < 9 (Mosis #2.3+2.4)"
-
- spacing nwell psd,psc/a 3 touching_illegal \
- "N-well spacing to P-Ohmic < 3 (Mosis #2.4)"
-
- spacing pwell nsd,nsc/a 3 touching_illegal \
- "P-well spacing to N-Ohmic < 3 (Mosis #2.4)"
-
- spacing psd,psc/a rnw,prnw 3 touching_illegal \
- "P-Ohmic spacing to rnw,prnw < 3 (Mosis #2.4)"
-
- spacing nsd,nsc/a psd,psc/a 6 touching_illegal \
- "N-Ohmic spacing to P-Ohmic < 6 (Mosis #2.4+2.4)"
-
- spacing ndiff,rnd,nfet,ndc/a,nfet psd,psc/a 4 touching_ok \
- "N-Diffusion spacing to P-Ohmic < 4 (Mosis #2.5)"
-
- spacing pdiff,rpd,pfet,pdc/a,pfet nsd,nsc/a 4 touching_ok \
- "P-Diffusion spacing to N-Ohmic < 4 (Mosis #2.5)"
-
- spacing poly,rp,pc/a,nfet,pfet,fet poly,rp,pc/a,nfet,pfet,fet 3 touching_ok \
- "Poly spacing < 3 (Mosis #3.2)"
-
- spacing poly,rp,pc/a,nfet,pfet,fet fp,fapm 3 touching_illegal \
- "Poly spacing to fill layer (fp) < 3 (Mosis #3.2)"
-
- spacing fp fp 4 touching_ok \
- "Poly fill layer (fp) spacing < 4 (Mosis #0)"
-
- edge4way nfet,pfet,fet space/active,poly,fp,rp,pc/a 2 poly,fp,rp,pc/a 0 0 \
- "Poly overhang of Transistor < 2 (Mosis #3.3)" active
-
- edge4way nfet,pfet,fet space/active,ndiff,rnd,ndc/a,pdiff,rpd,pdc/a 3 ndiff,rnd,ndc/a,pdiff,rpd,pdc/a,nfet,pfet,fet 0 0 \
- "N-Diffusion,P-Diffusion overhang of Transistor < 3 (Mosis #3.4)" active
-
- edge4way poly,fp,rp,pc/a ~(poly,fp,rp,pc/a,nfet,pfet,fet,prp)/active 1 space space 1 \
- "Poly spacing to Diffusion < 1 (Mosis #3.5)"
-
- edge4way nfet ~(nfet)/active 3 ~(pselect)/select ~(nfet)/active 3 \
- "N-Transistor space to P-Select < 3 (Mosis #4.1)" select
-
- edge4way pfet ~(pfet)/active 3 ~(nselect)/select ~(pfet)/active 3 \
- "P-Transistor space to N-Select < 3 (Mosis #4.1)" select
-
- edge4way nfet ~(nfet)/active 3 ~(psd,psc/a)/active ~(nfet)/active 2 \
- "N-Transistor space to P-Ohmic < 3 (Mosis #4.1)" active
-
- edge4way pfet ~(pfet)/active 3 ~(nsd,nsc/a)/active ~(pfet)/active 2 \
- "P-Transistor space to N-Ohmic < 3 (Mosis #4.1)" active
-
-#PEZ edge4way psd,psc/a space ~(nfet)/active space \
-#PEZ "P-Ohmic space to N-Transistor < (Mosis #4.1)" active
-
-#PEZ edge4way nsd,nsc/a space ~(pfet)/active space \
-#PEZ "N-Ohmic space to P-Transistor < (Mosis #4.1)" active
-
- edge4way ~(nselect,pselect)/select nselect,pselect 2 ~(diff,ndiff,rnd,nfet,nsd,pdiff,rpd,pfet,psd,ndc/a,nsc/a,pdc/a,psc/a)/active nselect,pselect 2 \
- "N-Select,P-Select overlap of Diffusion < 2 (Mosis #4.2_)" active
-
- edge4way space nselect,pselect 2 ~(ndiff,rnd,nfet,ndc/a)/active nselect 2 \
- "N-Select space to N-Diffusion < 2 (Mosis #4.2a)" active
-
- edge4way nselect,pselect space 2 ~(ndiff,rnd,nfet,ndc/a)/active nselect 2 \
- "N-Select space to N-Diffusion < 2 (Mosis #4.2b)" active
-
- edge4way nselect,pselect space 2 ~(ndiff,rnd,nfet,ndc/a)/active space,nselect,pselect 2 \
- "N-Select space to N-Diffusion < 2 (Mosis #4.2c)" active
-
- edge4way space nselect,pselect 2 ~(pdiff,rpd,pfet,pdc/a)/active pselect 2 \
- "P-Select space to P-Diffusion < 2 (Mosis #4.2aa)" active
-
- edge4way nselect,pselect space 2 ~(pdiff,rpd,pfet,pdc/a)/active pselect 2 \
- "P-Select space to P-Diffusion < 2 (Mosis #4.2bb)" active
-
- edge4way nselect,pselect space 2 ~(pdiff,rpd,pfet,pdc/a)/active space,nselect,pselect 2 \
- "P-Select space to P-Diffusion < 2 (Mosis #4.2cc)" active
-
- edge4way diff space 2 nselect space 2 \
- "N-Select must overlap Diffusion by 2 (Mosis #4.2)" select
-
- edge4way diff space 2 pselect space 2 \
- "P-Select must overlap Diffusion by 2 (Mosis #4.2)" select
-
- edge4way ndiff,rnd,nfet,ndc/a space 2 ~(pselect)/select space 2 \
- "P-Select space to N-Diffusion < 2 (Mosis #4.2e)" select
-
- edge4way pdiff,rpd,pfet,pdc/a space 2 ~(nselect)/select space 2 \
- "N-Select space to P-Diffusion < 2 (Mosis #4.2e)" select
-
- edge4way ~(pdiff,rpd,pfet,pdc/a,psd,psc/a)/active pdiff,rpd,pfet,pdc/a,psd,psc/a 1 ~(nselect)/select 0 0 \
- "N-Select cannot touch P-Diffusion,P-Ohmic (Mosis #4.2f)" select
-
- edge4way ~(ndiff,rnd,nfet,ndc/a,nsd,nsc/a)/active ndiff,rnd,nfet,ndc/a,nsd,nsc/a 1 ~(pselect)/select 0 0 \
- "P-Select cannot touch N-Diffusion,N-Ohmic (Mosis #4.2f)" select
-
- width nsd,nsc/a,psd,psc/a 2 \
- "N-Ohmic,P-Ohmic width < 2 (Mosis #4.1)"
-
- spacing nselect nselect 2 touching_ok \
- "N-Select spacing < 2 (Mosis #4.4)"
-
- spacing pselect pselect 2 touching_ok \
- "P-Select spacing < 2 (Mosis #4.4)"
-
- edge4way ndiff,rnd,ndc/a psd,psc/a 2 ~(ndiff,rnd,ndc/a)/active 0 0 \
- "P-Ohmic(that touches N-Diffusion) width < 2 (Mosis #4.4)"
-
- edge4way pdiff,rpd,pdc/a nsd,nsc/a 2 ~(pdiff,rpd,pdc/a)/active 0 0 \
- "N-Ohmic(that touches P-Diffusion) width < 2 (Mosis #4.4)"
-
- edge4way gc ~(gc)/contact 1 poly,fp,rp,pc/a,diff,ndiff,rnd,nfet,nsd,pdiff,rpd,pfet,psd,ndc/a,nsc/a,pdc/a,psc/a ~(gc)/contact 1 \
- "Poly,Diffusion overlap of GC contact < 1 (Mosis #5.2)" active
-
- edge4way gc space 1 poly,fp,rp,pc/a,diff,ndiff,rnd,nfet,nsd,pdiff,rpd,pfet,psd,ndc/a,nsc/a,pdc/a,psc/a space 1 \
- "one of: Poly,Diffusion must overlap GC contact by 1 (Mosis #5.2a,6.2a)" active
-
- edge4way ~(poly,fp,rp,pc/a,diff,ndiff,rnd,nfet,nsd,pdiff,rpd,pfet,psd,ndc/a,nsc/a,pdc/a,psc/a)/active poly,fp,rp,pc/a,diff,ndiff,rnd,nfet,nsd,pdiff,rpd,pfet,psd,ndc/a,nsc/a,pdc/a,psc/a 1 ~(gc)/contact 0 0 \
- "Edge to one of: Poly,Diffusion cannot touch GC contact (Mosis #5.2a,6.2a)" contact
-
- spacing gc gc 3 touching_ok \
- "Generic contact spacing < 3 (Mosis #5.3)"
-
- edge4way ~(gc)/contact gc 1 ~(ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1)/metal1 0 0 \
- "GC contact cannot touch Metal1 contacts (Mosis #0)" metal1
-
- edge4way ~(gc2)/contact gc2 1 ~(ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1)/metal1 0 0 \
- "Generic contact2 cannot touch Metal1 contacts (Mosis #0)" metal1
-
- spacing gv1 m2c/m2 2 touching_illegal \
- "GV1 via spacing to Metal2 contacts < 2 (Mosis #14.2)"
-
- spacing poly,fp,rp,pc/a pc/a 4 touching_ok \
- "Poly spacing to Poly contact < 4 (Mosis #5.5.b)"
-
- edge4way gc ~(gc)/contact 1 diff,ndiff,rnd,nfet,nsd,pdiff,rpd,pfet,psd,ndc/a,nsc/a,pdc/a,psc/a,poly,fp,rp,pc/a ~(gc)/contact 1 \
- "Diffusion,Poly overlap of GC contact < 1 (Mosis #6.2)" active
-
- spacing gc pc/a,ndc/a,pdc/a,psc/a,nsc/a 2 touching_illegal \
- "Generic contact spacing to Poly contact,Diffusion contact < 2 (Mosis #5.3)"
-
- spacing nsc/m1 pdc/m1 1 touching_illegal \
- "nsc spacing to pdc < 1 (Mosis #6.3)"
-
- spacing psc/m1 ndc/m1 1 touching_illegal \
- "psc spacing to ndc < 1 (Mosis #6.3)"
-
-
-
-
-
-
-
- spacing nfet,pfet ndc/a,pdc/a,psc/a,nsc/a 1 touching_illegal \
- "N-Transistor,P-Transistor spacing to Diffusion contact < 1 (Mosis #6.4)"
-
- spacing nfet,pfet gc 2 touching_illegal \
- "N-Transistor,P-Transistor spacing to Generic contact < 2 (Mosis #6.4)"
-
- spacing diff,ndiff,rnd,nfet,nsd,pdiff,rpd,pfet,psd,ndc/a,nsc/a,pdc/a,psc/a pc/a 1 touching_illegal \
- "Diffusion spacing to Poly contact < 1 (Mosis #6.5.b)"
-
- spacing diff,ndiff,rnd,nfet,nsd,pdiff,rpd,pfet,psd,ndc/a,nsc/a,pdc/a,psc/a,nfet,pfet ndc/a,pdc/a,psc/a,nsc/a 4 touching_ok \
- "Diffusion spacing to Diffusion contact < 4 (Mosis #6.5.b)"
-
- spacing pc/a ndc/a,pdc/a,psc/a,nsc/a 2 touching_illegal \
- "pc/a,pm12c/a spacing to ndc/a,pdc/a,psc/a,nsc/a < 2 (Mosis #6.7)"
-
- spacing m1,rm1,ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1,m2c/m1 m1,rm1,ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1,m2c/m1 3 touching_ok \
- "Metal1 spacing < 3 (Mosis #7.2)"
-
- spacing m1,rm1,ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1,m2c/m1 fm1,fapm 3 touching_illegal \
- "Metal1 spacing to fill layer (fm1) < 3 (Mosis #7.2)"
-
- spacing fm1 fm1 4 touching_ok \
- "Metal1 fill layer (fm1) spacing < 4 (Mosis #0)"
-
- edge4way gc space 1 m1,fm1,rm1,ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1,m2c/m1 space 1 \
- "Metal1 must overlap GC contact by 1 (Mosis #7.3,7.4)" metal1
-
- edge4way ~(m1,fm1,rm1,ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1,m2c/m1)/metal1 m1,fm1,rm1,ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1,m2c/m1 1 ~(gc)/contact 0 0 \
- "Metal1(edge) cannot touch GC contact (Mosis #7.3+7.4)" contact
-
- spacing gv1 gv1 3 touching_ok \
- "GV1 via spacing < 3 (Mosis #8.2)"
-
- edge4way gv1 ~(gv1)/via1 1 m1,fm1,rm1,ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1,m2c/m1 ~(gv1)/via1 1 \
- "Metal1 overlap of GV1 via < 1 (Mosis #8.3)" metal1
-
- edge4way gv1 space 1 m1,fm1,rm1,ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1,m2c/m1 space 1 \
- "Metal1 must overlap GV1 via by 1 (Mosis #8.3)" metal1
-
- edge4way ~(m1,fm1,rm1,ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1,m2c/m1)/metal1 m1,fm1,rm1,ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1,m2c/m1 1 ~(gv1)/via1 0 0 \
- "Metal1(edge) cannot touch GV1 via (Mosis #8.3)" via1
-
- spacing m2,rm2,m2c/m2,m3c/m2 m2,rm2,m2c/m2,m3c/m2 3 touching_ok \
- "Metal2 spacing < 3 (Mosis #9.2)"
-
- spacing m2,rm2,m2c/m2,m3c/m2 fm2,fapm 3 touching_illegal \
- "Metal2 spacing to fill layer (fm2) < 3 (Mosis #9.2)"
-
- spacing fm2 fm2 4 touching_ok \
- "Metal2 fill layer (fm2) spacing < 4 (Mosis #0)"
-
- edge4way gv1 space 1 m2,fm2,rm2,m2c/m2,m3c/m2 space 1 \
- "Metal2 must overlap GV1 via by 1 (Mosis #9.3)" metal2
-
- edge4way ~(m2,fm2,rm2,m2c/m2,m3c/m2)/metal2 m2,fm2,rm2,m2c/m2,m3c/m2 1 ~(gv1)/via1 0 0 \
- "Metal2(edge) cannot touch GV1 via (Mosis #9.3)" via1
-
- width glass 10 \
- "COG width < 10 (Mosis #10.2)"
-
- edge4way ~(pad)/metal3 pad 20 ~(glass)/oxide pad 20 \
- "pad overlap of COG < 20 (Mosis #10.3)" oxide
-
- spacing ecap ecap 3 touching_ok \
- "Ecap spacing < 3 (Mosis #11.2)"
-
- edge4way ecap ~(ecap)/cap 5 poly,fp,rp,pc/a ~(ecap)/cap 5 \
- "Poly overlap of Ecap < 5 (Mosis #11.3)" active
-
- edge4way ~(ecap)/cap ecap 1 poly,fp,rp,pc/a 0 0 \
- "Ecap must touch Poly (Mosis #11.3x)" active
-
- edge4way poly2,phr,p2c,p2m12c space 5 ~(poly,fp,rp,pc/a)/active space 5 \
- "Poly2 spacing to Poly < 5 (Mosis #11.3c)" active
-
- spacing ecap pc/a 2 touching_illegal \
- "Ecap spacing to Poly contact < 2 (Mosis #11.5)"
-
- spacing ecap gc 3 touching_illegal \
- "Ecap spacing to Generic contact < 3 (Mosis #11.5)"
-
- spacing poly2,ecap,phr,p2c,p2m12c poly2,ecap,phr,p2c,p2m12c 3 touching_ok \
- "Poly2 spacing < 3 (Mosis #11.2)"
-
- spacing poly2,ecap,phr,p2c,p2m12c pc/a,ndc/a,pdc/a,psc/a,nsc/a 2 touching_illegal \
- "Poly2 spacing to Poly contact,Diffusion contact < 2 (Mosis #11.5)"
-
- spacing poly2,ecap,phr,p2c,p2m12c gc,gc 3 touching_illegal \
- "Poly2 spacing to GC contact < 3 (Mosis #11.5)"
-
- spacing gc2 gc2 3 touching_ok \
- "Generic contact2 spacing < 3 (Mosis #13.2)"
-
- edge4way ~(ecap)/cap ecap 3 ~(gc2)/contact ecap 3 \
- "Ecap overlap of Generic contact2 < 3 (Mosis #13.3)" contact
-
- edge4way ~(ecap)/cap ecap 2 ~(p2c,p2m12c)/cap ecap 2 \
- "Ecap overlap of Poly2 contact < 2 (Mosis #13.3)" cap
-
- edge4way gc2 space 1 m1,fm1,rm1,ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1,m2c/m1 space 1 \
- "Metal1 must overlap Generic contact2 by 1 (Mosis #13.4)" metal1
-
- edge4way ~(m1,fm1,rm1,ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1,m2c/m1)/metal1 m1,fm1,rm1,ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1,m2c/m1 1 ~(gc2)/contact 0 0 \
- "Metal1(edge) cannot touch Generic contact2 (Mosis #13.4)" contact
-
- edge4way ~(poly2,ecap,phr,p2c,p2m12c)/cap poly2,ecap,phr,p2c,p2m12c 1 ~(p2c,p2m12c)/cap poly2,ecap,phr,p2c,p2m12c 1 \
- "Poly2 overlap of Poly2 contact < 1 (Mosis #13.4)" cap
-
- spacing gv2 gv2 3 touching_ok \
- "GV2 via spacing < 3 (Mosis #14.2)"
-
- spacing gv2 m3c/m2 2 touching_illegal \
- "GV2 via spacing to Metal3 contact < 2 (Mosis #14.2)"
-
- edge4way gv2 space 1 m2,fm2,rm2,m2c/m2,m3c/m2 space 1 \
- "Metal2 must overlap GV2 via by 1 (Mosis #14.3)" metal2
-
- edge4way ~(m2,fm2,rm2,m2c/m2,m3c/m2)/metal2 m2,fm2,rm2,m2c/m2,m3c/m2 1 ~(gv2)/via2 0 0 \
- "Metal2(edge) cannot touch GV2 via (Mosis #14.3)" via2
-
- spacing m3,rm3,m3c/m3,pad m3,rm3,m3c/m3,pad 3 touching_ok \
- "Metal3 spacing < 3 (Mosis #15.2)"
-
- spacing m3,rm3,m3c/m3,pad fm3,fapm 3 touching_illegal \
- "Metal3 spacing to fill layer (fm3) < 3 (Mosis #15.2)"
-
- spacing fm3 fm3 4 touching_ok \
- "Metal3 fill layer (fm3) spacing < 4 (Mosis #0)"
-
- edge4way m3c/m2 ~(m3c/m2)/metal2 1 m3,fm3,rm3,m3c/m3,pad ~(m3c/m2)/metal2 1 \
- "Metal3 overlap of Metal3 contact < 1 (Mosis #15.3)" metal3
-
- edge4way gv2 space 2 m3,fm3,rm3,m3c/m3,pad space 2 \
- "Metal3 must overlap GV2 via by 2 (Mosis #15.3)" metal3
-
- edge4way ~(m3,fm3,rm3,m3c/m3,pad)/metal3 m3,fm3,rm3,m3c/m3,pad 1 ~(gv2)/via2 0 0 \
- "Metal3(edge) cannot touch GV2 via (Mosis #15.3)" via2
-
- spacing hr,phr hr,phr 4 touching_ok \
- "High-Resist spacing < 4 (Mosis #27.2)"
-
- spacing hr,phr,phr p2c,p2m12c 2 touching_illegal \
- "High-Resist spacing to Poly2 contact < 2 (Mosis #27.3)"
-
- spacing hr,phr,phr gc 2 touching_illegal \
- "High-Resist spacing to GC contact < 2 (Mosis #27.3)"
-
- edge4way hr,phr space 2 ~(ndiff,rnd,ndc/a,pdiff,rpd,pdc/a)/active 0 2 \
- "High-Resist space to Diffusion < 2 (Mosis #27.4)" active
-
- spacing hr,phr,phr poly2,ecap,phr,p2c,p2m12c 2 touching_ok \
- "High-Resist spacing to other Poly2 < 2 (Mosis #27.5)"
-
- edge4way hr,phr space 2 ~(poly2,ecap,phr,p2c,p2m12c)/contact hr,phr 2 \
- "High-Resist space to Poly2 < 2 (Mosis #27.5x)" contact
-
- spacing nwell phr 4 touching_illegal \
- "N-well spacing to Silicide-Block poly2R < 4 (Mosis #27.6)"
-
- spacing phr phr 7 touching_ok \
- "High-Resist poly2R spacing < 7 (Mosis #27.13)"
-
- edge4way phr space/active,hr 2 hr hr 2 \
- "High-Resist overlap of High-Resist poly2R < 2 (Mosis #27.15)"
-
- spacing nfi nfi 4 touching_ok \
- "N_field-implant spacing < 4 (Mosis #35.2)"
-
- spacing pfi pfi 4 touching_ok \
- "P_field-implant spacing < 4 (Mosis #35.2)"
-
- spacing nfi pfi 4 touching_illegal \
- "N_field-implant spacing to P_field-implant < 4 (Mosis #35.2)"
-
- spacing nwell,pdiff,rpd,pfet,pdc/a pfi 4 touching_illegal \
- "N-well,P-Diffusion spacing to P_field-implant < 4 (Mosis #2.1)"
-
- spacing pwell,ndiff,rnd,nfet,ndc/a nfi 4 touching_illegal \
- "P-well,N-Diffusion spacing to N_field-implant < 4 (Mosis #2.1)"
-
- edge4way ~(nwell)/well nwell 4 ~(nfi)/implant nwell 4 \
- "N-well overlap of N_field-implant < 4 (Mosis #21.2)" implant
-
- edge4way ~(pwell)/well pwell 4 ~(pfi)/implant pwell 4 \
- "P-well overlap of P_field-implant < 4 (Mosis #21.2)" implant
-
- spacing fa fapm 4 touching_illegal \
- "fill layer fa spacing to fill layer fapm < 4 (Mosis #0)"
-
- width fa 7 \
- "filla width < 7 (Mosis #0)"
-
- width fapm 7 \
- "fillapm width < 7 (Mosis #0)"
-
- width fp 7 \
- "fillp width < 7 (Mosis #0)"
-
- width fm1 7 \
- "fillm1 width < 7 (Mosis #0)"
-
- width fm2 7 \
- "fillm2 width < 7 (Mosis #0)"
-
- width fm3 7 \
- "fillm3 width < 7 (Mosis #0)"
-
- edge4way fa ~(fa)/fill 1 ~(fa)/fill (~(fa),fa)/fill 1 \
- "Contact not rectangular (Magic rule)"
-
- edge4way fb ~(fb)/fill 1 ~(fb)/fill (~(fb),fb)/fill 1 \
- "Contact not rectangular (Magic rule)"
-
- edge4way fapm ~(fapm)/active 1 ~(fapm)/active (~(fapm),fapm)/active 1 \
- "Contact not rectangular (Magic rule)"
-
- edge4way fp ~(fp)/active 1 ~(fp)/active (~(fp),fp)/active 1 \
- "Contact not rectangular (Magic rule)"
-
- edge4way fm1 ~(fm1)/metal1 1 ~(fm1)/metal1 (~(fm1),fm1)/metal1 1 \
- "Contact not rectangular (Magic rule)"
-
- edge4way fm2 ~(fm2)/metal2 1 ~(fm2)/metal2 (~(fm2),fm2)/metal2 1 \
- "Contact not rectangular (Magic rule)"
-
- edge4way fm3 ~(fm3)/metal3 1 ~(fm3)/metal3 (~(fm3),fm3)/metal3 1 \
- "Contact not rectangular (Magic rule)"
-
- edge4way rp space/active 1 prp 0 0 \
- "prp overhang of rpoly (for resistor L/W extraction) < 1 (Mosis #0)" active
-
- edge4way rp2 space/cap 1 prp2 0 0 \
- "prp2 overhang of rpoly2 (for resistor L/W extraction) < 1 (Mosis #0)" cap
-
- edge4way rnw space/active 1 prnw 0 0 \
- "prnw overhang of rnwell (for resistor L/W extraction) < 1 (Mosis #0)" active
-
- edge4way rpd space/active 1 prpd 0 0 \
- "prpd overhang of rpdiff (for resistor L/W extraction) < 1 (Mosis #0)" active
-
- edge4way rnd space/active 1 prnd 0 0 \
- "prnd overhang of rndiff (for resistor L/W extraction) < 1 (Mosis #0)" active
-
- edge4way rm1 space/metal1 1 prm1 0 0 \
- "prm1 overhang of rmetal1 (for resistor L/W extraction) < 1 (Mosis #0)" metal1
-
- edge4way rm2 space/metal2 1 prm2 0 0 \
- "prm2 overhang of rmetal2 (for resistor L/W extraction) < 1 (Mosis #0)" metal2
-
- edge4way rm3 space/metal3 1 prm3 0 0 \
- "prm3 overhang of rmetal3 (for resistor L/W extraction) < 1 (Mosis #0)" metal3
-
- edge4way ndc/a,nsc/a ~(ndc/a,nsc/a)/active 1 ~(ndc/a,nsc/a)/active (~(ndc/a,nsc/a),ndc/a,nsc/a)/active 1 \
- "Contact not rectangular (Magic rule)"
-
- edge4way pdc/a,psc/a ~(pdc/a,psc/a)/active 1 ~(pdc/a,psc/a)/active (~(pdc/a,psc/a),pdc/a,psc/a)/active 1 \
- "Contact not rectangular (Magic rule)"
-
- edge4way pc/a ~(pc/a)/active 1 ~(pc/a)/active (~(pc/a),pc/a)/active 1 \
- "Contact not rectangular (Magic rule)"
-
- edge4way gc2 ~(gc2)/contact 1 ~(gc2)/contact (~(gc2),gc2)/contact 1 \
- "Contact not rectangular (Magic rule)"
-
- edge4way p2c,p2m12c ~(p2c,p2m12c)/cap 1 ~(p2c,p2m12c)/cap (~(p2c,p2m12c),p2c,p2m12c)/cap 1 \
- "Contact not rectangular (Magic rule)"
-
- edge4way gc ~(gc)/contact 1 ~(gc)/contact (~(gc),gc)/contact 1 \
- "Contact not rectangular (Magic rule)"
-
- edge4way gv1 ~(gv1)/via1 1 ~(gv1)/via1 (~(gv1),gv1)/via1 1 \
- "Contact not rectangular (Magic rule)"
-
- edge4way m2c/m1 ~(m2c/m1)/metal1 1 ~(m2c/m1)/metal1 (~(m2c/m1),m2c/m1)/metal1 1 \
- "Contact not rectangular (Magic rule)"
-
- edge4way gv2 ~(gv2)/via2 1 ~(gv2)/via2 (~(gv2),gv2)/via2 1 \
- "Contact not rectangular (Magic rule)"
-
- edge4way m3c/m2 ~(m3c/m2)/metal2 1 ~(m3c/m2)/metal2 (~(m3c/m2),m3c/m2)/metal2 1 \
- "Contact not rectangular (Magic rule)"
-
- exact_overlap gc,ndc/a,pdc/a,psc/a,nsc/a,gc,pc/a,gc
-
- exact_overlap gc2,p2c,p2m12c
-
- edge4way pad ~(pad)/m3 1 ~(pad)/m3 (~(pad),pad)/m3 1 \
- "Contact not rectangular (Magic rule)"
-
- exact_overlap ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1
-
- exact_overlap m2c/m2
-
- exact_overlap m3c/m3
-
- exact_overlap gv1
-
- exact_overlap gv2
-
-
- width m1p 4 \
- "Metal1 PIN width < 4 (do_pins)"
-
- spacing m1p m1p 4 touching_ok \
- "Metal1 PIN spacing < 4 (do_pins)"
-
- width m2p 4 \
- "Metal2 PIN width < 4 (do_pins)"
-
- spacing m2p m2p 4 touching_ok \
- "Metal2 PIN spacing < 4 (do_pins)"
-
- width m3p 6 \
- "Metal3 PIN width < 6 (do_pins)"
-
- spacing m3p m3p 4 touching_ok \
- "Metal3 PIN spacing < 4 (do_pins)"
-
-#CC cifstyle lambda=0.30(p)
-#CC cifwidth CWN 360 \
-#CC "generated CIF layer CWN width will be < 12 (';cif see CWN')"
-#CC cifspacing CWN CWN 180 touching_ok \
-#CC "generated CIF layer CWN spacing will be < 6 (';cif see CWN')"
-#CC cifwidth CWP 360 \
-#CC "generated CIF layer CWP width will be < 12 (';cif see CWP')"
-#CC cifspacing CWP CWP 180 touching_ok \
-#CC "generated CIF layer CWP spacing will be < 6 (';cif see CWP')"
-#CC cifwidth CSN 60 \
-#CC "generated CIF layer CSN width will be < 2 (';cif see CSN')"
-#CC cifspacing CSN CSN 60 touching_ok \
-#CC "generated CIF layer CSN spacing will be < 2 (';cif see CSN')"
-#CC cifwidth CSP 60 \
-#CC "generated CIF layer CSP width will be < 2 (';cif see CSP')"
-#CC cifspacing CSP CSP 60 touching_ok \
-#CC "generated CIF layer CSP spacing will be < 2 (';cif see CSP')"
-
- stepsize 400
-
-end
-
-#---------------------------------------------------
-# LEF format definitions
-#---------------------------------------------------
-
-lef
-
-ignore PC
-ignore CA
-
-routing m1 M1 m1 met1
-routing m2 M2 m2 met2
-routing m3 M3 m3 met3
-
-contact m2c via via1 V1 v1
-contact m3c via2 V2 v2
-
-end
-
-extract
- style AMI0.5um(amic5)from:T24H
- cscale 1
- lambda 30
- step 100
- sidehalo 8
- planeorder well 0
- planeorder implant 1
- planeorder select 2
- planeorder cap 3
- planeorder active 4
- planeorder metal1 5
- planeorder metal2 6
- planeorder metal3 7
- planeorder oxide 8
- planeorder xp 9
- planeorder comment 10
- planeorder contact 11
- planeorder via1 12
- planeorder via2 13
- planeorder fill 14
-
- resist (ndiff,rnd,ndc,nsd,nsc)/active 82200
- resist (pdiff,rpd,pdc,psd,psc)/active 105200
- resist (nwell)/well 808000
- resist (rnw)/active 808000
- resist (pwell)/well 1
- resist (poly,fp,rp,pc,pc,nfet,pfet,fet)/active 22000
- resist (poly2,ecap,p2c,p2m12c,p2c,p2m12c)/cap 40300
- resist (phr)/cap 40300
- resist (m1,fm1,rm1,ndc,nsc,pdc,psc,pc,m2c,m2c)/metal1 90
- resist (m2,fm2,rm2,m2c,m3c,m3c)/metal2 90
- resist (m3,fm3,rm3,m3c,pad)/metal3 50
-
- contact ndc 4 62700
- contact pdc 4 160000
- contact pc 4 15600
- contact p2c 4 26100
- contact m2c 4 910
- contact m3c 4 830
-
-
-#poly2
- overlap (poly,fp,rp,pc,pc)/active (poly2,ecap,phr,p2c,p2m12c,p2c,p2m12c)/cap 84.960
-
-#nwell,cwell,pwell
- areacap (nwell)/well 3.600
-
-#rnw
- areacap (rnw)/active 3.600
-
-#ndiff
-# MODEL HANDLES THIS: areacap (ndiff,ndc)/active 38.430
-# MODEL HANDLES THIS: overlap (ndiff,ndc)/active ~space/w 38.430
-# MODEL HANDLES THIS: perimc (ndiff,ndc)/active ~(ndiff,ndc,nfet,pfet,fet)/active 94.800
-# MODEL HANDLES THIS: sideoverlap (ndiff,ndc)/active ~(ndiff,ndc,nfet,pfet,fet)/active ~space/w 94.800
-
- areacap (rnd)/active 38.430
- overlap (rnd)/active ~space/w 38.430
- perimc (rnd)/active ~(rnd)/active 94.800
- sideoverlap (rnd)/active ~(rnd)/active ~space/w 94.800
-
-#pdiff
-# MODEL HANDLES THIS: areacap (pdiff,pdc)/active 65.880
-# MODEL HANDLES THIS: overlap (pdiff,pdc)/active ~space/w 65.880
-# MODEL HANDLES THIS: perimc (pdiff,pdc)/active ~(pdiff,pdc,nfet,pfet,fet)/active 75.300
-# MODEL HANDLES THIS: sideoverlap (pdiff,pdc)/active ~(pdiff,pdc,nfet,pfet,fet)/active ~space/w 75.300
-
- areacap (rpd)/active 65.880
- overlap (rpd)/active ~space/w 65.880
- perimc (rpd)/active ~(rpd)/active 75.300
- sideoverlap (rpd)/active ~(rpd)/active ~space/w 75.300
-
-#rnw
-
-#poly
-# MODEL HANDLES THIS: overlap (nfet)/active (ndiff,rnd,ndc)/active 221.670
-# MODEL HANDLES THIS: sideoverlap (nfet)/active ~(nfet)/active (ndiff,rnd,ndc)/active 58.500
-# MODEL HANDLES THIS: overlap (pfet)/active (pdiff,rpd,pdc)/active 213.480
-# MODEL HANDLES THIS: sideoverlap (pfet)/active ~(pfet)/active (pdiff,rpd,pdc)/active 82.800
-
- areacap (poly,fp,rp,pc)/active 7.740
- overlap (poly,fp,rp,pc)/active ~space/w 7.740
-
-#poly2
-
-#rnw
-
-#metal1
- areacap (m1,fm1,rm1,ndc,pdc,pc,m2c)/metal1 2.700
-
-#metal1-sub blocked by ~space/a,~space/c
- overlap (m1,fm1,rm1,ndc,pdc,pc,m2c)/metal1 ~space/w 2.700 ~space/a,~space/c
- perimc (m1,fm1,rm1,ndc,pdc,pc,m2c)/metal1 ~(m1,fm1,rm1,ndc,pdc,pc,m2c)/metal1 20.700
- sideoverlap (m1,fm1,rm1,ndc,pdc,pc,m2c)/metal1 ~(m1,fm1,rm1,ndc,pdc,pc,m2c)/metal1 ~space/w 20.700 ~space/a,~space/c
-
-#rnw
- overlap (m1,fm1,rm1,ndc,pdc,pc,m2c)/metal1 rnw/active 2.700 ~space/c
- sideoverlap (m1,fm1,rm1,ndc,pdc,pc,m2c)/metal1 ~(m1,fm1,rm1,ndc,pdc,pc,m2c)/metal1 rnw/active 20.700 ~space/c
-
-#metal1-diff blocked by ~space/c
- overlap (m1,fm1,rm1,ndc,nsc,pdc,psc,pc,m2c)/metal1 (ndiff,rnd,ndc)/active 3.150 ~space/c
- sideoverlap (m1,fm1,rm1,ndc,nsc,pdc,psc,pc,m2c)/metal1 ~(m1,fm1,rm1,ndc,nsc,pdc,psc,pc,m2c)/metal1 (ndiff,rnd,ndc)/active 20.700 ~space/c
- overlap (m1,fm1,rm1,ndc,nsc,pdc,psc,pc,m2c)/metal1 (pdiff,rpd,pdc)/active 3.150 ~space/c
- sideoverlap (m1,fm1,rm1,ndc,nsc,pdc,psc,pc,m2c)/metal1 ~(m1,fm1,rm1,ndc,nsc,pdc,psc,pc,m2c)/metal1 (pdiff,rpd,pdc)/active 20.700 ~space/c
-
-#metal1-poly blocked by ~space/c
- overlap (m1,fm1,rm1,ndc,nsc,pdc,psc,pc,m2c)/metal1 (poly,fp,rp,pc,nfet,pfet,fet)/active 4.590 ~space/c
- sideoverlap (m1,fm1,rm1,ndc,nsc,pdc,psc,pc,m2c)/metal1 ~(m1,fm1,rm1,ndc,nsc,pdc,psc,pc,m2c)/metal1 (poly,fp,rp,pc,nfet,pfet,fet)/active 15.900 ~space/c
- sideoverlap (poly,fp,rp,pc,nfet,pfet,fet)/active ~(poly,fp,rp,pc,nfet,pfet,fet)/active (m1,fm1,rm1,ndc,nsc,pdc,psc,pc,m2c)/metal1 15.900 ~space/c
-
-#metal1-poly2 not blocked
- overlap (m1,fm1,rm1,ndc,nsc,pdc,psc,pc,m2c)/metal1 (poly2,ecap,phr,p2c,p2m12c)/cap 3.960
-
-#metal2
- areacap (m2,fm2,rm2,m3c)/metal2 1.350
-
-#metal2-sub blocked by
- overlap (m2,fm2,rm2,m3c)/metal2 ~space/w 1.350 ~space/a,~space/m1,~space/c
- perimc (m2,fm2,rm2,m2c,m3c)/metal2 ~(m2,fm2,rm2,m2c,m3c)/metal2 15.900
- sideoverlap (m2,fm2,rm2,m2c,m3c)/metal2 ~(m2,fm2,rm2,m2c,m3c)/metal2 ~space/w 15.900 ~space/a,~space/m1,~space/c
- overlap (m2,fm2,rm2,m3c)/metal2 rnw/active 1.350 ~space/m1,~space/c
- sideoverlap (m2,fm2,rm2,m2c,m3c)/metal2 ~(m2,fm2,rm2,m2c,m3c)/metal2 rnw/active 15.900 ~space/m1,~space/c
-
-#metal2-*diff blocked by ~space/m1,~space/c
- overlap (m2,fm2,rm2,m3c)/metal2 (ndiff,rnd,ndc)/active 1.350 ~space/m1,~space/c
- sideoverlap (m2,fm2,rm2,m2c,m3c)/metal2 ~(m2,fm2,rm2,m2c,m3c)/metal2 (ndiff,rnd,ndc)/active 15.900 ~space/m1,~space/c
- overlap (m2,fm2,rm2,m2c,m3c)/metal2 (pdiff,rpd,pdc)/active 1.350 ~space/m1,~space/c
- sideoverlap (m2,fm2,rm2,m2c,m3c)/metal2 ~(m2,fm2,rm2,m2c,m3c)/metal2 (pdiff,rpd,pdc)/active 15.900 ~space/m1,~space/c
-
-#metal2-poly blocked by ~space/m1,~space/c
- overlap (m2,fm2,rm2,m3c)/metal2 (poly,fp,rp,pc,nfet,pfet,fet)/active 1.350 ~space/m1,~space/c
- sideoverlap (m2,fm2,rm2,m2c,m3c)/metal2 ~(m2,fm2,rm2,m2c,m3c)/metal2 (poly,fp,rp,pc,nfet,pfet,fet)/active 10.800 ~space/m1,~space/c
- sideoverlap (poly,fp,rp,pc,nfet,pfet,fet)/active ~(poly,fp,rp,pc,nfet,pfet,fet)/active (m2,fm2,rm2,m2c,m3c)/metal2 10.800 ~space/m1,~space/c
-
-#metal2-poly2 blocked by ~space/m1
-
-#M2->M1
- overlap (m2,fm2,rm2,m3c)/metal2 (m1,fm1,rm1,ndc,nsc,pdc,psc,pc,m2c)/metal1 2.520
- sideoverlap (m2,fm2,rm2,m2c,m3c)/metal2 ~(m2,fm2,rm2,m2c,m3c)/metal2 (m1,fm1,rm1,ndc,nsc,pdc,psc,pc,m2c)/metal1 14.700
- sideoverlap (m1,fm1,rm1,ndc,nsc,pdc,psc,pc,m2c)/metal1 ~(m1,fm1,rm1,ndc,nsc,pdc,psc,pc,m2c)/metal1 (m2,fm2,rm2,m2c,m3c)/metal2 14.700
-
-#metal3
- areacap (m3,fm3,rm3,pad)/metal3 0.900
-
-#metal3-sub blocked by ~space/a,~space/m1,~space/m2,~space/c
- overlap (m3,fm3,rm3,pad)/metal3 ~space/w 0.900 ~space/a,~space/m1,~space/m2,~space/c
- perimc (m3,fm3,rm3,m3c,pad)/metal3 ~(m3,fm3,rm3,m3c,pad)/metal3 10.500
- sideoverlap (m3,fm3,rm3,m3c,pad)/metal3 ~(m3,fm3,rm3,m3c,pad)/metal3 ~space/w 10.500 ~space/a,~space/m1,~space/m2,~space/c
-
-#rnw
- overlap (m3,fm3,rm3,pad)/metal3 rnw/active 0.900 ~space/m1,~space/m2,~space/c
- sideoverlap (m3,fm3,rm3,m3c,pad)/metal3 ~(m3,fm3,rm3,m3c,pad)/metal3 rnw/active 10.500 ~space/m1,~space/m2,~space/c
-
-#metal3-*diff blocked by ~space/m1,~space/m2,~space/c
- overlap (m3,fm3,rm3,pad)/metal3 (ndiff,rnd,ndc)/active 0.990 ~space/m1,~space/m2,~space/c
- sideoverlap (m3,fm3,rm3,m3c,pad)/metal3 ~(m3,fm3,rm3,m3c,pad)/metal3 (ndiff,rnd,ndc)/active 10.500 ~space/m1,~space/m2,~space/c
- overlap (m3,fm3,rm3,pad)/metal3 (pdiff,rpd,pdc)/active 0.990 ~space/m1,~space/m2,~space/c
- sideoverlap (m3,fm3,rm3,m3c,pad)/metal3 ~(m3,fm3,rm3,m3c,pad)/metal3 (pdiff,rpd,pdc)/active 10.500 ~space/m1,~space/m2,~space/c
-
-#metal3-poly blocked by ~space/m1,~space/m2,~space/c
- overlap (m3,fm3,rm3,pad)/metal3 (poly,fp,rp,pc,nfet,pfet,fet)/active 0.810 ~space/m1,~space/m2,~space/c
- sideoverlap (m3,fm3,rm3,m3c,pad)/metal3 ~(m3,fm3,rm3,m3c,pad)/metal3 (poly,fp,rp,pc,nfet,pfet,fet)/active 8.100 ~space/m1,~space/m2,~space/c
- sideoverlap (poly,fp,rp,pc,nfet,pfet,fet)/active ~(poly,fp,rp,pc,nfet,pfet,fet)/active (m3,fm3,rm3,m3c,pad)/metal3 8.100 ~space/m1,~space/m2,~space/c
-
-#metal3-poly2 blocked by ~space/m1,~space/m2
-
-#M3->M1
- overlap (m3,fm3,rm3,pad)/metal3 (m1,fm1,rm1,ndc,nsc,pdc,psc,pc,m2c)/metal1 1.080 ~space/m2
-
-#metal3-metal1 blocked by ~space/m2
- sideoverlap (m3,fm3,rm3,m3c,pad)/metal3 ~(m3,fm3,rm3,m3c,pad)/metal3 (m1,fm1,rm1,ndc,nsc,pdc,psc,pc,m2c)/metal1 9.900 ~space/m2
- sideoverlap (m1,fm1,rm1,ndc,nsc,pdc,psc,pc,m2c)/metal1 ~(m1,fm1,rm1,ndc,nsc,pdc,psc,pc,m2c)/metal1 (m3,fm3,rm3,m3c,pad)/metal3 9.900 ~space/m2
-
-#M3->M2
- overlap (m3,fm3,rm3,pad)/metal3 (m2,fm2,rm2,m2c,m3c)/metal2 3.060
- sideoverlap (m3,fm3,rm3,m3c,pad)/metal3 ~(m3,fm3,rm3,m3c,pad)/metal3 (m2,fm2,rm2,m2c,m3c)/metal2 16.800
- sideoverlap (m2,fm2,rm2,m2c,m3c)/metal2 ~(m2,fm2,rm2,m2c,m3c)/metal2 (m3,fm3,rm3,m3c,pad)/metal3 16.800
-
-#metal4
-
-#metal5
-
-#metal6
-
-#metal7
-
-#metali
-
-#fets
-
-# fet pfet pdiff,pdc 2 pfet Vdd! nwell 83 213
-# fet pfet pdiff,pdc 1 pfet Vdd! nwell 83 213
-
- device mosfet pfet pfet pdiff,pdc nwell $VDD 83 213
-
-# fet nfet ndiff,ndc 2 nfet Gnd! pwell 59 222
-# fet nfet ndiff,ndc 1 nfet Gnd! pwell 59 222
-
- device mosfet nfet nfet ndiff,ndc pwell $GND 59 222
-
- fetresis pfet linear 20996
- fetresis pfet saturation 20996
- fetresis nfet linear 6144
- fetresis nfet saturation 6144
-
-# fet rnwell nsd,nsc 2 nwellResistor Gnd! nwell,pwell 0 0
-# fet rpoly poly,pc 2 polyResistor Gnd! nwell,pwell 0 0
-# fet rpoly2 poly2,p2c 2 poly2Resistor Gnd! nwell,pwell 0 0
-# fet rndiff ndiff,ndc 2 ndiffResistor Gnd! nwell,pwell 0 0
-# fet rpdiff pdiff,pdc 2 pdiffResistor Gnd! nwell,pwell 0 0
-
- device resistor None rnwell nsd,nsc
- device resistor None rpoly poly,pc
- device resistor None rpoly2 poly2,p2c
- device resistor None rndiff ndiff,ndc
- device resistor None rpdiff pdiff,pdc
-
-# fet rmetal1 metal1 2 metal1Resistor Gnd! nwell,pwell 0 0
-# fet rmetal2 metal2 2 metal2Resistor Gnd! nwell,pwell 0 0
-# fet rmetal3 metal3 2 metal3Resistor Gnd! nwell,pwell 0 0
-# fet phr poly2,p2c 2 phrResistor Gnd! nwell,pwell 0 0
-
- device resistor None rmetal1 *metal1
- device resistor None rmetal2 *metal2
- device resistor None rmetal3 *metal3
- device resistor None phr poly2,p2c
-
-end
-
-wiring
- contact pdcontact 4 metal1 0 pdiff 0
- contact ndcontact 4 metal1 0 ndiff 0
- contact pcontact 4 metal1 0 poly 0
- contact m2contact 4 metal1 0 metal2 0
- contact m3contact 5 metal2 0 metal3 1
-
-end
-
-router
- layer2 metal2 3 m2,fm2,rm2,m2c/m2,m3c/m2,m3c/m2 4 poly,fp,rp,ndiff,rnd,nsd,pdiff,rpd,psd,m1,fm1,rm1 1
- layer1 metal1 3 m1,fm1,rm1,ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1,m2c/m1 3
- contacts m2contact 4
- gridspacing 8
-
-end
-
-plowing
- fixed nfet,pfet,glass,pad
- covered nfet,pfet
- drag nfet,pfet
-
-end
-
-plot
-style colorversatec
- ndiff,rnd,ndc/a yellow \
- 5555 AAAA 5555 AAAA \
- 5555 AAAA 5555 AAAA \
- 5555 AAAA 5555 AAAA \
- 5555 AAAA 5555 AAAA
- ndiff,rnd,ndc/a cyan \
- 0000 5555 0000 5555 \
- 0000 5555 0000 5555 \
- 0000 5555 0000 5555 \
- 0000 5555 0000 5555
- nsd,nsc/a yellow \
- 1515 2A2A 5151 A2A2 \
- 1515 2A2A 5151 A2A2 \
- 1515 2A2A 5151 A2A2 \
- 1515 2A2A 5151 A2A2
- nsd,nsc/a cyan \
- 0000 1515 0000 5151 \
- 0000 1515 0000 5151 \
- 0000 1515 0000 5151 \
- 0000 1515 0000 5151
- pdiff,rpd,pdc/a yellow \
- 5555 AAAA 5555 AAAA \
- 5555 AAAA 5555 AAAA \
- 5555 AAAA 5555 AAAA \
- 5555 AAAA 5555 AAAA
- pdiff,rpd,pdc/a cyan \
- 0000 5555 0000 5555 \
- 0000 5555 0000 5555 \
- 0000 5555 0000 5555 \
- 0000 5555 0000 5555
- pdiff,rpd,pdc/a magenta \
- AAAA 0000 AAAA 0000 \
- AAAA 0000 AAAA 0000 \
- AAAA 0000 AAAA 0000 \
- AAAA 0000 AAAA 0000
- psd,psc/a yellow \
- 1515 2A2A 5151 A2A2 \
- 1515 2A2A 5151 A2A2 \
- 1515 2A2A 5151 A2A2 \
- 1515 2A2A 5151 A2A2
- psd,psc/a cyan \
- 0000 1515 0000 5151 \
- 0000 1515 0000 5151 \
- 0000 1515 0000 5151 \
- 0000 1515 0000 5151
- psd,psc/a magenta \
- 2A2A 0000 A2A2 0000 \
- 2A2A 0000 A2A2 0000 \
- 2A2A 0000 A2A2 0000 \
- 2A2A 0000 A2A2 0000
- poly,fp,rp,pc/a magenta \
- 5555 AAAA 5555 AAAA \
- 5555 AAAA 5555 AAAA \
- 5555 AAAA 5555 AAAA \
- 5555 AAAA 5555 AAAA
- nfet yellow \
- 0505 8282 1414 0A0A \
- 5050 2828 4141 A0A0 \
- 0505 8282 1414 0A0A \
- 5050 2828 4141 A0A0
- nfet cyan \
- 0000 0505 0000 1414 \
- 0000 5050 0000 4141 \
- 0000 0505 0000 1414 \
- 0000 5050 0000 4141
- nfet magenta \
- 5050 2828 4141 A0A0 \
- 0505 8282 1414 0A0A \
- 5050 2828 4141 A0A0 \
- 0505 8282 1414 0A0A
- pfet yellow \
- 6363 A0A0 5050 2828 \
- 3636 0A0A 0505 8282 \
- 6363 A0A0 5050 2828 \
- 3636 0A0A 0505 8282
- pfet cyan \
- 0000 5151 0000 5454 \
- 0000 1515 0000 1515 \
- 0000 5151 0000 5454 \
- 0000 1515 0000 1515
- pfet magenta \
- 9494 0A0A 2525 8282 \
- 4949 A0A0 5252 2828 \
- 9494 0A0A 2525 8282 \
- 4949 A0A0 5252 2828
- poly2,ecap,phr,p2c,p2m12c yellow \
- FFFF FFFF FFFF FFFF \
- FFFF FFFF FFFF FFFF \
- FFFF FFFF FFFF FFFF \
- FFFF FFFF FFFF FFFF
- m1,fm1,rm1,ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1,m2c/m1 cyan \
- AAAA 0000 AAAA 0000 \
- AAAA 0000 AAAA 0000 \
- AAAA 0000 AAAA 0000 \
- AAAA 0000 AAAA 0000
- m2,fm2,rm2,m2c/m2,m3c/m2 cyan \
- 0000 1111 0000 4444 \
- 0000 1111 0000 4444 \
- 0000 1111 0000 4444 \
- 0000 1111 0000 4444
- m2,fm2,rm2,m2c/m2,m3c/m2 magenta \
- 0000 4444 0000 1111 \
- 0000 4444 0000 1111 \
- 0000 4444 0000 1111 \
- 0000 4444 0000 1111
- m2c/m1,gv1 black \
- 0000 6666 6666 0000 \
- 0000 9999 9999 0000 \
- 0000 6666 6666 0000 \
- 0000 9999 9999 0000
- pad,glass black \
- 0300 0700 0E00 1C00 \
- 3800 7000 E000 C000 \
- 00C0 00E0 0070 0038 \
- 001C 000E 0007 0003
- nwell yellow \
- 0800 1000 2000 4000 \
- 8000 0001 0002 0004 \
- 0008 0010 0020 0040 \
- 0080 0010 0200 0400
- nwell cyan \
- 1000 2000 4000 8000 \
- 0001 0002 0004 0008 \
- 0010 0020 0040 0080 \
- 0100 0200 0400 0800
- pwell yellow \
- 1000 0400 0400 0100 \
- 0100 0040 0040 0010 \
- 0010 0004 0004 0001 \
- 0001 4000 4000 1000
- pwell cyan \
- 0000 0800 0000 0200 \
- 0000 0080 0000 0020 \
- 0000 0008 0000 0002 \
- 0000 8000 0000 2000
- pwell magenta \
- 0800 0000 0200 0000 \
- 0080 0000 0020 0000 \
- 0008 0000 0002 0000 \
- 8000 0000 2000 0000
- m3c/m2,gv2 black \
- 0100 0000 0000 0000 \
- 1010 0000 0000 0000 \
- 0001 0000 0000 0000 \
- 1010 0000 0000 0000
- m3c/m2,gv2 cyan \
- 0280 0000 0820 0000 \
- 2008 0000 8002 0000 \
- 8002 0000 2008 0000 \
- 0820 0000 0280 0000
- m3c/m2,gv2 magenta \
- 0100 06C0 0440 1830 \
- 1010 600C 4004 8003 \
- 0001 C006 4004 3018 \
- 1010 0C60 0440 0380
- m3c/m2,gv2 black \
- 0820 0820 0820 0FE0 \
- E00F 2008 2008 2008 \
- 2008 2008 2008 E00F \
- 0000 0FE0 0820 0820
- error_p,error_s,error_ps black \
- 0000 3C3C 4646 4A4A \
- 5252 6262 3C3C 0000 \
- 0000 3C3C 4646 4A4A \
- 5252 6262 3C3C 0000
- magnet yellow \
- AAAA 0000 5555 0000 \
- AAAA 0000 5555 0000 \
- AAAA 0000 5555 0000 \
- AAAA 0000 5555 0000
- fence magenta \
- FFFF 0000 0000 0000 \
- 0000 0000 0000 0000 \
- FFFF 0000 0000 0000 \
- 0000 0000 0000 0000
- rotate cyan \
- 0000 E0E0 E0E0 E0E0 \
- 0000 0000 0000 0000 \
- 0000 E0E0 E0E0 E0E0 \
- 0000 0000 0000 0000
- pc/a,ndc/a,pdc/a,psc/a,nsc/a,gc,gc,gc X
-
-style versatec
- pfet \
- 07c0 0f80 1f00 3e00 \
- 7c00 f800 f001 e003 \
- c007 800f 001f 003e \
- 00c7 00f8 01f0 03e0
- nfet \
- 1f00 0f80 07c0 03e0 \
- 01f0 00f8 007c 003e \
- 001f 800f c007 e003 \
- f001 f800 7c00 3e00
- gv1 \
- c3c3 c3c3 0000 0000 \
- 0000 0000 c3c3 c3c3 \
- c3c3 c3c3 0000 0000 \
- 0000 0000 c3c3 c3c3
- pwell \
- 2020 2020 2020 2020 \
- 2020 2020 2020 2020 \
- 0000 0000 0000 0000 \
- 0000 0000 0000 0000
- nwell \
- 0808 0404 0202 0101 \
- 0000 0000 0000 0000 \
- 0808 0404 0202 0101 \
- 0000 0000 0000 0000
- poly,fp,rp,pc/a,nfet,pfet \
- 0808 0400 0202 0101 \
- 8080 4000 2020 1010 \
- 0808 0004 0202 0101 \
- 8080 0040 2020 1010
- m1,fm1,rm1,ndc/m1,nsc/m1,pdc/m1,psc/m1,pc/m1,m2c/m1 \
- 8080 0000 0000 0000 \
- 0808 0000 0000 0000 \
- 8080 0000 0000 0000 \
- 0808 0000 0000 0000
- pad,glass \
- 0000 0000 1c1c 3e3e \
- 3636 3e3e 1c1c 0000 \
- 0000 0000 1c1c 3e3e \
- 3636 3e3e 1c1c 0000
- nsd,nsc/a \
- 0808 1414 2222 4141 \
- 8080 4040 2020 1010 \
- 0808 1414 2222 4141 \
- 8080 4040 2020 1010
- m2,fm2,rm2,m2c/m2,m3c/m2 \
- 0000 1111 0000 0000 \
- 0000 1111 0000 0000 \
- 0000 1111 0000 0000 \
- 0000 1111 0000 0000
- pdiff,rpd,pdc/a,pfet \
- 0000 0808 5555 8080 \
- 0000 8080 5555 0808 \
- 0000 0808 5555 8080 \
- 0000 8080 5555 0808
- psd,psc/a \
- 1414 2222 0000 2222 \
- 4141 2222 0000 2222 \
- 1414 2222 0000 2222 \
- 4141 2222 0000 2222
- ndiff,rnd,ndc/a,nfet \
- 0808 1010 2020 4040 \
- 8080 4141 2222 1414 \
- 0808 1010 2020 4040 \
- 8080 4141 2222 1414
- pc/a,ndc/a,pdc/a,psc/a,nsc/a,gc,gc,gc X
-
-style gremlin
- pfet 9
- nfet 10
- gv1 11
- pwell 15
- nwell 16
- poly,fp,rp,pc/a,nfet,pfet 19
- pc/a,ndc/a,pdc/a,psc/a,nsc/a,gc,gc,gc 22
- pad,glass 23
- nsd,nsc/a 24
- gv1 28
- pdiff,rpd,pdc/a,pfet 29
- psd,psc/a 30
- ndiff,rnd,ndc/a,nfet 31
- pc/a,ndc/a,pdc/a,psc/a,nsc/a,gc,gc,gc,gv1 X
-
-end
-
diff --git a/technology/scn3me_subm/tech/__init__.py b/technology/scn3me_subm/tech/__init__.py
deleted file mode 100755
index 6b2d03b3..00000000
--- a/technology/scn3me_subm/tech/__init__.py
+++ /dev/null
@@ -1,6 +0,0 @@
-"""
-Import tech specific modules.
-"""
-
-from tech import *
-
diff --git a/technology/scn3me_subm/tech/calibreDRC_scn3me_subm.rul b/technology/scn3me_subm/tech/calibreDRC_scn3me_subm.rul
deleted file mode 100755
index 91d35fb4..00000000
--- a/technology/scn3me_subm/tech/calibreDRC_scn3me_subm.rul
+++ /dev/null
@@ -1,225 +0,0 @@
-////////////////////////////////////////////////////////////
-// DEFINE BOOLEAN LAYERS
-////////////////////////////////////////////////////////////
-LAYOUT USE DATABASE PRECISION YES
-
-layer pwell 41
-layer nwell 42
-layer active 43
-layer poly 46
-layer nimplant 45
-layer pimplant 44
-layer contact 25
-layer active_contact 48
-layer poly_contact 47
-layer metal1 49
-layer via1 50
-layer metal2 51
-layer via2 61
-layer metal3 62
-layer glass 52
-layer pad 26
-
-//Enabling incremental connectivity for antenna rule checks
-DRC Incremental Connect Yes
-
-well = nwell OR pwell
-gate = poly AND active
-implant = nimplant OR pimplant
-fieldpoly = poly NOT active
-
-contactenc1 = active OR poly
-contactenc = contactenc1 AND metal1
-diode = contact AND active
-act_poly = interact poly active
-
-GROUP mask_check
-//Well.2 Well.4
-Poly.1 Poly.2 Poly.3 Poly.4 Poly.5
-Active.1 Active.2 // Active.3
-Contact.1 Contact.2 Contact.3 Contact.4
-Contact.5 Contact.6 Metal1.1 Metal1.2 Metal1.3
-
-
-
-//Well.1 {
-//@Nwell and Pwell must not overlap
-//AND nwell pwell
-//}
-
-//Well.2 {
-//@Min spacing of pwell to nwell = 0.00
-//EXTERNAL nwell pwell < 0.00
-//}
-
-//Well.4 {
-//@Min width of nwell = 3.6
-//INTERNAL nwell < 3.6
-//}
-
-Poly.1 {
-@Min width of poly = 0.6
-INTERNAL poly < 0.6
-}
-
-Poly.2 {
-@Min spacing of gate poly = 0.9
-EXTERNAL gate < 0.9
-}
-
-Poly.3 {
-@Min extension of poly past active = 0.6
-ENCLOSURE active poly < 0.6
-}
-
-Poly.4 {
-@Minimum active enclosure of gate =0.6
-ENCLOSURE poly active < 0.6
-}
-
-Poly.5 {
-@Minimum spacing of poly to active = 0.3
-EXTERNAL act_poly active < 0.3
-}
-
-Active.1 {
-@Minimum width of active = 0.9
-INTERNAL active < 0.9
-}
-
-Active.2 {
-@Minimum spacing of active areas = 0.9
-EXTERNAL active < 0.9
-}
-
-//Active.3 {
-//@Minimum well enclosure of active = 1.8
-//ENCLOSURE active well < 1.8
-//}
-
-Contact.1 {
-@Minimum width of contact = 0.6
-INTERNAL contact < 0.6
-}
-
-Contact.2 {
-@Minimum spacing of contact = 0.9
-EXTERNAL contact < 0.9
-}
-
-Contact.3 {
-@Contact must be inside metal1 and active or poly
-NOT contact contactenc
-}
-
-Contact.4 {
-@Minimum active enclosure of contact = 0.3
-ENCLOSURE contact active < 0.3
-}
-
-Contact.5 {
-@Minimum poly enclosure of contact = 0.3
-ENCLOSURE contact poly < 0.3
-}
-
-Contact.6 {
-@Minimum spacing of contact to poly = 0.6
-EXTERNAL poly contact < 0.6
-}
-
-Metal1.1 {
-@Minimum width of metal1 = 0.9
-INTERNAL metal1 < 0.9
-}
-
-Metal1.2 {
-@Minimum spacing of metal1 = 0.9
-EXTERNAL metal1 < 0.9
-}
-
-Metal1.3 {
-@Metal1 must extend past contact by 0.3 on two opposite sides
-RECTANGLE ENCLOSURE contact metal1
-GOOD 0.00 0.3 OPPOSITE 0.00 0.3 OPPOSITE
-}
-
-Metal1.4 {
-@Metal1 must extend past via1 by 0.3 on two opposite sides
-RECTANGLE ENCLOSURE via1 metal1
-GOOD 0.00 0.3 OPPOSITE 0.00 0.3 OPPOSITE
-}
-
-Via1.1 {
-@Minimum width of via1 = 0.6
-INTERNAL via1 < 0.6
-}
-
-Via1.2 {
-@Minimum spacing of via1 = 0.6
-EXTERNAL via1 < 0.6
-}
-
-Via1.3 {
-@Via1 must be inside metal1
-NOT via1 metal1
-}
-
-
-Metal2.1 {
-@Minimum width of metal2 = 0.9
-INTERNAL metal2 < 0.9
-}
-
-Metal2.2 {
-@Minimum spacing of metal2 = 0.9
-EXTERNAL metal2 < 0.9
-}
-
-Metal2.3 {
-@Metal2 must extend past via1 by 0.3 on two opposite sides
-RECTANGLE ENCLOSURE via1 metal2
-GOOD 0.00 0.3 OPPOSITE 0.00 0.3 OPPOSITE
-}
-
-Metal2.4 {
-@Metal2 must extend past via2 by 0.3 on two opposite sides
-RECTANGLE ENCLOSURE via2 metal2
-GOOD 0.00 0.3 OPPOSITE 0.00 0.3 OPPOSITE
-}
-
-Via2.1 {
-@Minimum width of via2 = 0.6
-INTERNAL via2 < 0.6
-}
-
-Via2.2 {
-@Minimum spacing of via2 = 0.9
-EXTERNAL via2 < 0.9
-}
-
-Via2.3 {
-@Via2 must be inside metal2
-NOT via2 metal2
-}
-
-Via2.4 {
-@Via2 must be inside metal3
-NOT via2 metal3
-}
-
-Metal3.1 {
-@Minimum width of metal3 = 1.5
-INTERNAL metal3 < 1.5
-}
-
-Metal3.2 {
-@Minimum spacing of metal3 = 0.9
-EXTERNAL metal3 < 0.9
-}
-
-Metal3.3 {
-@Metal3 must extend past via2 by 0.6 on two opposite sides
-RECTANGLE ENCLOSURE via2 metal3
-GOOD 0.00 0.6 OPPOSITE 0.00 0.6 OPPOSITE
-}
-
diff --git a/technology/scn3me_subm/tech/calibreLVS_scn3me_subm.rul b/technology/scn3me_subm/tech/calibreLVS_scn3me_subm.rul
deleted file mode 100755
index 5d3516a6..00000000
--- a/technology/scn3me_subm/tech/calibreLVS_scn3me_subm.rul
+++ /dev/null
@@ -1,123 +0,0 @@
-TITLE "LVS Rule File for scn3me_subm"
-
-LVS POWER NAME vdd
-LVS GROUND NAME gnd GROUND
-LVS REDUCE PARALLEL MOS yes
-LVS REDUCE SERIES MOS yes
-LVS REDUCE SEMI SERIES MOS yes
-LVS FILTER UNUSED MOS no
-LVS RECOGNIZE GATES all
-LVS COMPONENT TYPE PROPERTY element
-LVS COMPONENT SUBTYPE PROPERTY model
-LVS IGNORE PORTS no
-
-LVS REPORT mask.lvs.rep
-LVS REPORT OPTION N
-LVS REPORT MAXIMUM 50
-MASK RESULTS DATABASE maskdb
-
-precision 1000
-resolution 250
-
-TEXT LAYER metal1 metal2 metal3
-PORT LAYER TEXT metal1 metal2 metal3
-
-
-layer pwell 41
-layer nwell 42
-layer active 43
-layer poly 46
-layer nimplant 45
-layer pimplant 44
-layer contact 25
-layer active_contact 48
-layer poly_contact 47
-layer metal1 49
-layer via1 50
-layer metal2 51
-layer via2 61
-layer metal3 62
-layer glass 52
-layer pad 26
-
-connect metal1 metal2 by via1
-connect metal2 metal3 by via2
-
-pdif = active and pimplant // P-diffusion
-ndif = active and nimplant // N-diffusion
-
-ngate = poly and ndif // N-Transistor
-pgate = poly and pdif // P-transistor
-
-nsrcdrn = ndif not ngate // N-tansistor Source and Drain contacts diffusion region
-psrcdrn = pdif not pgate // P-tansistor Source and Drain contacts diffusion region
-
-pcont = psrcdrn and pwell
-
-ntapcont = active not interact pimplant
-ptapcont = active not interact nimplant
-
-bulk = extent
-nsub = (bulk not pwell) and nwell
-ncont = nsrcdrn and nsub
-
-connect metal1 poly psrcdrn nsrcdrn by contact mask
-connect psrcdrn pwell by pcont mask
-connect nsrcdrn nsub by ncont mask
-
-ncont1= ntapcont and nsub
-pcont1= ptapcont and pwell
-connect metal1 ncont1 by contact mask
-connect metal1 pcont1 by contact mask
-connect ncont1 nsub
-connect pcont1 pwell
-
-connect psrcdrn metal1 by contact
-connect nsrcdrn metal1 by contact
-
-connect psrcdrn metal1 by active_contact
-connect nsrcdrn metal1 by active_contact
-
-connect poly metal1 by contact
-
-connect poly metal1 by poly_contact
-
-device mp (p) pgate poly (G) psrcdrn (S) psrcdrn (D) nsub CMACRO FET_PROPERTIES pgate nsub
-device mn (n) ngate poly (G) nsrcdrn (S) nsrcdrn (D) pwell CMACRO FET_PROPERTIES ngate pwell
-
-VARIABLE trace_delta 4e-9
-
-DMACRO FET_TRACE device_type device_name {
-TRACE PROPERTY device_type(device_name) l l trace_delta ABSOLUTE
-TRACE PROPERTY device_type(device_name) w w trace_delta ABSOLUTE
-
-}
-
-CMACRO FET_TRACE MN n
-CMACRO FET_TRACE MP p
-
-DMACRO FET_PROPERTIES seed well{
-[
-PROPERTY W, L, AS, AD, PS, PD
-
- AS = area(S)
- AD = area(D)
- PS = perimeter(S)
- PD = perimeter(D)
- if ( AS == 0 ) {
- AD = area(D) / 2
- AS = AD
- PD = perimeter(D) / 2
- PS = PD
- }
- if ( AD == 0 ) {
- AS = area(S) / 2
- AD = AS
- PS = perimeter(S) / 2
- PD = PS
- }
- W = (perim_co(seed,S) + perim_co(seed,D) ) * 0.5
- L = (perim(seed) - perim_co(seed,S) - perim_in(seed,S) - perim_co(seed,D) - perim_in(seed,D) ) * 0.5
-
-]
-}
diff --git a/technology/scn3me_subm/tech/tech.py b/technology/scn3me_subm/tech/tech.py
deleted file mode 100755
index e088eff9..00000000
--- a/technology/scn3me_subm/tech/tech.py
+++ /dev/null
@@ -1,279 +0,0 @@
-import os
-from design_rules import *
-
-"""
-File containing the process technology parameters for SCMOS 3me, subm, 180nm.
-"""
-
-#GDS file info
-GDS={}
-# gds units
-GDS["unit"]=(0.001,1e-6)
-# default label zoom
-GDS["zoom"] = 0.5
-
-
-###################################################
-##GDS Layer Map
-###################################################
-
-# create the GDS layer map
-layer={}
-layer["vtg"] = -1
-layer["vth"] = -1
-layer["contact"] = 47
-layer["pwell"] = 41
-layer["nwell"] = 42
-layer["active"] = 43
-layer["pimplant"] = 44
-layer["nimplant"] = 45
-layer["poly"] = 46
-layer["active_contact"] = 48
-layer["metal1"] = 49
-layer["via1"] = 50
-layer["metal2"] = 51
-layer["via2"] = 61
-layer["metal3"] = 62
-layer["text"] = 63
-layer["boundary"] = 63
-layer["blockage"] = 83
-
-###################################################
-##END GDS Layer Map
-###################################################
-
-###################################################
-##DRC/LVS Rules Setup
-###################################################
-_lambda_ = 0.3
-
-#technology parameter
-parameter={}
-parameter["min_tx_size"] = 4*_lambda_
-parameter["beta"] = 2
-
-parameter["6T_inv_nmos_size"] = 8*_lambda_
-parameter["6T_inv_pmos_size"] = 3*_lambda_
-parameter["6T_access_size"] = 4*_lambda_
-
-drclvs_home=os.environ.get("DRCLVS_HOME")
-
-drc = design_rules("scn3me_subm")
-
-drc["body_tie_down"] = 0
-drc["has_pwell"] = True
-drc["has_nwell"] = True
-
-
-#grid size is 1/2 a lambda
-drc["grid"]=0.5*_lambda_
-#DRC/LVS test set_up
-drc["drc_rules"]=drclvs_home+"/calibreDRC_scn3me_subm.rul"
-drc["lvs_rules"]=drclvs_home+"/calibreLVS_scn3me_subm.rul"
-drc["layer_map"]=os.environ.get("OPENRAM_TECH")+"/scn3me_subm/layers.map"
-
-
-# minwidth_tx with contact (no dog bone transistors)
-drc["minwidth_tx"] = 4*_lambda_
-drc["minlength_channel"] = 2*_lambda_
-
-# 1.3 Minimum spacing between wells of same type (if both are drawn)
-drc["well_to_well"] = 6*_lambda_
-# 1.4 Minimum spacing between wells of different type (if both are drawn)
-drc["pwell_to_nwell"] = 0
-# 1.1 Minimum width
-drc["minwidth_well"] = 12*_lambda_
-
-# 3.1 Minimum width
-drc["minwidth_poly"] = 2*_lambda_
-# 3.2 Minimum spacing over active
-drc["poly_to_poly"] = 3*_lambda_
-# 3.3 Minimum gate extension of active
-drc["poly_extend_active"] = 2*_lambda_
-# 5.5.b Minimum spacing between poly contact and other poly (alternative rules)
-drc["poly_to_polycontact"] = 4*_lambda_
-# ??
-drc["active_enclosure_gate"] = 0.0
-# 3.5 Minimum field poly to active
-drc["poly_to_active"] = _lambda_
-# 3.2.a Minimum spacing over field poly
-drc["poly_to_field_poly"] = 3*_lambda_
-# Not a rule
-drc["minarea_poly"] = 0.0
-
-# ??
-drc["active_to_body_active"] = 4*_lambda_ # Fix me
-# 2.1 Minimum width
-drc["minwidth_active"] = 3*_lambda_
-# 2.2 Minimum spacing
-drc["active_to_active"] = 3*_lambda_
-# 2.3 Source/drain active to well edge
-drc["well_enclosure_active"] = 6*_lambda_
-# Reserved for asymmetric enclosures
-drc["well_extend_active"] = 6*_lambda_
-# Not a rule
-drc["minarea_active"] = 0.0
-
-# 4.1 Minimum select spacing to channel of transistor to ensure adequate source/drain width
-drc["implant_to_channel"] = 3*_lambda_
-# 4.2 Minimum select overlap of active
-drc["implant_enclosure_active"] = 2*_lambda_
-# 4.3 Minimum select overlap of contact
-drc["implant_enclosure_contact"] = _lambda_
-# Not a rule
-drc["implant_to_contact"] = 0
-# Not a rule
-drc["implant_to_implant"] = 0
-# Not a rule
-drc["minwidth_implant"] = 0
-
-# 6.1 Exact contact size
-drc["minwidth_contact"] = 2*_lambda_
-# 5.3 Minimum contact spacing
-drc["contact_to_contact"] = 3*_lambda_
-# 6.2.b Minimum active overlap
-drc["active_enclosure_contact"] = _lambda_
-# Reserved for asymmetric enclosure
-drc["active_extend_contact"] = _lambda_
-# 5.2.b Minimum poly overlap
-drc["poly_enclosure_contact"] = _lambda_
-# Reserved for asymmetric enclosures
-drc["poly_extend_contact"] = _lambda_
-# Reserved for other technologies
-drc["contact_to_gate"] = 2*_lambda_
-# 5.4 Minimum spacing to gate of transistor
-drc["contact_to_poly"] = 2*_lambda_
-
-# 7.1 Minimum width
-drc["minwidth_metal1"] = 3*_lambda_
-# 7.2 Minimum spacing
-drc["metal1_to_metal1"] = 3*_lambda_
-# 7.3 Minimum overlap of any contact
-drc["metal1_enclosure_contact"] = _lambda_
-# Reserved for asymmetric enclosure
-drc["metal1_extend_contact"] = _lambda_
-# 8.3 Minimum overlap by metal1
-drc["metal1_enclosure_via1"] = _lambda_
-# Reserve for asymmetric enclosures
-drc["metal1_extend_via1"] = _lambda_
-# Not a rule
-drc["minarea_metal1"] = 0
-
-# 8.1 Exact size
-drc["minwidth_via1"] = 2*_lambda_
-# 8.2 Minimum via1 spacing
-drc["via1_to_via1"] = 3*_lambda_
-
-# 9.1 Minimum width
-drc["minwidth_metal2"] = 3*_lambda_
-# 9.2 Minimum spacing
-drc["metal2_to_metal2"] = 3*_lambda_
-# 9.3 Minimum overlap of via1
-drc["metal2_extend_via1"] = _lambda_
-# Reserved for asymmetric enclosures
-drc["metal2_enclosure_via1"] = _lambda_
-# 14.3 Minimum overlap by metal2
-drc["metal2_extend_via2"] = _lambda_
-# Reserved for asymmetric enclosures
-drc["metal2_enclosure_via2"] = _lambda_
-# Not a rule
-drc["minarea_metal2"] = 0
-
-# 14.1 Exact size
-drc["minwidth_via2"] = 2*_lambda_
-# 14.2 Minimum spacing
-drc["via2_to_via2"] = 3*_lambda_
-
-# 15.1 Minimum width
-drc["minwidth_metal3"] = 5*_lambda_
-# 15.2 Minimum spacing to metal3
-drc["metal3_to_metal3"] = 3*_lambda_
-# 15.3 Minimum overlap of via 2
-drc["metal3_extend_via2"] = 2*_lambda_
-# Reserved for asymmetric enclosures
-drc["metal3_enclosure_via2"] = 2*_lambda_
-# Not a rule
-drc["minarea_metal3"] = 0
-
-###################################################
-##END DRC/LVS Rules
-###################################################
-
-###################################################
-##Spice Simulation Parameters
-###################################################
-
-# spice model info
-spice={}
-spice["nmos"]="n"
-spice["pmos"]="p"
-# This is a map of corners to model files
-SPICE_MODEL_DIR=os.environ.get("SPICE_MODEL_DIR")
-# FIXME: Uncomment when we have the new spice models
-#spice["fet_models"] = { "TT" : [SPICE_MODEL_DIR+"/nom/pmos.sp",SPICE_MODEL_DIR+"/nom/nmos.sp"] }
-spice["fet_models"] = { "TT" : [SPICE_MODEL_DIR+"/nom/pmos.sp",SPICE_MODEL_DIR+"/nom/nmos.sp"],
- "FF" : [SPICE_MODEL_DIR+"/ff/pmos.sp",SPICE_MODEL_DIR+"/ff/nmos.sp"],
- "FS" : [SPICE_MODEL_DIR+"/ff/pmos.sp",SPICE_MODEL_DIR+"/ss/nmos.sp"],
- "SF" : [SPICE_MODEL_DIR+"/ss/pmos.sp",SPICE_MODEL_DIR+"/ff/nmos.sp"],
- "SS" : [SPICE_MODEL_DIR+"/ss/pmos.sp",SPICE_MODEL_DIR+"/ss/nmos.sp"] }
-
-
-#spice stimulus related variables
-spice["feasible_period"] = 5 # estimated feasible period in ns
-spice["supply_voltages"] = [4.5, 5.0, 5.5] # Supply voltage corners in [Volts]
-spice["nom_supply_voltage"] = 5.0 # Nominal supply voltage in [Volts]
-spice["rise_time"] = 0.05 # rise time in [Nano-seconds]
-spice["fall_time"] = 0.05 # fall time in [Nano-seconds]
-spice["temperatures"] = [0, 25, 100] # Temperature corners (celcius)
-spice["nom_temperature"] = 25 # Nominal temperature (celcius)
-
-#sram signal names
-#FIXME: We don't use these everywhere...
-spice["vdd_name"] = "vdd"
-spice["gnd_name"] = "gnd"
-spice["control_signals"] = ["CSB", "WEB"]
-spice["data_name"] = "DATA"
-spice["addr_name"] = "ADDR"
-spice["minwidth_tx"] = drc["minwidth_tx"]
-spice["channel"] = drc["minlength_channel"]
-spice["clk"] = "clk"
-
-# analytical delay parameters
-# FIXME: These need to be updated for SCMOS, they are copied from FreePDK45.
-spice["vdd_nominal"] = 5.0 # Typical Threshold voltage in Volts
-spice["temp_nominal"] = 25.0 # Typical Threshold voltage in Volts
-spice["v_threshold_typical"] = 1.3 # Typical Threshold voltage in Volts
-spice["wire_unit_r"] = 0.075 # Unit wire resistance in ohms/square
-spice["wire_unit_c"] = 0.64 # Unit wire capacitance ff/um^2
-spice["min_tx_r"] = 9250.0 # Minimum transistor on resistance in ohms
-spice["min_tx_drain_c"] = 0.7 # Minimum transistor drain capacitance in ff
-spice["min_tx_gate_c"] = 0.1 # Minimum transistor gate capacitance in ff
-spice["msflop_setup"] = 9 # DFF setup time in ps
-spice["msflop_hold"] = 1 # DFF hold time in ps
-spice["msflop_delay"] = 20.5 # DFF Clk-to-q delay in ps
-spice["msflop_slew"] = 13.1 # DFF output slew in ps w/ no load
-spice["msflop_in_cap"] = 9.8242 # Input capacitance of ms_flop (Din) [Femto-farad]
-spice["dff_setup"] = 9 # DFF setup time in ps
-spice["dff_hold"] = 1 # DFF hold time in ps
-spice["dff_delay"] = 20.5 # DFF Clk-to-q delay in ps
-spice["dff_slew"] = 13.1 # DFF output slew in ps w/ no load
-spice["dff_in_cap"] = 9.8242 # Input capacitance of ms_flop (Din) [Femto-farad]
-
-# analytical power parameters, many values are temporary
-spice["bitcell_leakage"] = 1 # Leakage power of a single bitcell in nW
-spice["inv_leakage"] = 1 # Leakage power of inverter in nW
-spice["nand2_leakage"] = 1 # Leakage power of 2-input nand in nW
-spice["nand3_leakage"] = 1 # Leakage power of 3-input nand in nW
-spice["nor2_leakage"] = 1 # Leakage power of 2-input nor in nW
-spice["msflop_leakage"] = 1 # Leakage power of flop in nW
-spice["flop_para_cap"] = 2 # Parasitic Output capacitance in fF
-
-spice["default_event_rate"] = 100 # Default event activity of every gate. MHz
-spice["flop_transition_prob"] = .5 # Transition probability of inverter.
-spice["inv_transition_prob"] = .5 # Transition probability of inverter.
-spice["nand2_transition_prob"] = .1875 # Transition probability of 2-input nand.
-spice["nand3_transition_prob"] = .1094 # Transition probability of 3-input nand.
-spice["nor2_transition_prob"] = .1875 # Transition probability of 2-input nor.
-###################################################
-##END Spice Simulation Parameters
-###################################################
diff --git a/technology/scn3me_subm/tf/README b/technology/scn3me_subm/tf/README
deleted file mode 100644
index 400cfe98..00000000
--- a/technology/scn3me_subm/tf/README
+++ /dev/null
@@ -1,19 +0,0 @@
-;; NCSU CDK v. 1.6.0.beta
-;; Last Modified: 2007-07-12
-
-The NCSU CDK is Copyright (C) NC State University, 1998, 1999, 2004,
-2006, 2007. Users are free to use or modify the NCSU CDK as appropriate as long
-as this notice appears in the modified package. The NCSU CDK is
-provided with NO WARRANTY.
-
-As of version 1.5.1, all documentation for the NCSU CDK is provided
-by the NCSU EDA Wiki which can be found at:
-
- http://www.eda.ncsu.edu/
-
-This beta release of the kit is to be used in migrating to Cadence Virtuoso 6.1
-for OpenAccess. Details of the conversion of the CDK from the CDB version can
-be found in the file cdb2oa/OA_Conversion.txt.
-
-This kit is not yet fully supported. Please post problems and solutions at
-http://www.chiptalk.org -> Forums -> NCSU CDK -> NCSU CDK 1.6.0.beta for Virtuoso 6.1
diff --git a/technology/scn3me_subm/tf/display.drf b/technology/scn3me_subm/tf/display.drf
deleted file mode 100644
index 4bd251e8..00000000
--- a/technology/scn3me_subm/tf/display.drf
+++ /dev/null
@@ -1,714 +0,0 @@
-drDefineDisplay(
-;( DisplayName )
- ( display )
-)
-drDefineColor(
-;( DisplayName ColorsName Red Green Blue )
- ( display white 255 255 255 )
- ( display yellow 255 255 0 )
- ( display silver 217 230 255 )
- ( display cream 255 255 204 )
- ( display pink 255 191 242 )
- ( display magenta 255 0 255 )
- ( display lime 0 255 0 )
- ( display tan 255 230 191 )
- ( display cyan 0 255 255 )
- ( display cadetBlue 57 191 255 )
- ( display orange 255 128 0 )
- ( display red 255 51 51 )
- ( display purple 153 0 230 )
- ( display green 0 204 102 )
- ( display brown 191 64 38 )
- ( display blue 51 77 255 )
- ( display slate 140 140 166 )
- ( display gold 217 204 0 )
- ( display maroon 230 31 13 )
- ( display violet 94 0 230 )
- ( display forest 38 140 107 )
- ( display chocolate 128 38 38 )
- ( display navy 51 51 153 )
- ( display black 0 0 0 )
- ( display gray 204 204 217 )
- ( display winColor1 166 166 166 )
- ( display winColor2 115 115 115 )
- ( display winColor3 189 204 204 )
- ( display winColor4 204 204 204 )
- ( display winColor5 199 199 199 )
- ( display blinkRed 255 0 0 t )
- ( display blinkYellow 255 255 0 t )
- ( display blinkWhite 255 255 255 t )
- ( display winBack 224 224 224 )
- ( display winFore 128 0 0 )
- ( display winText 51 51 51 )
-)
-drDefineStipple(
-;( DisplayName StippleName Bitmap )
- ( display dots ( ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ) ) )
- ( display dots1 ( ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ) ) )
- ( display hLine ( ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ) ) )
- ( display vLine ( ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 )
- ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 )
- ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 )
- ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 )
- ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 )
- ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 )
- ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 )
- ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 )
- ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 )
- ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 )
- ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 )
- ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 )
- ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 )
- ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 )
- ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 )
- ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 ) ) )
- ( display cross ( ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 )
- ( 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 )
- ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 )
- ( 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 )
- ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 )
- ( 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 )
- ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 )
- ( 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 )
- ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 )
- ( 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 )
- ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 )
- ( 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 )
- ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 )
- ( 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 )
- ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 )
- ( 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 ) ) )
- ( display grid ( ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
- ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
- ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
- ( 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 )
- ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
- ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
- ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
- ( 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 )
- ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
- ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
- ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
- ( 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 )
- ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
- ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
- ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
- ( 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ) ) )
- ( display slash ( ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
- ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 )
- ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 )
- ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 )
- ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
- ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 )
- ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 )
- ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 )
- ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
- ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 )
- ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 )
- ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 )
- ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
- ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 )
- ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 )
- ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 ) ) )
- ( display backSlash ( ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 )
- ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 )
- ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 )
- ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
- ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 )
- ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 )
- ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 )
- ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
- ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 )
- ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 )
- ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 )
- ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
- ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 )
- ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 )
- ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 )
- ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) ) )
- ( display hZigZag ( ( 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 )
- ( 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 )
- ( 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 )
- ( 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 )
- ( 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 )
- ( 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 )
- ( 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 )
- ( 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 )
- ( 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 )
- ( 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 )
- ( 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 )
- ( 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 )
- ( 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0 )
- ( 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 )
- ( 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 )
- ( 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 ) ) )
- ( display vZigZag ( ( 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 )
- ( 1 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 )
- ( 0 1 0 0 0 0 1 0 0 0 0 0 1 0 0 0 )
- ( 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 )
- ( 0 0 1 0 0 0 0 0 1 0 0 0 0 1 0 0 )
- ( 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 0 )
- ( 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 )
- ( 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 1 )
- ( 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 )
- ( 1 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 )
- ( 0 1 0 0 0 0 1 0 0 0 0 0 1 0 0 0 )
- ( 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 )
- ( 0 0 1 0 0 0 0 0 1 0 0 0 0 1 0 0 )
- ( 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 0 )
- ( 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 )
- ( 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 1 ) ) )
- ( display hCurb ( ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 1 1 1 1 1 0 0 0 1 1 1 1 1 )
- ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
- ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
- ( 1 1 1 1 0 0 0 1 1 1 1 1 0 0 0 1 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 1 1 1 1 1 0 0 0 1 1 1 1 1 )
- ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
- ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
- ( 1 1 1 1 0 0 0 1 1 1 1 1 0 0 0 1 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ) ) )
- ( display vCurb ( ( 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 )
- ( 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 )
- ( 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 )
- ( 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 )
- ( 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 )
- ( 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 )
- ( 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 )
- ( 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 )
- ( 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 )
- ( 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 )
- ( 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 )
- ( 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 )
- ( 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 )
- ( 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 )
- ( 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 )
- ( 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 ) ) )
- ( display brick ( ( 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 )
- ( 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 )
- ( 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 )
- ( 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 )
- ( 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 )
- ( 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 )
- ( 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 )
- ( 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 )
- ( 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 )
- ( 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 )
- ( 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 )
- ( 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 )
- ( 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 )
- ( 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 )
- ( 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 )
- ( 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 ) ) )
- ( display dagger ( ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 )
- ( 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 )
- ( 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 )
- ( 1 1 1 1 1 0 0 0 1 1 1 1 1 0 0 0 )
- ( 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 )
- ( 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 )
- ( 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 )
- ( 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 )
- ( 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 )
- ( 0 0 0 1 1 1 1 1 0 0 0 1 1 1 1 1 )
- ( 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 )
- ( 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 )
- ( 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 ) ) )
- ( display triangle ( ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 )
- ( 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 )
- ( 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 )
- ( 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 )
- ( 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 )
- ( 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ) ) )
- ( display x ( ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 )
- ( 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 )
- ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 )
- ( 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 )
- ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 )
- ( 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 )
- ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 )
- ( 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 )
- ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 )
- ( 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 )
- ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 )
- ( 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 )
- ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 )
- ( 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 )
- ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 )
- ( 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 ) ) )
- ( display stipple0 ( ( 1 ) ) )
- ( display stipple1 ( ( 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ) ) )
- ( display stipple2 ( ( 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 )
- ( 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 )
- ( 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 )
- ( 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 )
- ( 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 )
- ( 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 )
- ( 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 )
- ( 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 )
- ( 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 )
- ( 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 )
- ( 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 )
- ( 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 )
- ( 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 )
- ( 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 )
- ( 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 )
- ( 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 ) ) )
- ( display stipple3 ( ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 )
- ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 )
- ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 )
- ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 )
- ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 )
- ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 )
- ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 )
- ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 )
- ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 )
- ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 )
- ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 )
- ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 )
- ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 )
- ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 )
- ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 )
- ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 ) ) )
- ( display stipple4 ( ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 ) ) )
- ( display stipple5 ( ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 )
- ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 )
- ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 )
- ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
- ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 )
- ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 )
- ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 )
- ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
- ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 )
- ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 )
- ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 )
- ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
- ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 )
- ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 )
- ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 )
- ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) ) )
- ( display stipple6 ( ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
- ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 )
- ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 )
- ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 )
- ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
- ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 )
- ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 )
- ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 )
- ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
- ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 )
- ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 )
- ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 )
- ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
- ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 )
- ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 )
- ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 ) ) )
- ( display stipple7 ( ( 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 )
- ( 0 1 0 0 0 0 1 0 0 1 0 0 0 0 1 0 )
- ( 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 )
- ( 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 )
- ( 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 )
- ( 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 )
- ( 0 1 0 0 0 0 1 0 0 1 0 0 0 0 1 0 )
- ( 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 )
- ( 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 )
- ( 0 1 0 0 0 0 1 0 0 1 0 0 0 0 1 0 )
- ( 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 )
- ( 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 )
- ( 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 )
- ( 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 )
- ( 0 1 0 0 0 0 1 0 0 1 0 0 0 0 1 0 )
- ( 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 ) ) )
- ( display stipple8 ( ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
- ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 )
- ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
- ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 )
- ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
- ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 )
- ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
- ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 )
- ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
- ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 )
- ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
- ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 )
- ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
- ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 )
- ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
- ( 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 ) ) )
- ( display stipple9 ( ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 )
- ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 )
- ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 )
- ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 )
- ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 )
- ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 )
- ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 )
- ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 )
- ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 )
- ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 )
- ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 )
- ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 )
- ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 )
- ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 )
- ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 )
- ( 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 ) ) )
- ( display stipple10 ( ( 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ) ) )
- ( display stipple11 ( ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
- ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
- ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
- ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
- ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
- ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
- ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
- ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
- ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
- ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
- ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
- ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
- ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
- ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
- ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
- ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 ) ) )
- ( display dots2 ( ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ) ) )
- ( display dots4 ( ( 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 ) ) )
- ( display dats5 ( ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
- ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ) ) )
-)
-drDefineLineStyle(
-;( DisplayName LineStyle Size Pattern )
- ( display solid 1 (1 ) )
- ( display dashed 1 (1 1 1 0 0 1 1 1 ) )
- ( display dots 1 (1 0 0 ) )
- ( display dashDot 1 (1 1 1 0 0 1 0 0 ) )
- ( display shortDash 1 (1 1 0 0 ) )
- ( display doubleDash 1 (1 1 1 1 0 0 1 1 0 0 ) )
- ( display hidden 1 (1 0 0 0 ) )
- ( display thickLine 3 (1 1 1 ) )
- ( display lineStyle0 1 (1 ) )
- ( display lineStyle1 1 (1 1 1 0 1 1 1 0 1 1 1 0 1 1 0 1 ) )
-)
-drDefinePacket(
-;( DisplayName PacketName Stipple LineStyle Fill Outline [FillStyle])
- ( display NwellNet dots4 thickLine slate slate outlineStipple)
- ( display border stipple0 solid tan tan solid )
- ( display y8 stipple0 solid gold gold solid )
- ( display background stipple1 lineStyle0 black black outlineStipple)
- ( display y9 stipple0 solid silver silver solid )
- ( display Metal3Net dots4 solid navy navy outlineStipple)
- ( display A1 stipple0 lineStyle0 winBack winBack solid )
- ( display pin solid lineStyle0 red red solid )
- ( display XPNet blank solid yellow yellow outline )
- ( display hardFence stipple0 solid red red solid )
- ( display PbaseNet dots4 solid yellow yellow outlineStipple)
- ( display designFlow3 stipple1 lineStyle0 pink pink outlineStipple)
- ( display A2 stipple0 lineStyle0 winBack winBack solid )
- ( display Unrouted1 stipple0 lineStyle1 brown brown solid )
- ( display RowLbl blank solid cyan cyan outline )
- ( display edgeLayerPin stipple0 solid yellow yellow solid )
- ( display instance blank solid winBack red outline )
- ( display Nselect dots4 solid green green outlineStipple)
- ( display snap stipple0 solid yellow yellow solid )
- ( display pinAnt stipple0 solid red red solid )
- ( display winAttentionText solid solid winText winText solid )
- ( display designFlow2 stipple1 lineStyle0 purple purple outlineStipple)
- ( display Unrouted2 stipple0 lineStyle1 red red solid )
- ( display hilite blank solid white white outline )
- ( display P2Con solid lineStyle0 orange orange solid )
- ( display designFlow1 stipple1 lineStyle0 red red outlineStipple)
- ( display grid1 stipple0 solid gray gray solid )
- ( display Unrouted3 stipple0 lineStyle1 pink pink solid )
- ( display ViaNet x solid magenta magenta outlineStipple)
- ( display select stipple0 solid tan tan solid )
- ( display Poly2Net dots4 lineStyle0 orange orange outlineStipple)
- ( display winText solid solid winText winText solid )
- ( display Unrouted4 stipple0 lineStyle1 orange orange solid )
- ( display wireLbl solid lineStyle0 cyan cyan solid )
- ( display designFlow7 stipple1 lineStyle0 cyan cyan outlineStipple)
- ( display align stipple0 solid tan tan solid )
- ( display Poly2Pin blank solid yellow yellow outline )
- ( display Unrouted5 stipple0 lineStyle1 green green solid )
- ( display unset stipple0 solid forest forest solid )
- ( display Poly1Net dots4 lineStyle0 red red outlineStipple)
- ( display Resistor dots2 lineStyle0 cyan cyan outlineStipple)
- ( display DiodeNet dots4 lineStyle0 cream cream outlineStipple)
- ( display designFlow6 stipple1 lineStyle0 tan tan outlineStipple)
- ( display Unrouted6 stipple0 lineStyle1 blue blue solid )
- ( display resist stipple0 solid cyan cyan solid )
- ( display designFlow5 stipple1 lineStyle0 silver silver outlineStipple)
- ( display CapWellNet brick solid slate slate outlineStipple)
- ( display Unrouted7 stipple0 lineStyle1 purple purple solid )
- ( display CannotoccupyBnd blank solid red red outline )
- ( display winTopShadow solid solid white white solid )
- ( display designFlow4 stipple1 lineStyle0 black black outlineStipple)
- ( display softFence stipple0 solid yellow yellow solid )
- ( display ResistorNet dots4 solid cyan cyan outlineStipple)
- ( display winError solid solid winColor5 winColor5 solid )
- ( display changedLayerTl1 stipple0 solid yellow yellow solid )
- ( display prBoundaryLbl stipple0 solid purple purple solid )
- ( display ActXNet x solid yellow yellow outlineStipple)
- ( display Pbase stipple10 lineStyle0 yellow yellow outlineStipple)
- ( display Active dots2 lineStyle0 yellow yellow outlineStipple)
- ( display changedLayerTl0 stipple0 solid red red solid )
- ( display spike stipple0 solid purple purple solid )
- ( display Metal3 grid solid navy violet outlineStipple)
- ( display text blank solid white white outline )
- ( display Poly1Pin stipple0 lineStyle0 red red solid )
- ( display Row blank solid cyan cyan outline )
- ( display Pwell stipple9 lineStyle0 slate slate outlineStipple)
- ( display Metal2 stipple5 lineStyle0 magenta magenta outlineStipple)
- ( display wire solid lineStyle0 cyan cyan solid )
- ( display ActX solid solid yellow yellow solid )
- ( display Metal1 stipple6 lineStyle0 cadetBlue cadetBlue outlineStipple)
- ( display Cannotoccupy blank solid red red outline )
- ( display GroupLbl stipple0 solid green green solid )
- ( display axis stipple0 solid slate slate solid )
- ( display SiBlockNet x dashed tan tan outlineStipple)
- ( display edgeLayer stipple0 solid gray gray solid )
- ( display annotate2 stipple0 solid lime lime solid )
- ( display Metal1Pin stipple0 lineStyle0 blue blue solid )
- ( display Diode stipple7 lineStyle0 cream cream outlineStipple)
- ( display Glass X lineStyle0 white white X )
- ( display ViaXNet x solid magenta magenta outlineStipple)
- ( display annotate3 stipple0 solid cyan cyan solid )
- ( display Poly2 dots1 lineStyle0 orange orange outlineStipple)
- ( display deviceAnt stipple0 solid yellow yellow solid )
- ( display winBottomShadow solid solid winColor1 winColor1 solid )
- ( display PselectNet dots4 solid brown brown outlineStipple)
- ( display comment stipple0 lineStyle0 winBack winBack outlineStipple)
- ( display Poly1 dots lineStyle0 red red outlineStipple)
- ( display Unrouted stipple0 lineStyle1 winColor5 winColor5 solid )
- ( display stretch stipple0 solid yellow yellow solid )
- ( display XP blank lineStyle0 winBack gold outline )
- ( display annotate1 stipple0 solid pink pink solid )
- ( display Group stipple2 solid green green outlineStipple)
- ( display deviceLbl stipple0 solid green green solid )
- ( display annotate6 stipple0 solid silver silver solid )
- ( display GlassNet blank solid yellow yellow outline )
- ( display Canplace blank solid cyan cyan outline )
- ( display annotate7 stipple0 solid red red solid )
- ( display Via2 solid solid navy navy solid )
- ( display Metal2Pin stipple0 lineStyle0 magenta magenta solid )
- ( display annotate4 stipple0 solid yellow yellow solid )
- ( display device1 stipple1 lineStyle0 green green outlineStipple)
- ( display "90" blank solid white white outline )
- ( display markerWarn x solid yellow yellow outlineStipple)
- ( display text2 stipple1 lineStyle0 white white outlineStipple)
- ( display CapacitorNet dots4 lineStyle0 tan tan outlineStipple)
- ( display designFlow stipple1 lineStyle0 green green outlineStipple)
- ( display hilite1 stipple0 solid silver silver solid )
- ( display device blank solid green green outline )
- ( display prBoundary stipple0 solid purple purple solid )
- ( display annotate5 stipple0 solid white white solid )
- ( display text1 stipple0 dashed white white solid )
- ( display Via solid solid magenta magenta solid )
- ( display Capacitor stipple7 lineStyle0 tan tan outlineStipple)
- ( display markerErr x solid white white outlineStipple)
- ( display unknown stipple0 solid yellow yellow solid )
- ( display annotate stipple0 solid orange orange solid )
- ( display P1ConNet x solid red red outlineStipple)
- ( display hilite3 stipple0 solid cyan cyan solid )
- ( display winActiveBanner solid solid winColor3 winColor3 solid )
- ( display pinLbl stipple0 solid red red solid )
- ( display device2 stipple0 lineStyle1 green green solid )
- ( display grid stipple0 solid slate slate solid )
- ( display winBackground solid solid winBack winBack solid )
- ( display Metal1Net dots4 lineStyle0 blue blue outlineStipple)
- ( display hilite2 stipple0 solid tan tan solid )
- ( display annotate8 stipple0 solid tan tan solid )
- ( display hilite5 stipple0 solid lime lime solid )
- ( display annotate9 stipple0 solid green green solid )
- ( display Metal2Net dots4 lineStyle0 magenta magenta outlineStipple)
- ( display Metal3Pin stipple0 solid navy navy solid )
- ( display hilite4 stipple0 solid gray gray solid )
- ( display y0 stipple0 solid gray gray solid )
- ( display supply stipple0 solid lime lime solid )
- ( display ActiveNet dots4 lineStyle0 yellow yellow outlineStipple)
- ( display hilite7 stipple0 solid cream cream solid )
- ( display y1 stipple0 solid brown brown solid )
- ( display defaultPacket x solid chocolate winColor2 outlineStipple)
- ( display Via2Net cross solid navy navy outlineStipple)
- ( display NselectNet dots4 solid green green outlineStipple)
- ( display Unrouted8 stipple0 lineStyle1 gold gold solid )
- ( display hilite6 stipple0 solid orange orange solid )
- ( display y2 stipple0 solid red red solid )
- ( display winBorder solid solid winColor2 winColor2 solid )
- ( display Nwell dats5 thickLine slate slate outlineStipple)
- ( display Unrouted9 stipple0 lineStyle1 silver silver solid )
- ( display hilite9 stipple0 solid pink pink solid )
- ( display SiBlock blank dashed tan tan outline )
- ( display y3 stipple0 solid orange orange solid )
- ( display prBoundaryBnd stipple0 solid cyan cyan solid )
- ( display winForeground solid solid winFore winFore solid )
- ( display hilite8 stipple0 solid magenta magenta solid )
- ( display y4 stipple0 solid yellow yellow solid )
- ( display Pselect dots1 solid brown brown outlineStipple)
- ( display winInactiveBanner solid solid winColor4 winColor4 solid )
- ( display designFlow9 stipple1 lineStyle0 orange orange outlineStipple)
- ( display winButton solid solid winFore winFore solid )
- ( display y5 stipple0 solid green green solid )
- ( display hiz stipple0 solid orange orange solid )
- ( display drive stipple0 solid blue blue solid )
- ( display wireFlt stipple0 dashed red red solid )
- ( display instanceLbl stipple0 solid gold gold solid )
- ( display P2ConNet x lineStyle0 orange orange outlineStipple)
- ( display designFlow8 stipple1 lineStyle0 navy navy outlineStipple)
- ( display y6 stipple0 solid blue blue solid )
- ( display PwellNet dots4 lineStyle0 slate slate outlineStipple)
- ( display P1Con solid solid red red solid )
- ( display CapWell dagger solid slate slate outlineStipple)
- ( display y7 stipple0 solid purple purple solid )
- ( display ViaX solid solid magenta magenta solid )
- ( display HR x solid chocolate winColor2 outlineStipple)
- ( display HRnet x solid chocolate winColor2 outlineStipple)
-)
diff --git a/technology/scn3me_subm/tf/glade_scn3me_subm.py b/technology/scn3me_subm/tf/glade_scn3me_subm.py
deleted file mode 100644
index d2f9aa7e..00000000
--- a/technology/scn3me_subm/tf/glade_scn3me_subm.py
+++ /dev/null
@@ -1,7 +0,0 @@
-import os
-CWD = os.environ.get("OPENRAM_TECH") + "/scn3me_subm/tf"
-ui().importCds("default", CWD+"/display.drf", CWD+"/mosis.tf", 1000, 1, CWD+"/layers.map")
-
-
-
-
diff --git a/technology/scn3me_subm/tf/layers.map b/technology/scn3me_subm/tf/layers.map
deleted file mode 100644
index b5440f23..00000000
--- a/technology/scn3me_subm/tf/layers.map
+++ /dev/null
@@ -1,16 +0,0 @@
-Pwell drawing 41 0
-Nwell drawing 42 0
-Active drawing 43 0
-Poly1 drawing 46 0
-Pselect drawing 45 0
-Nselect drawing 44 0
-contact drawing 25 0
-P1Con drawing 47 0
-ActX drawing 48 0
-Metal1 drawing 49 0
-Via drawing 50 0
-Metal2 drawing 51 0
-Via2 drawing 61 0
-Metal3 drawing 62 0
-Glass drawing 52 0
-comment drawing 63 0
diff --git a/technology/scn3me_subm/tf/mosis.tf b/technology/scn3me_subm/tf/mosis.tf
deleted file mode 100644
index 759221f1..00000000
--- a/technology/scn3me_subm/tf/mosis.tf
+++ /dev/null
@@ -1,848 +0,0 @@
-; Generated on Sep 28 16:05:23 1998
-; with @(#)$CDS: icfb.exe version 4.4.1 06/17/98 23:40 (cds10067) $
-;
-; Matt Clapp fixed: October 10, 2002
-; added via devices, deleted useless app-specific crap,
-; added lxExtractRules so undo in layout editor doesn't
-; complain.
-
-
-;********************************
-; LAYER DEFINITION
-;********************************
-
-layerDefinitions(
- techLayers(
- ;( LayerName Layer# Abbreviation )
- ;( --------- ------ ------------ )
- ;User-Defined Layers:
- ( P2Con 3 P2Con )
- ( Poly2 7 Poly2 )
- ( Pbase 10 Pbase )
- ( Resistor 16 Resisto )
- ( Capacitor 17 Capacit )
- ( Diode 18 Diode )
- ( SiBlock 29 SiBlock )
- ( HR 34 HR )
- ( Pwell 41 Pwell )
- ( Nwell 42 Nwell )
- ( Active 43 Active )
- ( Pselect 44 Pselect )
- ( Nselect 45 Nselect )
- ( Poly1 46 Poly1 )
- ( P1Con 47 P1Con )
- ( ActX 48 ActX )
- ( Metal1 49 Metal1 )
- ( Via 50 Via )
- ( Metal2 51 Metal2 )
- ( Glass 52 Glass )
- ( CapWell 59 CapWell )
- ( XP 60 XP )
- ( Via2 61 Via2 )
- ( Metal3 62 Metal3 )
- ( A1 80 A1 )
- ( A2 81 A2 )
- ( comment 117 comment )
- ;System-Reserved Layers:
- ( Unrouted 200 Unroute )
- ( Row 201 Row )
- ( Group 202 Group )
- ( Cannotoccupy 203 Cannoto )
- ( Canplace 204 Canplac )
- ( hardFence 205 hardFen )
- ( softFence 206 softFen )
- ( y0 207 y0 )
- ( y1 208 y1 )
- ( y2 209 y2 )
- ( y3 210 y3 )
- ( y4 211 y4 )
- ( y5 212 y5 )
- ( y6 213 y6 )
- ( y7 214 y7 )
- ( y8 215 y8 )
- ( y9 216 y9 )
- ( designFlow 217 designF )
- ( stretch 218 stretch )
- ( edgeLayer 219 edgeLay )
- ( changedLayer 220 changed )
- ( unset 221 unset )
- ( unknown 222 unknown )
- ( spike 223 spike )
- ( hiz 224 hiz )
- ( resist 225 resist )
- ( drive 226 drive )
- ( supply 227 supply )
- ( wire 228 wire )
- ( pin 229 pin )
- ( text 230 text )
- ( device 231 device )
- ( border 232 border )
- ( snap 233 snap )
- ( align 234 align )
- ( prBoundary 235 prBound )
- ( instance 236 instanc )
- ( annotate 237 annotat )
- ( marker 238 marker )
- ( select 239 select )
- ( grid 251 grid )
- ( axis 252 axis )
- ( hilite 253 hilite )
- ( background 254 backgro )
- ) ;techLayers
-
- techPurposes(
- ;( PurposeName Purpose# Abbreviation )
- ;( ----------- -------- ------------ )
- ;User-Defined Purposes:
- ;System-Reserved Purposes:
- ( warning 234 wng )
- ( tool1 235 tl1 )
- ( tool0 236 tl0 )
- ( label 237 lbl )
- ( flight 238 flt )
- ( error 239 err )
- ( annotate 240 ant )
- ( drawing1 241 dr1 )
- ( drawing2 242 dr2 )
- ( drawing3 243 dr3 )
- ( drawing4 244 dr4 )
- ( drawing5 245 dr5 )
- ( drawing6 246 dr6 )
- ( drawing7 247 dr7 )
- ( drawing8 248 dr8 )
- ( drawing9 249 dr9 )
- ( boundary 250 bnd )
- ( pin 251 pin )
- ( drawing 252 drw )
- ( net 253 net )
- ( cell 254 cel )
- ( all 255 all )
- ) ;techPurposes
-
- techLayerPurposePriorities(
- ;layers are ordered from lowest to highest priority
- ; (higher priority is drawn on top of lower priority)
- ;( LayerName Purpose )
- ;( --------- ------- )
- ( background drawing )
- ( grid drawing )
- ( grid drawing1 )
- ( Nwell drawing )
- ( Pwell drawing )
- ( CapWell drawing )
- ( Pselect drawing )
- ( Nselect drawing )
- ( Active drawing )
- ( ActX drawing )
- ( SiBlock drawing )
- ( HR drawing )
- ( Poly1 drawing )
- ( P1Con drawing )
- ( Poly2 drawing )
- ( P2Con drawing )
- ( Metal1 drawing )
- ( Via drawing )
- ( Metal2 drawing )
- ( Via2 drawing )
- ( Metal3 drawing )
- ( annotate drawing )
- ( annotate drawing1 )
- ( annotate drawing2 )
- ( annotate drawing3 )
- ( annotate drawing4 )
- ( annotate drawing5 )
- ( annotate drawing6 )
- ( annotate drawing7 )
- ( annotate drawing8 )
- ( annotate drawing9 )
- ( Poly1 pin )
- ( Metal1 pin )
- ( Metal2 pin )
- ( Metal3 pin )
- ( Glass drawing )
- ( XP drawing )
- ( prBoundary drawing )
- ( prBoundary boundary )
- ( instance drawing )
- ( prBoundary label )
- ( instance label )
- ( Row drawing )
- ( Nwell net )
- ( align drawing )
- ( Pwell net )
- ( CapWell net )
- ( hardFence drawing )
- ( Active net )
- ( softFence drawing )
- ( Row label )
- ( Group drawing )
- ( Group label )
- ( Cannotoccupy drawing )
- ( Cannotoccupy boundary )
- ( Canplace drawing )
- ( ActX net )
- ( A2 drawing )
- ( A1 drawing )
- ( comment drawing )
- ( border drawing )
- ( Pselect net )
- ( Nselect net )
- ( SiBlock net )
- ( HR net )
- ( wire drawing )
- ( Poly1 net )
- ( wire label )
- ( P1Con net )
- ( wire flight )
- ( Metal1 net )
- ( device annotate )
- ( Metal2 net )
- ( device label )
- ( Via net )
- ( Metal3 net )
- ( Via2 net )
- ( pin label )
- ( text drawing )
- ( pin drawing )
- ( text drawing1 )
- ( pin annotate )
- ( device drawing )
- ( axis drawing )
- ( edgeLayer drawing )
- ( edgeLayer pin )
- ( snap drawing )
- ( stretch drawing )
- ( y0 drawing )
- ( y1 drawing )
- ( y2 drawing )
- ( y3 drawing )
- ( y4 drawing )
- ( y5 drawing )
- ( y6 drawing )
- ( y7 drawing )
- ( y8 drawing )
- ( y9 drawing )
- ( hilite drawing )
- ( hilite drawing1 )
- ( hilite drawing2 )
- ( hilite drawing3 )
- ( hilite drawing4 )
- ( hilite drawing5 )
- ( hilite drawing6 )
- ( hilite drawing7 )
- ( hilite drawing8 )
- ( hilite drawing9 )
- ( select drawing )
- ( drive drawing )
- ( hiz drawing )
- ( resist drawing )
- ( spike drawing )
- ( supply drawing )
- ( unknown drawing )
- ( unset drawing )
- ( designFlow drawing )
- ( designFlow drawing1 )
- ( designFlow drawing2 )
- ( designFlow drawing3 )
- ( designFlow drawing4 )
- ( designFlow drawing5 )
- ( designFlow drawing6 )
- ( designFlow drawing7 )
- ( designFlow drawing8 )
- ( designFlow drawing9 )
- ( changedLayer tool0 )
- ( changedLayer tool1 )
- ( marker warning )
- ( marker error )
- ( device drawing1 )
- ( Pbase drawing )
- ( Pbase net )
- ( Resistor net )
- ( Resistor drawing )
- ( Capacitor net )
- ( Capacitor drawing )
- ( Diode net )
- ( Diode drawing )
- ( Poly2 net )
- ( P2Con net )
- ( device drawing2 )
- ( Unrouted drawing )
- ( text drawing2 )
- ( Unrouted drawing1 )
- ( Unrouted drawing2 )
- ( Unrouted drawing3 )
- ( Unrouted drawing4 )
- ( Unrouted drawing5 )
- ( Unrouted drawing6 )
- ( Unrouted drawing7 )
- ( Unrouted drawing8 )
- ( Unrouted drawing9 )
- ) ;techLayerPurposePriorities
-
- techDisplays(
- ;( LayerName Purpose Packet Vis Sel Con2ChgLy DrgEnbl Valid )
- ;( --------- ------- ------ --- --- --------- ------- ----- )
- ( background drawing background t nil nil nil nil )
- ( grid drawing grid t nil nil nil nil )
- ( grid drawing1 grid1 t nil nil nil nil )
- ( Nwell drawing Nwell t t t t t )
- ( Pwell drawing Pwell t t t t nil )
- ( Active drawing Active t t t t t )
- ( ActX drawing ActX t t t t t )
- ( Pselect drawing Pselect t t t t t )
- ( Nselect drawing Nselect t t t t t )
- ( SiBlock drawing SiBlock t t t t t )
- ( HR drawing HR t t t t t )
- ( CapWell drawing CapWell t t t t t )
- ( Poly1 drawing Poly1 t t t t t )
- ( P1Con drawing P1Con t t t t t )
- ( Metal1 drawing Metal1 t t t t t )
- ( Via drawing Via t t t t t )
- ( Metal2 drawing Metal2 t t t t t )
- ( annotate drawing annotate t t nil t nil )
- ( annotate drawing1 annotate1 t t nil t nil )
- ( annotate drawing2 annotate2 t t nil t nil )
- ( annotate drawing3 annotate3 t t nil t nil )
- ( annotate drawing4 annotate4 t t nil t nil )
- ( annotate drawing5 annotate5 t t nil t nil )
- ( annotate drawing6 annotate6 t t nil t nil )
- ( annotate drawing7 annotate7 t t nil t nil )
- ( annotate drawing8 annotate8 t t nil t nil )
- ( annotate drawing9 annotate9 t t nil t nil )
- ( Via2 drawing Via2 t t t t t )
- ( Metal3 drawing Metal3 t t t t t )
- ( Glass drawing Glass t t t nil t )
- ( XP drawing XP t t t nil t )
- ( Metal1 pin Metal1Pin t t t nil t )
- ( Metal2 pin Metal2Pin t t t nil t )
- ( Metal3 pin Metal3Pin t t t nil t )
- ( Poly1 pin Poly1Pin t t t nil t )
- ( prBoundary drawing prBoundary t t nil t nil )
- ( prBoundary boundary prBoundaryBnd t t nil t nil )
- ( instance drawing instance t t nil t t )
- ( prBoundary label prBoundaryLbl t t t t nil )
- ( instance label instanceLbl t t t t nil )
- ( Row drawing Row t t t t nil )
- ( Nwell net NwellNet t t t nil nil )
- ( align drawing align t t nil t nil )
- ( Pwell net PwellNet t t t nil nil )
- ( CapWell net CapWellNet t t t nil nil )
- ( SiBlock net SiBlockNet t t t nil nil )
- ( HR net HRnet t t t nil nil )
- ( hardFence drawing hardFence t t t t nil )
- ( Active net ActiveNet t t t nil nil )
- ( softFence drawing softFence t t t t nil )
- ( Row label RowLbl t t t t nil )
- ( Group drawing Group t t t t nil )
- ( Group label GroupLbl t t t t nil )
- ( Cannotoccupy drawing Cannotoccupy t t t t nil )
- ( Cannotoccupy boundary CannotoccupyBnd t t t t nil )
- ( Canplace drawing Canplace t t t t nil )
- ( ActX net ActXNet t t t nil nil )
- ( A2 drawing A2 t t t t nil )
- ( A1 drawing A1 t t t t nil )
- ( comment drawing comment t t t t nil )
- ( border drawing border t t t t nil )
- ( Pselect net PselectNet t t t nil nil )
- ( Nselect net NselectNet t t t nil nil )
- ( wire drawing wire t t t t nil )
- ( Poly1 net Poly1Net t t t nil nil )
- ( wire label wireLbl t t t t nil )
- ( P1Con net P1ConNet t t t nil nil )
- ( wire flight wireFlt t t t t nil )
- ( Metal1 net Metal1Net t t t nil nil )
- ( device annotate deviceAnt t t t t nil )
- ( Metal2 net Metal2Net t t t nil nil )
- ( Metal3 net Metal3Net t t t nil nil )
- ( device label deviceLbl t t t t nil )
- ( Via net ViaNet t t t nil nil )
- ( Via2 net Via2Net t t t nil nil )
- ( pin label pinLbl t t t t nil )
- ( text drawing text t t t t t )
- ( pin drawing pin t t t t nil )
- ( text drawing1 text1 t t t t nil )
- ( pin annotate pinAnt t t t t nil )
- ( device drawing device t t t t nil )
- ( axis drawing axis t t t t nil )
- ( edgeLayer drawing edgeLayer t t nil t nil )
- ( edgeLayer pin edgeLayerPin t t nil t nil )
- ( snap drawing snap t t nil t nil )
- ( stretch drawing stretch t t nil t nil )
- ( y0 drawing y0 t t nil t nil )
- ( y1 drawing y1 t t nil t nil )
- ( y2 drawing y2 t t nil t nil )
- ( y3 drawing y3 t t nil t nil )
- ( y4 drawing y4 t t nil t nil )
- ( y5 drawing y5 t t nil t nil )
- ( y6 drawing y6 t t nil t nil )
- ( y7 drawing y7 t t nil t nil )
- ( y8 drawing y8 t t nil t nil )
- ( y9 drawing y9 t t nil t nil )
- ( hilite drawing hilite t t nil t nil )
- ( hilite drawing1 hilite1 t t t t nil )
- ( hilite drawing2 hilite2 t t nil t nil )
- ( hilite drawing3 hilite3 t t t t nil )
- ( hilite drawing4 hilite4 t t t t nil )
- ( hilite drawing5 hilite5 t t t t nil )
- ( hilite drawing6 hilite6 t t t t nil )
- ( hilite drawing7 hilite7 t t t t nil )
- ( hilite drawing8 hilite8 t t t t nil )
- ( hilite drawing9 hilite9 t t t t nil )
- ( select drawing select t t nil t nil )
- ( drive drawing drive t t t t nil )
- ( hiz drawing hiz t t t t nil )
- ( resist drawing resist t t t t nil )
- ( spike drawing spike t t t t nil )
- ( supply drawing supply t t t t nil )
- ( unknown drawing unknown t t t t nil )
- ( unset drawing unset t t t t nil )
- ( designFlow drawing designFlow t t t nil nil )
- ( designFlow drawing1 designFlow1 t t t nil nil )
- ( designFlow drawing2 designFlow2 t t t nil nil )
- ( designFlow drawing3 designFlow3 t t t nil nil )
- ( designFlow drawing4 designFlow4 t t t nil nil )
- ( designFlow drawing5 designFlow5 t t t nil nil )
- ( designFlow drawing6 designFlow6 t t t nil nil )
- ( designFlow drawing7 designFlow7 t t t nil nil )
- ( designFlow drawing8 designFlow8 t t t nil nil )
- ( designFlow drawing9 designFlow9 t t t nil nil )
- ( changedLayer tool0 changedLayerTl0 nil nil nil nil nil )
- ( changedLayer tool1 changedLayerTl1 nil nil t nil nil )
- ( marker warning markerWarn t t t t nil )
- ( marker error markerErr t t t t nil )
- ( device drawing1 device1 t t t t nil )
- ( Poly2 net Poly2Net t t t nil nil )
- ( Poly2 drawing Poly2 t t t t t )
- ( P2Con net P2ConNet t t t nil nil )
- ( P2Con drawing P2Con t t t t t )
- ( Pbase net PbaseNet t t t nil nil )
- ( Pbase drawing Pbase t t t t t )
- ( Resistor net ResistorNet t t t nil nil )
- ( Resistor drawing Resistor t t t t t )
- ( Capacitor net CapacitorNet t t t nil nil )
- ( Capacitor drawing Capacitor t t t t t )
- ( Diode net DiodeNet t t t nil nil )
- ( Diode drawing Diode t t t t t )
- ( device drawing2 device2 t t t t nil )
- ( Unrouted drawing Unrouted t t t t nil )
- ( text drawing2 text2 t t t t nil )
- ( Unrouted drawing1 Unrouted1 t t t t nil )
- ( Unrouted drawing2 Unrouted2 t t t t nil )
- ( Unrouted drawing3 Unrouted3 t t t t nil )
- ( Unrouted drawing4 Unrouted4 t t t t nil )
- ( Unrouted drawing5 Unrouted5 t t t t nil )
- ( Unrouted drawing6 Unrouted6 t t t t nil )
- ( Unrouted drawing7 Unrouted7 t t t t nil )
- ( Unrouted drawing8 Unrouted8 t t t t nil )
- ( Unrouted drawing9 Unrouted9 t t t t nil )
- ) ;techDisplays
-
-; I don't think the following is necessary (or used!)
-techLayerProperties(
-;( PropName Layer1 [ Layer2 ] PropValue )
- ( contactLimit P2Con 10000 )
- ( eqPinLimit P2Con 10000 )
- ( horizontalJogLength P2Con 2147483648.000000 )
- ( routingGrid P2Con 1.000000 )
- ( verticalJogLength P2Con 2147483648.000000 )
- ( routingGrid Poly2 1.000000 )
- ( contactLimit Active 10000 )
- ( eqPinLimit Active 10000 )
- ( horizontalJogLength Active 2147483648.000000 )
- ( routingGrid Active 1.000000 )
- ( verticalJogLength Active 2147483648.000000 )
- ( routingGrid Poly1 1.000000 )
- ( contactLimit P1Con 10000 )
- ( eqPinLimit P1Con 10000 )
- ( horizontalJogLength P1Con 2147483648.000000 )
- ( routingGrid P1Con 1.000000 )
- ( verticalJogLength P1Con 2147483648.000000 )
- ( contactLimit ActX 10000 )
- ( eqPinLimit ActX 10000 )
- ( horizontalJogLength ActX 2147483648.000000 )
- ( routingGrid ActX 1.000000 )
- ( verticalJogLength ActX 2147483648.000000 )
- ( routingGrid Metal1 1.000000 )
- ( contactLimit Via 10000 )
- ( eqPinLimit Via 10000 )
- ( horizontalJogLength Via 2147483648.000000 )
- ( routingGrid Via 1.000000 )
- ( verticalJogLength Via 2147483648.000000 )
- ( routingGrid Metal2 1.000000 )
-)
-
-) ;layerDefinitions
-
-
-;********************************
-; DEVICE RULES
-;********************************
-
-devices(
- tcCreateCDSDeviceClass()
-
- symContactDevice(
- ;( deviceName viaLayer viaPurpose
- ( VIA Via drawing
-
- ; layer1 purpose1 [implant1]
- Metal1 drawing
-
- ; layer2 purpose2 [implant2]
- Metal2 drawing
-
- ; width length [( row column xPitch yPitch xBias yBias )]
- ; 2 2 ( 1 1 _NA_ _NA_ _NA_ _NA_ )
- 2 2
-
- ; encLayer1 encLayer2 legalRegion )
- 1 1 _NA_)
- ) ;symContactDevice
-
- symContactDevice(
- ;( deviceName viaLayer viaPurpose
- ( VIA2 Via2 drawing
-
- ; layer1 purpose1 [implant1]
- Metal2 drawing
-
- ; layer2 purpose2 [implant2]
- Metal3 drawing
-
- ; width length [( row column xPitch yPitch xBias yBias )]
- ; 2 2 ( 1 1 _NA_ _NA_ _NA_ _NA_ )
- 2 2
-
- ; encLayer1 encLayer2 legalRegion )
- 1 2 _NA_)
- ) ;symContactDevice
-
-) ;devices
-
-
-;********************************
-; LAYER RULES
-;********************************
-
-layerRules(
- streamLayers(
- ;( layer streamNumber dataType translate )
- ;( ----- ------------ -------- --------- )
- ( ("background" "drawing") 0 0 nil )
- ( ("grid" "drawing") 0 0 nil )
- ( ("grid" "drawing1") 0 0 nil )
- ( ("Nwell" "drawing") 42 0 t )
- ( ("Pwell" "drawing") 41 0 t )
- ( ("Active" "drawing") 43 0 t )
- ( ("ActX" "drawing") 48 0 t )
- ( ("Pselect" "drawing") 44 0 t )
- ( ("Nselect" "drawing") 45 0 t )
- ( ("Poly1" "drawing") 46 0 t )
- ( ("P1Con" "drawing") 47 0 t )
- ( ("Metal1" "drawing") 49 0 t )
- ( ("Metal2" "drawing") 51 0 t )
- ( ("annotate" "drawing") 0 0 nil )
- ( ("annotate" "drawing1") 0 0 nil )
- ( ("annotate" "drawing2") 0 0 nil )
- ( ("annotate" "drawing3") 0 0 nil )
- ( ("annotate" "drawing4") 0 0 nil )
- ( ("annotate" "drawing5") 0 0 nil )
- ( ("annotate" "drawing6") 0 0 nil )
- ( ("annotate" "drawing7") 0 0 nil )
- ( ("annotate" "drawing8") 0 0 nil )
- ( ("annotate" "drawing9") 0 0 nil )
- ( ("Via" "drawing") 50 0 t )
- ( ("Glass" "drawing") 52 0 t )
- ( ("XP" "drawing") 60 0 t )
- ( ("Metal2" "pin") 0 0 nil )
- ( ("Poly1" "pin") 0 0 nil )
- ( ("prBoundary" "drawing") 0 0 nil )
- ( ("Metal1" "pin") 0 0 nil )
- ( ("prBoundary" "boundary") 0 0 nil )
- ( ("instance" "drawing") 246 0 nil )
- ( ("instance" "label") 0 0 nil )
- ( ("Nwell" "net") 0 0 nil )
- ( ("align" "drawing") 0 0 nil )
- ( ("Pwell" "net") 0 0 nil )
- ( ("hardFence" "drawing") 0 0 nil )
- ( ("Active" "net") 0 0 nil )
- ( ("softFence" "drawing") 0 0 nil )
- ( ("ActX" "net") 0 0 nil )
- ( ("A2" "drawing") 5 0 nil )
- ( ("A1" "drawing") 2 0 nil )
- ( ("comment" "drawing") 0 0 nil )
- ( ("border" "drawing") 0 0 nil )
- ( ("Pselect" "net") 0 0 nil )
- ( ("Nselect" "net") 0 0 nil )
- ( ("wire" "drawing") 0 0 nil )
- ( ("Poly1" "net") 0 0 nil )
- ( ("P1Con" "net") 0 0 nil )
- ( ("Metal1" "net") 0 0 nil )
- ( ("Metal2" "net") 0 0 nil )
- ( ("device" "label") 0 0 nil )
- ( ("Via" "net") 0 0 nil )
- ( ("pin" "label") 0 0 nil )
- ( ("text" "drawing") 63 0 t )
- ( ("pin" "drawing") 0 0 nil )
- ( ("device" "drawing") 0 0 nil )
- ( ("axis" "drawing") 0 0 nil )
- ( ("edgeLayer" "drawing") 0 0 nil )
- ( ("edgeLayer" "pin") 0 0 nil )
- ( ("snap" "drawing") 0 0 nil )
- ( ("stretch" "drawing") 0 0 nil )
- ( ("y0" "drawing") 0 0 nil )
- ( ("y1" "drawing") 0 0 nil )
- ( ("y2" "drawing") 0 0 nil )
- ( ("y3" "drawing") 0 0 nil )
- ( ("y4" "drawing") 0 0 nil )
- ( ("y5" "drawing") 0 0 nil )
- ( ("y6" "drawing") 0 0 nil )
- ( ("y7" "drawing") 0 0 nil )
- ( ("y8" "drawing") 0 0 nil )
- ( ("y9" "drawing") 0 0 nil )
- ( ("hilite" "drawing") 0 0 nil )
- ( ("hilite" "drawing2") 0 0 nil )
- ( ("select" "drawing") 0 0 nil )
- ( ("drive" "drawing") 0 0 nil )
- ( ("hiz" "drawing") 0 0 nil )
- ( ("resist" "drawing") 0 0 nil )
- ( ("spike" "drawing") 0 0 nil )
- ( ("supply" "drawing") 0 0 nil )
- ( ("unknown" "drawing") 0 0 nil )
- ( ("unset" "drawing") 0 0 nil )
- ( ("changedLayer" "tool0") 0 0 nil )
- ( ("Resistor" "net") 0 0 nil )
- ( ("Resistor" "drawing") 0 0 nil )
- ( ("Capacitor" "net") 0 0 nil )
- ( ("Capacitor" "drawing") 0 0 nil )
- ( ("Diode" "net") 0 0 nil )
- ( ("Diode" "drawing") 0 0 nil )
- ( ("Poly2" "net") 0 0 nil )
- ( ("Poly2" "drawing") 0 0 nil )
- ( ("P2Con" "net") 0 0 nil )
- ( ("P2Con" "drawing") 0 0 nil )
- ( ("Pbase" "drawing") 0 0 nil )
- ( ("Pbase" "net") 0 0 nil )
- ( P2Con 0 0 nil )
- ( Poly2 0 0 nil )
- ( Pwell 0 0 nil )
- ( Nwell 0 0 nil )
- ( Active 0 0 nil )
- ( Pselect 0 0 nil )
- ( Nselect 0 0 nil )
- ( Poly1 0 0 nil )
- ( P1Con 0 0 nil )
- ( ActX 0 0 nil )
- ( Metal1 0 0 nil )
- ( Via 0 0 nil )
- ( Metal2 0 0 nil )
- ( Glass 0 0 nil )
- ( XP 0 0 nil )
- ( ("Via2" "drawing") 50 0 t )
- ( ("Via2" "net") 0 0 nil )
- ( ("Metal3" "drawing") 50 0 t )
- ( ("Metal3" "net") 0 0 nil )
- ( ("Metal3" "pin") 0 0 nil )
- ( ("CapWell" "drawing") 0 0 nil )
- ( ("CapWell" "net") 0 0 nil )
- ( ("SiBlock" "drawing") 0 0 nil )
- ( ("SiBlock" "net") 0 0 nil )
- ( ("HR" "drawing") 0 0 nil )
- ( ("HR" "net") 0 0 nil )
- ) ;streamLayers
-
- viaLayers(
- ;( layer1 viaLayer layer2 )
- ;( ------ -------- ------ )
- ( Metal2 Via2 Metal3 )
- ( Metal1 Via Metal2 )
- ( Active ActX Poly1 )
- ( Poly1 P1Con Metal1 )
- ( Poly2 P2Con Metal1 )
- ) ;viaLayers
-
-) ;layerRules
-
-
-;********************************
-; PHYSICAL RULES
-;********************************
-
-physicalRules(
- orderedSpacingRules(
- ;( rule layer1 layer2 value )
- ;( ---- ------ ------ ----- )
- ( minEnclosure "prBoundary" "Metal1" 0.0 )
- ( minEnclosure "Metal2" "Via" 1.0 )
- ( minEnclosure "Metal1" "Via" 1.0 )
- ( minEnclosure "Metal1" "P1Con" 1.0 )
- ( minEnclosure "Metal1" "ActX" 1.0 )
- ( minEnclosure "Nselect" "Active" 2.0 )
- ( minEnclosure "Pselect" "Active" 2.0 )
- ( minEnclosure "Active" "ActX" 1.0 )
- ( minEnclosure "Pwell" "Active" 5.0 )
- ( minEnclosure "Nwell" "Active" 5.0 )
- ) ;orderedSpacingRules
-
- spacingRules(
- ;( rule layer1 layer2 value )
- ;( ---- ------ ------ ----- )
- ( minSpacing "P2Con" 2.0 )
- ( minSpacing "Poly2" 3.0 )
- ( minSpacing "Pwell" 9.0 )
- ( minSpacing "Nwell" 9.0 )
- ( minSpacing "Active" 3.0 )
- ( minSpacing "Pselect" 2.0 )
- ( minSpacing "Nselect" 2.0 )
- ( minSpacing "Poly1" 2.0 )
- ( minSpacing "P1Con" 2.0 )
- ( minSpacing "ActX" 2.0 )
- ( minSpacing "Metal1" 3.0 )
- ( minSpacing "Via" 3.0 )
- ( minSpacing "Via2" 3.0 )
- ( minSpacing "Metal2" 3.0 )
- ( minSpacing "Metal3" 4.0 )
- ( minSpacing "Glass" 75.0 )
- ( minSpacing "XP" 100.0 )
- ( minSpacing "Metal2" 4.0 )
- ( minSpacing "P1Con" "Via" 2.0 )
- ( minSpacing "ActX" "Via" 2.0 )
- ( minSpacing "ActX" "P2Con" 2.0 )
- ( minSpacing "Poly2" "P2Con" 4.0 )
- ( minSpacing "Poly1" "P1Con" 4.0 )
- ( minSpacing "ActX" "P1Con" 2.0 )
- ( minSpacing "Active" "P1Con" 2.0 )
- ( minSpacing "Active" "Poly2" 2.0 )
- ( minSpacing "Poly1" "Poly2" 2.0 )
- ( minSpacing "Active" "Poly1" 2.0 )
- ( minSpacing "ActX" "Poly1" 2.0 )
- ( minSpacing "Pselect" "Nselect" 0.0 )
- ( minSpacing "Nwell" "Pwell" 9.0 )
- ( minWidth "P2Con" 2.0 )
- ( minWidth "Poly2" 3.0 )
- ( minWidth "Pwell" 10.0 )
- ( minWidth "Nwell" 10.0 )
- ( minWidth "Active" 3.0 )
- ( minWidth "Pselect" 2.0 )
- ( minWidth "Nselect" 2.0 )
- ( minWidth "Poly1" 2.0 )
- ( minWidth "P1Con" 2.0 )
- ( minWidth "ActX" 2.0 )
- ( minWidth "Metal1" 4.0 )
- ( minWidth "Via" 2.0 )
- ( minWidth "Metal2" 4.0 )
- ( minWidth "Glass" 75.0 )
- ( minWidth "XP" 100.0 )
- ( minWidth "Metal3" 6.0 )
- ) ;spacingRules
-
- mfgGridResolution(
- ( 1.000000 )
- ) ;mfgGridResolution
-
-) ;physicalRules
-
-
-;********************************
-; ELECTRICAL RULES
-;********************************
-
-electricalRules(
- characterizationRules(
- ;( rule layer1 layer2 value )
- ;( ---- ------ ------ ----- )
- ( areaCap "P2Con" 0.0 )
- ( areaCap "Poly2" 0.0 )
- ( areaCap "Active" 0.0 )
- ( areaCap "Poly1" 6e-05 )
- ( areaCap "P1Con" 0.0 )
- ( areaCap "ActX" 0.0 )
- ( areaCap "Metal1" 2.6e-05 )
- ( areaCap "Via" 0.0 )
- ( areaCap "Metal2" 1.6e-05 )
- ( edgeCapacitance "P2Con" 0.0 )
- ( edgeCapacitance "Poly2" 0.0 )
- ( edgeCapacitance "Active" 0.0 )
- ( edgeCapacitance "Poly1" 0.0 )
- ( edgeCapacitance "P1Con" 0.0 )
- ( edgeCapacitance "ActX" 0.0 )
- ( edgeCapacitance "Metal1" 0.0 )
- ( edgeCapacitance "Via" 0.0 )
- ( edgeCapacitance "Metal2" 0.0 )
- ( sheetRes "P2Con" 0.0 )
- ( sheetRes "Poly2" 0.0 )
- ( sheetRes "Active" 0.0 )
- ( sheetRes "Poly1" 23.0 )
- ( sheetRes "P1Con" 0.0 )
- ( sheetRes "ActX" 0.0 )
- ( sheetRes "Metal1" 0.04 )
- ( sheetRes "Via" 0.0 )
- ( sheetRes "Metal2" 0.07 )
- ( currentDensity "P2Con" 1.0 )
- ( currentDensity "Poly2" 1.0 )
- ( currentDensity "Active" 1.0 )
- ( currentDensity "Poly1" 1.0 )
- ( currentDensity "P1Con" 1.0 )
- ( currentDensity "ActX" 1.0 )
- ( currentDensity "Metal1" 1.0 )
- ( currentDensity "Via" 1.0 )
- ( currentDensity "Metal2" 1.0 )
- ) ;characterizationRules
-
-) ;electricalRules
-
-
-;********************************
-; LAYOUT EDITOR RULES
-;********************************
-; specifies the ordering of the layers in the LSW
-
-leRules(
- leLswLayers(
- ;( layer purpose )
- ; ----- ------- )
- ( Nwell drawing )
- ( Pselect drawing )
- ( Nselect drawing )
- ( Active drawing )
- ( ActX drawing )
- ( Poly1 drawing )
- ( P1Con drawing )
- ( Metal1 drawing )
- ( Via drawing )
- ( Metal2 drawing )
- ( Via2 drawing )
- ( Metal3 drawing )
- ( Poly1 pin )
- ( Metal1 pin )
- ( Metal2 pin )
- ( Metal3 pin )
- ( Poly2 drawing )
- ( P2Con drawing )
- ( instance drawing )
- ( text drawing )
- ( CapWell drawing )
- ( SiBlock drawing )
- ( HR drawing )
- ( Pbase drawing )
- ( Resistor drawing )
- ( Capacitor drawing )
- ( Diode drawing )
- ( Glass drawing )
- ( XP drawing )
-
- ) ;leLswLayers
-) ;leRules
-
-
-;********************************
-; VIRTUOSO XL RULES
-;********************************
-; specifies the ordering of the layers in the LSW
-
-lxRules(
- lxExtractLayers(
- (Metal1 Metal2 Metal3)
- ) ;lxExtractLayers
-) ;lxRules
-
diff --git a/technology/setup_scripts/setup_openram_scn4m_subm.py b/technology/scn4m_subm/__init__.py
similarity index 83%
rename from technology/setup_scripts/setup_openram_scn4m_subm.py
rename to technology/scn4m_subm/__init__.py
index 19a4960c..d8474497 100644
--- a/technology/setup_scripts/setup_openram_scn4m_subm.py
+++ b/technology/scn4m_subm/__init__.py
@@ -34,8 +34,3 @@ os.environ["DRCLVS_HOME"] = DRCLVS_HOME
OPENRAM_TECH=os.path.abspath(os.environ.get("OPENRAM_TECH"))
os.environ["SPICE_MODEL_DIR"] = "{0}/{1}/models".format(OPENRAM_TECH, TECHNOLOGY)
-##########################
-# Paths required for OPENRAM to function
-
-LOCAL = "{0}/..".format(os.path.dirname(__file__))
-sys.path.append("{0}/{1}/tech".format(LOCAL,TECHNOLOGY))
diff --git a/technology/scn4m_subm/tech/__init__.py b/technology/scn4m_subm/tech/__init__.py
index 6b2d03b3..2573d2c2 100755
--- a/technology/scn4m_subm/tech/__init__.py
+++ b/technology/scn4m_subm/tech/__init__.py
@@ -2,5 +2,5 @@
Import tech specific modules.
"""
-from tech import *
+from .tech import *
diff --git a/technology/setup_scripts/README b/technology/setup_scripts/README
deleted file mode 100644
index 628cec7e..00000000
--- a/technology/setup_scripts/README
+++ /dev/null
@@ -1,4 +0,0 @@
-THIS DIRECTORY SHOULD ONLY CONTAIN SETUP SCRIPTS FOR TECHNOLOGIES.
-
-These scripts will be called automatically by the import_tech functions in
-globals.py in the compiler directory.
diff --git a/technology/setup_scripts/setup_openram_scn3me_subm.py b/technology/setup_scripts/setup_openram_scn3me_subm.py
deleted file mode 100644
index 1508b2a8..00000000
--- a/technology/setup_scripts/setup_openram_scn3me_subm.py
+++ /dev/null
@@ -1,41 +0,0 @@
-#!/usr/bin/python
-"""
-This type of setup script should be placed in the setup_scripts directory in the trunk
-"""
-
-import sys
-import os
-
-TECHNOLOGY = "scn3me_subm"
-
-
-##########################
-# CDK paths
-
-# os.environ["CDK_DIR"] = CDK_DIR #PDK path
-# os.environ["SYSTEM_CDS_LIB_DIR"] = "{0}/cdssetup".format(CDK_DIR)
-# os.environ["CDS_SITE"] = CDK_DIR
-os.environ["MGC_TMPDIR"] = "/tmp"
-
-###########################
-# OpenRAM Paths
-
-
-try:
- DRCLVS_HOME = os.path.abspath(os.environ.get("DRCLVS_HOME"))
-except:
- OPENRAM_TECH=os.path.abspath(os.environ.get("OPENRAM_TECH"))
- DRCLVS_HOME=OPENRAM_TECH+"/scn3me_subm/tech"
-os.environ["DRCLVS_HOME"] = DRCLVS_HOME
-
-# try:
-# SPICE_MODEL_DIR = os.path.abspath(os.environ.get("SPICE_MODEL_DIR"))
-# except:
-OPENRAM_TECH=os.path.abspath(os.environ.get("OPENRAM_TECH"))
-os.environ["SPICE_MODEL_DIR"] = "{0}/{1}/models".format(OPENRAM_TECH, TECHNOLOGY)
-
-##########################
-# Paths required for OPENRAM to function
-
-LOCAL = "{0}/..".format(os.path.dirname(__file__))
-sys.path.append("{0}/{1}/tech".format(LOCAL,TECHNOLOGY))