Critical Path (CP) and Throughput (TP)

Header: fiction/verification/critical_path_length_and_throughput.hpp

template<typename Geometry>
cp_and_tp fiction::verification::critical_path_length_and_throughput(const fiction::layouts::gate_level_layout<Geometry> &lyt)

Computes the critical path length (CP) length and the throughput (TP) of a gate-level layout.

The critical path length counts every placed object on the longest path to any PO, including wires and terminals. Traversal follows declared input ports, independent of physical adjacency and clocking legality. Only output dependencies enter the analysis. Explicit placed zero-input functions act as path sources.

The throughput is defined as \(\frac{1}{x}\) where \(x\) is the highest path length difference between any sets of paths that lead to the same gate. This function provides only the denominator \(x\), as the numerator is always \(1\). Furthermore, \(x\) is given in clock cycles rather than clock phases because it is assumed that a path length difference smaller than lyt.num_clocks() does not lead to any delay. Contrary, for any throughput value \(\frac{1}{x}\) with \(x > 1\), the layout computes its represented Boolean function only every \(x\) full clock cycles after the first inputs have been propagated through the design. Thereby, all PIs need to be held constant for \(x\) clock phases to ensure proper computation.

For more information on the concept of throughput and delay see “Synchronization of Clocked Field-Coupled Circuits” by F. Sill Torres, M. Walter, R. Wille, D. Große, and R. Drechsler in IEEE NANO 2018; or “Design Automation for Field-coupled Nanotechnologies” by M. Walter, R. Wille, F. Sill Torres, and R. Drechsler published by Springer Nature in 2022.

The complexity is \(\mathcal{O}(|V| + |E|)\) for objects and connections in the output dependency cones.

Template Parameters:

Geometry – Coordinate geometry of the gate-level layout.

Parameters:

lyt – The gate-level layout whose CP and TP are desired.

Throws:

std::invalid_argument – If an output dependency has a disconnected input or a cycle.

Returns:

A struct containing the CP and TP.

critical_path_length_and_throughput(*args, **kwds)

Helper for @overload to raise when called.

Number of Gate Types

Header: fiction/verification/count_gate_types.hpp

template<typename Ntk>
void fiction::verification::count_gate_types(const Ntk &ntk, count_gate_types_stats *pst = nullptr)

Gives a detailed listing of all gate types present in the provided network (or layout). This function can distinguish most gate types available as atomic building blocks. Primary terminals and network constants do not enter the counts. Placed wires count as fanout objects when they drive multiple inputs, or as buffers otherwise. The given network (or layout) has to implement a function to test whether a node is of the respective gate type.

Template Parameters:

Ntk – Logic network (or layout) type.

Parameters:
  • ntk – The network (or layout).

  • pst – Statistics.