FPGARelated.com

VHDL

Category: Hdl | Also known as: VHSIC Hardware Description Language

VHDL (VHSIC Hardware Description Language) is a strongly typed, concurrent hardware description language used to model, simulate, synthesize, and verify digital logic, primarily targeting FPGAs and ASICs but also used for testbenches, system-level modeling, and documentation. It was originally developed under a U.S. Department of Defense initiative and standardized as IEEE 1076.

In practice

VHDL is widely used to describe both the behavior and structure of digital hardware. A designer writes entities (defining the interface) and architectures (defining the internal logic), then targets the design at an FPGA or ASIC toolchain that synthesizes the RTL into an implementation-specific form such as gates, lookup tables, or other target primitives depending on the flow. Common targets include Xilinx/AMD, Intel/Altera, Lattice, and Microsemi FPGAs, as well as ASIC standard-cell flows.

The language is strongly and explicitly typed, which catches many classes of errors at compile time that would silently misbehave in a weakly typed HDL. Some mismatches can still survive to simulation or manifest only as simulation-to-synthesis discrepancies, so typing is a safeguard rather than a complete guarantee. This verbosity is a frequent point of friction for newcomers: a simple 4-bit counter requires considerably more boilerplate in VHDL than in Verilog. The trade-off is that large team projects often benefit from the stricter type system.

Simulation is a central part of VHDL-based development. Testbenches are written in VHDL itself, using constructs not intended for synthesis (wait statements, file I/O, assertions). Open-source simulators such as GHDL provide broad IEEE 1076-2008 support and can be integrated into automated CI flows; the EmbeddedRelated post "Using GHDL for interactive simulation under Linux" demonstrates this workflow.

A common pitfall is conflating simulation semantics with synthesis semantics. Constructs that simulate correctly -- such as certain after clauses, initial signal values, or shared variables -- may be ignored or rejected by synthesis tools. Designers should constrain themselves to a synthesizable RTL subset and verify that the target toolchain supports the specific VHDL-2008 features they rely on, as tool support varies.

 Learn this in FPGA Fundamentals

Discussed on FPGARelated

Frequently asked

What is the difference between an entity and an architecture in VHDL?
An entity declares the module's interface: its input and output ports, and optionally generic parameters. An architecture defines the internal implementation of that entity. A single entity can have multiple architectures (for example, a behavioral simulation model and a separate structural RTL implementation), and the designer selects which to use at elaboration time.
How does VHDL handle concurrency?
Statements inside an architecture body execute concurrently by default, modeling the parallel nature of hardware. Sequential behavior is expressed inside process blocks, which themselves run concurrently with each other and with concurrent signal assignments. This concurrency model is fundamental and differs sharply from the sequential execution model of C or Python.
What VHDL standard should I target?
VHDL-93 and VHDL-2008 are the most commonly supported standards in synthesis tools. VHDL-2008 added significant improvements -- enhanced generics, the matching relational operators, and better support for fixed and floating point -- but synthesis tool support for 2008 features still varies by vendor and version. VHDL-2019 exists but has very limited tool support as of the mid-2020s. Check your target toolchain's release notes before relying on newer language features.
Can VHDL be used for embedded software as well as hardware?
No. VHDL describes hardware structure and behavior; it is compiled by synthesis tools into netlists, not into machine code. It has no role in the software running on an embedded processor. If a soft-core processor (such as a MicroBlaze or NIOS II) is instantiated in an FPGA, the processor itself may be described in VHDL, but the firmware running on that processor is written in C, assembly, or a similar software language.
How does VHDL compare to Verilog for embedded FPGA work?
Both languages are synthesized to equivalent hardware; the choice is largely about style and tooling. VHDL's strong typing and explicit declarations make certain bugs impossible at compile time, and its simulation semantics are precisely defined. Verilog is more concise and closer in feel to C, which some embedded developers find more approachable. SystemVerilog has largely superseded plain Verilog for verification. The EmbeddedRelated post 'Verilog vs VHDL' compares the two from a practical design perspective.

Differentiators vs similar concepts

VHDL is often compared directly to Verilog and SystemVerilog. All three are IEEE-standardized HDLs supported by major synthesis tools, and all describe hardware that synthesizes to equivalent netlists. The key differences are stylistic and semantic: VHDL is strongly and explicitly typed (std_logic vs. Verilog's implicit net types), more verbose, and has well-defined simulation delta-cycle semantics. Verilog is more concise, uses implicit typing, and has historically had some ambiguous simulation corner cases. SystemVerilog extends Verilog with object-oriented verification constructs and stronger type checking, and is dominant in ASIC verification flows. VHDL should not be confused with HLS (high-level synthesis) tools such as Vitis HLS or Catapult, which accept C/C++ and generate VHDL or Verilog as an output rather than requiring the designer to write RTL manually.