Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
133 commits
Select commit Hold shift + click to select a range
1bbb6b7
Configuration options for multifpga usage
bwintermann Jan 21, 2025
1e479cc
Partition transformation initial commit
bwintermann Jan 23, 2025
f3a26d7
Small pathlib fix
bwintermann Jan 24, 2025
818cfe0
Created a link configuration class
bwintermann Jan 24, 2025
cc34f6e
Completing the LinkConfig class for usage. Update pre-commit to fix i…
bwintermann Jan 28, 2025
5b10aef
Parallel execution of synthesis configurations
bwintermann Jan 28, 2025
daf2a50
Merge branch 'fix/incorrect_e231_flake_error' of github.com:eki-proje…
bwintermann Jan 29, 2025
ceb927d
[VitisBuild] Add test prototype
bwintermann Feb 25, 2025
2382016
[Multi] Add SDP creation transform and structure for tests
bwintermann Mar 11, 2025
c08cd80
Merge branch 'dev' into feature/multifpga
bwintermann Mar 28, 2025
cae6252
Merge branch 'dev' into feature/multifpga
bwintermann Mar 28, 2025
8d7455f
Merge branch 'dev' into feature/multifpga
bwintermann Mar 28, 2025
8f796c0
[MultiFPGA] Tests for StreamingDataflowPartition creation
bwintermann Mar 28, 2025
52a86d4
[MultiFPGA] Fixed bugs in CreateMultiFPGASDP
bwintermann Mar 28, 2025
a714954
[MultiFPGA] Added more tests, transformation for setting network meta…
bwintermann Mar 28, 2025
8930159
[MultiFPGA] Implemented network metadata creation. Ignore pkg_resourc…
bwintermann Apr 1, 2025
4ccc0ec
[MultiFPGA] Add AuroraFlow as a dependency. Added configuration for M…
bwintermann Apr 1, 2025
09bd5a1
[MultiFPGA] AuroraFlow kernel preparation and packaging partly implem…
bwintermann Apr 1, 2025
8e74ba3
[MultiFPGA] Kernel preparation continued. Bugfix for NetworkMetadata …
bwintermann Apr 2, 2025
ca09565
[MultiFPGA] Packaging transformation complete. Metadata now holds SDP…
bwintermann Apr 3, 2025
600aaee
[MultiFPGA] Reworked NetworkMetadata - fixed tests
bwintermann Apr 3, 2025
a4c5213
[MultiFPGA] File reorganization
bwintermann Apr 4, 2025
01a0de4
[MultiFPGA] Add YAML based build flows. HLS Resource estimate fix. N…
bwintermann Apr 7, 2025
0b1a65f
[MultiFPGA] Scaffolding for MultiFPGA Partitioning
bwintermann Apr 7, 2025
df636a9
[MultiFPGA] Part 1/2 moving Aurora partition model
bwintermann Apr 8, 2025
d92dd75
[MultiFPGA] Part 2/3 of moving the Partitioner
bwintermann Apr 8, 2025
b076eb7
[MultiFPGA] Part 3/3 of moving the partitioner. Objective functions d…
bwintermann Apr 8, 2025
852a7fe
[MultiFPGA] Fixes in build config, packaging. Various partitioning fi…
bwintermann Apr 11, 2025
2289c94
Merge branch 'dev' into feature/multifpga
bwintermann Apr 24, 2025
1fdd78e
[MultiFPGA] Refactored partition config. Integrated first logging sta…
bwintermann Apr 25, 2025
9c314fc
[MultiFPGA] Added warning regarding resource utilization during parti…
bwintermann Apr 28, 2025
1ee87d1
[MultiFPGA] Changes to logging.
bwintermann Apr 28, 2025
56754b0
[MultiFPGA] Partitioning Tests started
bwintermann Apr 28, 2025
4068a9d
[MultiFPGA] Refactoring, bugfixes, tests for partitioning
bwintermann Apr 29, 2025
777c237
[MultiFPGA] Fix some tests
bwintermann Apr 29, 2025
eec2831
[MultiFPGA] Fix partitioner error special case
bwintermann Apr 30, 2025
4f58262
[MultiFPGA] Detailed isolated partitioning tests
bwintermann May 5, 2025
0ebc38f
Merge branch 'dev' into feature/multifpga
bwintermann May 6, 2025
ea351ed
Merge branch 'dev' into feature/vitis_build_improved
bwintermann May 6, 2025
fcbc67e
[VitisBuild] Testfile for improved vitis build
bwintermann May 7, 2025
d7fb75a
[VitisBuild] Guards for linking config and more tests
bwintermann May 7, 2025
0d8713f
Merge dev into Multifpga
bwintermann May 15, 2025
813b72a
[MultiFPGA] Fix mip instantiation bug, packaging step, convenience st…
bwintermann May 16, 2025
4f23076
[MultiFPGA] Inseperable nodes finding function
bwintermann May 16, 2025
5943393
[MultiFPGA] Further tests for inseperable node search function
bwintermann May 16, 2025
77b8d41
Merge branch 'dev' into feature/vitis_build_improved
bwintermann May 16, 2025
d16392b
Merge branch 'feature/vitis_build_improved' into feature/multifpga
bwintermann May 16, 2025
6700645
[MultiFPGA, VitisBuild] MultiFPGA adapted XO build (VitisBuild)
bwintermann May 16, 2025
95576dc
[MultiFPGA] Smaller bugfixes
bwintermann May 19, 2025
993cd50
Add custom exception handling
LinusJungemann May 20, 2025
4beea5c
[MultiFPGA] VitisLink changes
bwintermann May 20, 2025
693e9cd
Handle KeyboardInterrupt
LinusJungemann May 20, 2025
fc8bfff
Added base FINNError and changed errors during start step resolution
bwintermann May 20, 2025
2a2d1fd
Changed visibility and type of some errors
bwintermann May 20, 2025
b19f35c
Changed some printing and removed unnecessary hint that pdb is disabled
LinusJungemann May 20, 2025
d4db994
Disable pdb by default
LinusJungemann May 20, 2025
66915be
User notification of model selection when using a start-step
bwintermann May 20, 2025
17011d9
Merge branch 'feature/CustomException' of github.com:eki-project/finn…
bwintermann May 20, 2025
abc66bf
Merge branch 'feature/CustomException' into feature/multifpga
bwintermann May 21, 2025
d6366ee
[MultiFPGA] Proper exceptions, removed Todos
bwintermann May 21, 2025
e7b0cc8
[MultiFPGA] Generic MultiFPGA link transform, helper functions for Ne…
bwintermann May 22, 2025
61b1b86
Fixed a sanity check in MultiVitisBuild
bwintermann Sep 5, 2025
8f9f0ca
Small fixes and updates for MultiFPGA synthesis
bwintermann Sep 9, 2025
366a313
Merge recent dev into MultiFPGA
bwintermann Apr 16, 2026
fb9460b
Moved and updated commit AuroraFlow and vitisdummykernel to external …
bwintermann Apr 16, 2026
8359006
Updated dependency path resolution to new settings
bwintermann Apr 16, 2026
34ee95e
Removed linter and type-checking errors
bwintermann Apr 16, 2026
c6ef9a8
Fixed AuroraFlow builds, added rich formatting to some logs
bwintermann Apr 16, 2026
e9e63c6
Restructuring multifpga source code
bwintermann Apr 16, 2026
32ce3cb
Added some docstrings
bwintermann Apr 17, 2026
de15682
Updated tests for dev branch compatability.
bwintermann Apr 20, 2026
4a36735
Reorganized partitioner;added verbosity level;fixed Aurora tests
bwintermann Apr 21, 2026
10e4582
Added RN18 brevitas export for testing
bwintermann Apr 21, 2026
99a3c78
Fixed partitioning tests, removed QONNX is_finn_op warnings
bwintermann Apr 22, 2026
8c44d49
Merge remote-tracking branch 'origin/dev' into feature/multifpga
bwintermann Apr 22, 2026
6d96531
Fixed deprecation warnings; added details to reorder warnings
bwintermann Apr 23, 2026
4fed5b2
Added details to warnings in absorb.py
bwintermann Apr 23, 2026
3c4cd88
Small metadata rework. [1/2]
bwintermann Apr 24, 2026
6afd277
Merge branch 'fix/warnings_1.4.0' into feature/multifpga
bwintermann Apr 24, 2026
806e3e6
Metadata / BuildXO rework [2/2].
bwintermann Apr 24, 2026
5f07f65
Fixed various baseclass issues regarding metadata
bwintermann Apr 24, 2026
0e06c82
Fix swapped IO nodes in BuildAllXOs
bwintermann Apr 24, 2026
7263086
Small fix to interface name loading
bwintermann Apr 27, 2026
8a5a4b6
Refactoring multi-fpga partitioning
bwintermann Apr 27, 2026
2553246
Some partitioning assignment fixes and additional logs
bwintermann Apr 28, 2026
07d55ab
Moved most transformations required for synthesis out of vitis_build …
bwintermann Apr 28, 2026
b6c708d
Small fixes to Multi-FPGA SDP creation
bwintermann Apr 29, 2026
00bc1d7
[Multi-FPGA] Small usability improvements
bwintermann Apr 29, 2026
d9bd27a
Moved Vitis Linking Config into it's own file
bwintermann Apr 29, 2026
f9a5092
Introduced vitis linking transformations, loading and storing of link…
bwintermann Apr 29, 2026
fc5413e
Vitis linking now uses jinja2 templates
bwintermann Apr 29, 2026
b7746ea
Completed reworked single-fpga vitis link config creation transformation
bwintermann Apr 29, 2026
76a1d17
[Multi-FPGA] Added Aurora kernel insertion transformation
bwintermann Apr 30, 2026
98ca71e
Completed VitisBuild rework with Multi -FPGA capability
bwintermann Apr 30, 2026
c3fc224
Fixed multiple smaller issues regarding synthesis and linking
bwintermann Apr 30, 2026
7637115
Fixes to the linker config creation
bwintermann Apr 30, 2026
f3dd533
Prepared c++ driver generation for multifpga
bwintermann Apr 30, 2026
950b519
Added more safety-checks to the linker configuration creation functions
bwintermann Apr 30, 2026
fc93fc8
Small fixes to warnings/checks for the vitis linking configurations
bwintermann May 4, 2026
a904bf1
Fixed (Multi-FPGA) C++ driver instantiation issues
bwintermann May 6, 2026
1c5686c
Reorganized Multi-FPGA tests
bwintermann May 8, 2026
5e93021
Added folding warnings if throughput is not reached. Added constant f…
bwintermann May 8, 2026
b07af94
Fixed folding checks by comparing against AP_INT_MAX_W instead of mva…
bwintermann May 11, 2026
396016e
Updated mip to 1.17.0, refactored Multi-FPGA tests, fixed smaller issues
bwintermann May 11, 2026
6c98eba
Reorganized AuroraFlow specific MultiFPGA tests
bwintermann May 13, 2026
98e6a02
Caching test models, added solver(emphasis) selection
bwintermann May 19, 2026
6c7e8bd
Merge remote-tracking branch 'origin/fix/folding-limits' into feature…
bwintermann May 19, 2026
fcabcf0
Cached test models fixes, updated finn tests command
bwintermann May 20, 2026
0a61f76
Restructured MultiFPGA, some doctests, refactor resource functions in…
bwintermann May 20, 2026
0eaced4
Doctests for VitisLinkConfig, various Multi-FPGA related fixes. Moved…
bwintermann May 21, 2026
ebd8673
Moved utility functions out of the Multi-FPGA modules
bwintermann May 21, 2026
0f4a7b9
Fixed synthesis reporting for Single- and Multi-FPGA
bwintermann May 21, 2026
29091bf
Updated step_deployment_package for Multi-FPGA
bwintermann May 21, 2026
83308c3
Added multifpga metadata tests, small fixes
bwintermann May 22, 2026
02b4db0
Added CreateMultiFPGASDP inseparable node assertion
bwintermann May 26, 2026
c9df260
[Settings] Small fix to settings resolution
bwintermann May 26, 2026
f2852e9
Added ApplyPartitioning tests, Aurora packaging tests success, fixed …
bwintermann May 27, 2026
255831c
Warn about Multi-FPGA overutilization, considering the shell's requir…
bwintermann May 29, 2026
5bdd36c
Fixed inseparable node Multi-FPGA tests
bwintermann Jun 5, 2026
c380a5a
[MultiFPGA] Fixed several smaller testing issues
bwintermann Jun 15, 2026
8a95b11
[MultiFPGA] Fix partitioning tests, completed.
bwintermann Jun 15, 2026
2108475
[MultiFPGA] Fixed partitioning tests, unified partitioner errors
bwintermann Jun 16, 2026
a8b40cb
Merge remote-tracking branch 'origin/dev' into feature/multifpga
bwintermann Jun 16, 2026
187c907
Moved external dependency definition file to interfaces, to fix #216
bwintermann Jun 16, 2026
8b1298f
[MultiFPGA] Added end2end MN test for MultiFPGA
bwintermann Jun 17, 2026
e9fa88c
CI debugging prints
bwintermann Jun 17, 2026
cf82f4a
CI debugging prints (dep file not found)
bwintermann Jun 17, 2026
58d59da
[MultiFPGA] Simplified Multi-FPGA SDP Creation
bwintermann Jun 18, 2026
4cc7912
[MultiFPGA] Refactored SDP creation tests to match new SDP creation t…
bwintermann Jun 18, 2026
7f65a9c
[MultiFPGA] Added several SDP creation tests
bwintermann Jun 18, 2026
6a89fa7
Fixed multiple issues and updated VitisBuild tests
bwintermann Jun 18, 2026
84068fa
[MultiFPGA] Network metadata creation is now successor-based
bwintermann Jun 19, 2026
0679544
[MultiFPGA] Updated Aurora partitioner
bwintermann Jun 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ MANIFEST
/notebooks/end2end_example/**/*.onnx

# downloaded dep repos
/deps/
deps/
/finn_deps/

# local test directories for benchmarking infrastructure
Expand Down
7 changes: 6 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ onnxruntime = "1.20.1"
onnxscript = ">=0.6.2" # TODO: the onnx-passes installation will overwrite this version
protobuf = "5.29.6"
pyyaml = "~6.0.2"
mip = "~1.13.0"
mip = "1.17.0"
cmake = "~4.0.3"
brevitas = "0.12.1"
qonnx = "1.0.0"
Expand Down Expand Up @@ -111,9 +111,14 @@ markers = [
"bnn_pynq: mark tests that execute Pynq-Z1 BNN tests",
"bnn_zcu104: mark tests that execute ZCU104 BNN tests",
"analysis: mark tests that run analysis tests",
"multifpga: mark tests that run multifpga tests"
]
norecursedirs = ["dist", "build", ".tox"]
testpaths = "tests"
filterwarnings = [
'ignore:Deprecated call to `pkg_resources:DeprecationWarning',
'ignore:pkg_resources is deprecated:DeprecationWarning'
]

[tool.isort]
line_length = 100
Expand Down
12 changes: 8 additions & 4 deletions src/finn/analysis/fpgadataflow/hls_synth_res_estimation.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,20 +28,24 @@
import os
import qonnx.custom_op.registry as registry
import xml.etree.ElementTree as ET
from qonnx.core.modelwrapper import ModelWrapper

from finn.util.fpgadataflow import is_hls_node
from finn.util.logging import log


def hls_synth_res_estimation(model):
"""Extracts the FPGA resource results from the Vitis HLS synthesis estimates.
def hls_synth_res_estimation(model: ModelWrapper) -> dict[str, dict[str, int | float]]:
"""Extract the FPGA resource results from the Vitis HLS synthesis estimates.
Note that this analysis pass only works on nodes that have an HLS backend.
Ensure that all nodes have unique names (by calling the GiveUniqueNodeNames
transformation) prior to calling this analysis pass to ensure all nodes are
visible in the results.

Returns {node name : resources_dict}."""

Returns
-------
`dict[str, dict[str, int | float]]`: Maps node names to resource dicts.
Result example: `res_estimation(...)["MVAU_hls_0"]["LUT"]`
"""
res_dict = {}
for node in model.graph.node:
if is_hls_node(node):
Expand Down
16 changes: 12 additions & 4 deletions src/finn/analysis/fpgadataflow/res_estimation.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,23 +27,31 @@
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

import qonnx.custom_op.registry as registry
from qonnx.core.modelwrapper import ModelWrapper
from typing import TYPE_CHECKING, cast

from finn.util.fpgadataflow import is_hls_node, is_rtl_node

if TYPE_CHECKING:
from finn.custom_op.fpgadataflow.hwcustomop import HWCustomOp

def res_estimation(model, fpgapart):

def res_estimation(model: ModelWrapper, fpgapart: str) -> dict[str, dict[str, int | float]]:
"""Estimates the resources needed for the given model.
Ensure that all nodes have unique names (by calling the GiveUniqueNodeNames
transformation) prior to calling this analysis pass to ensure all nodes are
visible in the results.

Returns {node name : resource estimation}."""

Returns
-------
`dict[str, dict[str, int | float]]`: Maps node names to resource dicts.
Result example: `res_estimation(...)["MVAU_hls_0"]["LUT"]`
"""
res_dict = {}
for node in model.graph.node:
if is_hls_node(node) or is_rtl_node(node):
inst = registry.getCustomOp(node)
res_dict[node.name] = inst.node_res_estimation(fpgapart)
res_dict[node.name] = cast("HWCustomOp", inst).node_res_estimation(fpgapart)

return res_dict

Expand Down
154 changes: 153 additions & 1 deletion src/finn/builder/build_dataflow_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@

import logging
import mashumaro.config
import mip
import numpy as np
from dataclasses import dataclass, field
from enum import Enum
Expand Down Expand Up @@ -167,6 +168,150 @@ class VerificationStepType(str, Enum):
PASSES_FRONTEND = "passes_frontend"


class MIPSolver(str, Enum):
"""Solver type enum. Used for type hinting,
since `Literal[mip.CBC]` is currently not allowed.
"""

CBC = mip.CBC
GUROBI = mip.GUROBI
HIGHS = mip.HIGHS


class MFVerbosity(Enum):
"""Verbosity levels for Multi-FPGA."""

NONE = 0
LOW = 1
MEDIUM = 2
HIGH = 3
EXTRA_HIGH = 4


class PartitioningStrategy(str, Enum):
"""Multi-FPGA Partitioning strategy for the solver to use."""

# Strategy to partition based on the estimated resource
# utilization of the layers
RESOURCE_UTILIZATION = "resource_utilization"

# Partition based on the number of layers per device
# Much simpler but usable in case no estimates
# are available
LAYER_COUNT = "layer_count"


class MFCommunicationKernel(str, Enum):
"""Communication kernels for Multi-FPGA usage."""

AURORA = "aurora"


class MFTopology(str, Enum):
"""Topology for Multi-FPGA use."""

CHAIN = "chain"
RETURNCHAIN = "returnchain"
CIRCLE = "circle"


@dataclass
class PartitioningConfiguration:
"""Configuration dataclass for Multi-FPGA. As soon as such a configuration is
set in the BuildDataflowConfig, FINN+ automatically switches to Multi-FPGA.
"""

# Existing partitionings can either be loaded from a file or
# passed directly. If set to None, partitioning is done and the results are
# saved in the output dir instead.
partitioning: dict[str, int] | Path | None = None

# Custom partition constraints. This can be used to, for example,
# assign a specific layer to a specific device. Maps node names to device IDs.
# If `partitioning` is given, this is ignored.
# Keep in mind that if the custom constraints contradict implicit other
# model constraints, the model may become infeasible.
custom_partitioning_constraints: dict[str, int] = field(default_factory=dict)

# The number of FPGAs to use for Multi-FPGA
# TODO: Allow -1, etc.
num_fpgas: int = 0

# The number of ports per device - this might change in meaning,
# depending on the communication kernel used
# TODO: Should be moved into platforms.py
ports_per_device: int = 2

# What strategy to use to partition the dataflow graph
partition_strategy: PartitioningStrategy = PartitioningStrategy.RESOURCE_UTILIZATION

# Tells the flow what topology to use. This determines the transformation
# that creates the network metadata necessary for kernel packing
topology: MFTopology = MFTopology.CHAIN

# What kind of kernel is used to communicate in the network
communication_kernel: MFCommunicationKernel = MFCommunicationKernel.AURORA

# Arguments to pass along to the communication kernel. This can for example
# be used to configure specific details, such as a receiver FIFO depth or
# data encoding, etc.
# It is up to the kernel preparation transformation to interprete this data.
communication_kernel_arguments: dict[str, str] = field(default_factory=dict)

# If set to true, the partitioner considers only cuts in the model where a single concurrent
# stream is active. This results in a model that can be distributed across multiple devices,
# regardless of the number of network ports available. If set to False, the partitioner can
# cut anyhwere - this is more flexible and results in potentially more balanced designs, but
# requires that multiple data streams can be
# networked (either multiplexed/routed or over multiple ports).
single_stream_network: bool = True

# How much a FPGA can be utilized at max. The solver will fail if it
# cannot comply with this limitation. Since platforms.py seems to contain
# the numbers for the total resources without shell, the default value is kept
# on the lower side on purpose.
max_utilization: float = 0.80

# How much resources of a single FPGA should be used ideally. Used in some objective
# functions.
ideal_utilization: float = 0.70

# The list of resource types that the partitioner should consider.
# Only relevant if RESOURCE_UTILIZATION is chosen as a strategy
# TODO: Add HBM / DDR
considered_resources: list[str] = field(
default_factory=lambda: ["LUT", "FF", "DSP", "BRAM_18K"]
)

# Number of seconds before the solver doing the partitioning
# times out.
partition_solver_timeout: int = 100

# The solver to apply to the partitioning model. If left to None,
# the default `mip` solver is used, with CBC as a fallback.
partition_solver: Literal[MIPSolver.CBC, MIPSolver.GUROBI, MIPSolver.HIGHS] | None = None

# Search emphasis. Can be set to default for balanced results, or to OPTIMAL
# for optimal solutions or to FEASIBLE for quickly finding feasible solutions.
# Details can be found here: https://docs.python-mip.com/en/latest/classes.html
partition_solver_emphasis: mip.SearchEmphasis = mip.SearchEmphasis.DEFAULT

# Determines how many synthesis processes can run in parallel. Keep in mind
# that very roughly estimated, one synthesis should be able to use up to 100 GB RAM,
# (sometimes more) depending on the model and version of Vivado. For example on a
# 512 GB node, you can run roughly 4 Synthesis in parallel.
# Defaults to 1, in order not to crash local computers with OOM errors
parallel_synthesis_workers: int = 1

# Whether the IODMA kernels should be separate or part of the compute kernel SDP.
# Currently only for Multi-FPGFA!
separate_iodmas: bool = True

# Since the Multi-FPGA flow contains a large number of extra steps (+ information), it benefits
# from a verbosity setting that is independent of the general FINN one.
verbosity: MFVerbosity = MFVerbosity.MEDIUM


#: List of steps that will be run as part of the standard dataflow build, in the
#: specified order. Use the `steps` as part of build config to restrict which
#: steps will be run.
Expand Down Expand Up @@ -324,7 +469,7 @@ def _fix_path(p: Path | None) -> Path | None:

#: Which output(s) to generate from the build flow. See documentation of
#: DataflowOutputType for available options.
generate_outputs: Optional[list[DataflowOutputType]] = field(
generate_outputs: list[DataflowOutputType] = field(
default_factory=lambda: [
DataflowOutputType.STITCHED_IP,
DataflowOutputType.ESTIMATE_REPORTS,
Expand Down Expand Up @@ -516,6 +661,9 @@ def _fix_path(p: Path | None) -> Path | None:
#: Can be used to use host memory for input/output data instead of DDR or HBM memory
fpga_memory: FpgaMemoryType = FpgaMemoryType.DEFAULT

#: Max interface width of the IODMAs for vitis builds.
vitis_iodma_intf_max_width: int = 512

#: Whether intermediate ONNX files will be saved during the build process.
#: These can be useful for debugging if the build fails.
save_intermediate_models: bool = True
Expand Down Expand Up @@ -583,6 +731,10 @@ def _fix_path(p: Path | None) -> Path | None:
#: rtlsim, otherwise they will be replaced by RTL implementations.
rtlsim_use_vivado_comps: bool = True

#: Configuration that provides parameters for Multi-FPGA partitioning.
#: If set to something other than None, we assume the Multi-FPGA case
partitioning_configuration: Optional[PartitioningConfiguration] = None

#: If set to True, the FINN compiler tries to create an MLO design based on
#: loop_body_hierarchy and loop_body_range
mlo: bool = False
Expand Down
Loading
Loading