Skip to content

Commit

Permalink
Merge pull request #2009 from trabucayre/efinix_args_opts
Browse files Browse the repository at this point in the history
build/efinix: added argument to change synthesis options configurations
  • Loading branch information
enjoy-digital committed Jul 8, 2024
2 parents 0db650a + ec1528f commit 7de4f01
Show file tree
Hide file tree
Showing 2 changed files with 84 additions and 8 deletions.
61 changes: 53 additions & 8 deletions litex/build/efinix/efinity.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,23 @@ def finalize(self):
if self.platform.verilog_include_paths:
self.options["includ_path"] = "{" + ";".join(self.platform.verilog_include_paths) + "}"

def build(self, platform, fragment, **kwargs):
def build(self, platform, fragment,
synth_mode,
infer_clk_enable,
bram_output_regs_packing,
retiming,
seq_opt,
mult_input_regs_packing,
mult_output_regs_packing,
**kwargs):

self._synth_mode = synth_mode,
self._infer_clk_enable = infer_clk_enable,
self._bram_output_regs_packing = bram_output_regs_packing,
self._retiming = retiming,
self._seq_opt = seq_opt,
self._mult_input_regs_packing = mult_input_regs_packing,
self._mult_output_regs_packing = mult_output_regs_packing,

# Apply FullMemoryWE on Design (Efiniy does not infer memories correctly otherwise).
FullMemoryWE()(fragment)
Expand Down Expand Up @@ -295,18 +311,18 @@ def run_script(self, script):
"--binary-db", f"{self._build_name}.vdb",
"--family", self.platform.family,
"--device", self.platform.device,
"--mode", "speed",
"--mode", self._synth_mode,
"--max_ram", "-1",
"--max_mult", "-1",
"--infer-clk-enable", "3",
"--infer-clk-enable", self._infer_clk_enable,
"--infer-sync-set-reset", "1",
"--fanout-limit", "0",
"--bram_output_regs_packing", "1",
"--retiming", "1",
"--seq_opt", "1",
"--bram_output_regs_packing", self._bram_output_regs_packaging,
"--retiming", self._retiming,
"--seq_opt", self._seq_opt,
"--blast_const_operand_adders", "1",
"--mult_input_regs_packing", "1",
"--mult_output_regs_packing", "1",
"--mult_input_regs_packing", self._mult_input_regs_packaging,
"--mult_output_regs_packing", self._mult_output_regs_packaing,
"--veri_option", "verilog_mode=verilog_2k,vhdl_mode=vhdl_2008",
"--work-dir", "work_syn",
"--output-dir", "outflow",
Expand Down Expand Up @@ -377,3 +393,32 @@ def run_script(self, script):
], common.colors)
if r != 0:
raise OSError("Error occurred during export_bitstream execution.")

def build_args(parser):
toolchain = parser.add_argument_group(title="Efinity toolchain options")
toolchain.add_argument("--synth-mode", default="speed", help="Synthesis optimization mode.",
choices=["speed", "area", "area2"])
toolchain.add_argument("--infer-clk-enable", default="3", help="infers the flip-flop clock enable signal.",
choices=["0", "1", "2", "3", "4",])
toolchain.add_argument("--infer-sync-set-reset", default="1", help="Infer synchronous set/reset signals.",
choices=["0", "1"])
toolchain.add_argument("--bram-output-regs-packing", default="1", help="Pack registers into the output of BRAM.",
choices=["0", "1"])
toolchain.add_argument("--retiming", default="1", help="Perform retiming optimization.",
choices=["0", "1", "2"])
toolchain.add_argument("--seq-opt", default="1", help="Turn on sequential optimization.",
choices=["0", "1"])
toolchain.add_argument("--mult-input-regs-packing", default="1", help="Allow packing of multiplier input registers.",
choices=["0", "1"]),
toolchain.add_argument("--mult-output-regs-packing", default="1", help="Allow packing of multiplier output registers.",
choices=["0", "1"])
def build_argdict(args):
return {
"synth_mode" : args.synth_mode,
"infer_clk_enable" : args.infer_clk_enable,
"bram_output_regs_packing" : args.bram_output_regs_packing,
"retiming" : args.retiming,
"seq_opt" : args.seq_opt,
"mult_input_regs_packing" : args.mult_input_regs_packing,
"mult_output_regs_packing" : args.mult_output_regs_packing,
}
31 changes: 31 additions & 0 deletions litex/build/efinix/platform.py
Original file line number Diff line number Diff line change
Expand Up @@ -185,3 +185,34 @@ def get_free_pll_resource(self):
pll = self.pll_available[0]
self.get_pll_resource(pll)
return pll

@classmethod
def fill_args(cls, toolchain, parser):
"""
pass parser to the specific toolchain to
fill this with toolchain args
Parameters
==========
toolchain: str
toolchain name
parser: argparse.ArgumentParser
parser to be filled
"""
efinity.build_args(parser)

@classmethod
def get_argdict(cls, toolchain, args):
"""
return a dict of args
Parameters
==========
toolchain: str
toolchain name
Return
======
a dict of key/value for each args or an empty dict
"""
return efinity.build_argdict(args)

0 comments on commit 7de4f01

Please sign in to comment.