minitests: use edalize to run minitests

Signed-off-by: Piotr Binkowski <pbinkowski@antmicro.com>
diff --git a/minitests/util/runme.py b/minitests/util/runme.py
new file mode 100644
index 0000000..1b56b8f
--- /dev/null
+++ b/minitests/util/runme.py
@@ -0,0 +1,58 @@
+import edalize
+import os
+
+work_root = 'build'
+
+pins = {
+    'clk': os.environ['XRAY_PIN_00'],
+    'stb': os.environ['XRAY_PIN_01'],
+    'di':  os.environ['XRAY_PIN_02'],
+    'do':  os.environ['XRAY_PIN_03'],
+}
+
+xdc_file = os.path.realpath(os.path.join(work_root, 'top.xdc'))
+pre_imp_file = os.path.realpath(os.path.join(work_root, 'pre.tcl'))
+post_imp_file = os.path.realpath(os.path.join(work_root, 'post.tcl'))
+
+os.makedirs(work_root, exist_ok=True)
+
+synth_tool = 'yosys' if 'USE_YOSYS' in os.environ else 'vivado'
+
+with open(xdc_file, 'w') as f:
+    f.write('set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets *]\n')
+    for key, val in pins.items():
+        f.write('set_property PACKAGE_PIN {} [get_ports {}]\n'.format(val, key))
+        f.write('set_property IOSTANDARD LVCMOS33 [get_ports {}]\n'.format(key))
+
+with open(pre_imp_file, 'w') as f:
+    f.write('create_pblock roi\n')
+    f.write('add_cells_to_pblock [get_pblocks roi] [get_cells roi]\n')
+    f.write('resize_pblock [get_pblocks roi] -add "{}"\n'.format(os.environ['XRAY_ROI']))
+    f.write('set_property BITSTREAM.GENERAL.PERFRAMECRC YES [current_design]\n')
+
+with open(post_imp_file, 'w') as f:
+    f.write('write_checkpoint -force design.dcp')
+
+files = [
+    {'name': os.path.realpath('top.v'), 'file_type': 'verilogSource'},
+    {'name': xdc_file, 'file_type': 'xdc'},
+]
+
+tool = 'vivado'
+
+edam = {
+  'files' : files,
+  'name'  : 'design',
+  'toplevel': 'top',
+  'tool_options' : {'vivado' : {
+    'part' : os.environ['XRAY_PART'],
+    'pre_imp' : pre_imp_file,
+    'post_imp' : post_imp_file,
+    'synth' : synth_tool
+    }}
+}
+
+backend = edalize.get_edatool(tool)(edam=edam, work_root=work_root)
+
+backend.configure("")
+backend.build()
diff --git a/minitests/util/runme.sh b/minitests/util/runme.sh
index 118e51a..45938b5 100755
--- a/minitests/util/runme.sh
+++ b/minitests/util/runme.sh
@@ -1,9 +1,9 @@
 #!/bin/bash
 
 set -ex
-${XRAY_VIVADO} -mode batch -source $XRAY_DIR/minitests/util/runme.tcl
-${XRAY_BITREAD} -F $XRAY_ROI_FRAMES -o design.bits -z -y design.bit
-test -z "$(fgrep CRITICAL vivado.log)"
+python3 $XRAY_DIR/minitests/util/runme.py
+${XRAY_BITREAD} -F $XRAY_ROI_FRAMES -o design.bits -z -y build/design.bit
+test -z "$(fgrep CRITICAL build/vivado.log)"
 # TODO uncomment once tilegrid generation works
 #${XRAY_SEGPRINT} -z -D design.bits  >design.txt
 
diff --git a/minitests/util/runme.tcl b/minitests/util/runme.tcl
deleted file mode 100644
index 02d605c..0000000
--- a/minitests/util/runme.tcl
+++ /dev/null
@@ -1,24 +0,0 @@
-create_project -force -part $::env(XRAY_PART) design design
-read_verilog top.v
-synth_design -top top -flatten_hierarchy none
-
-set_property -dict "PACKAGE_PIN $::env(XRAY_PIN_00) IOSTANDARD LVCMOS33" [get_ports clk]
-set_property -dict "PACKAGE_PIN $::env(XRAY_PIN_01) IOSTANDARD LVCMOS33" [get_ports stb]
-set_property -dict "PACKAGE_PIN $::env(XRAY_PIN_02) IOSTANDARD LVCMOS33" [get_ports di]
-set_property -dict "PACKAGE_PIN $::env(XRAY_PIN_03) IOSTANDARD LVCMOS33" [get_ports do]
-
-create_pblock roi
-add_cells_to_pblock [get_pblocks roi] [get_cells roi]
-resize_pblock [get_pblocks roi] -add "$::env(XRAY_ROI)"
-
-#set_property CFGBVS VCCO [current_design]
-#set_property CONFIG_VOLTAGE 3.3 [current_design]
-set_property BITSTREAM.GENERAL.PERFRAMECRC YES [current_design]
-
-set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets clk_IBUF]
-
-place_design
-route_design
-
-write_checkpoint -force design.dcp
-write_bitstream -force design.bit