add synthesis-yosys.mk with ilang substituted
authorLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Fri, 14 Feb 2020 21:02:00 +0000 (21:02 +0000)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Fri, 14 Feb 2020 21:02:00 +0000 (21:02 +0000)
mk/synthesis-yosys.mk [new file with mode: 0644]

diff --git a/mk/synthesis-yosys.mk b/mk/synthesis-yosys.mk
new file mode 100644 (file)
index 0000000..dffe7ed
--- /dev/null
@@ -0,0 +1,53 @@
+
+ $(info Logical synthesis is using Yosys.)
+
+ ifeq ($(YOSYS_TOP),)
+   $(error YOSYS_TOP has not been set)
+ endif
+
+ ifeq ($(YOSYS_FLATTEN),)
+   YOSYS_FLATTEN = No
+ endif
+
+
+# -------------------------------------------------------------------
+# Yosys Rules (pattern matching).
+
+ NETLISTS_NOCORONA = $(foreach netlist,$(NETLISTS)         ,$(shell echo $(netlist) | sed 's:.*_model::'))
+ NETLISTS_NOMODELS = $(foreach netlist,$(NETLISTS_NOCORONA),$(shell echo $(netlist) | sed 's:.*corona::'))
+ VLOG_MODULE       = $(firstword $(NETLISTS_NOMODELS))
+ NETLISTS_VST      = $(shell echo $(VLOG_MODULE) | tr '[:upper:]' '[:lower:]').vst 
+ NETLISTS_SYNTH    = $(foreach netlist,$(NETLISTS_NOMODELS), $(shell echo $(netlist) | tr '[:upper:]' '[:lower:]'))
+ CLEAN_SYNTHESIS   = $(addsuffix .vst,$(NETLISTS_SYNTH)) $(VLOG_MODULE).blif $(VLOG_MODULE).tcl
+
+ $(info | Verilog file & top model: "$(VLOG_MODULE)")
+ $(info | Generated secondary VHDL structural files (vst):)
+ $(foreach netlist,$(NETLISTS_SYNTH),$(info |  - "$(netlist)"))
+
+
+# Any file put in "./non_generated/" will take precedence over the
+# generation.
+
+%.blif: ./non_generated/%.blif ;  cp $< .
+
+
+%.blif: %.v
+        rm -f $*.tcl; \
+        echo "set ilang_file $*.v"                       >> $*.tcl; \
+        echo "set ilang_top  $*"                         >> $*.tcl; \
+        echo "set liberty_file $(LIBERTY_FILE)"            >> $*.tcl; \
+        echo "yosys read_ilang          \$$ilang_file" >> $*.tcl; \
+        echo "yosys hierarchy -check -top \$$ilang_top"  >> $*.tcl; \
+        echo "yosys synth            -top \$$ilang_top"  >> $*.tcl; \
+        if [ "$(YOSYS_FLATTEN)" = "Yes" ]; then                       \
+     echo "yosys flatten               \$$ilang_top"  >> $*.tcl; \
+     echo "yosys hierarchy        -top \$$ilang_top"  >> $*.tcl; \
+        fi;                                                           \
+        echo "yosys dfflibmap -liberty    \$$liberty_file" >> $*.tcl; \
+        echo "yosys abc       -liberty    \$$liberty_file" >> $*.tcl; \
+        echo "yosys clean"                                 >> $*.tcl; \
+        echo "yosys write_blif $*.blif"                    >> $*.tcl;
+        yosys -c $*.tcl
+
+$(addsuffix .vst,$(NETLISTS_SYNTH)): $(VLOG_MODULE).blif
+       -@$(call run_if_older,$@,$(VLOG_MODULE).blif,$(call scl_cols,eval `$(CORIOLIS_TOP)/etc/coriolis2/coriolisEnv.py $(DEBUG_OPTION)`; $(BLIF2VST) $(VST_FLAGS) --cell=$(VLOG_MODULE)) )