[Action] Integrated MPW prechecker

This commit is contained in:
Ganesh Gore 2020-12-05 19:31:32 -07:00
parent 40c131983a
commit 10cab93799
5 changed files with 125 additions and 16 deletions

View File

@ -53,11 +53,16 @@ jobs:
path: open_mpw_precheck
- name: Perform checks with open_mpw_precheck
uses: addnab/docker-run-action@v1
uses: ganeshgore/docker-run-action@1cd63ec
with:
image: goreganesh/open_mpw_prechecker
options: -v ${{github.workspace}}:/usr/local/workspace -w /usr/local/workspace
run: bash ./SOFA-Chips/.github/workflows/perform_precheck.sh
options: >
-v ${{github.workspace}}/open_mpw_precheck:/usr/local/bin
-v ${{github.workspace}}:/usr/local/workspace
-e DEST_DIR=$DEST_DIR
-e SCAN_DIRECTORY=$SCAN_DIRECTORY
--workdir /usr/local/workspace
run: pwd && cd /usr/local/workspace && ls && bash ./SOFA-Chips/.github/workflows/perform_precheck.sh
- name: Deploy files
run: bash ./SOFA-Chips/.github/workflows/sync_repo.sh

View File

@ -16,6 +16,7 @@ on:
push:
paths:
- '.github/**'
- 'SynRepoConfig/**'
- '$SCAN_DIRECTORY'
pull_request:
types: closed
@ -41,11 +42,13 @@ jobs:
repository: efabless/open_mpw_precheck
path: open_mpw_precheck
- name: Perform checks with open_mpw_precheck
uses: addnab/docker-run-action@v1
uses: ganeshgore/docker-run-action@1cd63ec
with:
image: goreganesh/open_mpw_prechecker
options: -v ${{github.workspace}}:/usr/local/workspace -w /usr/local/workspace
run: bash ./SOFA-Chips/.github/workflows/perform_precheck.sh
options: >
-v ${{github.workspace}}/open_mpw_precheck:/usr/local/bin -v ${{github.workspace}}:/usr/local/workspace -e DEST_DIR=$DEST_DIR -e SCAN_DIRECTORY=$SCAN_DIRECTORY --workdir /usr/local/workspace
run: pwd && cd /usr/local/workspace && ls && bash ./SOFA-Chips/.github/workflows/perform_precheck.sh
- name: Deploy files
run: bash ./SOFA-Chips/.github/workflows/sync_repo.sh
- name: Deploy Changes

View File

@ -4,16 +4,41 @@
# Original repo is places ../SOFA-Chips
# for conditional file copy use PROJ_SUFFIX (example SOFA_HD)
echo "============================================="
echo " Not Implemented yet "
echo "============================================="
pwd
ls
ls */*
printenv
# MAGTYPE=mag magic -rcfile ${PDK_ROOT}/sky130A/libs.tech/magic/current/sky130A.magicrc -noc -dnull merge.tcl
cd ./${DEST_DIR}
echo "Running in directory ${pwd}"
cp ../SOFA-Chips/${SCAN_DIRECTORY}/fpga_top_icv_in_design.gds.gz ./gds/
make uncompress
echo "[Info] All files are uncompressed"
# use fpga_top fpga_top_uut
# transform 1 0 0 0 1 0
# box 0 0 2500 3000
# = = = = = = = = = = = = Modify Merge Scripts = = = = = = = = = = = = = = = =
AddLine="use fpga_top fpga_top_uut\n"\
"transform 1 0 0 0 1 0\n"\
"box 0 0 2500 3000"
sed -i "s/<< properties >>/${AddLine}\n<< properties >>/" ./mag/user_project_wrapper.mag
# Running magic to merge fpga_top
MAGTYPE=mag \
magic -rcfile ${PDK_ROOT}/sky130A/libs.tech/magic/current/sky130A.magicrc \
-noconsole -dnull \
../SOFA-Chips/SCRIPT/merge_fpga_top.tcl </dev/null | tee magic_drc.log
echo "[Info] merge fpga-top"
# = = = = = = = = = = = = = Build Caravel = = = = = = = = = = = = = = = = = = =
make ship
echo "[Info] Finished shiping chip"
rm -f gds/caravel.old.gds
# = = = = = = = = = = = = = Perform Open MPW Checks = = = = = = = = = = = = = =
python3 /usr/local/bin/open_mpw_prechecker.py \
--target_path /usr/local/workspace/${DEST_DIR} \
--pdk_root $PDK_ROOT
echo "[Info] Finished MPW Prechecker"
# = = = = = = = Convert DRC Errors to RDB = = = = = = = = = = = = = = = = = = =
if test -f "./checks/caravel.magic.drc"; then
python3 ../SOFA-Chips/SCRIPT/magic_drc_to_rdb.py \
-magic_drc_in ./checks/caravel.magic.drc
-rdb_out ./checks/caravel.magic.rdb
fi

View File

@ -0,0 +1,62 @@
import os
import sys
import re
import shutil
import argparse
import math
def formatter(prog): return argparse.HelpFormatter(prog, max_help_position=60)
parser = argparse.ArgumentParser(formatter_class=formatter)
# Mandatory arguments
parser.add_argument('--magic_drc_in', type=str, default="./checks/caravel.magic.drc")
parser.add_argument('--rdb_out', type=str, default="./checks/caravel.magic.rdb")
args = parser.parse_args()
data, drc = True, False
def main():
try:
fp = open(args.magic_drc_in)
lineType = data
drcRule = ""
with open(args.rdb_out,"w") as fpw:
for line in fp.readlines():
if ("[INFO]" in line) or (len(line.strip())==0):
continue
elif ("caravel" in line):
fpw.write("caravel 100\n")
elif "------" in line:
lineType = not lineType
elif (lineType==drc):
drcRule = line.strip().split("(")
drcRule = [drcRule,"UnknownRule"] if len(drcRule) <2 else drcRule
fpw.write(f"r_0_{drcRule[1][:-1]}\n")
fpw.write(f"500 500 2 Nov 29 03:26:39 2020\n")
fpw.write(f"Rule File Pathname: {args.magic_drc_in}\n")
fpw.write(f"{drcRule[1][:-1]}: {drcRule[0]}\n")
drcNumber = 1
elif (lineType==data):
cord = [int(float(i))*100 for i in line.strip().split(" ")]
fpw.write(f"p {drcNumber} 4\n")
fpw.write(f"{cord[0]} {cord[1]}\n")
fpw.write(f"{cord[2]} {cord[1]}\n")
fpw.write(f"{cord[2]} {cord[3]}\n")
fpw.write(f"{cord[0]} {cord[3]}\n")
drcNumber+=1
print(f"Generated RDB at {args.rdb_out}")
except IOError:
print("Magic DRC Error file not found {args.magic_drc_in}")
except:
print("Failed to generate RDB file")
finally:
fp.close()
if __name__ == "__main__":
main()

14
SCRIPT/merge_fpga_top.tcl Normal file
View File

@ -0,0 +1,14 @@
drc off
gds readonly true
gds rescale false
gds merge yes
gds read ./gds/fpga_top_icv_in_design.gds
load ./mag/user_project_wrapper.mag
save user_project_wrapper
select top cell
gds write ./gds/user_project_wrapper.gds
exit