[opentitan-pgm-fpga] Add ability to choose HW server
Add the ability to choose a running Xilinx HW server instead of starting
a new one on localhost (the default behavior, which is unchanged). This
is mainly useful for remote/CI setups where the FPGA board is connected
to another machine.
Signed-off-by: Philipp Wagner <phw@lowrisc.org>
diff --git a/util/opentitan-pgm-fpga/opentitan-pgm-fpga b/util/opentitan-pgm-fpga/opentitan-pgm-fpga
index fbefd4e..cb8a091 100755
--- a/util/opentitan-pgm-fpga/opentitan-pgm-fpga
+++ b/util/opentitan-pgm-fpga/opentitan-pgm-fpga
@@ -10,12 +10,14 @@
import sys
-def program_bitstream_with_vivado(part, bitstream, hw_target, jtag_freq):
+def program_bitstream_with_vivado(part, bitstream, hw_server_url, hw_target, jtag_freq):
tcl_file = os.path.join(os.path.dirname(__file__), 'vivado_pgm.tcl')
if not os.path.isfile(tcl_file):
raise FileNotFoundError('{} not found.'.format(tcl_file))
cmd_env = os.environ.copy()
+ if hw_server_url is not None:
+ cmd_env['HW_SERVER_URL'] = hw_server_url
if hw_target is not None:
cmd_env['HW_TARGET'] = hw_target
if jtag_freq is not None:
@@ -38,6 +40,12 @@
def main():
parser = argparse.ArgumentParser()
+ parser.add_argument('--hw-server-url',
+ required=False,
+ default=None,
+ help='The URL of a running Xilinx hardware server to '
+ 'connect to. If not specified, a hardware server will '
+ 'be started automatically on localhost.')
parser.add_argument('--hw-target',
'-t',
required=False,
@@ -56,6 +64,7 @@
return program_bitstream_with_vivado(args.part,
args.bitstream,
+ hw_server_url=args.hw_server_url,
hw_target=args.hw_target,
jtag_freq=args.jtag_freq)
diff --git a/util/opentitan-pgm-fpga/vivado_pgm.tcl b/util/opentitan-pgm-fpga/vivado_pgm.tcl
index e10ab6e..fdd3756 100644
--- a/util/opentitan-pgm-fpga/vivado_pgm.tcl
+++ b/util/opentitan-pgm-fpga/vivado_pgm.tcl
@@ -29,9 +29,18 @@
puts "INFO: Programming target $explicit_hw_target"
}
-# Connect to Xilinx Hardware Server
+# Connect to Xilinx Hardware Server. A new instance of the hardware server is
+# started on localhost if HW_SERVER_URL is not given, and if no hardware server
+# is already running on localhost.
if { [ catch { open_hw_manager } ] } { open_hw }
-connect_hw_server
+
+if {[info exists env(HW_SERVER_URL)]} {
+ set hw_server_url $env(HW_SERVER_URL)
+ puts "INFO: Connecting to hardware server at $hw_server_url"
+ connect_hw_server -url $hw_server_url
+} else {
+ connect_hw_server
+}
if { $explicit_hw_target == "" } {
set hw_targets [get_hw_targets]