Fact-checked by Grok 2 weeks ago

VHDL

VHDL (VHSIC ) is a standardized used to model, simulate, verify, and synthesize digital electronic systems at multiple levels of abstraction. Developed as part of the U.S. Department of Defense's Very High Speed Integrated Circuits (VHSIC) program, VHDL provides a formal, machine-readable notation that supports the entire design process, from high-level behavioral descriptions to low-level structural implementations. Its syntax and semantics are defined by the IEEE 1076 standard, which has evolved through revisions to incorporate advanced features like improved support for verification. Key to VHDL's utility is its support for three primary modeling styles: behavioral, which describes system functionality in algorithmic terms; or , which specifies data paths and ; and structural, which interconnects predefined components like or modules. Unlike sequential programming languages, VHDL emphasizes concurrency, with statements outside processes executing simultaneously to mirror hardware parallelism, while sequential statements within processes handle clocked or conditional behaviors. This flexibility enables VHDL to facilitate early design through , automated to field-programmable arrays (FPGAs) or application-specific integrated circuits (), and comprehensive testing of electronic systems. As of 2025, VHDL remains a cornerstone in fields like , , and , often used alongside tools for and .

Overview

Definition and Purpose

VHDL, an acronym for VHSIC where VHSIC stands for Very High Speed , is a standardized hardware description language designed for modeling and simulating the behavior and structure of digital hardware systems. Originating from the U.S. Department of Defense's Very High Speed (VHSIC) program initiated in March 1980, VHDL was created to meet the need for a reliable, standardized method to document and design complex high-speed digital circuits, particularly for military applications. The primary purpose of VHDL is to enable the description of electronic systems at multiple levels of , ranging from -level implementations to high-level behavioral models and system-level architectures, facilitating both for and for implementation on field-programmable arrays (FPGAs) or application-specific integrated circuits (). Among these levels, behavioral modeling describes functionality without details, structural modeling interconnects components, and (RTL) modeling—emphasized for —specifies data flow between registers and operations, bridging and realization. VHDL serves as one of the two dominant hardware description languages, alongside , for digital system design and .

Key Concepts

VHDL is fundamentally a that emphasizes concurrency to model the parallel nature of digital . Unlike sequential programming languages, which execute instructions one at a time, VHDL employs concurrent statements that execute simultaneously, reflecting the inherent parallelism in hardware circuits where multiple operations occur independently. This approach allows designers to describe complex systems where signals propagate and logic gates operate in parallel without predefined execution order. Time modeling in VHDL provides explicit control over timing, essential for representing real-world behaviors such as and clock cycles. Through mechanisms like delay specifications and wait statements, VHDL simulates the passage of time in an event-driven manner, enabling accurate verification of timing-dependent designs. Delays can be inertial or transport-based to mimic signal settling times, while wait statements suspend process execution until specific conditions or durations are met, distinguishing VHDL's temporal modeling from the instantaneous execution typical in software. The language supports hierarchical design through entities and architectures, promoting modularity and reusability in large-scale systems. An entity defines the external interface of a component, while one or more architectures describe its internal behavior or structure, allowing designs to be composed from interconnected subcomponents at various abstraction levels. This hierarchical structure facilitates top-down or bottom-up design methodologies, encapsulating complexity and enabling efficient management of digital systems. As a strongly typed , VHDL requires all signals, variables, and constants to be explicitly declared with precise types, preventing type mismatches and enhancing reliability. This strict , including built-in and user-defined types, ensures that operations are only performed on compatible , catching errors early during compilation rather than at . In contrast to software that focus on algorithmic flow, VHDL describes behavior—what occurs simultaneously across components—prioritizing structural and temporal aspects over sequential control.

History

Origins and Development

VHDL, or VHSIC Hardware Description Language, emerged from the U.S. Department of Defense's () Very High Speed (VHSIC) program, initiated in 1980 to tackle escalating challenges in hardware design amid the rise of very large-scale (VLSI) technologies. The program's primary motivations were to shorten design cycles for complex digital systems, foster interoperability among diverse hardware design and tools from multiple vendors, and supplant fragmented, proprietary methods like and custom simulators that hindered efficient collaboration and reuse in military applications. By standardizing a single, non-proprietary language, the aimed to streamline , , and processes, ultimately reducing costs and accelerating the of advanced circuits into defense systems. Development of VHDL began in earnest in 1983, when the DoD awarded a contract to a consortium comprising Intermetrics, Inc., IBM, and Texas Instruments to create the baseline language specification. Intermetrics led the effort, drawing syntactic inspiration from the Ada programming language to ensure readability and robustness suitable for safety-critical hardware descriptions. Over the next two years, the team iterated through multiple drafts, incorporating feedback from VHSIC phase contractors to balance expressiveness for behavioral modeling with support for structural and register-transfer level designs. This collaborative approach addressed the growing complexity of VLSI, where traditional tools struggled with portability and verification across heterogeneous environments. The first complete draft, version 7.2, was released in August 1985 for public review, marking a pivotal milestone that invited broader input to refine the language before . In 1986, the placed VHDL into the to encourage widespread adoption beyond confines, eliminating proprietary barriers and promoting by commercial vendors. Early adoption faced hurdles due to the scarcity of mature simulators and synthesizers, as the ecosystem of supporting software was nascent and required significant investment in validation and training. Nonetheless, VHDL quickly gained footing in and sectors, where its rigor aligned with stringent reliability needs, enabling reusable design libraries and improved system-level verification in projects like and systems.

Standardization Process

The standardization of VHDL was managed by the IEEE Computer Society's Design Automation Standards Committee (DASC), which established the VHDL and Group (VASG) as the primary responsible for refining and formalizing the language. This effort built upon the initial language developed under the U.S. Department of Defense's Very High Speed (VHSIC) program, transitioning it from a tool to an open . The standardization process followed IEEE's consensus-based procedures, including iterative development by the VASG, public review periods for soliciting from and , and formal balloting among qualified IEEE members to resolve issues and achieve approval. objectives included aligning the language with DoD requirements for hardware description, emphasizing portability to enable designs to be simulated and implemented across diverse (EDA) tools without vendor-specific dependencies. The process culminated in the ratification of IEEE Std 1076-1987 by the IEEE Standards Board in December 1987, which defined the core syntax, semantics, and constructs of VHDL primarily for modeling and simulating digital logic systems. The initial scope of IEEE Std 1076-1987 focused on behavioral and structural description for simulation purposes, laying the foundation for later extensions that supported synthesis and higher-level modeling. By establishing a vendor-neutral specification, the standard facilitated the proliferation of compatible VHDL tools and libraries, driving industry-wide adoption and innovation in EDA software during the 1990s.

Language Fundamentals

Syntax and Structure

VHDL code is organized into a hierarchical structure of design units, primarily libraries, packages, entities, and architectures, which collectively form the foundation for describing systems. Libraries serve as repositories for compiled design units, enabling across projects, while packages encapsulate declarations such as types, subtypes, constants, and subprograms that can be shared among multiple design units. Entities define the of a hardware component through ports and generics, and architectures provide the internal description of the entity's behavior or structure. The language employs a set of reserved keywords, including '', '', and '', to denote specific constructs, and uses delimiters such as semicolons to terminate statements, colons for labels and type indications, and parentheses for grouping. These elements ensure precise and unambiguous interpretation of the during and . VHDL supports single-line comments initiated by two adjacent hyphens (--), which extend to the end of the line and may include any printable characters except certain format effectors like line feeds; multi-line comments are not defined in the language. Processes, which model concurrent behavior, include sensitivity lists that enumerate signals whose events—such as value changes—trigger the process's sequential execution. This mechanism supports the inherent concurrency of by suspending the process until relevant signal events occur. Configurations provide a means to select specific architectures for entities in a design hierarchy, allowing flexible instantiation without altering the source code. Generics, declared in interface via a generic , enable parameterization of designs by allowing constant values—such as bit widths or delay parameters—to be specified at time, promoting reusability and customization. VHDL is case insensitive with respect to identifiers and keywords, treating uppercase and lowercase variants as equivalent, though established conventions recommend lowercase for keywords and uppercase for user-defined identifiers to enhance .

Data Types and Objects

VHDL employs a strongly typed , where every constant, signal, variable, and other object must be declared with an explicit type, ensuring and facilitating and . The language defines scalar types for single values, composite types for structured data, and various object classes to hold values of these types. Access types and file types provide additional capabilities for dynamic allocation and operations, respectively, though they are infrequently used in synthesizable descriptions. Subtypes allow for constrained views of base types, promoting reusability and error prevention. Scalar types in VHDL represent individual values and form the foundation for more complex structures. The standard package (IEEE Std 1076) predefines several scalar types, including bit, an with literals '0' and '1' suitable for simple modeling. The type supports logical values false and true, often used in conditional statements. is a signed integer type with an implementation-defined range that must include at least -263 to 263-1 in VHDL-2019, ideal for counters and indices. Real provides floating-point representation for non-integer arithmetic, though its use is limited in digital hardware due to synthesis challenges. For multi-value logic essential in digital design, the IEEE Std 1164 package introduces std_logic, an with nine values: 'U' (uninitialized), 'X' (unknown), '0', '1', 'Z' (), 'W' (weak unknown), 'L' (weak low), 'H' (weak high), and '-' (don't care); this type models realistic signal behaviors like contention and tri-state logic. Unlike the two-valued bit, std_logic is a resolved type, meaning multiple drivers on a signal are reconciled via a resolution function. Composite types aggregate multiple elements into a single value, enabling representation of buses, memories, and structured . Arrays are collections of elements of the same type, declared as either unconstrained (no fixed bounds, e.g., type bit_array is array (natural range <>) of bit;) or constrained (specific bounds, e.g., subtype word is bit_vector(31 downto 0);). The std_logic_vector, defined in IEEE Std 1164 as array (natural range <>) of std_logic, is widely used for modeling multi-bit signals like data buses. Records, in contrast, group elements of potentially different types into a named structure, similar to C structs; for example:
vhdl
type bus_record is
  record
    address : std_logic_vector(7 downto 0);
    data    : std_logic_vector(15 downto 0);
    valid   : boolean;
  end record;
This allows access via dot notation (e.g., signal_bus.address). Both array and record types support multidimensional arrays and nested composites for complex hierarchies. Objects in VHDL are named entities that store values of declared types and belong to one of four classes: constants (immutable after initialization), signals (for inter-component communication), variables (for local storage), or files (for I/O). Signals model wires or nets in hardware, supporting concurrent assignments across design units; updates to signals occur after a simulation delta cycle, introducing implicit delays that prevent race conditions in concurrent execution. For example, signal clk : std_logic; declares a clock signal. Variables, declared within processes or subprograms, update immediately upon assignment and are used for sequential algorithm modeling, akin to software variables. Access types enable pointer-like indirection to dynamically allocated objects, declared as type ptr is access some_type;, supporting linked lists or trees but rarely synthesized due to hardware mapping difficulties. File types, via the TEXTIO package, handle reading/writing to external files during simulation, e.g., file output_file : text;, though they are non-synthesizable. Type resolution addresses scenarios with multiple drivers, such as resolved signals like std_logic; the resolution function, predefined in IEEE Std 1164, uses a to compute the effective value (e.g., conflicting '0' and '1' resolve to 'X'). Unresolved types like std_ulogic require explicit handling to avoid errors. Subtypes impose constraints on base types for validation, such as subtype natural is [integer](/page/Integer) range 0 to integer'high;, which restricts values to non-negative integers and inherits the base type's operations. This mechanism enhances design clarity without altering the underlying type semantics.

Modeling and Design

Entities and Architectures

In VHDL, the fundamental unit of design is the entity, which serves as the external interface specification for a hardware module. An entity declaration defines the name of the design unit and its ports, which represent the input, output, and bidirectional connections to the external environment. Ports are declared with modes such as in for inputs, out for outputs, and inout for bidirectional signals, and they can utilize various data types like std_logic or std_logic_vector to model electrical characteristics more accurately than binary types. Additionally, entities may include generics, which are constant parameters that enable parameterization without altering the core structure, such as specifying vector widths or delays; generics are declared before ports and can have default values that are overridden during instantiation. The body provides the internal description of the 's behavior or structure, associated with a specific via its name. It consists of two main parts: the declarative part, where internal signals, constants, components, and subprograms are defined, and the part, which contains the concurrent or sequential s implementing the design logic. This separation allows for clear , with the declarative part preceding the begin keyword and the part following until end . Architectures support hierarchical designs by permitting component instantiations within them. Port mapping is essential for instantiating components within an , connecting the entity's internal signals or other components to the of the instantiated unit. This is achieved through the port map in a component , which supports both positional and named associations to explicitly link actual signals to formal ports, ensuring correct interfacing in hierarchical designs. For generics, a corresponding generic map allows passing specific values to the component's parameters during . VHDL facilitates structural modeling in architectures by interconnecting multiple entity-architecture pairs, akin to , where components are declared and instantiated to form larger systems. This approach promotes and , as predefined or user-defined entities can be composed like building blocks, with signals between them. In contrast, abstracts the internals using high-level concurrent statements or processes to describe functionality without specifying exact , focusing on algorithmic intent such as conditional logic or operations. These modeling styles can be mixed within a single for flexibility. A key feature of VHDL is the ability to define multiple architectures for the same , allowing different implementations—such as one for with detailed timing and another for targeting specific —while sharing the same . Selection among these architectures occurs via declarations, enabling context-specific views without . This supports exploration and across phases.

Processes and Concurrency

In VHDL, processes serve as the primary mechanism for describing sequential behavior within an , consisting of a block of sequential statements that execute in order but operate concurrently with other processes and statements in the design. A is declared using the process keyword, optionally followed by a sensitivity of signals that its execution, and it ends with end [process](/page/Process). For example, a simple process might be structured as process (clk, [reset](/page/Reset)) begin if [reset](/page/Reset) = '1' then ... end if; end [process](/page/Process);, where changes to clk or reset resume the process from its beginning. Concurrent statements, in contrast, execute simultaneously outside of processes and remain active throughout the simulation, modeling the inherent parallelism of . These include signal assignment statements, such as out_signal <= in1 and in2;, which continuously evaluate and update the target signal whenever inputs change, without needing explicit triggering. Unlike processes, concurrent statements do not contain sequential control flow and are used to describe combinational logic or interconnections directly in the architecture body. Timing control within processes is achieved through wait statements, which suspend execution until a specified condition or duration is met, enabling modeling of clocked or timed behaviors. The forms include wait on signal_list; to pause until events on listed signals, wait until boolean_expression; to wait for a condition like a clock edge (e.g., wait until clk = '1';), and wait for time_expression; for a fixed delay such as a timeout. Processes using wait statements cannot have a sensitivity list, as the waits provide the triggering mechanism. VHDL distinguishes sequential execution within processes from overall concurrency by the update semantics of variables and signals: variables, declared locally in processes, update immediately upon assignment using the := operator, providing blocking behavior similar to software variables, while signals schedule updates using the <= operator, resulting in non-blocking behavior where the new value takes effect only after the process suspends or at the end of the simulation cycle. This difference ensures that signal assignments propagate events to other concurrent elements without immediate feedback loops within the same process. VHDL lacks explicit blocking or non-blocking keywords, unlike , relying instead on the inherent nature of variable and signal assignments. The VHDL simulation model resolves concurrent events through delta cycles, an infinitesimal time unit that advances without progressing the overall simulation time, allowing ordered evaluation of signal updates and process activations within the same timestamp. During each delta cycle, the simulator updates projected signal values from assignments, propagates events to sensitive processes, and re-executes until no further changes occur, preventing races in concurrent descriptions like feedback loops. For instance, in a design with mutual signal dependencies, multiple delta cycles may iterate at time t=0 to stabilize values before time advances. This event-driven cycle repeats indefinitely, modeling hardware concurrency faithfully during simulation.

Synthesis and Simulation

Synthesizable Elements

In VHDL, synthesizable elements refer to the subset of language constructs that can be directly translated into hardware structures such as gates, flip-flops, and multiplexers during the synthesis process, as defined in standards like for register-transfer level () synthesis. These elements enable the description of digital circuits at the behavioral and structural levels while ensuring predictable mapping to physical hardware by logic synthesis tools. Concurrent signal assignments outside of processes typically infer combinational logic, such as logic gates or arithmetic units, based on the operators and expressions used. Supported operators in synthesizable VHDL include logical operators (and, or, nand, nor, xor, xnor, not), relational operators (=, /=, <, <=, >, >=), and arithmetic operators (+, -, *, /, abs, rem, mod), with restrictions on division, remainder, and modulus to cases where the right operand is a constant power of 2 to ensure efficient hardware implementation. Shift operators (sll, srl, sla, sra, rol, ror) are also supported for bit manipulation. VHDL-2008 extensions add matching relational operators (?=, ?/=, ?<, ?<=, ?>, ?>=) and functions like maximum and minimum, which are synthesizable when applied to appropriate types like std_logic_vector. These operators form the basis for inferring hardware components, such as adders from '+' or multiplexers from conditional expressions. Conditional statements like and case are key for synthesizing selection logic, such as and decoders. An infers a when used in concurrent assignments or processes, provided all branches assign values to the target signal to avoid unintended inference; an else clause or complete condition coverage is required for full synthesizability. Similarly, case statements synthesize priority encoders or decoders but demand exhaustive coverage, including a "when others =>" clause, to ensure no undefined paths that could lead to latches instead of . These constructs must be used within the static bounds of the language to guarantee hardware equivalence across tools. Loops in synthesizable VHDL are limited to generate statements for replication, such as creating bit-wide arrays of identical components like registers or adders. A for-generate statement with bounds unrolls into multiple instances of the enclosed , inferring parallel without iteration; if-generate statements are supported only with static (compile-time ) conditions. Unbounded or -determined loops, such as while loops without fixed iterations, are not synthesizable as they cannot map to finite . Sequential logic is inferred from clocked processes, where the sensitivity list includes a clock signal and optionally resets. The rising_edge(clk) or falling_edge(clk) function within an if statement detects clock edges to trigger flip-flop inference for registered outputs; asynchronous resets are modeled outside the clock condition, while synchronous resets or enables are placed inside. Processes referenced from the concurrency model thus enable the creation of state elements like D flip-flops when assignments depend on clock events. Synthesizable VHDL excludes certain features to maintain fidelity, such as real (floating-point) types, which are permitted only in functions for constant computations but not for signals or variables in RTL code. Time types are similarly restricted, and constructs like wait statements with time expressions or after clauses are unsupported, as they imply timing rather than structural .

Simulation Constructs

VHDL provides several constructs dedicated to and , enabling precise modeling of timing, event-driven behavior, and error checking without implications for . These features support the creation of testbenches and detailed behavioral simulations, allowing designers to verify functionality under various conditions. Unlike synthesizable , these elements focus on temporal aspects and diagnostic capabilities inherent to the simulation kernel defined in IEEE Std 1076. The after clause specifies explicit delays in signal assignments, crucial for timing simulations to model propagation and inertial delays. In a waveform element of a signal assignment statement, such as signal <= value after 5 ns;, the after clause schedules the value change at the specified time relative to the current simulation time. If omitted, an implicit after 0 ns is assumed, resulting in immediate scheduling. This mechanism relies on the simulator's time advancement and event scheduling, ensuring accurate representation of asynchronous behaviors during verification. Wait statements facilitate event-driven simulation by suspending process execution until specific conditions or events occur. The wait on variant suspends until an event on listed signals, such as wait on clk;, triggering resumption on any change to those signals. Wait until pauses until a boolean condition becomes true, often used for edge detection like wait until rising_edge(clk);. The wait for form suspends for a fixed time duration, e.g., wait for 10 ns;, modeling timeouts or delays in test scenarios. These statements, when combined in a process without a sensitivity list, enable flexible control flow in testbenches, aligning with VHDL's discrete event simulation model. Assertions offer a mechanism for runtime verification by checking conditions and reporting failures during simulation. The syntax is assert condition [report "message"] [severity level];, where the condition is a boolean expression evaluated at each assertion point. If false, the optional report string is output, and the severity (note, warning, error, or failure) determines simulator response, such as halting execution for severity failure. Concurrent and sequential forms exist, supporting both structural and behavioral checks in testbenches to detect protocol violations or logical errors early. Text I/O capabilities, provided by the TEXTIO package in the STD library, enable reading from and writing to files or the console for logging simulation results and stimulus generation. Procedures like write(file, value); output data in ASCII format, while read(file, value); parses input lines into variables, supporting types such as integers and bits. For example:
use std.textio.all;
...
write(output, "Time: " & time'image(now));
This facilitates waveform dumping, test vector loading, and debug output, enhancing verification workflows without affecting hardware description. Resolution functions define how multiple drivers on a resolved signal, such as those in a bus, combine to produce a single effective value, modeling wire contention during simulation. For types like std_logic, the predefined function returns 'X' (unknown) for conflicting drives like '0' and '1', or prioritizes stronger values over weaker ones (e.g., '1' over 'Z'). These functions are invoked automatically each simulation cycle for active resolved signals, preventing undefined behavior in multi-driver scenarios and aiding fault simulation. Custom resolution functions can be defined for user types to simulate specific contention resolutions. Non-determinism in VHDL simulation arises primarily from initial values and potential race conditions, which must be managed to ensure reproducible verification. Signals initialize to the leftmost array value of their type, often 'U' (uninitialized) for std_logic, leading to indeterminate propagation if not explicitly driven. Race conditions occur in delta time cycles when multiple processes update signals in unspecified order, potentially causing order-dependent results; designers avoid them by using guarded assignments or single-driver signals. Shared variables, introduced in VHDL-1993, can introduce true non-determinism if accessed concurrently without synchronization, though they are rarely used in simulation due to this risk.

Practical Examples

Combinational Logic Templates

Combinational logic templates in VHDL provide reusable patterns for designing stateless circuits that produce outputs based solely on current inputs, without memory elements. These templates leverage concurrent signal assignments or processes to model basic building blocks like gates, multiplexers, and arithmetic units, ensuring synthesizable descriptions that map directly to hardware logic. By using standard operators defined in IEEE Std 1076, developers can express functionality concisely while adhering to the language's semantics for combinational behavior. Basic logic gates are implemented using concurrent assignments with predefined logical operators such as and, or, and not, which operate on std_logic types from the IEEE Std_Logic_1164 package. For instance, a two-input AND gate assigns the output as the logical AND of its inputs: out1 <= in1 and in2;. Similarly, OR and NOT gates use or and not operators in concurrent statements outside any process, directly inferring gate-level hardware during synthesis. These operators follow the resolution functions of std_logic to handle multi-driver scenarios, ensuring robust combinational logic. Multiplexers (MUXes) select one input from multiple sources based on a select signal, commonly modeled in an entity with inputs, a select port, and an output. In the architecture, behavioral styles use conditional statements within a process for selection logic. For a 2:1 MUX, an if-else structure or case statement routes either input to the output based on the select bit, as shown in the following behavioral example:
vhdl
library IEEE;
use IEEE.[STD_LOGIC_1164](/page/STD_LOGIC_1164).ALL;

entity mux_2to1 is
    port (
        a, b : in [STD_LOGIC](/page/STD_LOGIC);
        sel : in [STD_LOGIC](/page/STD_LOGIC);
        y : out [STD_LOGIC](/page/STD_LOGIC)
    );
end mux_2to1;

architecture Behavioral of mux_2to1 is
begin
    process(a, b, sel)
    begin
        if sel = '1' then
            y <= b;
        else
            y <= a;
        end if;
    end process;
end Behavioral;
This template extends to wider MUXes by using std_logic_vector for multi-bit inputs and select lines, with case statements handling multiple selections. Arithmetic units like adders utilize the overloaded + operator provided by the IEEE.numeric_std package on types such as unsigned or signed (which are compatible with std_logic_vector), performing bit-wise addition with implicit carry propagation in a ripple-carry fashion (or optimized by the synthesizer). A simple n-bit adder requires importing library ieee; use ieee.numeric_std.all;, declares two input vectors as unsigned, and a sum output of the same width, with the architecture assigning sum <= input1 + input2;. For a full adder handling carry-in in an n-bit context, the entity includes n-bit vector inputs, a 1-bit carry-in port (cin : in std_logic), and an (n+1)-bit result output. The assignment involves resizing for compatibility, such as result <= resize(unsigned(input1), n+1) + resize(unsigned(input2), n+1) + to_unsigned(cin, n+1);, where the lower n bits of result form the n-bit sum and the most significant bit is the carry-out. This approach synthesizes to efficient adder hardware without explicit gate-level descriptions. Encoders and decoders manipulate bit patterns for address or priority encoding, often using loops or case statements for scalability. A priority encoder, such as a 4-to-2 version, converts active input bits to a binary code prioritizing the highest active input via nested if-else in a process: the output code reflects the position of the highest '1' input, with an additional valid output signaling activity. Conversely, a 2-to-4 decoder generates one-hot outputs from a binary input using a case statement to activate the corresponding line. These structures employ std_logic_vector for input and output ports to handle multi-bit operations efficiently. To ensure purely combinational synthesis without unintended latches, all possible input conditions must be covered in conditional statements like if-else or case, assigning values to every output signal in every execution path. Omitting an else clause or when others in a case can infer a latch to hold the previous output value, leading to timing issues and non-combinational behavior. Default assignments before conditionals or exhaustive branches prevent this, maintaining the stateless nature of the design.

Sequential Logic Components

Sequential logic components in VHDL model state-holding elements that capture and retain data based on clock signals, enabling the design of circuits with memory such as flip-flops and registers. These constructs are typically implemented using processes sensitive to the clock and optional reset signals, ensuring synthesizable hardware descriptions that map to FPGA or ASIC primitives. The use of the rising_edge function within a process defines clocked behavior, where data updates occur only on the positive clock transition, promoting predictable timing and avoiding race conditions. A D-type flip-flop (DFF) serves as the fundamental building block for sequential logic, storing a single bit of data until the next clock edge. In VHDL, it is described using a concurrent process sensitive to the clock and asynchronous reset signals. For asynchronous reset handling, the reset condition is checked outside the clock edge, allowing immediate state clearing independent of the clock. Synchronous reset, conversely, occurs within the clocked branch, tying the reset to the clock cycle. A basic synthesizable template for a DFF with asynchronous active-high reset is shown below:
vhdl
process (clk, rst)
begin
  if rst = '1' then
    q <= '0';
  elsif rising_edge(clk) then
    q <= d;
  end if;
end process;
This structure infers a standard DFF primitive in synthesis tools, with the reset overriding the clock for async operation. For a DFF with both preset and clear (active-high asynchronous), the process extends to prioritize clear over preset:
vhdl
process (clk, clr, pre)
begin
  if clr = '1' then
    q <= '0';
  elsif pre = '1' then
    q <= '1';
  elsif rising_edge(clk) then
    q <= d;
  end if;
end process;
Such designs ensure the output q holds the input d value across clock cycles unless reset intervenes. A register extends the DFF concept to multi-bit data storage, typically as an array of DFFs with an enable signal to control loading. The enable acts as a clock gate in the synchronous path, updating the register only when asserted, which optimizes power in hardware implementations. A standard 8-bit register with synchronous enable and reset uses a vector signal:
vhdl
process (clk)
begin
  if rising_edge(clk) then
    if rst = '1' then
      reg <= (others => '0');
    elsif en = '1' then
      reg <= din;
    end if;
  end if;
end process;
Here, reg and din are declared as std_logic_vector(7 downto 0), and the process is sensitive only to clk for fully synchronous behavior. This template infers parallel DFFs during synthesis, preserving data when en is low. Shift registers facilitate serial-to-parallel data conversion, commonly used in communication interfaces. A serial-in, parallel-out (SIPO) shift register loads bits sequentially on each clock edge, shifting existing data right or left. Implemented with a loop in the process for bit manipulation, an 8-bit left-shifting SIPO example is:
vhdl
process (clk)
begin
  if rising_edge(clk) then
    for i in 7 downto 1 loop
      sreg(i) <= sreg(i-1);
    end loop;
    sreg(0) <= serial_in;
  end if;
end process;
parallel_out <= sreg;
With sreg as std_logic_vector(7 downto 0), this loads the serial input at the least significant bit, shifting toward the most significant bit over eight cycles to fill the parallel output. An alternative uses concatenation for conciseness: sreg <= sreg(6 downto 0) & serial_in;. Both approaches synthesize to a chain of DFFs, with the loop version aiding readability for wider registers. Latches, unlike flip-flops, are level-sensitive and transparent when enabled, but their inference in VHDL is often unintended and should be avoided in clocked designs due to timing unpredictability and poor synthesis support in FPGAs. Incomplete conditional statements in combinational processes, such as an if without an else branch, cause synthesis tools to infer a latch to hold the last value. To prevent this, assign default values to all outputs before conditionals and ensure full case coverage. A deliberate transparent latch template, for edge cases like low-power retention, is:
vhdl
process (en, d)
begin
  if en = '1' then
    q <= d;
  end if;
end process;
This level-sensitive process (no clock) passes d to q while en is high, but latches are generally discouraged in favor of clocked elements for synchronous designs. Timing considerations in VHDL sequential components, such as setup and hold times, are implicitly modeled in simulation through signal stability requirements around clock edges. Setup time mandates data stability before the clock edge, while hold time requires it after, preventing metastability; violations in simulation manifest as undefined or metastable states in tools like ModelSim. These parameters are verified post-synthesis using static timing analysis, where VHDL descriptions guide constraint files to enforce margins, ensuring reliable clocked behavior without explicit code for internal paths.

Full Circuit Example

A full circuit example in VHDL is a 4-bit up-counter, which demonstrates the integration of entity declaration, architectural process for sequential behavior, concurrent signal assignments for combinational logic, and overall synthesizable structure. This design includes inputs for clock (clk), synchronous reset (reset), and enable (enable), with outputs for the 4-bit count (q) and a combinational overflow flag (overflow) that asserts when the count reaches its maximum value. The counter increments the count on each rising clock edge if enable is active and reset is inactive, wrapping around after overflow, while the overflow signal provides immediate detection without affecting the sequential state. The following code snippet presents the complete entity-architecture pair using the IEEE standard libraries for type definitions and arithmetic operations:
vhdl
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity up_counter is
    port (
        clk    : in  std_logic;
        reset  : in  std_logic;
        enable : in  std_logic;
        q      : out unsigned(3 downto 0);
        overflow : out std_logic
    );
end entity up_counter;

architecture behavioral of up_counter is
    signal count : unsigned(3 downto 0);
begin
    process (clk)
    begin
        if rising_edge(clk) then
            if reset = '1' then
                count <= (others => '0');
            elsif enable = '1' then
                count <= count + 1;
            end if;
        end if;
    end process;
    
    q <= count;
    overflow <= '1' when count = "1111" else '0';
end architecture behavioral;
This architecture employs a clocked process to model the sequential flip-flop behavior for count incrementation, ensuring synthesis to hardware registers, while the concurrent overflow assignment implements combinational logic outside the process for immediate signal evaluation. The design integrates flip-flops for sequential storage (inheriting from standard DFF templates) and simple equality comparison for combinational overflow detection, avoiding any non-synthesizable constructs like wait statements or variables in feedback paths. In synthesis, this VHDL description maps to a chain of four D flip-flops clocked synchronously by clk, with the increment operation inferred as a 4-bit adder (typically a ripple-carry or optimized carry-lookahead structure depending on the tool), gated by the enable signal and reset muxed to zero input. The overflow logic synthesizes to a small combinational decoder, adding minimal area overhead. A corresponding testbench outlines simulation verification by wrapping the counter in an entity with no external ports, instantiating the design under test (DUT), generating a periodic clock (e.g., via a process toggling clk every 5 ns for a 100 MHz simulation rate), applying reset and enable pulses as stimuli (e.g., assert reset for 10 ns, then enable for multiple cycles), and incorporating assertions to check outputs (e.g., wait until q = "1111"; assert overflow = '1' report "Overflow not detected" severity error). This setup allows waveform inspection for concurrency, timing, and functional correctness without hardware. For scalability, the counter can incorporate a generic parameter for bit width (e.g., generic (WIDTH : integer := 4); signal count : unsigned(WIDTH-1 downto 0)), enabling reuse for arbitrary sizes like 8-bit or 16-bit variants while preserving the same behavioral structure and synthesis efficiency.

Standards and Evolutions

Core Revisions

The VHDL standard originated with , establishing the foundational syntax and semantics for hardware description. Subsequent revisions have iteratively enhanced the language to address evolving needs in digital system design and verification. The IEEE 1076-1993 revision introduced shared variables to support concurrent access across multiple processes and improvements to synthesis support, including better handling of guarded signals and attribute usage to enable more reliable translation to hardware implementations. The IEEE 1076-2000 revision introduced protected types for encapsulating data with associated methods to manage shared state safely. The IEEE 1076-2002 revision was minor, primarily relaxing rules on buffer ports to improve usability in designs and fully integrating protected types. The IEEE 1076-2008 revision expanded expressiveness with dynamic types enabling runtime allocation via access types in more contexts, sequential elaboration for deterministic ordering in complex hierarchies during simulation, and enhancements to text I/O procedures for improved string manipulation and file operations in testbenches. IEEE 1076-2019 introduced interfaces for bundling ports to streamline testbench connections, conditional analysis directives for configuration-dependent code, enhancements to file I/O including directory operations and environment variable reading, generics on protected types and subprograms, and shared variables on entities to support advanced verification. These core revisions were primarily driven by industry feedback, including demands from FPGA and ASIC designers for streamlined design flows, enhanced verification productivity, and better integration with emerging tools. Each revision supersedes its predecessor while preserving backward compatibility, ensuring that code compliant with earlier versions remains valid unless explicitly deprecated for safety or clarity reasons.

Advanced Features in Later Versions

VHDL-2008 introduced external names, enabling the creation of aliases to reference signals and objects across the design hierarchy without specifying full paths, which simplifies tasks such as error injection and signal forcing from testbenches. This feature uses syntax like alias my_alias is << /top.uut.signal_name >>; to access nested elements, overcoming scoping limitations in prior versions and supporting hierarchical access during simulation. External names must reference elaborated objects, and their use is primarily for rather than . The same revision enhanced aggregates by permitting slices and nested aggregates, providing a unified and simplified syntax for initializing and assigning multi-dimensional . Prior to VHDL-2008, aggregates required positional or named associations without slices, but the update allows expressions like (others => (1 to 4 => '0')) for a two-dimensional , reducing and improving for complex structures. This applies to both synthesizable and simulatable code, with support for unconstrained dimensions in aggregates. Generics saw significant expansions starting in VHDL-2002 and maturing in VHDL-2008, allowing packages, subprograms, and types as parameters to promote IP reuse and parameterization. For instance, an can a type data_type and a , enabling flexible binding such as generic (type data_type; [function](/page/Function) increment(data_type) return data_type);, which facilitates reusable arithmetic units. VHDL-2019 further refined these by permitting on protected types and subprograms with ordered parameter lists, enhancing modularity for verification components. VHDL-2019 advanced verification through protected type enhancements, including generics and improved access methods, which enable more robust modeling of non-deterministic behaviors in testbenches via libraries like OSVVM. These updates support shared variables on entities and conditional analysis directives for configuration-dependent code, aiding probabilistic-like simulations in complex systems. Interfaces, declared using records and mode views, bundle ports for streamlined testbench connections, reducing boilerplate in verification environments. For mixed-signal applications, the VHDL-AMS standard (IEEE 1076.1-2017) extends core with analog and continuous-time modeling capabilities, supporting simultaneous simulation of digital and analog domains through simultaneous statements and quantity declarations. It introduces real and electrical types for behavioral descriptions of circuits like amplifiers, enabling co-simulation of event-driven digital logic with solved differential equations for analog components. This superset maintains VHDL compatibility while adding domains like thermal and mechanical for multi-physics modeling. The IEEE P1076 working group is developing the VHDL-202X revision, with the project authorized in 2021 and completion projected for December 2025, focusing on user-submitted enhancements to address modern design needs.

Libraries and Packages

Built-in Packages

VHDL includes several built-in packages that provide essential functionality independent of optional extensions, ensuring core language operations are available by default. The package is the foundational predefined package, which declares the basic scalar and composite types required for describing behavior and performing fundamental computations. It defines types such as bit (a two-valued logic type with values '0' and '1'), (with values false and true), (a signed ranging typically from -2^31 to 2^31-1, though implementation-dependent), real (a floating-point number), time (for delay specifications), severity_level (for assertions), and string (an array of characters), along with corresponding array types like bit_vector. In to types, the package overloads operators for these types, enabling operations (, , , division), logical operations (AND, OR, NOT, XOR), relational comparisons (equality, inequality, greater than, less than), and shifting functions (sll, srl, sla, sra, rol, ror) directly on compatible operands without explicit declarations. This package is automatically visible in all design units, requiring no library clause or use clause, which allows immediate access to these elements for signal declarations, constant assignments, and expression evaluations in entities and architectures. The WORK library functions as the default repository for compilation units in VHDL, automatically placing analyzed primary and secondary design units (such as entities, architectures, and packages) into this logical library unless otherwise specified. It acts as a placeholder for the current compilation environment, facilitating modular design by grouping related units without needing explicit library mappings during initial development. In practice, when compiling VHDL source files, tools map the WORK library to a physical directory, enabling seamless referencing of units within the same project scope. For simulation support, the TEXTIO package offers basic formatted input/output operations using ASCII text files, primarily to generate readable output or load stimulus data during testbench execution. It declares the file type text (representing lines of characters), the access type line (pointers to strings for manipulation), and procedures such as (to read a line from a file into a line object), (to write a line object to a file), read (to parse values like integers or bits from a line), and write (to format and append values to a line), along with opening and closing functions. TEXTIO is part of the STD library and must be explicitly referenced via a use (e.g., use std.textio.all;) to enable handling in processes, though it is limited to environments and does not synthesize to . These built-in packages collectively cover essential arithmetic, logical, and I/O needs but have inherent limitations: the package supports only two-valued via bit and lacks multi-value resolution for modeling real-world signal behaviors, such as unknown states (e.g., 'U' or 'Z'), necessitating reliance on IEEE-defined packages like std_logic_1164 for advanced design applications.

IEEE Standard Libraries

The IEEE standard libraries in VHDL, defined under IEEE Std 1076, provide essential packages that extend the language's capabilities for modeling , arithmetic operations, and mathematical computations in hardware descriptions. These libraries are crucial for ensuring and portability across tools, with key packages focusing on multi-value types, numeric arithmetic, utility functions, and advanced math support for environments. The std_logic_1164 package, standardized in IEEE Std 1164-1993 and integrated into subsequent VHDL revisions, introduces the std_logic type as a resolved multi-value system to model signals more accurately than the bit type. This type supports nine possible values: 'U' (uninitialized), 'X' (unknown or conflicting), '0' ( low), '1' ( high), 'Z' (), 'W' (weak unknown), 'L' (weak low), 'H' (weak high), and '-' (don't care). The package also includes a resolution function that handles concurrent signal assignments by prioritizing values in cases of multiple drivers, such as resolving 'Z' with '0' to '0'. This enables realistic simulation of tri-state and bus contention scenarios in digital designs. To support file I/O with std_logic types, the std_logic_textio package extends the functionality of TEXTIO by providing procedures like hread, hwrite, bwrite, and owrite for reading and writing std_logic and std_logic_vector in , , and formats. This package, part of IEEE Std 1164, is essential for testbenches involving multi-value logic and must be explicitly used (e.g., use ieee.std_logic_textio.all;). Like TEXTIO, it is simulation-only and non-synthesizable. For arithmetic operations on logic vectors, the package offers a standardized approach using signed and unsigned types derived from std_logic_vector, promoting portable and synthesizable code. It defines overloaded operators for , , , , and comparisons on these types, treating signed as representation and unsigned as natural binary. This package is recommended over the deprecated non-standard std_logic_arith and std_logic_unsigned, as it ensures consistent behavior across vendors and avoids ambiguity in handling. For instance, adding two unsigned vectors results in if the length exceeds the operand size, while signed operations preserve sign extension where applicable. Mathematical extensions are provided by the math_real and math_complex packages, outlined in IEEE Std 1076.2-1996, for simulation-based computations involving real numbers and quantities. The math_real package supports floating-point operations on the predefined real type, including transcendental functions like , , , , and SQRT, with arguments and results adhering to precision guidelines where feasible. Meanwhile, math_complex defines a type as a of two reals (real and imaginary parts) and overloads operators for , , , , and polar conversions, along with functions like (argument) and COMPLEX (constructor). These are primarily for testbench modeling and algorithmic verification, not , as they operate on unbounded real arithmetic unsuitable for mapping. To incorporate these packages in a VHDL design, declarations such as library ieee; use ieee.std_logic_1164.all; are placed before the entity or , making the types and functions visible within the scope. Selective imports like use ieee.[numeric_std](/page/Numeric_std).all; can limit pollution, and multiple packages are often combined for comprehensive designs, e.g., pairing std_logic_1164 with for arithmetic circuits. The evolution of these libraries saw significant updates in IEEE Std 1076-2008, which improved consistency by refining to better align with requirements, deprecating conflicting vendor extensions, and enhancing mathematical package generics for fixed- and floating-point support in later revisions. These changes promoted , reducing portability issues in multi-tool flows.

Tools and Implementation

Simulators

VHDL simulators are software tools that execute VHDL code to verify the of designs before implementation, primarily through event-driven or cycle-based approaches. Event-driven simulators, the most common type for VHDL, model by processing events such as signal changes, advancing time in discrete steps while handling cycles—zero-time increments that resolve concurrent signal updates without advancing the clock. These simulators faithfully replicate the VHDL language's , including suspension and resumption based on lists or wait statements, enabling accurate of both combinational and . A prominent open-source event-driven simulator is GHDL, which compiles VHDL source code directly into machine code for execution on the host processor, supporting VHDL standards from 1987 to 2008 with partial compatibility for the 2019 revision (IEEE 1076-2019). Another open-source option is NVC, which offers strong support for VHDL-2019 features including interfaces and enhanced assertions. Commercial options include QuestaSim from Siemens (formerly Mentor Graphics), an event-driven tool that compiles VHDL into optimized libraries for simulation, and the Vivado Simulator from AMD, which integrates event-driven VHDL simulation within its design suite and supports select features of IEEE 1076-2019, such as conditional expressions, conditional return, empty records, and mode views for interfaces. ModelSim, QuestaSim's predecessor, shares this event-driven architecture and remains widely used for its robust VHDL compliance up to the 2008 standard, with upgrades available for 2019. Cycle-based simulators offer an alternative for faster execution in (RTL) designs, particularly synchronous circuits, by advancing simulation in fixed clock cycles and approximating inter-cycle timing rather than modeling every event. These are less common for full VHDL verification due to reduced timing precision but are useful for high-level functional checks; examples include adaptations of VITAL (VHDL Initiative Toward ASIC Libraries) models in tools like those from , though most VHDL workflows favor event-driven methods. Key features across VHDL simulators include waveform viewing for visualizing signal transitions over time, breakpoint debugging to pause execution at specific conditions or lines of code, and coverage analysis to measure code, functional, and toggle coverage for assessing test completeness. For instance, QuestaSim's Visualizer provides integrated waveform analysis and coverage reporting, while GHDL pairs with external viewers like GTKWave for similar functionality. In typical usage, VHDL simulators compile design units and testbenches into an intermediate or executable form—such as GHDL's direct machine code or ModelSim's compiled libraries—then run the testbench to apply stimuli and observe outputs, often generating VCD or GHW files for post-simulation analysis. This process ensures designs meet specifications, with free tools like GHDL enabling accessible verification and proprietary ones like QuestaSim and Vivado Simulator offering advanced performance for complex projects.

Synthesis and Analysis Tools

Synthesis tools for VHDL transform (RTL) descriptions into gate-level netlists by inferring logic gates, flip-flops, and other hardware elements from behavioral and structural code. Prominent examples include Design Compiler, which supports VHDL input through its HDL Compiler and performs logic for ASIC designs by mapping RTL to a target technology library. For FPGA implementations, AMD's Vivado Synthesis tool processes VHDL RTL to generate optimized netlists compatible with Xilinx/AMD architectures, supporting features like VHDL-2008 constructs. Synplify Pro also serves FPGA synthesis, enabling VHDL-to-gate inference with support for advanced language subsets. Optimization in these tools focuses on minimizing area, improving timing closure, and reducing power consumption through algorithmic transformations and user directives. For instance, Design Compiler employs concurrent optimization techniques to balance these metrics during the process, allowing constraints via Synopsys Design Constraints (SDC) files. In , directives such as "keep hierarchy" preserve design structure to aid downstream optimization, while attributes like (* max_fanout = 10 *) control signal buffering for timing. These optimizations ensure the meets performance goals before physical implementation. Formal verification complements synthesis by performing equivalence checking to confirm that the generated netlist functionally matches the original VHDL RTL. Synopsys Formality automates this comparison, handling complex designs with structural and functional analysis to detect mismatches in logic behavior. Cadence Conformal Equivalence Checker similarly verifies RTL-to-netlist equivalence for VHDL designs, supporting multimillion-gate circuits through advanced mapping and proof engines. Such tools provide exhaustive proof without simulation vectors, ensuring design integrity post-synthesis. Lint tools analyze VHDL code for syntax errors, style violations, and potential issues prior to full . Sigasi Visual HDL offers comprehensive linting for VHDL, detecting problems like incomplete sensitivity lists, unused signals, and non-synthesizable constructs through static analysis rules. These checks enhance code quality and portability across tools. The overall flow integrates VHDL with place-and-route stages for both FPGA and ASIC targets. In FPGA workflows, outputs a that feeds directly into its placer and router for generation. For ASICs, Design Compiler's proceeds to physical design tools like IC Compiler for floorplanning and routing. This end-to-end process ensures seamless translation from VHDL source to implementable hardware. A key challenge in VHDL synthesis arises from vendor-specific pragmas and attributes used to control , such as FSM encoding styles or resource mapping, which can hinder design portability across tools. For example, Xilinx-specific attributes in may not be recognized by tools, requiring conditional compilation or manual adjustments to maintain consistent behavior. These pragmas, while enabling fine-tuned optimization, often necessitate vendor documentation consultation to avoid unintended results.

References

  1. [1]
    1076-2019 - IEEE Standard for VHDL Language Reference Manual
    Dec 23, 2019 · This standard defines the syntax and semantics of the VHSIC Hardware Description Language (VHDL). The acronym VHSIC (Very High Speed Integrated Circuits)
  2. [2]
    IEEE 1076-2019 - IEEE SA
    Dec 23, 2019 · This standard defines the syntax and semantics of the Verification and Hardware Description Language (VHDL).
  3. [3]
    IEEE 1076-VHSIC HW Description Language
    Description. VHDL was an offshoot of the VHSIC (Very High-Speed IC) program, funded by the U.S. Department of Defense (DoD), and was first proposed in 1981.
  4. [4]
    [PDF] Hardware Description Languages
    VHDL was originally developed in 1981 by the Department of Defense to describe the structure and function of hardware. Its roots draw from the Ada programming ...
  5. [5]
    [PDF] VHDL Fundamentals Lecture 3 - George Mason University
    Register Transfer Level (RTL). Design Description. Combinational. Logic ... Structural descriptions may connect simple gates or complex, abstract components.
  6. [6]
    [PDF] 6. SEQUENTIAL AND CONCURRENT STATEMENTS IN THE VHDL ...
    VHDL has sequential statements in processes, executed in order, and concurrent statements in architectures, including processes and concurrent procedure calls.
  7. [7]
    Modeling digital systems using VHDL | IEEE Journals & Magazine
    VHDL is a hardware description language for delineating digital electronic systems. It arose out of the US government's Very High Speed Integrated Circuits ...
  8. [8]
    What Is VHDL? An Intro to VHDL - BLT - BLT Inc.
    Mar 15, 2024 · VHDL was originally an acronym for VHSIC Hardware Description language, with VHSIC meaning Very High-Speed Integrated Circuits.Missing: origin | Show results with:origin
  9. [9]
    What Is VHDL (VHSIC Hardware Description Language) - ITU Online
    VHDL was developed in the 1980s under the auspices of the U.S. Department of Defense to address the need for a standardized language for specifying digital ...
  10. [10]
    VHSIC Hardware Description Language | IEEE Journals & Magazine
    In March 1980, the US Department of Defense (DoD) launched the Very High Speed Integrated Circuits program to advance the state of the art in highspeed ...
  11. [11]
    Levels of Abstraction - Doulos
    VHDL can be used to describe electronic hardware at many different levels of abstraction. When considering the application of VHDL to FPGA/ASIC design, ...Missing: structural | Show results with:structural
  12. [12]
    VHDL and FPGA terminology - Synthesis - VHDLwhiz
    Synthesis is the FPGA implementation design flow step that maps VHDL code to a technology-dependent netlist. The software responsible for performing.
  13. [13]
    Hardware Description Languages: VHDL vs Verilog, and Their ...
    Mar 17, 2022 · The use of VHDL and Verilog affords faster, more accurate designs and more accurate verification.
  14. [14]
    VHDL
    Abstraction Levels of VHDL. VHDL supports a design at many different levels of abstraction. Three of them are very important: Algorithmic Level; Register ...Missing: behavioral | Show results with:behavioral
  15. [15]
    [PDF] Accolade VHDL Reference Guide
    VHDL is a strongly typed language, meaning that you cannot simply assign a literal value or object of one type to an object of another type. To allow the ...
  16. [16]
    [PDF] Hardware Modeling with VHDL (VHSIC Hardware ... - DTIC
    The goal of the VHSIC program is to reduce the design time for developing VHSIC class digital systems. To achieve this goal, a standard means of designing ...Missing: interoperability | Show results with:interoperability
  17. [17]
    A Brief History of VHDL - Doulos
    Summary: History of VHDL. 1981, Initiated by US DoD to address hardware life-cycle crisis. 1983-85, Development of baseline language by Intermetrics, IBM and TI.Missing: VHSIC 1983-1985
  18. [18]
    History of VHDL
    In July 1983, a team of Intermetrics, IBM and Texas Instruments were awarded a contract to develop VHDL · In August 1985, the final version of the language under ...Missing: origins | Show results with:origins
  19. [19]
    The VHSIC hardware description language (VHDL) program
    Two major factors behind the motivation for a hardware description language are i) the importance of design automation and 2) the emer- gence of the custom/ ...
  20. [20]
    History Of VHDL - ASIC World
    VHDL arose from the VHSIC program, became IEEE standard in 1987 (VHDL-87), revised in 1993 (VHDL-93), and the current standard was adopted in 2002 (IEEE-1076- ...Missing: development Intermetrics 1983-1985
  21. [21]
    [PDF] VHDL (VHSIC (Very High Speed Integrated Circuits ... - DTIC
    To keep pace with the development of increasingly more complex integrated circuit designs, new software tools need to be developed that can model and simulate ...Missing: motivations interoperability
  22. [22]
    [PDF] IEEE standard VHDL language reference manual - GovInfo
    The VHSIC Hardware Description Language (VHDL) is a formal notation intended for use in all phases of the creation of electronic systems.
  23. [23]
    Design Automation Standards Committee - IEEE Computer Society
    The biggest center of interest for DASC has been language based design and verification standards stemming from the key HDL standards VHDL and Verilog. From ...
  24. [24]
    [PDF] DEPARTMENT OF DEFENSE HANDBOOK
    Sep 13, 1996 · VHDL began as a research effort under the DoD. VHSIC program to document fully the DoD digital sys- tems (Ref. 8). As experience with the ...
  25. [25]
    IEEE 1076-1987 - IEEE SA
    IEEE 1076-1987 IEEE Standard VHDL Language Reference Manual. Purchase Access via Subscription. Superseded by 1076-2002. IEEE standard VHDL language reference ...Missing: DAS | Show results with:DAS
  26. [26]
    [PDF] the impact of ieee-1076 on vhdl - DTIC
    Dec 16, 1988 · The evaluation was done to determine if IEEE Standard 1076-1987 was indeed a better version of VHDL than its predecessor, Version 7.2. Results ...
  27. [27]
    [PDF] IEEE Standard for VHDL Language Reference Manual - 0x04.net
    Dec 23, 2019 · Abstract: VHSIC Hardware Description Language (VHDL) is defined. VHDL is a formal notation intended for use in all phases of the creation of ...
  28. [28]
    [PDF] IEEE Standard VHDL Language Reference Manual
    Jan 26, 2009 · Abstract: VHSIC Hardware Description Language (VHDL) is defined. VHDL is a formal notation intended for use in all phases of the creation of ...
  29. [29]
    VHDL standard packages and types - UMBC
    Types defined include: bit bit_vector typical signals integer natural positive typical variables boolean string character typical variables real time ...Missing: scalar | Show results with:scalar
  30. [30]
    [PDF] Data Types - VHDL
    – BOOLEAN (true, false). – INTEGER (32-‐bit integers: from -2,147,483,647 to. +2,147,483,647=231-1). – NATURAL (non negaWve integer: from 0 to +231-1). – REAL ...Missing: scalar | Show results with:scalar
  31. [31]
    IEEE 1164-1993 - IEEE SA
    IEEE 1164-1993 is a superseded standard for a Multivalue Logic System for VHDL Model Interoperability, embodied in the Std_logic_1164 package.
  32. [32]
    [PDF] Chapter 4 Data Object and Type
    VHDL - Flaxer Eli. Ch 4 - 32. Object & Type. Array - Predefined Type. ○. Predefined 1076 types (package standard). SUBTYPE natural IS integer RANGE 0 TO integer ...
  33. [33]
    Designing Circuits with VHDL
    Jan 2, 2005 · VHDL permits you to have multiple architectures for the same entity, hence the architecture has its own label, separate from the entity name.
  34. [34]
    Introduction to VHDL and MAX+plus II - UCLA Computer Science
    VHDL, or VHSIC (Very High Speed Integrated Circuits) Hardware Description Language, was developed by the Department of Defense in 1983 for describing hardware ...
  35. [35]
    VHDL Reference Guide - Generics
    Generics are a means of passing specific information into an entity. They do not have a mode (direction): entity PARITY is generic (N : integer); port (A ...
  36. [36]
    A small VHDL-Tutorial
    Hardware description languages can be used in several ways; they can be an alternative way of representing a circuit diagram for a digital circuit or a higher ...
  37. [37]
    [PDF] Delta Delay
    A delta delay is an infinitesimally small, non-real delay that allows for ordering of events and describes hardware without zero-delay models. Simulation time ...
  38. [38]
    VHDL Constructs Support Status - 2025.1 English - UG901
    Vivado synthesis supports most VHDL design entities and configurations, except for entity statement part, linkage, and some signal declarations. Some types are ...
  39. [39]
    VHDL Sequential Logic - 2025.1 English - UG901
    A VHDL process is sequential (as opposed to combinatorial) when some assigned signals are not explicitly assigned in all paths within the process.Missing: synthesizable | Show results with:synthesizable
  40. [40]
    [PDF] IEEE Standard VHDL Language Reference Manual
    Dec 29, 2000 · The VHSIC Hardware Description Language (VHDL) is a formal notation intended for use in all phases of the creation of electronic systems.<|control11|><|separator|>
  41. [41]
    TextIO Write Example - EDA Playground
    TEXTIO is a VHDL package which allows the reading and writing of ASCII text files from VHDL. TEXTIO is part of the IEEE 1076 standard, and is in the library STD ...
  42. [42]
    [PDF] VHDL – VHSIC Hardware Description Language
    Standard IEEE--1076 (VHDL'87). • 1987 - fully functional software from ... • VHDL'93 allows shared variables in architectures that may introduce non-deterministic ...
  43. [43]
    [PDF] Introduction To VHDL for Combinational Logic VHDL Statements
    Majority Gate Example. The following is an example of a three input XOR gate (majority gate) implemented in VHDL library ieee; use ieee.std_logic_1164.all;.Missing: standard | Show results with:standard
  44. [44]
    Logic Synthesis with VHDL Combinational Logic Bob Reese ...
    Usually, we will demon- strate multiple methods of implementing the same design. ⇒ Examples are: → 2 to 1 Mux. → 8-level priority circuit. → 3 to 8 Decoder.Missing: gates | Show results with:gates
  45. [45]
  46. [46]
    [PDF] VHDL Description of Basic Combinational-Circuit Building Blocks ...
    VHDL code for a 2-to-4 Decoder entity. LIBRARY ieee ;. USE ieee.std_logic_1164.all ... VHDL code for a Priority Encoder entity. LIBRARY ieee ;. USE ieee ...
  47. [47]
    8-to-3 Priority Encoder VHDL Code | RF Wireless World
    This article presents VHDL code for an 8-to-3 encoder with priority. We'll cover the block diagram, truth table, and the VHDL code itself.
  48. [48]
    How To Avoid Synthesizing Unwanted Latches - Doulos
    To avoid unwanted latches, create default assignments for all variables and signals before any functional code, and use default branches in conditional code.
  49. [49]
    Incomplete If Statements and Latch Inference in VHDL
    Feb 23, 2018 · Incomplete 'if' statements without an 'else' branch or incomplete signal assignments can cause unintentional latch inference in VHDL.
  50. [50]
    How to code reset in a synchronous VHDL process - Sigasi
    Aug 11, 2020 · This article focuses on how to design resets for synchronous digital circuits in VHDL. The concepts discussed in this article are equally valid in other design ...
  51. [51]
    8 ways to create a shift register in VHDL - VHDLwhiz
    Dec 11, 2019 · Shift registers can be created in VHDL using vector slicing, for-loops, or the shift_left function. There are many ways, but not all are equal.
  52. [52]
    VHDL and FPGA terminology - Setup and hold time - VHDLwhiz
    Setup and hold time describes how long the input signal must be stable before and after the triggering clock edge. The timing diagram below.
  53. [53]
  54. [54]
    IEEE 1076-1993 - IEEE SA
    An enhancement to IEEE Std 1076-1993, the interactive tutorial is organized into four modules designed to incrementally add to the user's understanding of VHDL ...Missing: additions | Show results with:additions
  55. [55]
    VHDL: Shared Variables, Protected Types, and Memory Modeling
    Dec 16, 2020 · VHDL-93 (IEEE 1076-1993) created shared variables of an ordinary ... Figure 4: Dual Port Memory Using Protected Types (VHDL Legal). Want ...
  56. [56]
    IEEE 1076-2002 - IEEE SA
    VHDL is a formal notation intended for use in all phases of the creation of electronic systems. Because it is both machine readable and human readable.
  57. [57]
    Doulos' VHDL FAQ
    In practice, VHDL 1076-1993 is the current flavor of VHDL which is widely supported by tool vendors. VHDL 1076-2008 support is continuously being added to ...Missing: standardization public review ballot DoD<|control11|><|separator|>
  58. [58]
    IEEE 1076-2008 - IEEE SA
    Jan 26, 2009 · This standard defines the syntax and semantics of the Verification and Hardware Description Language (VHDL). Previous versions of this standard ...
  59. [59]
    VHDL-2008 - Doulos
    The standard is now available from the IEEE and is known as IEEE Std. 1076-2008. As support for some of these changes has started to appear in some simulators, ...Missing: additions | Show results with:additions
  60. [60]
    What's new in VHDL-2019 - VHDLwhiz
    Dec 18, 2018 · The updated IEEE 1076 standard includes a number of improvements and changes to the VHDL language ... generics in addition to the normal parameter ...Missing: parameterizing | Show results with:parameterizing<|separator|>
  61. [61]
    Implementation of VHDL - 6.0.0-dev - GitHub Pages
    Minor corrections were added by the 2002 revision of the VHDL standard. This revision is not fully backward compatible with VHDL-00 since, for example, the ...
  62. [62]
    VHDL-2008: Easier to use - Doulos
    Many of the enhancements in VHDL-2008 are intended to make VHDL easier to use. These are all fairly minor additions to the language or changes to the syntax.
  63. [63]
    External Names; Beyond the scope of VHDL - OSVVM
    May 19, 2020 · External names allow hierarchical access to objects that were hidden by the scoping rules of previous versions of VHDL.
  64. [64]
    [PDF] VHDL-2008, The End of Verbosity! - SynthWorks
    • VHDL-2008 adds Array / Bit Logic Operators. SynthWorks. vSel <= (others ... • 2008 allows slices in an array aggregate. • Prior to 2008, coding an adder ...
  65. [65]
    VHDL-2008: Major Enhancements - Doulos
    VHDL-2008 major enhancements include: integrated PSL, package/subprogram generics, generic types, and new fixed/floating point arithmetic packages.Missing: 2002 | Show results with:2002
  66. [66]
    VHDL 2019: Enhanced generic types - Sigasi
    Jun 16, 2020 · VHDL 2019 improves generic types and subprograms. In VHDL 2008 generic types were introduced, these generic types can be bound to any type.Missing: 2002 | Show results with:2002
  67. [67]
    VHDL-2019: the Users Standard - OSVVM
    May 26, 2020 · Protected type enhancements allow VHDL verification libraries, such as OSVVM, to further improve verification capabilities. VHDL can do ...
  68. [68]
    IEEE 1076.1-2017 - IEEE SA
    This standard defines a collection of VHDL 1076.1 packages, compatible with IEEE Std 1076.1, along with recommendations for conforming use, in order to ...<|control11|><|separator|>
  69. [69]
  70. [70]
    IEEE P1076 Working Group: VHDL Analysis and Standardization ...
    The Working Group is starting to identify issues to work on for the next 202X revision of the standard, in order to prepare a Project Authorization Request (PAR) ...
  71. [71]
    VHDL Predefined Standard Packages - 2025.1 English - UG901
    VHDL predefined standard packages that are by default included, define the following basic VHDL types: bit, bit_vector, integer, natural, real, and boolean.
  72. [72]
    [PDF] Altera's Introduction to VHDL | City Tech OpenLab
    – Contains the following packages: • standard ( Types: Bit, Boolean, Integer, Real, and Time. All operator functions to support types). • textio (File ...
  73. [73]
    Data Types - VHDL-Online
    'boolean' is usually used to control the flow of the VHDL execution while 'bit' uses level values ('0', '1') instead of truth values ('false', 'true') and is ...Missing: built- | Show results with:built-
  74. [74]
    Using the "work" library in VHDL - Adaptive Support - AMD
    Feb 16, 2023 · The library called "work" has a special usage in VHDL. It is not a physical library, it really means "current library". When a file is compiled ...
  75. [75]
    Package and Library - VHDL-Online
    In VHDL, the library is a logical name with which compiled objects can be grouped and referenced. The default library is called “work”.
  76. [76]
    VHDL Design Units and Subprograms - UMBC
    Predefined libraries typically include but are not limited to: STD, IEEE and WORK. WORK is the default user library.
  77. [77]
    courses:system_design:simulation:file_io [VHDL-Online]
    VHDL file I/O uses the TEXTIO package for reading/writing data, mainly for simulation flexibility. Data is read line by line and written line by line.Example · File I/O · Example for File I/O (1/4) · Example for File I/O (2/4)
  78. [78]
    File Input/Output - Nandland
    Jun 30, 2022 · The package file that needs to be included to make File IO work correctly is std.textio. This allows the usage of the keywords: file_open, ...
  79. [79]
    An Introduction to VHDL Data Types - FPGA Tutorial
    May 10, 2020 · Learn about the different predefined types which can be used in VHDL and how we can convert between them using functions and type casting.Missing: scalar boolean
  80. [80]
    std_logic_misc.vhd
    ... Package name: std_logic_misc -- -- Purpose: This package defines supplemental types, subtypes, -- constants, and functions for the Std_logic_1164 Package ...
  81. [81]
    The std_logic Libraries
    The IEEE created the IEEE VHDL library and std_logic type in standard 1164. This was extended by Synopsys; their extensions are freely redistributable.
  82. [82]
    Delta cycles explained - VHDLwhiz
    Oct 23, 2018 · Delta cycles are non-time-consuming timesteps used by VHDL simulators for modeling events during execution of VHDL code.
  83. [83]
    Simulating with Vivado Simulator - 2024.1 English - UG900
    The Vivado simulator is a Hardware Description Language (HDL) event-driven simulator that supports functional and timing simulations for VHDL, Verilog, ...Missing: GHDL QuestaSim
  84. [84]
    ghdl/ghdl: VHDL 2008/93/87 simulator - GitHub
    This directory contains the sources of GHDL, the open-source analyzer, compiler, simulator and (experimental) synthesizer for VHDL, a Hardware Description ...
  85. [85]
    About - 6.0.0-dev - GitHub Pages
    Unlike some other simulators, GHDL is a compiler: it directly translates a VHDL file to machine code, without using an intermediary language such as C or C++ .<|separator|>
  86. [86]
    [PDF] ModelSim® User's Manual
    ModelSim uses the following types of libraries: • A local working library that contains the compiled version of your design. • A resource library. Resource ...
  87. [87]
  88. [88]
    Simulation Approaches in VHDL - Buzztech
    Cycle – Based Simulation: Faster than event-driven simulation. Only applicable to functional simulation of synchronous sequential systems that have a single ...Missing: ModelSim QuestaSim Vivado
  89. [89]
    VHDL Simulator - Aldec, Inc
    Visualize and debug your designs effortlessly using advanced verification tools: Code tracing; Waveform analysis; Dataflow visualization; FSM window; Coverage ...Missing: key | Show results with:key
  90. [90]
    Analyzing Simulation Waveforms with Vivado Simulator - UG900
    In the AMD Vivado™ simulator, you can use the waveform to analyze your design and debug your code. The simulator populates design signal data in other areas ...
  91. [91]
    Questa Visualizer Debug Environment | Siemens Software
    In this webinar, you will learn that you can analyze & debug coverage issues with the help of design & waveform data available, finding uncovered items using ...
  92. [92]
    GHDL Main/Home Page
    GHDL is an open-source simulator for the VHDL language. GHDL allows you to compile and execute your VHDL code directly in your PC.Missing: event- driven
  93. [93]
    Design Compiler: Timing, Area, Power, & Test Optimization | Synopsys
    Design Compiler® RTL synthesis solution enables users to meet today's design challenges with concurrent optimization of timing, area, power and test.Missing: VHDL | Show results with:VHDL
  94. [94]
    Vivado Design Suite User Guide: Synthesis (UG901) - 2025.1 English
    Vivado Design Suite User Guide: Synthesis (UG901) - 2025.1 English - Details using AMD Vivado™ synthesis to transform an RTL design into a gate-level ...Missing: Synopsys | Show results with:Synopsys
  95. [95]
    Synplify: Logic Synthesis for FPGA Design - Synopsys
    Synplify software supports the latest VHDL and Verilog language constructs including SystemVerilog and VHDL-2008/2019. The software also supports FPGA ...Missing: Vivado | Show results with:Vivado
  96. [96]
    Formality Equivalence Checking | Synopsys
    Learn to use Synopsys Formality to automatically determine the right verification strategy based on the design characteristics that may present challenges.Missing: Cadence Mentor VHDL
  97. [97]
    Conformal Equivalence Checker - Cadence
    Cadence Conformal EC enables designers to verify the widest variety of circuits, including complex arithmetic logic, datapaths, memories, and custom logic.Missing: VHDL | Show results with:VHDL
  98. [98]
    Sigasi
    Sigasi Visual HDL is a purpose-built tool for FPGA and ASIC chip designers to save money and time while increasing the quality of their designs.Sigasi's Solutions · Download · About Us · Release Notes