Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
1 change: 1 addition & 0 deletions src/syn/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ cc_library(
"src/flow/export.h",
"src/flow/import.cc",
"src/flow/liveness.cc",
"src/flow/loop_check.cc",
"src/flow/opt_gatefusion.cc",
"src/flow/opt_gatefusion.h",
"src/flow/sequential_mapper.cc",
Expand Down
2 changes: 2 additions & 0 deletions src/syn/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ synthesize

The integrated synthesis tool does not support mapping to latches, always flattens the design, and loses the names of instantiated macros.

`synthesize` fails with an error if the design contains a combinational loop. This includes latches inferred from incomplete assignments in `always` blocks (e.g. a latch-based clock gate), since combinational optimization does not preserve the state such a loop holds. A loop is only reported where each step is combinational: it is broken by a flip-flop, and by a cell output that neither has a liberty `function` using the input nor a combinational timing arc from it (such as a RAM read port).

## Authors

The original `syn` was developed and contributed by Martin Povišer of Precision Innovations Inc. Design of the intermediate representation used by syn internally derives from the [prjunnamed project](https://prjunnamed.org/): `Copyright (C) Project Unnamed contributors`; distributed under the terms of the BSD-0 license.
Expand Down
5 changes: 5 additions & 0 deletions src/syn/include/syn/synthesis.h
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,10 @@ class Synthesis : public sta::dbStaState
// combinational driver) whose value is provably never A with a constant.
void livenessOpt(bool replace_combinational = false);

// Fail if the graph contains a combinational loop (e.g. an inferred
// latch), which the flow cannot implement faithfully.
void checkCombinationalLoops();

// Export the mapped netlist to ODB.
void exportToOdb();

Expand Down Expand Up @@ -149,5 +153,6 @@ void abcRoundtrip(Graph& g,
void livenessOpt(Graph& g,
utl::Logger* logger,
bool replace_combinational = false);
void checkCombinationalLoops(Graph& g, utl::Logger* logger);

} // namespace syn
1 change: 1 addition & 0 deletions src/syn/src/flow/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ add_library(syn_flow
export.cc
import.cc
liveness.cc
loop_check.cc
constant_fold.cc
opt_gatefusion.cc
sequential_mapper.cc
Expand Down
Loading
Loading