Tools and flows
Odatix ships with ready-to-use definitions for the most common EDA tools, and
has no hard-coded list of supported tools: a tool is simply a directory
containing a tool.yml, discovered at run time. That is what makes it possible
to run Odatix on an in-house script, on a tool Odatix has never heard of, or on
the tools it ships with — but run your way.
Table of Contents
Tool, flow, job type, step
Four notions are easy to confuse, and telling them apart makes the rest of this section obvious:
| Notion | What it is | Chosen by |
|---|---|---|
| Tool | A directory with a tool.yml: Vivado, Genus, your own script. |
-t/--tool |
| Job type | What Odatix runs: an fmax search, a synthesis at given frequencies, a place & route, an RTL analysis. | the command (odatix fmax, synth, pnr, analyze) |
| Flow | A way of running a tool: other options, other scripts, another binary. Flows of one tool are alternatives meant to be compared, so each gets its own work directory and tags its results. | -f/--flow |
| Step | One stage of a flow — synthesis, place & route, bitstream — run as its own process, stoppable and resumable. | -u/--until |
Tools shipped with Odatix
Each built-in tool declares the job types it can run. A job type is what a command asks for; a tool that does not declare one simply cannot be selected for that command.
Which command runs what
| Job type | Command | What it does | Tools |
|---|---|---|---|
| Fmax search | odatix fmax |
Binary search of the highest frequency the design closes timing at | Vivado, Design Compiler, Genus, OpenLane |
| Synthesis | odatix synth |
Synthesis (and, on FPGA, place & route and bitstream) at the frequencies you give | Vivado, Design Compiler, Genus |
| Place & route | odatix pnr |
Places & routes a netlist a previous synthesis job produced, possibly with another tool (--from-tool) |
IC Compiler II, Innovus |
| RTL analysis | odatix analyze |
Elaborates the RTL without synthesizing it: lint, elaboration errors, early estimates | Vivado, Design Compiler, Genus, Verilator |
Because place & route is a job type of its own, an ASIC chain is two commands rather than one monolithic flow — and the two halves need not come from the same vendor:
odatix synth -t design_compiler
odatix pnr -t innovus --from-tool design_compiler
Simulation is not in this table: it is not driven by the synthesis machinery but by workflows, which run the commands of any simulator — Verilator, GHDL, ModelSim, cocotb or a Makefile of your own.
Odatix never installs or bundles these tools. It runs the ones already
installed on your machine, and each tool.yml declares a test command so
odatix can tell you up front whether a tool is reachable.
Three things you can add
Your tool is not in the table above, or it is but you want it run differently? That is the normal case, not the exception:
| You want to | Add a | Read |
|---|---|---|
| Run an existing tool differently — other options, other scripts, another binary, a resumable pipeline | flow | Run your own flows and scripts |
| Run a synthesis / place & route / analysis tool Odatix does not ship | tool | Add non supported tools |
| Run something that is not a synthesis at all — a script, a training, a benchmark, an arbitrary pipeline | workflow | Workflows |
The line between a tool and a workflow is what the job looks like. A tool is driven by Odatix’s synthesis machinery: it gets a design, a target, a clock, a frequency (or a frequency search), and produces the metrics Odatix compares across all of them. A workflow runs a task graph you describe yourself, with no clock, no target and no frequency search, and produces whatever metrics you define.
Where tools live
Tools are looked up in two directories, highest precedence first:
- the workspace tools directory —
odatix_userconfig/tools/by default, configurable with thetools_pathkey ofodatix.yml; - the built-in directory shipped with Odatix.
Any directory holding a tool.yml in either location is a tool. Directories
whose name starts with _ or . are skipped — that is how _common/ stays a
shared script directory instead of becoming a tool.
odatix_userconfig/
├── odatix.yml # tools_path: "odatix_userconfig/tools"
├── target_myTool.yml # targets of your tool
└── tools/
└── myTool/
├── tool.yml # what to run — the only required file
├── metrics.yml # what to measure
└── tcl/ # scripts copied into every job directory
└── synth_script.tcl
A tool defined in both places
A tool can exist in the workspace and in the built-in directory at the same
time. The two tool.yml files are then merged key by key, the workspace one
taking precedence, and the scripts of both directories are copied into the job
directory (the workspace ones last, so they win).
This is what lets a odatix_userconfig/tools/vivado/tool.yml holding nothing but
a flows: section add a flow to the built-in Vivado, without copying its whole
definition.
The built-in flows are read-only. What a workspace tool.yml says about
them — the unix / windows command sections of a built-in tool, its
default_flow, and any flow name Odatix already declares — is dropped, with a
warning naming what was ignored. A built-in tool always runs what Odatix says
it runs, so a result tagged vivado / standard means the same thing in every
workspace.
Everything else goes through untouched: flows of your own, the metadata,
report_path, default_metrics_file, the format section… And to start from
what a built-in tool does and own all of it, duplicate it into your
workspace: the copy is a tool of its own, with nothing read-only left.
Doing it from the GUI
Everything on this page can be done without opening a text editor. odatix-gui →
EDA Tools lists the tools of your workspace and, apart, the built-in ones:
- Create New Tool — a new workspace tool with a minimal
tool.yml; - Settings — the Tool Editor: metadata, behaviour, flows, steps and log formatting;
- Metrics — the metrics editor for the tool’s
metrics.yml; - Duplicate — on a built-in tool, copies it into your workspace to be edited as a whole; on a workspace tool, clones it;
- on a workspace tool, the folder button opens the tool directory, for the scripts the GUI does not edit, and the bin button deletes the tool.
Cards of tools declaring several flows list them under the name. Built-in tools say built-in under theirs, which becomes built-in + your changes once the workspace overrides or extends something — and in the Tool Editor, the flows Odatix itself declares carry a read-only badge.
In this section
Run your own flows and scripts
Add non supported tools
tool.yml, variables, the job directory contract, metrics and targets — plus the Tool Editor.