Recti 1.2.4
Loading...
Searching...
No Matches
Public Member Functions | List of all members
recti::DelayCalculator Class Referenceabstract

Abstract base class for delay calculation models. More...

#include <dme_algorithm.hpp>

Inheritance diagram for recti::DelayCalculator:
Inheritance graph
[legend]

Public Member Functions

 DelayCalculator ()=default
 
 DelayCalculator (const DelayCalculator &)=default
 
DelayCalculatoroperator= (const DelayCalculator &)=default
 
 DelayCalculator (DelayCalculator &&)=default
 
DelayCalculatoroperator= (DelayCalculator &&)=default
 
virtual ~DelayCalculator ()=default
 
virtual double calculate_wire_delay (int length, double load_capacitance) const =0
 Calculates the delay of a wire segment.
 
virtual double calculate_wire_delay_per_unit (double load_capacitance) const =0
 Calculates the delay per unit length of a wire.
 
virtual double calculate_wire_capacitance (int length) const =0
 Calculates the capacitance of a wire segment.
 
virtual TappingResult calculate_tapping_point (int distance, double left_delay, double right_delay, double left_capacitance, double right_capacitance) const =0
 Determines the optimal tapping point for merging two subtrees to achieve prescribed skew.
 

Detailed Description

Abstract base class for delay calculation models.

This class defines the interface for different delay models (e.g., Linear, Elmore) used in the DME algorithm to estimate wire delays and capacitances.

calculate_tapping_point is a pure function that takes scalar values and returns a TappingResult. All node mutation side effects (setting wire_length, need_elongation) are delegated to the caller.

Constructor & Destructor Documentation

◆ DelayCalculator() [1/3]

recti::DelayCalculator::DelayCalculator ( )
default

◆ DelayCalculator() [2/3]

recti::DelayCalculator::DelayCalculator ( const DelayCalculator )
default

◆ DelayCalculator() [3/3]

recti::DelayCalculator::DelayCalculator ( DelayCalculator &&  )
default

◆ ~DelayCalculator()

virtual recti::DelayCalculator::~DelayCalculator ( )
virtualdefault

Member Function Documentation

◆ calculate_tapping_point()

virtual TappingResult recti::DelayCalculator::calculate_tapping_point ( int  distance,
double  left_delay,
double  right_delay,
double  left_capacitance,
double  right_capacitance 
) const
pure virtual

Determines the optimal tapping point for merging two subtrees to achieve prescribed skew.

This pure method computes where a new parent node should be placed on the merging segment between two child nodes to balance their delays. It returns a TappingResult that contains both the clamped extend_left (in [0, distance]) and the raw pre-clamp value, enabling the caller to implement elongation logic (when the raw value falls outside [0, distance]).

Parameters
distanceThe Manhattan distance between the merging segments.
left_delayThe delay at the left child.
right_delayThe delay at the right child.
left_capacitanceThe capacitance of the left subtree.
right_capacitanceThe capacitance of the right subtree.
Returns
A TappingResult containing the clamped extend_left, the raw raw_extend_left, and the resulting delay_left.

Implemented in recti::ElmoreDelayCalculator, and recti::LinearDelayCalculator.

◆ calculate_wire_capacitance()

virtual double recti::DelayCalculator::calculate_wire_capacitance ( int  length) const
pure virtual

Calculates the capacitance of a wire segment.

Parameters
lengthThe length of the wire.
Returns
The calculated wire capacitance.

Implemented in recti::LinearDelayCalculator, and recti::ElmoreDelayCalculator.

◆ calculate_wire_delay()

virtual double recti::DelayCalculator::calculate_wire_delay ( int  length,
double  load_capacitance 
) const
pure virtual

Calculates the delay of a wire segment.

Parameters
lengthThe length of the wire segment.
load_capacitanceThe total capacitance driven by this wire segment.
Returns
The calculated wire delay in time units.

Implemented in recti::ElmoreDelayCalculator, and recti::LinearDelayCalculator.

◆ calculate_wire_delay_per_unit()

virtual double recti::DelayCalculator::calculate_wire_delay_per_unit ( double  load_capacitance) const
pure virtual

Calculates the delay per unit length of a wire.

Parameters
load_capacitanceThe total capacitance driven by this wire segment.
Returns
The delay per unit length in time units per length unit.

Implemented in recti::ElmoreDelayCalculator, and recti::LinearDelayCalculator.

◆ operator=() [1/2]

DelayCalculator & recti::DelayCalculator::operator= ( const DelayCalculator )
default

◆ operator=() [2/2]

DelayCalculator & recti::DelayCalculator::operator= ( DelayCalculator &&  )
default

The documentation for this class was generated from the following file: