Skip to content

Commit 76a3f87

Browse files
Merge branch 'main' into cocotb
2 parents f81d9f7 + 8a1fa21 commit 76a3f87

File tree

5 files changed

+175
-190
lines changed

5 files changed

+175
-190
lines changed

.github/workflows/user_project_ci.yml

Lines changed: 97 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -8,93 +8,100 @@ on:
88
workflow_dispatch:
99

1010
jobs:
11-
mpw_precheck_sky130A:
12-
timeout-minutes: 720
13-
runs-on: ubuntu-latest
14-
steps:
15-
- uses: actions/checkout@v2
16-
17-
- name: Set up QEMU
18-
uses: docker/setup-qemu-action@v1
19-
20-
- name: Set up Docker Buildx
21-
uses: docker/setup-buildx-action@v1
22-
23-
- name: Export PDK ROOT
24-
run: |
25-
echo "PDK_ROOT=/home/runner/work/pdk" >> $GITHUB_ENV
26-
27-
- name: Export PDKPATH
28-
run: echo "PDKPATH=/home/runner/work/pdk/sky130A" >> $GITHUB_ENV
29-
30-
- name: Download PDK
31-
run: |
32-
MPW_TAG=main CARAVEL_LITE=0 make install
33-
make pdk-with-volare
34-
35-
- name: Run MPW-Precheck
36-
run: |
37-
export INPUT_DIRECTORY=$(pwd)
38-
export PRECHECK_ROOT=$INPUT_DIRECTORY/mpw_precheck
39-
export OUTPUT_DIRECTORY=$INPUT_DIRECTORY/mpw_precheck_result
40-
export OUTPUT=$OUTPUT_DIRECTORY/logs/precheck.log
41-
git clone --depth=1 -b mpw-7a https://github.com/efabless/mpw_precheck.git
42-
docker run -v "$PRECHECK_ROOT":"$PRECHECK_ROOT" -v "$INPUT_DIRECTORY":"$INPUT_DIRECTORY" -v "${{ env.PDK_ROOT }}":"${{ env.PDK_ROOT }}" -e INPUT_DIRECTORY="$INPUT_DIRECTORY" -e PDK_ROOT="${{ env.PDK_ROOT }}" -e PDKPATH="${{ env.PDKPATH }}" -u $(id -u "$USER"):$(id -g "$USER") efabless/mpw_precheck:latest bash -c "cd $PRECHECK_ROOT; python3 mpw_precheck.py --input_directory $INPUT_DIRECTORY --pdk_path ${{ env.PDKPATH }} --output_directory $OUTPUT_DIRECTORY license makefile consistency xor magic_drc klayout_beol klayout_feol klayout_met_min_ca_density klayout_offgrid klayout_pin_label_purposes_overlapping_drawing klayout_zeroarea"
43-
cnt=$(grep -c "All Checks Passed" "$OUTPUT")
44-
if ! [[ $cnt ]]; then cnt=0; fi
45-
if [[ $cnt -eq 1 ]]; then exit 0; fi
46-
exit 2
47-
48-
- name: upload failure logs
49-
if: failure()
50-
uses: actions/upload-artifact@v2
51-
with:
52-
name: error
53-
path: |
54-
/home/runner/work/caravel_user_project/caravel_user_project/mpw_precheck_result/logs/*
55-
56-
mpw_precheck_sky130B:
57-
timeout-minutes: 720
58-
runs-on: ubuntu-latest
59-
steps:
60-
- uses: actions/checkout@v2
61-
62-
- name: Set up QEMU
63-
uses: docker/setup-qemu-action@v1
64-
65-
- name: Set up Docker Buildx
66-
uses: docker/setup-buildx-action@v1
67-
68-
- name: Export PDK ROOT
69-
run: |
70-
echo "PDK_ROOT=/home/runner/work/pdk" >> $GITHUB_ENV
71-
72-
- name: Export PDKPATH
73-
run: echo "PDKPATH=/home/runner/work/pdk/sky130B" >> $GITHUB_ENV
74-
75-
- name: Download PDK
76-
run: |
77-
MPW_TAG=main CARAVEL_LITE=0 make install
78-
make pdk-with-volare
79-
80-
- name: Run MPW-Precheck
81-
run: |
82-
export INPUT_DIRECTORY=$(pwd)
83-
export PRECHECK_ROOT=$INPUT_DIRECTORY/mpw_precheck
84-
export OUTPUT_DIRECTORY=$INPUT_DIRECTORY/mpw_precheck_result
85-
export OUTPUT=$OUTPUT_DIRECTORY/logs/precheck.log
86-
git clone --depth=1 -b mpw-7a https://github.com/efabless/mpw_precheck.git
87-
docker run -v "$PRECHECK_ROOT":"$PRECHECK_ROOT" -v "$INPUT_DIRECTORY":"$INPUT_DIRECTORY" -v "${{ env.PDK_ROOT }}":"${{ env.PDK_ROOT }}" -e INPUT_DIRECTORY="$INPUT_DIRECTORY" -e PDK_ROOT="${{ env.PDK_ROOT }}" -e PDKPATH="${{ env.PDKPATH }}" -u $(id -u "$USER"):$(id -g "$USER") efabless/mpw_precheck:latest bash -c "cd $PRECHECK_ROOT; python3 mpw_precheck.py --input_directory $INPUT_DIRECTORY --pdk_path ${{ env.PDKPATH }} --output_directory $OUTPUT_DIRECTORY license makefile consistency xor magic_drc klayout_beol klayout_feol klayout_met_min_ca_density klayout_offgrid klayout_pin_label_purposes_overlapping_drawing klayout_zeroarea"
88-
cnt=$(grep -c "All Checks Passed" "$OUTPUT")
89-
if ! [[ $cnt ]]; then cnt=0; fi
90-
if [[ $cnt -eq 1 ]]; then exit 0; fi
91-
exit 2
92-
93-
- name: upload failure logs
94-
if: failure()
95-
uses: actions/upload-artifact@v2
96-
with:
97-
name: error
98-
path: |
99-
/home/runner/work/caravel_user_project/caravel_user_project/mpw_precheck_result/logs/*
100-
11+
build-pdk:
12+
runs-on: ubuntu-latest
13+
name: Build and Cache PDK
14+
steps:
15+
- uses: actions/checkout@v2
16+
17+
- name: Set up QEMU
18+
uses: docker/setup-qemu-action@v1
19+
20+
- name: Set up Docker Buildx
21+
uses: docker/setup-buildx-action@v1
22+
23+
- name: Export Env Variables
24+
run: |
25+
echo "PDK_ROOT=/home/runner/work/pdk" >> $GITHUB_ENV
26+
27+
- name: Install Dependencies
28+
run: |
29+
sudo mkdir -p ${{ env.PDK_ROOT }}
30+
sudo chown -R $USER:$USER ${{ env.PDK_ROOT }}
31+
make install
32+
make pdk-with-volare
33+
34+
- name: Tarball PDK
35+
run: |
36+
tar -cf /tmp/pdk.tar -C $PDK_ROOT .
37+
38+
- name: Upload PDK Tarball
39+
uses: actions/upload-artifact@v2
40+
with:
41+
name: pdk-tarball
42+
path: /tmp/pdk.tar
43+
44+
user_project_flow:
45+
timeout-minutes: 720
46+
runs-on: ubuntu-latest
47+
strategy:
48+
matrix:
49+
pdk: ["sky130A", "sky130B"]
50+
needs: [build-pdk]
51+
steps:
52+
- uses: actions/checkout@v2
53+
54+
- name: Set up QEMU
55+
uses: docker/setup-qemu-action@v1
56+
57+
- name: Set up Docker Buildx
58+
uses: docker/setup-buildx-action@v1
59+
60+
- name: Export Env Variables
61+
run: |
62+
echo "PDK_ROOT=/home/runner/work/pdk" >> $GITHUB_ENV
63+
echo "PDK=${{ matrix.pdk }}" >> $GITHUB_ENV
64+
echo "PDKPATH=/home/runner/work/pdk/${{ matrix.pdk }}" >> $GITHUB_ENV
65+
66+
67+
- name: Download PDK Tarball
68+
uses: actions/download-artifact@v2
69+
with:
70+
name: pdk-tarball
71+
path: /tmp
72+
73+
- name: Unpack PDK Tarball
74+
run: |
75+
sudo mkdir -p ${{ env.PDK_ROOT }}
76+
sudo chown -R $USER:$USER ${{ env.PDK_ROOT }}
77+
tar -xf /tmp/pdk.tar -C $PDK_ROOT .
78+
79+
- name: Install Dependencies
80+
run: |
81+
make install
82+
make install_mcw
83+
84+
- name: Run Precheck
85+
run: |
86+
export INPUT_DIRECTORY=$(pwd)
87+
export PRECHECK_ROOT=$INPUT_DIRECTORY/mpw_precheck
88+
export OUTPUT_DIRECTORY=$INPUT_DIRECTORY/mpw_precheck_result
89+
export OUTPUT=$OUTPUT_DIRECTORY/logs/precheck.log
90+
export PDKPATH=$PDK_ROOT/sky130A
91+
92+
git clone --depth=1 https://github.com/efabless/mpw_precheck.git
93+
94+
docker run -v "$PRECHECK_ROOT":"$PRECHECK_ROOT" -v "$INPUT_DIRECTORY":"$INPUT_DIRECTORY" -v "${{ env.PDK_ROOT }}":"${{ env.PDK_ROOT }}" -e INPUT_DIRECTORY="$INPUT_DIRECTORY" -e PDK_ROOT="${{ env.PDK_ROOT }}" -e PDKPATH="${{ env.PDKPATH }}" -u $(id -u "$USER"):$(id -g "$USER") efabless/mpw_precheck:latest bash -c "cd $PRECHECK_ROOT; python3 mpw_precheck.py --input_directory $INPUT_DIRECTORY --pdk_path ${{ env.PDKPATH }} --output_directory $OUTPUT_DIRECTORY license makefile consistency xor magic_drc klayout_beol klayout_feol klayout_met_min_ca_density klayout_offgrid klayout_pin_label_purposes_overlapping_drawing klayout_zeroarea lvs"
95+
96+
cnt=$(grep -c "All Checks Passed" "$OUTPUT")
97+
if ! [[ $cnt ]]; then cnt=0; fi
98+
if [[ $cnt -eq 1 ]]; then exit 0; fi
99+
exit 2
100+
101+
- name: Upload Failure Logs
102+
if: failure()
103+
uses: actions/upload-artifact@v2
104+
with:
105+
name: error
106+
path: |
107+
/home/runner/work/caravel_user_project_analog/caravel_user_project_analog/mpw_precheck_result/logs/*

Makefile

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,15 @@ PRECHECK_ROOT?=${HOME}/mpw_precheck
1919
SIM ?= RTL
2020
CUP_ROOT?=$(PWD)
2121

22-
export OPEN_PDKS_COMMIT?=e6f9c8876da77220403014b116761b0b2d79aab4
22+
SKYWATER_COMMIT=f70d8ca46961ff92719d8870a18a076370b85f6c
23+
export OPEN_PDKS_COMMIT?=6d4d11780c40b20ee63cc98e645307a9bf2b2ab8
2324
export PDK?=sky130A
2425
export PDKPATH?=$(PDK_ROOT)/$(PDK)
2526
# Install lite version of caravel, (1): caravel-lite, (0): caravel
2627
CARAVEL_LITE?=1
2728

28-
MPW_TAG ?= mpw-9d
29+
MPW_TAG ?= 2024.09.12-1
30+
export PDK_ROOT?=$(PWD)/dependencies/pdks
2931

3032
ifeq ($(CARAVEL_LITE),1)
3133
CARAVEL_NAME := caravel-lite
@@ -72,6 +74,9 @@ BLOCKS = $(shell cd openlane && find * -maxdepth 0 -type d)
7274
$(BLOCKS): %:
7375
cd openlane && $(MAKE) $*
7476

77+
.PHONY: setup
78+
setup: check_dependencies install check-env install_mcw pdk-with-volare setup-timing-scripts setup-cocotb
79+
7580
# Install caravel
7681
.PHONY: install
7782
install:
@@ -101,7 +106,7 @@ $(LVS_BLOCKS): lvs-% : ./lvs/%/lvs_config.json uncompress check-pdk check-preche
101106
# Update Caravel
102107
.PHONY: update_caravel
103108
update_caravel: check-caravel
104-
cd $(CARAVEL_ROOT)/ && git checkout $(CARAVEL_TAG) && git pull
109+
cd $(CARAVEL_ROOT)/ && git checkout $(CARAVEL_TAG) && git pull origin $(CARAVEL_TAG)
105110

106111
# Uninstall Caravel
107112
.PHONY: uninstall
@@ -176,3 +181,21 @@ check-pdk:
176181
help:
177182
cd $(CARAVEL_ROOT) && $(MAKE) help
178183
@$(MAKE) -pRrq -f $(lastword $(MAKEFILE_LIST)) : 2>/dev/null | awk -v RS= -F: '/^# File/,/^# Finished Make data base/ {if ($$1 !~ "^[#.]") {print $$1}}' | sort | egrep -v -e '^[^[:alnum:]]' -e '^$@$$'
184+
185+
.PHONY: check_dependencies
186+
check_dependencies:
187+
@if [ ! -d "$(PWD)/dependencies" ]; then \
188+
mkdir $(PWD)/dependencies; \
189+
fi
190+
191+
.PHONY: setup-timing-scripts
192+
setup-timing-scripts: $(TIMING_ROOT)
193+
@( cd $(TIMING_ROOT) && git pull )
194+
@#( cd $(TIMING_ROOT) && git fetch && git checkout $(MPW_TAG); )
195+
196+
.PHONY: setup-cocotb
197+
setup-cocotb:
198+
@pip install caravel-cocotb==1.0.0
199+
@(python3 $(PROJECT_ROOT)/verilog/dv/setup-cocotb.py $(CARAVEL_ROOT) $(MCW_ROOT) $(PDK_ROOT) $(PDK) $(PROJECT_ROOT))
200+
@docker pull efabless/dv:latest
201+
@docker pull efabless/dv:cocotb
Lines changed: 32 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,33 @@
11
{
2-
"TOP_SOURCE": "user_analog_project_wrapper",
3-
"TOP_LAYOUT": "$TOP_SOURCE",
4-
"EXTRACT_FLATGLOB": [
5-
""
6-
],
7-
"EXTRACT_ABSTRACT": [
8-
"*__fill_*",
9-
"*__fakediode_*",
10-
"*__tapvpwrvgnd_*"
11-
],
12-
"LVS_FLATTEN": [
13-
""
14-
],
15-
"LVS_NOFLATTEN": [
16-
""
17-
],
18-
"LVS_IGNORE": [
19-
""
20-
],
21-
"LVS_SPICE_FILES": [
22-
"$PDK_ROOT/$PDK/libs.ref/sky130_fd_sc_hd/spice/sky130_ef_sc_hd__decap_12.spice",
23-
"$PDK_ROOT/$PDK/libs.ref/sky130_fd_sc_hd/spice/sky130_fd_sc_hd.spice",
24-
"$PDK_ROOT/$PDK/libs.ref/sky130_fd_sc_hvl/spice/sky130_fd_sc_hvl.spice",
25-
"$UPRJ_ROOT/xschem/user_analog_project_wrapper.spice"
26-
],
27-
"LVS_VERILOG_FILES": [
28-
""
29-
],
30-
"LAYOUT_FILE": "$UPRJ_ROOT/gds/$TOP_LAYOUT.gds"
31-
}
2+
"STD_CELL_LIBRARY": "sky130_fd_sc_hvl",
3+
"INCLUDE_CONFIGS": [
4+
"$LVS_ROOT/tech/$PDK/lvs_config.base.json"
5+
],
6+
"TOP_SOURCE": "user_analog_project_wrapper",
7+
"TOP_LAYOUT": "$TOP_SOURCE",
8+
"EXTRACT_FLATGLOB": [
9+
""
10+
],
11+
"EXTRACT_ABSTRACT": [
12+
""
13+
],
14+
"LVS_FLATTEN": [
15+
""
16+
],
17+
"LVS_NOFLATTEN": [
18+
""
19+
],
20+
"LVS_IGNORE": [
21+
""
22+
],
23+
"LVS_SPICE_FILES_TO_FIX": [
24+
"$UPRJ_ROOT/xschem/user_analog_project_wrapper.spice"
25+
],
26+
"LVS_SPICE_FILES": [
27+
""
28+
],
29+
"LVS_VERILOG_FILES": [
30+
""
31+
],
32+
"LAYOUT_FILE": "$UPRJ_ROOT/gds/user_analog_project_wrapper.gds"
33+
}

verilog/dv/mprj_por/Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,8 @@ hex: ${PATTERN:=.hex}
5050
%.vvp: %_tb.v %.hex
5151
ifeq ($(SIM),RTL)
5252
iverilog $(SIM_DEFINES) -I $(PDK_PATH) \
53-
-I $(CARAVEL_BEHAVIOURAL_MODELS) -I $(CARAVEL_RTL_PATH) \
54-
-I $(UPRJ_BEHAVIOURAL_MODELS) -I $(UPRJ_RTL_PATH) -I $(MCW_ROOT)/verilog/rtl \
53+
-I $(CARAVEL_BEHAVIOURAL_MODELS) -I $(CARAVEL_RTL_PATH) -I $(MCW_ROOT)/verilog/rtl \
54+
-I $(UPRJ_BEHAVIOURAL_MODELS) -I $(UPRJ_RTL_PATH) \
5555
$< -o $@
5656
else
5757
iverilog $(SIM_DEFINES) -DGL -I $(PDK_PATH) \

0 commit comments

Comments
 (0)