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.
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()