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

Implements the Elmore delay model for RC trees. More...

#include <dme_algorithm.hpp>

Inheritance diagram for recti::ElmoreDelayCalculator:
Inheritance graph
[legend]
Collaboration diagram for recti::ElmoreDelayCalculator:
Collaboration graph
[legend]

Public Member Functions

 ElmoreDelayCalculator (double unit_resistance=1.0, double unit_capacitance=1.0)
 
double calculate_wire_delay (int length, double load_capacitance) const override
 Calculates the delay of a wire segment.
 
double calculate_wire_delay_per_unit (double load_capacitance) const override
 Calculates the delay per unit length of a wire.
 
double calculate_wire_capacitance (int length) const override
 Calculates the capacitance of a wire segment.
 
TappingResult calculate_tapping_point (int distance, double left_delay, double right_delay, double left_capacitance, double right_capacitance) const override
 Elmore-model tapping point.
 
- Public Member Functions inherited from recti::DelayCalculator
 DelayCalculator ()=default
 
 DelayCalculator (const DelayCalculator &)=default
 
DelayCalculatoroperator= (const DelayCalculator &)=default
 
 DelayCalculator (DelayCalculator &&)=default
 
DelayCalculatoroperator= (DelayCalculator &&)=default
 
virtual ~DelayCalculator ()=default
 

Detailed Description

Implements the Elmore delay model for RC trees.

The Elmore delay model is a widely used approximation for delay in RC interconnects. It considers both the resistance and capacitance of the wires and the downstream load. Delay = R_wire * (C_wire/2 + C_load).

Constructor & Destructor Documentation

◆ ElmoreDelayCalculator()

recti::ElmoreDelayCalculator::ElmoreDelayCalculator ( double  unit_resistance = 1.0,
double  unit_capacitance = 1.0 
)
inline

Member Function Documentation

◆ calculate_tapping_point()

TappingResult recti::ElmoreDelayCalculator::calculate_tapping_point ( int  distance,
double  left_delay,
double  right_delay,
double  left_capacitance,
double  right_capacitance 
) const
overridevirtual

Elmore-model tapping point.

Solves for the optimal tapping point z (fraction of distance from left) to achieve prescribed skew between the children considering their delays and capacitances:

z = (skew + R*(C_r + C_w/2)) / (R*(C_w + C_r + C_l))

where R = distance * unit_resistance, C_w = distance * unit_capacitance. When the raw extend_left falls below 0 or above distance, clamping and elongation logic applies (see LinearDelayCalculator).

Implements recti::DelayCalculator.

◆ calculate_wire_capacitance()

double recti::ElmoreDelayCalculator::calculate_wire_capacitance ( int  length) const
inlineoverridevirtual

Calculates the capacitance of a wire segment.

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

Implements recti::DelayCalculator.

◆ calculate_wire_delay()

double recti::ElmoreDelayCalculator::calculate_wire_delay ( int  length,
double  load_capacitance 
) const
inlineoverridevirtual

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.

Implements recti::DelayCalculator.

◆ calculate_wire_delay_per_unit()

double recti::ElmoreDelayCalculator::calculate_wire_delay_per_unit ( double  load_capacitance) const
inlineoverridevirtual

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.

Implements recti::DelayCalculator.


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