Metrics#

The SiliconCompiler schema includes a ['metric', ...] dictionary with a large number of parameters to be tracked on a per step and per index basis.

The metric values are used in the minimum() and maximum() functions to select the best compilation based on the associated ['flowgraph', <flow>, <step>, <index>, 'goal', ...] and ['flowgraph', <flow>, <step>, <index>, 'weight', ...] set for the step and index within the flowgraph. For a complete description of the minimum() function, see the Core API section of the reference manual.

The default asicflow demonstrates a traditional ASIC optimization function, with hard requirements set up for hold, setup, warnings, and errors and soft requirements for area and power.

if metric in ('errors', 'warnings', 'drvs', 'holdwns', 'setupwns', 'holdtns', 'setuptns'):
    chip.set('flowgraph', flow, step, index, 'weight', metric, 1.0)
    chip.set('flowgraph', flow, step, index, metric, 'goal', 0)
elif metric in ('cellarea', 'peakpower', 'standbypower'):
    chip.set('flowgraph', flow, step, index, 'weight', metric, 1.0)
else:
    chip.set('flowgraph', flow, step, index, 'weight', metric, 0.001)

In addition to step wise minimization, metrics are used by the Chip.summary() function to present a dashboard view of the compilation results, and can be accessed through Chip.set() / Chip.get() by the user to create custom reporting and optimization loops. The metrics are cleared before each step/index run and then updated by the post_process() function for each tool. For an example of post_process setup, see the openroad module.

The following table shows a summary of all the available metrics. For a complete descriptions, refer to the Schema section of the reference manual.

parameter

description

['metric', 'errors']

Metric: total errors

['metric', 'warnings']

Metric: total warnings

['metric', 'drvs']

Metric: total drvs

['metric', 'unconstrained']

Metric: total unconstrained

['metric', 'coverage']

Metric: coverage

['metric', 'security']

Metric: security

['metric', 'luts']

Metric: FPGA LUTs used

['metric', 'dsps']

Metric: FPGA DSP slices used

['metric', 'brams']

Metric: FPGA BRAM tiles used

['metric', 'cellarea']

Metric: cellarea

['metric', 'totalarea']

Metric: totalarea

['metric', 'utilization']

Metric: area utilization

['metric', 'peakpower']

Metric: peakpower

['metric', 'averagepower']

Metric: averagepower

['metric', 'dozepower']

Metric: dozepower

['metric', 'idlepower']

Metric: idlepower

['metric', 'leakagepower']

Metric: leakagepower

['metric', 'sleeppower']

Metric: sleeppower

['metric', 'irdrop']

Metric: peak IR drop

['metric', 'holdpaths']

Metric: holdpaths

['metric', 'setuppaths']

Metric: setuppaths

['metric', 'holdslack']

Metric: holdslack

['metric', 'holdwns']

Metric: holdwns

['metric', 'holdtns']

Metric: holdtns

['metric', 'setupslack']

Metric: setupslack

['metric', 'setupwns']

Metric: setupwns

['metric', 'setuptns']

Metric: setuptns

['metric', 'fmax']

Metric: fmax

['metric', 'macros']

Metric: macros

['metric', 'cells']

Metric: cells

['metric', 'registers']

Metric: registers

['metric', 'buffers']

Metric: buffers

['metric', 'transistors']

Metric: transistors

['metric', 'pins']

Metric: pins

['metric', 'nets']

Metric: nets

['metric', 'vias']

Metric: vias

['metric', 'wirelength']

Metric: wirelength

['metric', 'overflow']

Metric: overflow

['metric', 'memory']

Metric: memory

['metric', 'exetime']

Metric: exetime

['metric', 'tasktime']

Metric: tasktime

['metric', 'totaltime']

Metric: totaltime