Merge branch 'dev' into multiport

This commit is contained in:
Matt Guthaus 2018-08-31 12:56:25 -07:00
commit c3bd54696f
5 changed files with 15 additions and 20 deletions

View File

@ -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

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -0,0 +1,2 @@
path sys +$::env(OPENRAM_TECH)/scn3me_subm/tech
tech load SCN3ME_SUBM.30