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.

This is an example of how to define a group of simulation jobs for a project. These lines would be placed into a tcl file so that the tcl file could be registered into FlowTracer by running vovbuild against it.
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.

Example of defining a group of jobs to do a Place & Route operation:
set block [shift]

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