mirror of https://github.com/openXC7/prjxray.git
Add initial object and docstrings for timing model.
Signed-off-by: Keith Rothman <537074+litghost@users.noreply.github.com>
This commit is contained in:
parent
27bba88fc8
commit
2f74b8a508
|
|
@ -0,0 +1,104 @@
|
||||||
|
""" Route timing delay definitions.
|
||||||
|
|
||||||
|
Routing delay is formed from two parts in this model:
|
||||||
|
|
||||||
|
- Intristic delay of the element
|
||||||
|
- Capactive loading delay of the net
|
||||||
|
|
||||||
|
Intristic delay is a time value (e.g. nanoseconds), does not vary based on
|
||||||
|
routing fanout. It does vary based on the PVT (process, voltage, temperature)
|
||||||
|
corner. PvtCorner and IntristicDelay objects are used to model intristic
|
||||||
|
delay of elements.
|
||||||
|
|
||||||
|
Capactive loading is the elmore delay from the RC tree formed by interconnect.
|
||||||
|
The RC tree is made up of 5 types of RC nodes:
|
||||||
|
|
||||||
|
1. Out-pins
|
||||||
|
2. Buffer switches
|
||||||
|
3. Pass-through switches
|
||||||
|
4. Wires
|
||||||
|
5. In-pins
|
||||||
|
|
||||||
|
Outpins have intristic delays and an driver resistence.
|
||||||
|
|
||||||
|
Buffer switches have instrinsic delays, internal capacitance, and output driver
|
||||||
|
resistence.
|
||||||
|
|
||||||
|
Pass-through switches have instrinsic delays and a resistence and capacitance.
|
||||||
|
|
||||||
|
Wires have a resistence and capacitance.
|
||||||
|
|
||||||
|
Inpins have instrinsic delays and a sink capacitance.
|
||||||
|
|
||||||
|
The elmore delay is the RC tree formed by these 5 components. Out pins and
|
||||||
|
buffer switches are the roots of the elmore tree. Buffer switches
|
||||||
|
and inpins are leafs of the elmore tree. Wires and pass-through switches are
|
||||||
|
nodes in the tree, and share their capacitance upstream and downstream using a
|
||||||
|
pi-model.
|
||||||
|
|
||||||
|
"""
|
||||||
|
import enum
|
||||||
|
from collections import namedtuple
|
||||||
|
|
||||||
|
class PvtCorner(enum.Enum):
|
||||||
|
""" Process/voltage/temperature corner definitions. """
|
||||||
|
|
||||||
|
# Corner where device operates with fastest intristic delays.
|
||||||
|
FAST = "FAST"
|
||||||
|
|
||||||
|
# Corner where device operates with slowest intristic delays.
|
||||||
|
SLOW = "SLOW"
|
||||||
|
|
||||||
|
class IntristicDelay(namedtuple('IntristicDelay', 'min max')):
|
||||||
|
""" An intristic delay instance.
|
||||||
|
|
||||||
|
Represents is the intristic delay through an element (e.g. a site pin or
|
||||||
|
interconnect pip).
|
||||||
|
|
||||||
|
The intristic delay of an element is generally modelled at a particular
|
||||||
|
"corner" of a design. The "corner" generally speaking is modelled over
|
||||||
|
process, voltage and temperature PVT. The IntristicDelay object
|
||||||
|
reperesents the minimum or maximum delay through all instances of the
|
||||||
|
element at 1 corner.
|
||||||
|
|
||||||
|
Attributes
|
||||||
|
----------
|
||||||
|
|
||||||
|
min : float
|
||||||
|
Minimum instrinsic delay (nsec)
|
||||||
|
|
||||||
|
max : str
|
||||||
|
Maximum instrinsic delay (nsec)
|
||||||
|
"""
|
||||||
|
|
||||||
|
class RcElement(namedtuple('RcElement', 'resistence capacitance')):
|
||||||
|
""" One part of an RcNode, embedded within an RcTree.
|
||||||
|
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
def fast_slow_tuple_to_corners(arr):
|
||||||
|
""" Convert delay 4-tuple into two IntristicDelay objects.
|
||||||
|
|
||||||
|
Returns
|
||||||
|
-------
|
||||||
|
|
||||||
|
corners : dict of PvtCorner to IntristicDelay
|
||||||
|
Dictionary keys of FAST and SLOW, mapping to the instrinsic delay
|
||||||
|
for each corner.
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
fast_min, fast_max, slow_min, slow_max = map(float, arr)
|
||||||
|
|
||||||
|
return {
|
||||||
|
PvtCorner.FAST: IntristicDelay(
|
||||||
|
min=fast_min,
|
||||||
|
max=fast_max,
|
||||||
|
),
|
||||||
|
PvtCorner.SLOW: IntristicDelay(
|
||||||
|
min=slow_min,
|
||||||
|
max=slow_max,
|
||||||
|
),
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue