diff --git a/litex/build/openfpgaloader.py b/litex/build/openfpgaloader.py index c6f38ae38..8721dcfb9 100644 --- a/litex/build/openfpgaloader.py +++ b/litex/build/openfpgaloader.py @@ -13,31 +13,62 @@ class OpenFPGALoader(GenericProgrammer): needs_bitreverse = False def __init__(self, board="", cable="", freq=0, fpga_part="", index_chain=None): + # openFPGALoader base command. self.cmd = ["openFPGALoader"] + + # Specify FPGA board. if board: self.cmd += ["--board", board] + + # Specify FPGA part/device. if fpga_part: self.cmd += ["--fpga-part", fpga_part] + + # Specify programmation cable. if cable: self.cmd += ["--cable", cable] + + # Specify programmation frequency. if freq: self.cmd += ["--freq", str(int(float(freq)))] + + # Specify index in the JTAG chain. if index_chain is not None: self.cmd += ["--index-chain", str(int(index_chain))] def load_bitstream(self, bitstream_file): + # Load base command. cmd = self.cmd + ["--bitstream", bitstream_file] + + # Execute command. self.call(cmd) - def flash(self, address, data_file, external=False, unprotect_flash=False, verify=False): + def flash(self, address, data_file, external=False, unprotect_flash=False, verify=False, **kwargs): + # Flash base command. cmd = self.cmd + ["--write-flash", "--bitstream", data_file] + + # Flash Internal/External selection. if external: cmd += ["--external-flash"] + + # Flash Offset. if address: cmd += ["--offset"] cmd += [str(address)] + + # Flash Unprotect. if unprotect_flash: cmd += ["--unprotect-flash"] + + # Flash Verify. if verify: cmd += ["--verify"] + + # Handle kwargs for specific, less common cases. + for key, value in kwargs.items(): + cmd.append(f"--{key}") + if value is not None: + cmd.append(str(value)) + + # Execute Command. self.call(cmd)