Add support for reading files using uhdm-plugin

Signed-off-by: Kamil Rakoczy <krakoczy@antmicro.com>
diff --git a/environment.yml b/environment.yml
index a8437be..2713ff2 100644
--- a/environment.yml
+++ b/environment.yml
@@ -14,6 +14,7 @@
   - litex-hub::vtr-optimized
   - litex-hub::yosys
   - litex-hub::symbiflow-yosys-plugins
+  - litex-hub::surelog
   - litex-hub::zachjs-sv2v=0.0.5_0025_ge9f9696=20201120_205532
   - cmake
   - make
diff --git a/xc/xc7/tests/install_test/CMakeLists.txt b/xc/xc7/tests/install_test/CMakeLists.txt
index e1ae7b2..117a15d 100644
--- a/xc/xc7/tests/install_test/CMakeLists.txt
+++ b/xc/xc7/tests/install_test/CMakeLists.txt
@@ -2,7 +2,7 @@
 
 get_target_property_required(XC7FRAMES2BIT env XC7FRAMES2BIT)
 
-function(add_binary_test test_name part_name device board)
+function(add_binary_test test_name part_name device board surelog_cmd)
 	add_test(NAME ${test_name}
 		COMMAND ${CMAKE_COMMAND} -E env
 		PATH=${INSTALLATION_DIR_BIN}:$ENV{PATH}
@@ -10,11 +10,15 @@
 		PYTHONPATH=${PRJXRAY_DIR}:${PRJXRAY_DIR}/third_party/fasm
 		DATABASE_DIR=${PRJXRAY_DB_DIR}
 		FRAMES2BIT=${XC7FRAMES2BIT}
+		SURELOG_CMD=${surelog_cmd}
 		make PARTNAME=${part_name} DEVICE=${device} BOARD=${board}
 		WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
 endfunction()
 
 
-add_binary_test(binary_toolchain_test_xc7_50t xc7a35tcpg236-1 xc7a50t_test basys3)
-add_binary_test(binary_toolchain_test_xc7_100t xc7a100tcsg324-1 xc7a100t_test arty-100t)
-add_binary_test(binary_toolchain_test_xc7_200t xc7a200tsbg484-1 xc7a200t_test nexys_video)
+add_binary_test(binary_toolchain_test_xc7_50t xc7a35tcpg236-1 xc7a50t_test basys3 "")
+add_binary_test(binary_toolchain_test_xc7_100t xc7a100tcsg324-1 xc7a100t_test arty-100t "")
+add_binary_test(binary_toolchain_test_xc7_200t xc7a200tsbg484-1 xc7a200t_test nexys_video "")
+add_binary_test(binary_toolchain_test_xc7_50t_surelog xc7a35tcpg236-1 xc7a50t_test basys3 "-parse -DSYNTHESIS")
+add_binary_test(binary_toolchain_test_xc7_100t_surelog xc7a100tcsg324-1 xc7a100t_test arty-100t "-parse -DSYNTHESIS")
+add_binary_test(binary_toolchain_test_xc7_200t_surelog xc7a200tsbg484-1 xc7a200t_test nexys_video "-parse -DSYNTHESIS")
diff --git a/xc/xc7/tests/install_test/Makefile b/xc/xc7/tests/install_test/Makefile
index 564d1b7..82eacd1 100644
--- a/xc/xc7/tests/install_test/Makefile
+++ b/xc/xc7/tests/install_test/Makefile
@@ -10,13 +10,19 @@
 BUILDDIR:=build_${BOARD}
 ADDITIONAL_VPR_OPTIONS="--seed 1024"
 
+# Determine if we should use uhdm-plugin to read sources
+ifneq (${SURELOG_CMD},)
+	SURELOG_OPT := -s ${SURELOG_CMD}
+	BUILDDIR = build_${BOARD}_surelog
+endif
+
 all: ${BUILDDIR}/${TOP}.bit
 
 ${BUILDDIR}:
 	mkdir ${BUILDDIR}
 
 ${BUILDDIR}/${TOP}.eblif: | ${BUILDDIR}
-	cd ${BUILDDIR} && symbiflow_synth -t ${TOP} -v ${VERILOG} -d ${BITSTREAM_DEVICE} -p ${PARTNAME} -x ${XDC}
+	cd ${BUILDDIR} && symbiflow_synth -t ${TOP} ${SURELOG_OPT} -v ${VERILOG} -d ${BITSTREAM_DEVICE} -p ${PARTNAME} -x ${XDC}
 
 ${BUILDDIR}/${TOP}.net: ${BUILDDIR}/${TOP}.eblif
 	cd ${BUILDDIR} && symbiflow_pack -e ${TOP}.eblif -d ${DEVICE} -a ${ADDITIONAL_VPR_OPTIONS}
diff --git a/xc/xc7/toolchain_wrappers/symbiflow_synth b/xc/xc7/toolchain_wrappers/symbiflow_synth
index 11996f5..5d2e4b8 100755
--- a/xc/xc7/toolchain_wrappers/symbiflow_synth
+++ b/xc/xc7/toolchain_wrappers/symbiflow_synth
@@ -18,12 +18,14 @@
 TOP=top
 DEVICE="*"
 PART=""
+SURELOG_CMD=()
 
 VERILOGLIST=0
 XDCLIST=0
 TOPNAME=0
 DEVICENAME=0
 PARTNAME=0
+SURELOG=0
 
 for arg in $@; do
 	echo $arg
@@ -35,6 +37,7 @@
 			TOPNAME=1
 			DEVICENAME=0
 			PARTNAME=0
+			SURELOG=0
 			;;
 		-x|--xdc)
 			VERILOGLIST=0
@@ -42,6 +45,7 @@
 			TOPNAME=0
 			DEVICENAME=0
 			PARTNAME=0
+			SURELOG=0
 			;;
 		-v|--verilog)
 			VERILOGLIST=1
@@ -49,6 +53,7 @@
 			TOPNAME=0
 			DEVICENAME=0
 			PARTNAME=0
+			SURELOG=0
 			;;
 		-d|--device)
 			VERILOGLIST=0
@@ -56,6 +61,7 @@
 			TOPNAME=0
 			DEVICENAME=1
 			PARTNAME=0
+			SURELOG=0
 			;;
 		-p|--part)
 			VERILOGLIST=0
@@ -63,6 +69,15 @@
 			TOPNAME=0
 			DEVICENAME=0
 			PARTNAME=1
+			SURELOG=0
+			;;
+		-s|--surelog)
+			VERILOGLIST=0
+			XDCLIST=0
+			TOPNAME=0
+			DEVICENAME=0
+			PARTNAME=0
+			SURELOG=1
 			;;
 		*)
 			if [ $VERILOGLIST -eq 1 ]; then
@@ -75,9 +90,11 @@
 				DEVICE=$arg
 			elif [ $PARTNAME -eq 1 ]; then
 				PART=$arg
+			elif [ $SURELOG -eq 1 ]; then
+				SURELOG_CMD+=($arg)
 			else
 				echo "Usage: synth [-t|--top <top module name> -v|--verilog <Verilog files list> [-x|--xdc <XDC files list>]"
-				echo "             [-d|--device <device type (e.g. artix7)>] [-p|--part <part name>]"
+				echo "             [-d|--device <device type (e.g. artix7)>] [-p|--part <part name>] [-s|--surelog] <parameters to surelog>"
 				echo "note: device and part parameters are required if xdc is passed"
 				exit 1
 			fi
@@ -104,7 +121,10 @@
 export OUT_FASM_EXTRA=${TOP}_fasm_extra.fasm
 export PYTHON3=${PYTHON3:=$(which python3)}
 LOG=${TOP}_synth.log
-
+if [ -z "$SURELOG_CMD" ]; then
 yosys -p "tcl ${SYNTH_TCL_PATH}" -l $LOG ${VERILOG_FILES[*]}
+else
+yosys -p "plugin -i uhdm" -p "read_verilog_with_uhdm ${SURELOG_CMD[*]} ${VERILOG_FILES[*]}" -p "tcl ${SYNTH_TCL_PATH}" -l $LOG
+fi
 python3 ${SPLIT_INOUTS} -i ${OUT_JSON} -o ${SYNTH_JSON}
 yosys -p "read_json $SYNTH_JSON; tcl ${CONV_TCL_PATH}"