-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathMakefile
142 lines (113 loc) · 4.39 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
# Copyright 2024 Tobias Senti
# Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0
PROJECT ?= servisia
SRC ?= ../servisia/out/servisia.v
PCB_WIDTH ?= 300
PCB_HEIGHT ?= 300
CORNER_GROUP ?= CMOS_5V
SYNTH_PROCESS ?= Typical
SCAN_CHAIN ?= 1
# Verible Flags
VERIBLE_FLAGS := --rules=-module-filename,-line-length
# Find Source Files
TCL_FILES := $(shell find ./ -name '*.tcl')
PY_FILES := $(shell find ./ ! -path "*/lef_def_parser/*" -name '*.py')
YAML_FILES := $(shell find ./ -name '*.yml')
JSON_FILES := $(shell find ./ -name '*.json')
VERILOG_FILES := $(shell find ./ -name '*.v')
SVERILOG_FILES := $(shell find ./ -name '*.sv')
MARKDOWN_FILES := $(shell find ./ -name '*.md')
# Get File Names
TCL_FILE_NAME := $(basename $(TCL_FILES))
PY_FILE_NAME := $(basename $(PY_FILES))
YAML_FILE_NAME := $(basename $(YAML_FILES))
JSON_FILE_NAME := $(basename $(JSON_FILES))
VERILOG_FILE_NAME := $(basename $(VERILOG_FILES))
SVERILOG_FILE_NAME := $(basename $(SVERILOG_FILES))
MARKDOWN_FILE_NAME := $(basename $(MARKDOWN_FILES))
.PHONY: all clean lint-all lint-yaml lint-tcl lint-python lint-json lint-verilog lint-markdown
all: gen-pdk
out/testboard.v: examples/testboard.v
mkdir -p out
cp $^ $@
testboard: PROJECT := testboard
testboard: SRC := out/testboard.v
testboard: PCB_WIDTH := 100
testboard: PCB_HEIGHT := 100
testboard: out/testboard.v chip_gui
.setup:
pip install -r requirements.txt --break-system-packages
touch .setup
pdk/.pdk: .setup utils/*.py config/*.json config/libraries/*.json templates/*.template
mkdir -p pdk
mkdir -p pdk/kicad
mkdir -p pdk/kicad/footprints
mkdir -p pdk/lef
mkdir -p pdk/lib
mkdir -p pdk/openroad
mkdir -p pdk/verilog
mkdir -p pdk/yosys
touch pdk/.pdk
python3 utils/generate.py
openroad/out: config/merge_cells/*.v pdk/.pdk
mkdir -p openroad/out
cd openroad && ./merge_cells.sh ${CORNER_GROUP}
openroad-setup: openroad/out
gen-pdk: pdk/.pdk openroad/out
synth: gen-pdk
mkdir -p out
mkdir -p yosys/reports
echo "set TOP "${PROJECT}"\nset SRC "${SRC}"\nset CORNER_GROUP "${CORNER_GROUP}"\nset PROCESS "${SYNTH_PROCESS}"\nsource yosys/synth.tcl" | yosys -C
cd openroad && (echo "set design_name ${PROJECT}\nset CORNER_GROUP "${CORNER_GROUP}"\nset SCAN_CHAIN ${SCAN_CHAIN}\nsource post_synth.tcl" | openroad)
rm -rf slpp_all
#rm -rf out/temp.v
dft:
rm -rf out/dft
mkdir -p out/dft
cd openroad && (echo "set design_name ${PROJECT}\nset CORNER_GROUP "${CORNER_GROUP}"\nsource dft_prepare.tcl" | openroad)
fault cut -d DFF_74LVC1G175 out/dft/${PROJECT}.dft.v -o out/dft/${PROJECT}.cut.v
cd out/dft && cat ../../pdk/verilog/74lvc1g.v > cells.sv
cd out/dft && cat ../../verilog_models/DS9808.sv >> cells.sv
cd out/dft && fault -c cells.sv -v 1 -r 1 -m 95 --ceiling 1 --clock clk_i ${PROJECT}.cut.v
chip: gen-pdk
cd openroad && (echo "set design_name ${PROJECT}\nset CORNER_GROUP "${CORNER_GROUP}"\nset PCB_WIDTH "${PCB_WIDTH}"\nset PCB_HEIGHT "${PCB_HEIGHT}"\nset SCAN_CHAIN "${SCAN_CHAIN}"\nsource chip.tcl" | openroad -threads max -log openroad.log)
chip_gui: gen-pdk
echo "set design_name ${PROJECT}\nset CORNER_GROUP "${CORNER_GROUP}"\nset PCB_WIDTH "${PCB_WIDTH}"\nset PCB_HEIGHT "${PCB_HEIGHT}"\nset SCAN_CHAIN "${SCAN_CHAIN}"\nsource chip.tcl" > openroad/start.tcl
cd openroad && openroad -threads max -gui -log openroad.log start.tcl
pcb: gen-pdk
python3 utils/def2pcb.py openroad/out/${PROJECT}.final.def openroad/out/merge_cell_*.def
open_pcb:
pcbnew out/${PROJECT}.final.kicad_pcb
lint-all: lint-yaml lint-tcl lint-python lint-json lint-verilog lint-markdown
lint-yaml: $(YAML_FILE_NAME)
lint-tcl: $(TCL_FILE_NAME)
lint-python: $(PY_FILE_NAME)
lint-json: $(JSON_FILE_NAME)
lint-verilog: $(VERILOG_FILE_NAME) $(SVERILOG_FILE_NAME)
lint-markdown: $(MARKDOWN_FILE_NAME)
$(YAML_FILE_NAME): $(YAML_FILES)
yamllint --no-warnings [email protected]
$(TCL_FILE_NAME): $(TCL_FILES)
tclint [email protected]
$(PY_FILE_NAME): $(PY_FILES)
./utils/pylint.sh [email protected]
$(JSON_FILE_NAME): $(JSON_FILES)
jsonlint -q [email protected]
$(VERILOG_FILE_NAME): $(VERILOG_FILES)
verible-verilog-lint $(VERIBLE_FLAGS) [email protected]
$(SVERILOG_FILE_NAME): $(SVERILOG_FILES)
verible-verilog-lint $(VERIBLE_FLAGS) [email protected]
$(MARKDOWN_FILE_NAME): $(MARKDOWN_FILES)
clean:
rm -rf .setup
rm -rf out
rm -rf slpp_all
rm -rf pdk
rm -rf openroad/out
rm -rf openroad/*.log
rm -rf openroad/*.rpt
rm -rf openroad/start.tcl
rm -rf utils/lef_def_parser/__pycache__
rm -rf yosys/reports