Skip to content
John McMaster edited this page Sep 10, 2018 · 21 revisions

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 models

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"

Wire

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

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

Pip

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
Clone this wiki locally