mibuild: add VivadoProgrammer (only load_bitstream)
authorFlorent Kermarrec <florent@enjoy-digital.fr>
Thu, 26 Feb 2015 11:31:19 +0000 (12:31 +0100)
committerFlorent Kermarrec <florent@enjoy-digital.fr>
Thu, 26 Feb 2015 11:31:19 +0000 (12:31 +0100)
mibuild/xilinx/programmer.py

index 79cf1557e9c2d7596a7caf02ecc80dab464bab9b..50e98b4ab854eaeaf73d4c78c1064bb38cb5c6f8 100644 (file)
@@ -44,3 +44,26 @@ class XC3SProg(GenericProgrammer):
        def flash(self, address, data_file):
                flash_proxy = self.find_flash_proxy()
                subprocess.call(["xc3sprog", "-v", "-c", self.cable, "-I"+flash_proxy, "{}:w:0x{:x}:BIN".format(data_file, address)])
+
+def _run_vivado(cmds):
+       with subprocess.Popen("vivado -mode tcl", stdin=subprocess.PIPE, shell=True) as process:
+               process.stdin.write(cmds.encode("ASCII"))
+               process.communicate()
+
+class VivadoProgrammer(GenericProgrammer):
+       needs_bitreverse = False
+
+       def load_bitstream(self, bitstream_file):
+               cmds = """open_hw
+connect_hw_server
+open_hw_target [lindex [get_hw_targets -of_objects [get_hw_servers localhost]] 0]
+
+set_property PROBES.FILE {{}} [lindex [get_hw_devices] 0]
+set_property PROGRAM.FILE {{{bitstream}}} [lindex [get_hw_devices] 0]
+
+program_hw_devices [lindex [get_hw_devices] 0]
+refresh_hw_device [lindex [get_hw_devices] 0]
+
+quit
+""".format(bitstream=bitstream_file)
+               _run_vivado(cmds)