- What it isFront-end CAD reference flow
- DrivesIcarus, VCS, Verilator, Yosys, ANVL
- PlatformLinux, prebuilt binaries
- LicenseFree, no license server
FECAD is the EDAUtils front-end CAD reference flow. It generates the Makefiles and configuration that drive RTL simulation, static checks, synthesis, equivalence checking and DV regression across a hierarchy of soft IPs, hard IPs, VIPs and SoCs, and it records which test proves which requirement.
FECAD does not replace your EDA tools. It sits above them: you describe the design and its dependencies once, and the flow generates the per-step Makefiles that call the tools you already use.
The design flow
| Step | What runs | Generated by |
|---|---|---|
| Project and design setup | Flow root, tool versions, IP directory and dependencies | create_structures, generate_ip_dependencies |
| Flow configuration | File lists, waivers, constraints | generate_flat_filelists, get_config_value |
| RTL generation | Connected RTL from IP metadata | Baya |
| Compile and elaborate | ANVL (anvl, anvh) | generate_misc_makefile |
| Simulation | Icarus Verilog, VCS | generate_sim_makefile |
| Static checks and linting | Verilator | generate_static_check_makefile |
| Synthesis | Yosys | generate_synthesis_makefile |
| Equivalence check | Yosys | generate_eq_check_makefile |
| Release | IPQC gate, then RTL release | report_summary_* |
The DV flow
DV environment and build setup pull in the VIPs and the released RTL, compile to a.out or simv, then run the regression in parallel. Logs are parsed into a summary and a coverage report.
$ generate_dv_makefile
$ dvregress -exe ./simv -model my_model -designconfig DUT_1 \
-testplan adder_ip/testplan/DUT_1.yml -parse_log
The testplan compiles into the Tests.list format the runner already reads, and the compiled list is written into the regression directory so you can see exactly what ran. -override KEY=VAL beats the testplan value for every row.
Requirement to test traceability
A requirement is only useful if you can say which test proves it. FECAD records that chain in three plain YAML files inside the IP, with no server involved and nothing leaving your network.
<ip>/req/<area>.yml requirements
<ip>/testreq/<area>.yml test requirements
<ip>/testplan/<DUT>.yml testplan rows, one per test
Every entry carries an id that is unique across the IP; testplan rows reference test requirements, which reference requirements. traceability_report walks the chain and reports it. The bundled adder_ip/ is a complete worked example of all three files.
Reporting
report_summary_sim_icarus- simulation pass and fail summaryreport_summary_static_checks_verilator- lint and static check summaryreport_summary_synthesis_yosys- synthesis resultsreport_summary_anvl- compile and elaboration resultsparse_log- turns raw tool logs into structured resultstraceability_report- requirement to test coverage
Install
$ tar xzf fecadflow-<version>.tar.gz
$ cd fecadflow-<version>
$ ./install.sh [install_dir] # default: ~/fecadflow
The installer checks for Python 3.8 or newer, installs the small set of Python dependencies, copies the bundle into place and writes env/setup/set_path. Every fecadflow command checks for a signed license file, so copy the edautils.lic issued to you into $INSTALL_DIR/edautils.lic.
Run the end-to-end example
$ bash $INSTALL_DIR/examples/run_end_to_end.sh
This scaffolds a small sample IP, a clock divider, with create_structures, then drives it through every flow domain. It takes well under a minute, and the script is the same command sequence you would run by hand for a real IP.
| Flow domain | Tool | What it does |
|---|---|---|
sim | Icarus Verilog | Compiles the RTL with iverilog |
static_checks | Verilator | Lints the RTL with --lint-only |
synthesis | Yosys | Synthesizes RTL to a gate netlist |
eq_check | Yosys | Equivalence-checks RTL against the synthesized netlist |
misc | ANVL | Compile and elaborate; skipped automatically when anvl is not installed |
Scaffold your own IP
$ cd $EDAUTILS_RTL_PROJECT_ROOT
$ create_structures -techno <techno> -name <your_ip> -full_structure true
$ cd <your_ip>
$ echo 'src/rtl/your_module.v' > filelists/<designconfig>/rtl.f
Then, for each flow domain you need:
$ cd <flow_domain>/<tool>
$ cp $EDAUTILS_FECAD_FLOW_ROOT/defaults/<flow_domain>/<tool>/Makefile .
$ make TECHNO=<techno> TRIAL_NAME=trial TOP_MODULE_NAME=<TOP> \
DESIGN_CFG_NAME=<designconfig> OUTPUT_DIR=<out> genfilelists
$ make ... genmakefiles
$ make ... <tool>_compile
Run those as three separate make invocations
genmakefileswrites the file that the<tool>_compiletarget lives in.makereads its includes once, at parse time, somake t1 t2 t3in one command cannot see a target that did not exist when it started.- The symptom of getting this wrong is
No rule to make target '<tool>_compile'.
Troubleshooting
| Symptom | Cause and fix |
|---|---|
Couldn't find valid license | edautils.lic is missing or expired, or EDAUTILS_LICENSE_FILE points at the wrong path. |
No rule to make target '<tool>_compile' | The three make targets were run in one invocation. Run them separately, as above. |
| eq_check errors on an async-reset flip-flop | Sensitive to the installed Yosys version, not to your design. |