-
Notifications
You must be signed in to change notification settings - Fork 152
Timing
Notes on creating a device timing model
2018-09-10: working on a much more detailed README. This will initially go into timfuz, but parts may be moved here. Probably put generic things here and tool specific things in the README.
Fanout effect timing info. IIRC I saw about 20% variation across things
Speed JSON: generate using timfuz, currently on a branch in mcmasterg repo. TODO: commit to DB
I also have some preliminary timing numbers in my repo. Needs to be adjusted to include wires (all the info is there / expected easy). Needs some tweaks for min/max, but can run it for max today to generate a baseline at least
Speed indexes seem to indicate varying timing models. Names are documented in the speed JSON. 65535 is a special value with unclear meaning. Not every name has a non-65535 speed index, but no two names have the same speed index. speed_index applies to both wires and pips.
A lot of speed model info can be dumped using get_speed_models. However, this only gives names and not detailed model info
Sample types:
- bel_delay
- wire
- pass_transistor
There are a few meta models of type "content_version" such as the one named "xilinx"
The following fields are consistent across node name (ie L/R doesn't effect):
- COST_CODE
- IS_INPUT_PIN
- IS_OUTPUT_PIN
- IS_PART_OF_BUS
- NUM_INTERSECTS
- NUM_TILE_PORTS
- SPEED_INDEX
- TILE_PATTERN_OFFSET
The following vary:
- ID_IN_TILE_TYPE
- IS_CONNECTED
- NUM_DOWNHILL_PIPS
- NUM_PIPS
- NUM_UPHILL_PIPS
- TILE_NAME
Node's have "cost codes". I'm unclear what these are used for as presumably wires are used for the actual timing model. Maybe these are used for timing based placement?
Sample cost codes:
- 0: GENERIC
- 1: DOUBLE
- 2: INPUT
- 3: BENTQUAD
Seed sped JSON for full list
The following fields are consistent across wire name (ie L/R doesn't effect):
- COST_CODE
- COST_CODE_NAME
- IS_BAD
- IS_COMPLETE
- IS_GND
- IS_VCC
The following vary:
- SPEED_CLASS
- IS_PIN
- IS_INPUT_PIN
- IS_OUTPUT_PIN
- PIN_WIRE
- NUM_WIRES
PIN_WIRE: sometimes 65535
SPEED_CLASS shifts around a lot depending on other parameter values, which also shift around. A few interesting comparisons
Sometimes it differs for no apparent reason. For example:
- BASE_CLOCK_REGION:X0Y3 CLASS:node COST_CODE:21 COST_CODE_NAME:HQUAD IS_BAD:0 IS_COMPLETE:1 IS_GND:0 IS_INPUT_PIN:0 IS_OUTPUT_PIN:0 IS_PIN:0 IS_VCC:0 NAME:INT_L_X0Y199/WW4BEG3 NUM_WIRES:13 PIN_WIRE:65535 SPEED_CLASS:100
- BASE_CLOCK_REGION:X0Y3 CLASS:node COST_CODE:21 COST_CODE_NAME:HQUAD IS_BAD:0 IS_COMPLETE:1 IS_GND:0 IS_INPUT_PIN:0 IS_OUTPUT_PIN:0 IS_PIN:0 IS_VCC:0 NAME:INT_L_X2Y199/WW4BEG3 NUM_WIRES:13 PIN_WIRE:65535 SPEED_CLASS:284
The following fields are consistent across node name (ie L/R doesn't effect):
- CAN_INVERT',
- IS_BUFFERED_2_0',
- IS_BUFFERED_2_1',
- IS_DIRECTIONAL',
- IS_EXCLUDED_PIP',
- IS_FIXED_INVERSION',
- IS_INVERTED',
- IS_PSEUDO',
- IS_SITE_PIP',
- IS_TEST_PIP',
The following vary:
- TILE