Determine Clocking

Header: fiction/algorithms/physical_design/determine_clocking.hpp

Determines a new clock number assignment for the given gate-level layout. Whether the layout has useful/valid clocking information or not, this function will override each gate and wire segment with new clocking information if a valid clock number assignment exists.

struct determine_clocking_params

Parameters for the determine_clocking algorithm.

Public Members

bill::solvers sat_engine = bill::solvers::bsat2

The SAT solver to use.

struct determine_clocking_stats

Statistics for the determine_clocking algorithm.

Public Functions

inline void report(std::ostream &out = std::cout) const

Reports the statistics to the given output stream.

Parameters:

out – The output stream to report to.

Public Members

mockturtle::stopwatch::duration time_total = {0}

Total runtime.

template<typename Lyt>
bool fiction::determine_clocking(Lyt &lyt, const determine_clocking_params &params = {}, determine_clocking_stats *stats = nullptr)

Determines clock numbers for the given gate-level layout. This algorithm parses the layout’s gate and wire connections, disregarding any existing clocking information, and constructs a SAT instance to find a valid clock number assignment under which the information flow is respected. It then assigns these clock numbers as an irregular clock map to the given layout via the assign_clock_number function, overriding any existing clocking scheme.

If no valid clock number assignment exists for lyt, this function returns false and does not modify lyt.

Template Parameters:

Lyt – Gate-level layout type.

Parameters:
  • lyt – The gate-level layout to assign clock numbers to.

  • params – Parameters.

  • stats – Statistics.

Returns:

true iff lyt could be successfully clocked via a valid clock number assignment.