EDA Flows
In this section, some typical EDA flows that are more dynamic than the ones we have used so far are shown.
You will consider a project that implements a simulation based on calling a tool
named simulate
. The model is that a directory will contain a group
of stimulus files. The intent is to run one job for each stimulus file in the
directory. The job will run the simulate
program within the context
of a unique subdirectory for each stimulus file.
The Tcl file to define the jobs in this project will use the Tcl
glob
notation to discover all the stimulus files in the
directory based on their having a name with the suffix .stim.
Then it will create a subdirectory using the base name of the stimulus file, and run
a job in that subdirectory.
In this example, two FDL procedures are introduced: E
and
R
. The procedure E
defines the environment in
which the simulation jobs must be executed. In this case, the environment is the
combination of the BASE
environment, which is part of any normal
FlowTracer installation, and the SPICE
environment, which is
presumably an environment that has to be setup for each site to support the running
of the SPICE tool, since the location of the simulation software varies from site to
site.
The procedure R
defines the resources required by the subsequent
jobs in the flow. In this case, we declare that each job requires one license of the
tool 'spice' (represented by the resource 'License:spice') and at least 250MB of
RAM.
E "BASE+SPICE"
R "License:spice RAM/250"
foreach stimulusFile [glob *.stim] {
set root [file root $stimulusFile]
indir -create $root {
J vw simulate ../$stimulusFile -o $root.log
}
}
This shows how jobs would be defined in a production environment so that a project's flow gets defined by way of running vovbuild against a script holding the job definitions using the FDL language and tcl.
The back-end flows for placement and routing of blocks tend to require many
sequential steps, each one requiring different resources, such as licenses and RAM.
While many organization use the same tool suites, such as Cadence's Silicon
Ensemble, it is rare to see the core tools such as qp
and
wroute
called directly. Instead, each organization has its own
wrapper script to define how those tools are to be invoked. In our example, the
wrapper script is called pnr
and is presumably accessible from the
environment called EDA
.
set block [shift]
E "BASE+EDA+CADENCE"
R "License:qp RAM/250"
J vw pnr place $block
J vw pnr scanins $block
R "License:wroute RAM/2000"
J vw pnr route $block
J vw pnr clocktree $block
R ""
J vw pnr to_gds $block