mirror of https://github.com/VLSIDA/OpenRAM.git
Merge branch 'dev' into multiport
This commit is contained in:
commit
c3bd54696f
|
|
@ -92,14 +92,6 @@ To specify a particular technology use "-t <techname>" such as
|
||||||
"-t scn3me_subm". The default for a unit test is freepdk45 whereas
|
"-t scn3me_subm". The default for a unit test is freepdk45 whereas
|
||||||
the default for openram.py is specified in the configuration file.
|
the default for openram.py is specified in the configuration file.
|
||||||
|
|
||||||
A regression daemon script that can be used with cron is included in
|
|
||||||
a separate repository at https://github.com/mguthaus/openram-daemons
|
|
||||||
```
|
|
||||||
regress_daemon.py
|
|
||||||
regress_daemon.sh
|
|
||||||
```
|
|
||||||
This updates a git repository, checks out code, and sends an email
|
|
||||||
report with status information.
|
|
||||||
|
|
||||||
# CREATING CUSTOM TECHNOLOGIES
|
# CREATING CUSTOM TECHNOLOGIES
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -163,7 +163,7 @@ class VlsiLayout:
|
||||||
angle = 0
|
angle = 0
|
||||||
else:
|
else:
|
||||||
# MRG: Added negative to make CCW rotate 8/29/18
|
# MRG: Added negative to make CCW rotate 8/29/18
|
||||||
angle = math.radians(-1.0*float(rotateAngle))
|
angle = math.radians(float(rotateAngle))
|
||||||
mRotate = matrix([[math.cos(angle),-math.sin(angle),0.0],
|
mRotate = matrix([[math.cos(angle),-math.sin(angle),0.0],
|
||||||
[math.sin(angle),math.cos(angle),0.0],
|
[math.sin(angle),math.cos(angle),0.0],
|
||||||
[0.0,0.0,1.0]])
|
[0.0,0.0,1.0]])
|
||||||
|
|
@ -314,6 +314,8 @@ class VlsiLayout:
|
||||||
layoutToAddSref.coordinates = offsetInLayoutUnits
|
layoutToAddSref.coordinates = offsetInLayoutUnits
|
||||||
|
|
||||||
if mirror or rotate:
|
if mirror or rotate:
|
||||||
|
|
||||||
|
layoutToAddSref.transFlags = [0,0,0]
|
||||||
# This is NOT the same as the order in the GDS spec!
|
# This is NOT the same as the order in the GDS spec!
|
||||||
# It gets written out in gds2writer in the right order though.
|
# It gets written out in gds2writer in the right order though.
|
||||||
# transFlags = (mirror around x-axis, rotation, magnification)
|
# transFlags = (mirror around x-axis, rotation, magnification)
|
||||||
|
|
@ -325,8 +327,6 @@ class VlsiLayout:
|
||||||
rotate = 180.0
|
rotate = 180.0
|
||||||
if mirror=="R270":
|
if mirror=="R270":
|
||||||
rotate = 270.0
|
rotate = 270.0
|
||||||
|
|
||||||
layoutToAddSref.transFlags = [0,0,0]
|
|
||||||
if rotate:
|
if rotate:
|
||||||
#layoutToAddSref.transFlags = [0,1,0]
|
#layoutToAddSref.transFlags = [0,1,0]
|
||||||
layoutToAddSref.rotateAngle = rotate
|
layoutToAddSref.rotateAngle = rotate
|
||||||
|
|
@ -337,7 +337,7 @@ class VlsiLayout:
|
||||||
layoutToAddSref.transFlags = [1,0,0]
|
layoutToAddSref.transFlags = [1,0,0]
|
||||||
layoutToAddSref.rotateAngle = 180.0
|
layoutToAddSref.rotateAngle = 180.0
|
||||||
if mirror == "xy" or mirror == "XY": #NOTE: "XY" option will override specified rotate angle
|
if mirror == "xy" or mirror == "XY": #NOTE: "XY" option will override specified rotate angle
|
||||||
layoutToAddSref.transFlags = [0,1,0]
|
#layoutToAddSref.transFlags = [0,1,0]
|
||||||
layoutToAddSref.transFlags = [0,0,0]
|
layoutToAddSref.transFlags = [0,0,0]
|
||||||
layoutToAddSref.rotateAngle = 180.0
|
layoutToAddSref.rotateAngle = 180.0
|
||||||
|
|
||||||
|
|
@ -405,10 +405,10 @@ class VlsiLayout:
|
||||||
if(len(text)%2 == 1):
|
if(len(text)%2 == 1):
|
||||||
text = text + '\x00'
|
text = text + '\x00'
|
||||||
textToAdd.textString = text
|
textToAdd.textString = text
|
||||||
textToAdd.transFlags[1] = 1
|
textToAdd.transFlags = [0,0,1]
|
||||||
textToAdd.magFactor = magnification
|
textToAdd.magFactor = magnification
|
||||||
if rotate:
|
if rotate:
|
||||||
textToAdd.transFlags[2] = 1
|
textToAdd.transFlags = [0,1,1]
|
||||||
textToAdd.rotateAngle = rotate
|
textToAdd.rotateAngle = rotate
|
||||||
#add the sref to the root structure
|
#add the sref to the root structure
|
||||||
self.structures[self.rootStructureName].texts.append(textToAdd)
|
self.structures[self.rootStructureName].texts.append(textToAdd)
|
||||||
|
|
|
||||||
|
|
@ -186,7 +186,7 @@ class delay_chain(design.design):
|
||||||
continue
|
continue
|
||||||
for pin_name in ["vdd", "gnd"]:
|
for pin_name in ["vdd", "gnd"]:
|
||||||
pin = load.get_pin(pin_name)
|
pin = load.get_pin(pin_name)
|
||||||
self.add_power_pin(pin_name, pin.rc(),rotate=0)
|
self.add_power_pin(pin_name, pin.rc())
|
||||||
else:
|
else:
|
||||||
# We have an even number of rows, so need to get the last gnd rail
|
# We have an even number of rows, so need to get the last gnd rail
|
||||||
inv = self.driver_inst_list[-1]
|
inv = self.driver_inst_list[-1]
|
||||||
|
|
@ -195,7 +195,7 @@ class delay_chain(design.design):
|
||||||
continue
|
continue
|
||||||
pin_name = "gnd"
|
pin_name = "gnd"
|
||||||
pin = load.get_pin(pin_name)
|
pin = load.get_pin(pin_name)
|
||||||
self.add_power_pin(pin_name, pin.rc(),rotate=0)
|
self.add_power_pin(pin_name, pin.rc())
|
||||||
|
|
||||||
|
|
||||||
# input is A pin of first inverter
|
# input is A pin of first inverter
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,7 @@ and include its appropriate license.
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
import time
|
import time
|
||||||
|
import shutil
|
||||||
import debug
|
import debug
|
||||||
from globals import OPTS
|
from globals import OPTS
|
||||||
import subprocess
|
import subprocess
|
||||||
|
|
@ -34,10 +35,6 @@ def write_magic_script(cell_name, gds_name, extract=False):
|
||||||
f = open(run_file, "w")
|
f = open(run_file, "w")
|
||||||
f.write("#!/bin/sh\n")
|
f.write("#!/bin/sh\n")
|
||||||
f.write("{} -dnull -noconsole << EOF\n".format(OPTS.drc_exe[1]))
|
f.write("{} -dnull -noconsole << EOF\n".format(OPTS.drc_exe[1]))
|
||||||
f.write("path sys +{}tech\n".format(OPTS.openram_tech))
|
|
||||||
f.write("tech load SCN3ME_SUBM.30\n")
|
|
||||||
#gf.write("scalegrid 1 8\n")
|
|
||||||
#f.write("gds rescale no\n")
|
|
||||||
f.write("gds polygon subcell true\n")
|
f.write("gds polygon subcell true\n")
|
||||||
f.write("gds warning default\n")
|
f.write("gds warning default\n")
|
||||||
f.write("gds read {}\n".format(gds_name))
|
f.write("gds read {}\n".format(gds_name))
|
||||||
|
|
@ -119,6 +116,10 @@ def run_drc(cell_name, gds_name, extract=False):
|
||||||
global num_drc_runs
|
global num_drc_runs
|
||||||
num_drc_runs += 1
|
num_drc_runs += 1
|
||||||
|
|
||||||
|
# Copy .magicrc file into temp dir
|
||||||
|
shutil.copy(OPTS.openram_tech + "/mag_lib/.magicrc",
|
||||||
|
OPTS.openram_temp)
|
||||||
|
|
||||||
write_magic_script(cell_name, gds_name, extract)
|
write_magic_script(cell_name, gds_name, extract)
|
||||||
|
|
||||||
# run drc
|
# run drc
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
path sys +$::env(OPENRAM_TECH)/scn3me_subm/tech
|
||||||
|
tech load SCN3ME_SUBM.30
|
||||||
Loading…
Reference in New Issue