Merge branch 'develop' into develop_openroadapp
diff --git a/docker_build/docker/magic/Dockerfile b/docker_build/docker/magic/Dockerfile
index 26c11ff..51e470b 100644
--- a/docker_build/docker/magic/Dockerfile
+++ b/docker_build/docker/magic/Dockerfile
@@ -3,6 +3,15 @@
# Common development tools and libraries (kitchen sink approach)
RUN yum groupinstall -y "Development Tools" "Development Libraries"
+RUN yum -y install centos-release-scl && \
+ yum -y install devtoolset-8 devtoolset-8-libatomic-devel
+
+ENV CC=/opt/rh/devtoolset-8/root/usr/bin/gcc \
+ CPP=/opt/rh/devtoolset-8/root/usr/bin/cpp \
+ CXX="/opt/rh/devtoolset-8/root/usr/bin/g++" \
+ PATH=/opt/rh/devtoolset-8/root/usr/bin:$PATH \
+ LD_LIBRARY_PATH=/opt/rh/devtoolset-8/root/usr/lib64:/opt/rh/devtoolset-8/root/usr/lib:/opt/rh/devtoolset-8/root/usr/lib64/dyninst:/opt/rh/devtoolset-8/root/usr/lib/dyninst:/opt/rh/devtoolset-8/root/usr/lib64:/opt/rh/devtoolset-8/root/usr/lib:$LD_LIBRARY_PATH
+#
# magic dependencies
RUN yum install -y csh wget tcl-devel tk-devel libX11-devel cairo-devel ncurses-devel
@@ -13,7 +22,7 @@
WORKDIR "magic"
-RUN git checkout magic-8.2
+RUN git checkout bebd603296d4afa4ff413669cef3b058e9fccf39
# build
RUN ./configure --prefix=/build && \
diff --git a/docker_build/tar/magic.tar.gz b/docker_build/tar/magic.tar.gz
index ea2fd0e..7989082 100644
--- a/docker_build/tar/magic.tar.gz
+++ b/docker_build/tar/magic.tar.gz
Binary files differ
diff --git a/pdks/ef-skywater-s8 b/pdks/ef-skywater-s8
index fa4034e..64a70e1 160000
--- a/pdks/ef-skywater-s8
+++ b/pdks/ef-skywater-s8
@@ -1 +1 @@
-Subproject commit fa4034ee98ba25ccca37f7116f1df5d175989864
+Subproject commit 64a70e15700965676a29e5e942f83078bbcb232a
diff --git a/scripts/magic.tcl b/scripts/magic.tcl
index 5cba479..0d77693 100644
--- a/scripts/magic.tcl
+++ b/scripts/magic.tcl
@@ -1,35 +1,13 @@
-scalegrid 1 2
-box 0 0 0 0
-drc off
-snap int
-
-# Read tech lef
-#addpath ./platforms/$::env(PLATFORM)
-#load libcell_scs8lp; # ?
-lef read $::env(MERGED_LEF)
-
-
-# Read gds files
-gds readonly true
-gds rescale false
-foreach gdsFile $::env(GDS_FILES) {
- gds read $gdsFile
-}
-
# Read def and load design
def read $::env(CURRENT_DEF)
-load $::env(DESIGN_NAME)
+# load $::env(DESIGN_NAME)
# Write gds
-select top cell
-expand
gds write $::env(magic_result_file_tag).gds
puts "GDS write complete"
lef write $::env(magic_result_file_tag).lef -hide
lef write $::env(magic_result_file_tag).full.lef
-quit -noprompt
-exit
diff --git a/scripts/padframe2fp.py b/scripts/padframe2fp.py
index 9906c6f..2ef029e 100644
--- a/scripts/padframe2fp.py
+++ b/scripts/padframe2fp.py
@@ -7,6 +7,7 @@
PINS_REGEX = r'PIN\s+(\S+).*PORT\s+(.*;\s+)END.*END\s+\1\n'
PLACED_COMP_REGEX = r"^\s*-\s+([^\s]+)\s+([^\s]+)\s+\+\s+PLACED\s+\(\s(-?\d+)\s(-?\d+)\s\)\s+([NEWS])\s+;$"
PIN_IGNORE = ['VSS', 'VDD', 'PAD', 'in3v', 'vdd']
+NETS_IGNORE = ['vdd', 'vss']
NETSECTION_REGEX = r"^NETS\s+\S+\s+;\s+(.*)END NETS\s+"
# \s+([NEWS])\s+;$"
def getMacroPins(content, macro_name):
@@ -51,8 +52,13 @@
nets = filter(None, nets_section[0].replace('\n', ' ').split("- "))
nets_dict = {}
for net in nets:
- connection = re.findall(r"\s*(\S+)\s+\(\s+(.*)\s+\)\s+\(\s+(.*)\s+\)\s+;", net)[0]
- nets_dict[connection[0]] = connection[1:]
+ net_name = re.findall(r"\s*(\S+).*;",net)
+ if any(net_name[0].find(net_ignore) != -1 for net_ignore in NETS_IGNORE):
+ continue
+ connections = re.findall(r"\(\s+(.*?)\s+\)",net)
+ connections = [connection.replace('\\','') for connection in connections]
+ nets_dict[net_name[0]] = connections
+ #print(net_name, connections)
return nets_dict
@@ -104,7 +110,6 @@
for pin in macro_data["pins"]:
if any(pin.find(pin_ignore) != -1 for pin_ignore in PIN_IGNORE):
continue
- pin_cnt += 1
pin_data = macro_data["pins"][pin]
# print(pin_data)
#pin_tag = comp+"."+comp_data["macro"]+'.'+pin
@@ -115,7 +120,9 @@
pin_tag = net
found = True
break
- if not found: continue
+ if not found:
+ continue
+ pin_cnt += 1
pin_section += "- %s + NET %s\n+ PLACED ( %d %d ) %s" % \
(pin_tag, pin_tag, pos_x, pos_y, orientation)
for layer in pin_data:
diff --git a/scripts/run_magic.tcl b/scripts/run_magic.tcl
index 69beb0f..b125f13 100644
--- a/scripts/run_magic.tcl
+++ b/scripts/run_magic.tcl
@@ -1,8 +1,13 @@
+set magicrc $::env(TMP_DIR)/magic.magicrc
+set ::env(PDKPATH) "$::env(PDK_ROOT)/ef-skywater-s8/EFS8A"
+set ::env(MAGPATH) "$::env(PDKPATH)/libs.ref/maglef"
+exec envsubst < $::env(SCRIPTS_DIR)/tmp.magicrc > $magicrc
exec magic \
-noconsole \
-dnull \
- -norcfile \
- -T $::env(MAGIC_TECH_FILE) \
+ -rcfile $magicrc \
$::env(SCRIPTS_DIR)/magic.tcl \
</dev/null \
|& tee $::env(TERMINAL_OUTPUT) $::env(magic_log_file_tag).log
+
+
diff --git a/scripts/tcl_commands/all.tcl b/scripts/tcl_commands/all.tcl
index cc0fc3b..7083236 100644
--- a/scripts/tcl_commands/all.tcl
+++ b/scripts/tcl_commands/all.tcl
@@ -346,6 +346,11 @@
puts "Streaming out GDS II..."
set ::env(CURRENT_STAGE) finishing
if {[catch {exec tclsh $::env(SCRIPTS_DIR)/run_magic.tcl} issue]} { }
+# set PDKPATH $::env(PDK_ROOT)/$::env(PDK)/
+# set tech $PDKPATH/libs.tech/magic/current/EFS8A.tech
+# cd $::env(TMP_DIR)
+# exec /ef/apps/bin/magicGdrc -T $tech $::env(magic_result_file_tag).gds $::env(DESIGN_NAME) \
+ |& tee $::env(TERMINAL_OUTPUT) $::env(magic_log_file_tag).drc
}
}
diff --git a/scripts/tcl_commands/placement.tcl b/scripts/tcl_commands/placement.tcl
index 46b7fd5..ba9f5b5 100644
--- a/scripts/tcl_commands/placement.tcl
+++ b/scripts/tcl_commands/placement.tcl
@@ -41,6 +41,10 @@
try_catch openroad -exit $::env(SCRIPTS_DIR)/openroad/or_opendp.tcl |& tee $::env(TERMINAL_OUTPUT) $::env(opendp_log_file_tag)_openroad.log
TIMER::timer_stop
exec echo "[TIMER::get_runtime]" >> $::env(opendp_log_file_tag)_runtime.txt
+ if {![catch {eval exec grep -q "FAIL" $::env(opendp_log_file_tag).log}]} {
+ puts "Error: Check $::env(opendp_log_file_tag).log"
+ exit 1
+ }
set_def $::env(SAVE_DEF)
}
diff --git a/scripts/tmp.magicrc b/scripts/tmp.magicrc
new file mode 100644
index 0000000..323515c
--- /dev/null
+++ b/scripts/tmp.magicrc
@@ -0,0 +1,53 @@
+puts stdout "Sourcing design .magicrc for technology EFS8A ..."
+
+# Put grid on 0.005 pitch. This is important, as some commands don't
+# rescale the grid automatically (such as lef read?).
+
+#set scalefac [tech lambda]
+if {[lindex [tech lambda] 1] < 2} {
+ scalegrid 1 2
+}
+
+drc off
+# drc euclidean on
+
+#set PDKPATH "${PDK_ROOT}/pdks/ef-skywater-s8/EFS8A"
+
+# loading technology
+tech load $PDKPATH/libs.tech/magic/current/EFS8A.tech
+
+
+# load techlef ?
+lef read ${TECH_LEF}
+
+# load device generator
+source $PDKPATH/libs.tech/magic/current/EFS8A.tcl
+
+# load bind keys (optional)
+source $PDKPATH/libs.tech/magic/current/EFS8A-BindKeys
+
+# set units to lambda grid
+snap lambda
+
+# add path to reference cells
+#set MAGPATH "${PDKPATH}/libs.ref/maglef"
+addpath ${MAGPATH}/primdev
+addpath ${MAGPATH}/s8_osu130
+addpath ${MAGPATH}/efs8hd
+addpath ${MAGPATH}/efs8_pads
+#addpath ${MAGPATH}/s8fmlt
+#addpath ${MAGPATH}/s8iom0
+#addpath ${MAGPATH}/scs8hd
+#addpath ${MAGPATH}/scs8hdll
+#addpath ${MAGPATH}/scs8hvl
+#addpath ${MAGPATH}/scs8hs
+#addpath ${MAGPATH}/scs8ms
+#addpath ${MAGPATH}/scs8ls
+#addpath ${MAGPATH}/scs8lp
+
+# add path to GDS cells
+
+# add path to IP from catalog. This procedure defined in the PDK script.
+catch {magic::query_mylib_ip}
+# add path to local IP from user design space. Defined in the PDK script.
+catch {magic::query_my_projects}