Est. 1992 Advanced

e

The aspect-oriented hardware verification language behind Cadence Specman - a domain-specific language for constrained-random stimulus, functional coverage, and temporal assertions, standardized as IEEE 1647.

Created by Yoav Hollander, with contributions from Amos Noy, Yaron Kashai, and Guy Mosenson, at InSpec Software (later Verisity)

Paradigm Aspect-oriented and object-oriented, with declarative constraint programming, a temporal (event/assertion) sublanguage, and built-in functional coverage constructs
Typing Static, strong; scalar types carry explicit bit widths (for example uint (bits: 8)) alongside enumerated types, structs, units, and lists
First Appeared 1992 - development began in Israel; the language reached the market with Specman at the 1996 Design Automation Conference
Latest Version IEEE 1647-2019, published in 2019 by the IEEE Standards Association

e is a domain-specific language for functional verification of hardware. It is not a language for describing chips - Verilog and VHDL already do that - but a language for describing how to attack a chip: how to generate legal-but-nasty stimulus, how to check that the design responded correctly, and how to measure whether the verification effort has actually covered the interesting cases. When e appeared in the mid-1990s, all three of those jobs were typically done with hand-written directed tests in C or Verilog. e replaced them with declarative constraints, temporal expressions, and coverage groups, and in doing so it helped define what “functional verification” means as a discipline.

The language is standardized as IEEE 1647, and its reference implementation is Cadence’s Specman.

History and Origins

e was first developed in 1992 in Israel by Yoav Hollander as the input language for a tool he was building called Specman. Amos Noy, Yaron Kashai, and Guy Mosenson are credited with helping shape the language. Specman consumed e programs and used them to automatically generate the stimulus needed to functionally verify a hardware design - a sharp departure from the directed-test practice of the day.

In 1995, Hollander founded InSpec Software, later renamed Verisity, reportedly with Amos Noy, to commercialize the tool. Specman was introduced commercially at the 1996 Design Automation Conference. The timing was good: chip complexity was outrunning the ability of engineering teams to write enough directed tests by hand, and the “verification gap” was becoming the dominant schedule risk in ASIC projects.

The name is usually explained as “English minus minus” - a joke at the expense of C++, and a claim about readability. This account is widely repeated in secondary sources rather than documented in a primary Verisity publication, so treat it as folklore rather than fact.

Verisity went public on Nasdaq in 2001, reportedly raising roughly $23 million, and was acquired by Cadence Design Systems in an all-cash transaction valued at approximately $315 million, completed in April 2005. Hollander is reported to have become CTO of the resulting Cadence verification division.

Design Philosophy

e was built around a single observation: a verification environment is never finished, and it is always being modified by people who did not write it. A verification IP component might be developed by one team, dropped into a block-level environment by a second, and then bent into shape for a chip-level environment by a third - none of whom can safely edit the original source.

The answer e chose was aspect-oriented programming. Rather than subclassing or editing, an engineer extends existing types in place, from a separate file:

<'
extend packet {
    !timestamp : uint;
    post_generate() is also {
        timestamp = sys.time;
    };
};
'>

The extend construct adds fields, adds constraints, and layers extra behaviour onto an existing method (is also, is first, is only) without touching the file that declared it. Whole test scenarios are written this way: a base environment stays pristine, and each test is a thin aspect that constrains it differently. This is the feature e users most often cite as the reason they never migrated to SystemVerilog, which has no direct equivalent in its standard language constructs.

The second pillar is declarative constraint solving. In e, you do not write code that produces stimulus; you describe the space of legal stimulus and let the generator sample it:

<'
struct packet {
    %kind    : [ CTRL, DATA, IDLE ];
    %len     : uint (bits: 8);
    %payload : list of byte;

    keep payload.size() == len;
    keep soft len in [1..64];

    when CTRL packet {
        keep len < 8;
        keep payload.size() == len;
    };
};
'>

Two things are worth noting. keep soft states a preference rather than a requirement - it is dropped automatically when it conflicts with a hard constraint, which is what makes layered test aspects composable. And when CTRL packet is when-subtyping: a subtype determined by the value of a field rather than by an explicit class hierarchy, so the constraints and fields that only make sense for control packets exist only on control packets.

The % prefix marks a field as part of the physical bit-level layout for packing and unpacking against the design under test - a small but telling detail about what the language was built for.

Key Features

FeatureWhat it does
struct / unitTwo class flavours: struct for dynamic data (packets, transactions), unit for the permanent structure of the testbench, bound to paths in the design
extendAspect-oriented modification of existing types from separate files, with is also / is first / is only method layering
keep constraintsDeclarative hard and soft constraints resolved by the generator
when subtypesValue-determined subtyping, so fields and constraints appear only under the conditions where they apply
Temporal expressionsAn event-based sublanguage (event, expect, @) for protocol assertions expressed over time
cover groupsFirst-class functional coverage: items, ranges, crosses, and illegal bins declared in the language itself
HDL bindingDirect access to design signals via 'path.to.signal' tick notation, with interfaces to Verilog, VHDL, SystemVerilog, C, and C++
MessagingBuilt-in structured message and reporting facilities for testbench logging

The temporal layer is what makes protocol checking readable. Events are defined over simulation time and composed into sequences:

<'
extend bus_agent {
    event clk is rise('~/top/clk')@sim;
    event req is rise('~/top/req')@clk;
    event ack is rise('~/top/ack')@clk;

    expect @req => {[1..3]; @ack} @clk
        else dut_error("no ack within 3 cycles of req");
};
'>

Coverage is declared in the same file, next to the thing being covered, rather than in a separate coverage database configuration:

<'
extend packet {
    event sent;
    cover sent is {
        item kind;
        item len using ranges = {
            range([1..8],   "short");
            range([9..64],  "long");
        };
        cross kind, len;
    };
};
'>

Note also the <' and '> delimiters: e code is embedded in code segments inside a .e file, a convention inherited from the language’s early habit of living alongside other text.

Evolution

e’s trajectory is unusual: it went from a single vendor’s proprietary language to an open IEEE standard while remaining, in practice, a single vendor’s language.

Verisity donated the temporal subset of e to Open Verilog International in May 2000. In 2002 it released eRM, the e Reuse Methodology, which defined how to build interoperable e Verification Components (eVCs). eRM was arguably the more consequential contribution: its reuse model was absorbed into the Universal Reuse Methodology, then OVM, and ultimately into UVM, the methodology that most of the chip industry uses today, whatever language it writes in.

In 2003, the IEEE Design Automation Standards Committee approved a project to base a verification language standard on e. The result, IEEE 1647-2006, was published in 2006, with revisions in 2008, 2011, 2016, and 2019. The 2019 edition remains the active standard.

On the Cadence side, e gained UVM-e, a native e implementation of the UVM methodology integrated into Specman, and UVM-ML, an open-source multi-language layer that lets e components sit in the same testbench as SystemVerilog and SystemC ones.

Current Relevance

e lost the mainstream to SystemVerilog. When the constrained-random and coverage ideas that e pioneered were folded into IEEE 1800, the industry consolidated on a single language that also described hardware, and new projects overwhelmingly started there. e is best described today as dormant rather than dead: the standard is maintained, Cadence continues to ship and train on Specman, but the language is not attracting new greenfield adoption.

The installed base, however, has proven remarkably sticky. In a September 2020 interview, AMIQ EDA’s CEO reported more than 1,000 active users writing e testbenches with the company’s DVT Eclipse IDE. The reason usually given is not inertia but capability: e’s aspect-oriented features, soft constraints, and when-subtyping have no clean SystemVerilog equivalent, so a migration is a rewrite rather than a translation. Verification environments representing many engineer-years of accumulated corner cases are not rewritten casually.

Practical realities for anyone encountering e today:

  • Tooling is commercial. Running e requires Cadence Specman under a paid license. There is no open-source compiler or interpreter, and no official Docker image, so e cannot be tried casually the way most languages on this site can.
  • Learning material is thin outside vendor channels. The IEEE 1647 standard, Cadence documentation and training, and a handful of books and conference papers are essentially the whole corpus.
  • You will meet it in maintenance. Most engineers who learn e in the 2020s do so because they inherited an environment, not because they chose the language.

Why It Matters

e’s significance is out of all proportion to its current user count. Most of the ideas that define modern functional verification appeared in early commercial form here - alongside contemporaries such as Synopsys Vera - including constrained-random stimulus generation as the default rather than the exception, functional coverage as a first-class language construct rather than a tool feature, temporal assertions over protocol behaviour, and reusable verification components with a published reuse methodology.

SystemVerilog absorbed most of that agenda, and UVM descends through OVM and URM from e’s own eRM. In that sense the language succeeded so thoroughly that it made itself optional - the industry adopted e’s model of verification without adopting e. What SystemVerilog did not absorb was the aspect-oriented core, which remains the strongest technical argument for the language and the reason a determined minority of verification engineers are still writing extend in 2026.

Sources: e (verification language) - Wikipedia, IEEE SA - IEEE 1647, Cadence completes acquisition of Verisity - EE Times, Verisity announces eRM - Design & Reuse, Verisity donates temporal language to OVI - Design & Reuse, Don’t You Forget About “e” - SemiWiki, Specman Elite datasheet - Cadence

Timeline

1992
Yoav Hollander begins developing e in Israel as the input language for his Specman tool, which generates the stimulus needed to functionally verify a hardware design. Amos Noy, Yaron Kashai, and Guy Mosenson are credited as contributors to the language
1995
Hollander founds InSpec Software, later renamed Verisity, to commercialize Specman and the e language
1996
Specman is introduced commercially at the Design Automation Conference, putting constrained-random generation and functional coverage in front of the mainstream ASIC verification audience
2000
In May 2000, Verisity donates the temporal subset of e to Open Verilog International, the first step in opening parts of the language to outside standardization
2001
Verisity goes public on Nasdaq, reportedly raising roughly $23 million - one of the relatively few Israeli technology IPOs to price in the post-dot-com market
2002
Verisity releases eRM, the e Reuse Methodology, defining guidelines for building interoperable e Verification Components (eVCs). eRM is widely regarded as the first packaged verification reuse methodology in the EDA industry
2003
The IEEE Design Automation Standards Committee approves a project to use e as the basis for a verification language standard, creating the IEEE P1647 working group
2005
Cadence Design Systems completes its acquisition of Verisity in April 2005 in an all-cash transaction valued at approximately $315 million, at $12 per share. Yoav Hollander reportedly becomes chief technology officer of the resulting Cadence verification division
2006
IEEE 1647-2006, the first edition of the IEEE Standard for the Functional Verification Language e, is published
2008
IEEE 1647-2008 is published, the first revision of the standard
2011
IEEE 1647-2011 is published, the next revision of the standard
2016
IEEE 1647-2016 is published, continuing the roughly three-year revision cadence of the standard
2019
IEEE 1647-2019 is published and remains the active edition of the standard, maintained under the IEEE Computer Society Design Automation Standards Committee
2020
In a September 2020 interview, AMIQ EDA reports more than 1,000 active users writing testbenches in e using its DVT Eclipse IDE - an indication that a substantial installed base persisted long after SystemVerilog became the industry default

Notable Uses & Legacy

Cadence Specman Elite

The reference implementation of e. Specman compiles and runs e testbenches against Verilog, SystemVerilog, and VHDL designs, providing constrained-random generation, coverage collection, and the UVM-e framework that packages the methodology for modern SoC verification

IEEE 1647 working group

A standing IEEE Computer Society Design Automation working group that has maintained e as an open, published language standard through editions in 2006, 2008, 2011, 2016, and 2019

e Reuse Methodology and the road to UVM

eRM, released by Verisity in 2002, defined the reusable verification component model. Its reuse concepts fed the Universal Reuse Methodology and then OVM, the direct ancestors of today's Universal Verification Methodology used across the chip industry

AMIQ EDA DVT Eclipse IDE

A commercial IDE that provides e-aware compilation feedback, navigation, error detection, and refactoring alongside Verilog, SystemVerilog, and VHDL - a third-party toolchain built specifically because a large body of production e code still needs maintaining

Verilab

An independent verification consultancy whose engineers publish practitioner material on e and Specman, including introductory papers aimed at SystemVerilog users joining e-based projects

UVM-ML Open Architecture

An open-source multi-language library, contributed by Cadence and distributed through the Accellera UVM community site, that lets verification components written in e, SystemVerilog, and SystemC interoperate inside a single testbench - a common bridge for teams running mixed-language environments

Language Influence

Influenced By

Influenced

SystemVerilog Universal Verification Methodology

Running Today

Run examples using the official Docker image:

docker pull
Last updated: