Flows#

SiliconCompiler flows are created by configuring the ['flowgraph', ...] parameters within the schema. To simplify reuse of complex flows, the project includes standardized interfaces for bundling flowgraph settings as reusable named modules.

Similar to other types of SiliconCompiler modules, flows are loaded by passing a Flow object into the use() function before a run is started. Flow objects typically use the node() and edge() functions to configure a “flowgraph” which represents a hierarchical collection of tasks to execute. A complete set of supported open flows can be found in flows.

Functions#

The table below shows the function interfaces for setting up Flow objects.

Function

Description

Arg

Returns

Used by

Required

setup()

Flow setup function

optional keyword arguments

Flow

use()

yes

make_docs()

Doc generator

Chip

Flow

sphinx

no

setup()#

A SiliconCompiler flowgraph consists of a set of connected nodes and edges, where a node is an executable tool performing some (“task”), and an edge is the connection between those tasks. To configure the flow, the following helper methods are available node() to create a new node in the graph and edge() to create an edge between nodes.

from siliconcompiler import Flow
from siliconcompiler.tools.surelog import parse
from siliconcompiler.tools.yosys import syn_asic

flowname = '<flowname>'
flow = Flow(flowname)
flow.node(flowname, <node name0>, parse)
flow.node(flowname, <node name1>, syn_asic)
flow.edge(flowname, <node name0>, <node name1>)

Flows that support SiliconCompiler metric functions (minimum, maximum, verify, and mux) should also set appropriate metric weights and goals for correct behavior.

for metric in ('errors','drvs','holdwns','setupwns','holdtns','setuptns'):
  flow.set('flowgraph', flowname, step, index, 'goal', metric, 0)
for metric in ('cellarea', 'peakpower', 'standbypower'):
  flow.set('flowgraph', flowname, step, index, 'weight', metric, 1.0)

For a complete working example, see the asicflow and fpgaflow source code.

make_docs(chip)#

The make_docs() function is used by the projects auto-doc generation. This function is only needed if the flow requires additional inputs to be setup correctly. The function should include a call to the setup function to populate the schema with all settings as shown below. The input to this function chip is a chip object created by the auto-doc generator.

def make_docs(chip):
  return setup()