Skip to content

Merge pull request #1 from faramire/docu-fix #3

Merge pull request #1 from faramire/docu-fix

Merge pull request #1 from faramire/docu-fix #3

Workflow file for this run

name: gds
# either manually started, or on a schedule
on: [ push, workflow_dispatch ]
permissions:
contents: write
pages: write
id-token: write
jobs:
gds:
env:
OPENLANE_IMAGE_NAME: efabless/openlane:2022.07.02_01.38.08
OPENLANE_ROOT: /home/runner/openlane
PDK_ROOT: /home/runner/pdk
PDK: sky130B
# ubuntu
runs-on: ubuntu-latest
steps:
# need the repo checked out
- name: checkout repo
uses: actions/checkout@v3
# build PDK and fetch OpenLane
- name: pdk & caravel
run: |
cd $HOME
git clone https://github.com/efabless/caravel_user_project.git -b mpw-7a
cd caravel_user_project
make setup
# need python
- name: setup python
uses: actions/setup-python@v4
with:
python-version: '3.10'
- run: pip install requests PyYAML
# fetch the Verilog from Wokwi API
- name: fetch Verilog and build config
run: ./configure.py --create-user-config
# run OpenLane to build the GDS
- name: make GDS
run: >
docker run --rm
-v $OPENLANE_ROOT:/openlane
-v $PDK_ROOT:$PDK_ROOT
-v $(pwd):/work
-e PDK_ROOT=$PDK_ROOT
-u $(id -u $USER):$(id -g $USER)
$OPENLANE_IMAGE_NAME
/bin/bash -c "./flow.tcl -verbose 2 -overwrite -design /work/src -run_path /work/runs -tag wokwi"
# for debugging, show all the files
- name: show files
run: find runs/wokwi/
# print some routing stats
- name: add summary
run: ./configure.py --get-stats >> $GITHUB_STEP_SUMMARY
# print some cell stats
- name: cell usage summary
run: |
git clone https://github.com/TinyTapeout/sssummarizer
sssummarizer/sssummarizer.py --gl runs/wokwi/results/final/verilog/gl/*.v --print-category >> $GITHUB_STEP_SUMMARY
- name: populate src cache
uses: actions/cache@v3
with:
path: src
key: ${{ runner.os }}-src-${{ github.run_id }}
- name: populate runs cache
uses: actions/cache@v3
with:
path: runs
key: ${{ runner.os }}-runs-${{ github.run_id }}
svg:
needs: gds
runs-on: ubuntu-latest
steps:
- name: checkout repo
uses: actions/checkout@v3
- name: setup python
uses: actions/setup-python@v4
with:
python-version: '3.10'
- name: restore runs cache
uses: actions/cache@v3
with:
path: runs
key: ${{ runner.os }}-runs-${{ github.run_id }}
- name: create svg
run: |
python -m pip install gdstk
python << EOF
import gdstk
import pathlib
gds = sorted(pathlib.Path('runs').glob('wokwi/results/final/gds/*.gds'))
library = gdstk.read_gds(gds[-1])
top_cells = library.top_level()
top_cells[0].write_svg('gds_render.svg')
EOF
- name: populate svg cache
uses: actions/cache@v3
with:
path: 'gds_render.svg'
key: ${{ runner.os }}-svg-${{ github.run_id }}
viewer:
needs: gds
runs-on: ubuntu-latest
steps:
- name: checkout GDS2glTF repo
uses: actions/checkout@v3
with:
repository: mbalestrini/GDS2glTF
- name: setup python
uses: actions/setup-python@v4
with:
python-version: '3.10'
- name: restore runs cache
uses: actions/cache@v3
with:
path: runs
key: ${{ runner.os }}-runs-${{ github.run_id }}
- name: gds2gltf
run: |
python -m pip install numpy gdspy triangle pygltflib
cp runs/wokwi/results/final/gds/*.gds tinytapeout.gds
python3 gds2gltf.py tinytapeout.gds
- name: populate viewer cache
uses: actions/cache@v3
with:
path: 'tinytapeout.gds.gltf'
key: ${{ runner.os }}-viewer-${{ github.run_id }}
artifact:
needs:
- gds
runs-on: ubuntu-latest
steps:
- name: restore src cache
uses: actions/cache@v3
with:
path: src
key: ${{ runner.os }}-src-${{ github.run_id }}
- name: restore runs cache
uses: actions/cache@v3
with:
path: runs
key: ${{ runner.os }}-runs-${{ github.run_id }}
- name: upload artifact
uses: actions/upload-artifact@v3
with:
# path depends on the tag and the module name
name: GDS
path: |
src/*
runs/wokwi/results/final/*
runs/wokwi/reports/metrics.csv
runs/wokwi/reports/synthesis/1-synthesis.AREA 0.stat.rpt
pages:
needs:
- svg
- viewer
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
outputs:
page_url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
steps:
- name: restore svg cache
uses: actions/cache@v3
with:
path: 'gds_render.svg'
key: ${{ runner.os }}-svg-${{ github.run_id }}
- name: restore viewer cache
uses: actions/cache@v3
with:
path: 'tinytapeout.gds.gltf'
key: ${{ runner.os }}-viewer-${{ github.run_id }}
- name: generate redirect to viewer
run: |
cat << EOF >> index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Redirecting to GDS Viewer...</title>
</head>
<body>
<script>
location.href = "https://gds-viewer.tinytapeout.com/?model=" + encodeURIComponent(location.href + '/tinytapeout.gds.gltf');
</script>
</body>
</html>
EOF
- name: Setup Pages
uses: actions/configure-pages@v2
- name: Upload artifact
uses: actions/upload-pages-artifact@v1
with:
path: '.'
- name: Deploy to GitHub Pages
id: deployment
uses: actions/[email protected]
preview:
needs: pages
runs-on: ubuntu-latest
steps:
- name: add gds preview
run: |
PAGE_URL=${{ needs.pages.outputs.page_url }}
PAGE_URL=$(echo "$PAGE_URL" | sed -e 's/\/$//')
cat << EOF >> $GITHUB_STEP_SUMMARY
# layout
![svg]($PAGE_URL/gds_render.svg)
# viewer
[open preview](https://gds-viewer.tinytapeout.com/?model=$PAGE_URL/tinytapeout.gds.gltf)
EOF