Open toolbench
Choose free Verilog tools by the job in front of you
A simulator, synthesizer, viewer, preprocessor, and editor occupy different positions in the flow. A useful tool list makes those boundaries visible.
Start with capability, then test the edges
Free software can support serious learning, automation, regression testing, synthesis experiments, and smaller hardware projects. The right choice depends on what must be accepted, produced, and integrated. List the language revision and constructs you need, the target platform, the expected design scale, the required waveform or netlist formats, and whether the tool will run interactively or unattended. A popular name is not a substitute for that compatibility check.
For a simulator, test compilation units, include paths, parameters, memories, signed arithmetic, system tasks, timing controls, and any mixed Verilog/SystemVerilog boundary in your sources. For a synthesizer, test the intended memories, arithmetic, resets, clock enables, hierarchy, and target mapping. For a viewer, confirm the trace format and the ability to navigate deep hierarchy. For automation, insist on stable exit codes and machine-readable diagnostics.
Licensing also matters. “Free” can describe open-source software, a no-cost binary with restrictions, an evaluation build, or an old release whose distribution terms are unclear. Verify the current project license and packaging before redistributing it or embedding it into a service. The entries below describe how the directory organized tools historically; they are not download offers.
Assemble a small, observable workflow
A minimal flow has a source tree, an explicit file list, a compiler or simulator command, a self-checking testbench, and a repeatable output directory. Add lint before long simulations. Generate waveforms only when requested so regressions stay fast. Preserve the seed for randomized tests. Print a concise pass or fail summary and return a nonzero status on failure. These habits make even a classroom-sized design easier to trust.
Synthesis experiments should begin with a tiny top module and a target-independent report. Inspect inferred registers, memories, latches, and arithmetic before mapping to a device library. Compare the synthesized structure with the RTL intent, then simulate at the appropriate abstraction if the risk justifies it. A waveform viewer is excellent for diagnosis, but checks belong in the testbench so a machine can detect regressions without a person watching traces.
Keep utilities at the edges of the flow. Preprocessors can reduce repetition, but they can also hide the source seen by the compiler. Translators are useful for migration and inspection, but translated code still needs tests. Tag generators and editor modes accelerate navigation, not correctness. Programming-language interface code can unlock models and data sources, but it adds a binary and scheduling boundary that deserves focused tests.
Portability should be measured rather than assumed. Keep a compact project that exercises parameters, generated hierarchy, signed arithmetic, memories, common system tasks, and the trace format used by the team. Run it when a package or tool revision changes. When two implementations disagree, reduce the case and identify whether the difference comes from language mode, unsupported syntax, an extension, or a defect.
Diagnostics are part of the interface. A useful batch tool distinguishes compile failure, test failure, and infrastructure failure; produces locations an editor can open; and does not require a graphical session for ordinary work. A warning policy should be strict enough to surface width, latch, and unused-signal problems without training users to ignore a permanent wall of noise.
Finally, plan how artifacts move between stages. File lists, generated sources, waveform traces, netlists, constraints, and reports need stable names and disposable output directories. Keep the command that produced each significant result. A collection of capable programs becomes a flow only when their boundaries are explicit and repeatable.
Historical tool ledger
Simulation
VeriWell, vbs, and evaluation distributions of commercial simulators represented the no-cost simulation choices listed in the directory's earlier era. Their presence records a category, not present-day support.
Generation
Genscript, FSMDesigner, CiscoFSM, and related scripts generated repetitive source or finite-state-machine structure. Generated RTL should be reviewed and tested like hand-written RTL.
Preprocessing
VPP and VBPP expanded or transformed source before compilation. Such tools can make configuration systematic, but the expanded output must remain inspectable.
Translation
Verilog2VHDL and V2HTML served language conversion and source-presentation tasks. Translation preserves neither intent nor verification automatically.
Editing
NEdit modes, tag generators derived from vtags.pl, and PostScript formatting scripts improved navigation and printed review in an editor-centered workflow.
Interfaces
Small PLIs handled file input, plus-argument conventions, and connections to external behavior. The PLI / VPI guide explains the boundary they crossed.
Interconnect
MKTREE appeared in the period directory as a Verilog auto-connect utility. Such a utility read structural intent and generated repetitive module connectivity; this is a historical description, not an availability or support claim.
Maintained project starting points
These project pages provide current documentation for three distinct roles. Evaluate them against your own requirements and releases.
- Icarus Verilog — a compiler and event-driven simulation toolchain.
- Verilator — a compiled simulation and lint-oriented tool with a detailed user guide.
- Yosys — a framework for RTL synthesis and transformation.
- GTKWave — a waveform viewer for common simulation trace formats.