fbpx
Wikipedia

e (verification language)


e is a hardware verification language (HVL) which is tailored to implementing highly flexible and reusable verification testbenches.

e
ParadigmAspect-oriented
Designed byYoav Hollander
First appeared1992 (1992)
Stable release
IEEE 1647-2019 / June 13, 2019; 4 years ago (2019-06-13)
Filename extensions.e
WebsiteTWiki @ eda.org

History edit

e was first developed in 1992 in Israel by Yoav Hollander for his Specman software. In 1995 he founded a company, InSpec (later renamed Verisity), to commercialize the software. The product was introduced at the 1996 Design Automation Conference.[1] Verisity has since been acquired by Cadence Design Systems.

Features edit

Main features of e are:

  • Random and constrained random stimulus generation
  • Functional coverage metric definition and collection
  • Temporal language that can be used for writing assertions
  • Aspect-oriented programming language with reflection capability
  • Language is DUT-neutral in that you can use a single e testbench to verify a SystemC/C++ model, an RTL model, a gate level model, or even a DUT residing in a hardware acceleration box (using the UVM Acceleration for e Methodology)
  • Can create highly reusable code, especially when the testbench is written following the Universal Verification Methodology (UVM)
    • Formerly known as e Re-use Methodology (eRM)
    • UVM e library and documentation can be downloaded here: UVM World

Language Features edit

The e language uses an aspect-oriented programming (AOP) approach, which is an extension of the object-oriented programming approach to specifically address the needs required in functional verification. AOP is a key feature in allowing for users to easily bolt on additional functionality to existing code in a non-invasive manner. This permits easy reuse and code maintenance which is a huge benefit in the hardware world, where designs are continually being tweaked to meet market demands throughout the project lifecycle. AOP also addresses cross cutting concerns (features that cut across various sections of the code) easily by allowing users to extend either specific or all instances of a particular struct to add functionality. Users can extend several structs to add functionality related to a particular feature and bundle the extensions into a single file if desired, providing for more organized file partitioning.

Comments edit

Executable e code is enclosed within code-segment markers <' and '>:

Example edit

Anything outside the markers is a comment <' extend sys { // This is a comment Verilog style -- This is a comment in VHDL style post_generate() is also { out("... and everything else within the markers is executable code."); }; }; '> 

Classes edit

e also has two kinds of classes:

  • Dynamic classes are labeled with the keyword 'struct'. Structs are used for creating data that only exists temporarily and may be cleaned by the garbage collector.
  • Static classes are labeled with the keyword 'unit'. Units are used for creating the permanent testbench structure.

A class may contain fields, methods, ports and constraints. Fields can be of type integer, real, enum, string and even complex objects. The code segment shows a unit called 'environment_u' being instantiated within the e root 'sys'. This environment_u class contains a list of 5 packet_s objects and this packet_s class contains two fields and a method.

Example edit

<' // This is a dynamic class with two fields struct packet_s { field0: uint (bits: 32); // This field is called 'field0' and is a   // 32 bit wide unsigned integer. field1: byte;  // This field is called 'field1' and is a byte. // This method is called once a packet_s object has been generated post_generate() is also { out(field0); // Printing the value of 'field0' }; }; // This is a static class with a list of five packet struct unit environment_u { my_pkt[5]: list of packet_s; }; // sys is the root for every e environment and instantiates the 'test_env' object extend sys { test_env: environment_u is instance; }; '> 

Randomization edit

In e each field is randomized by default. Field randomization can be controlled by hard constraints, soft constraints or even be turned off completely. Soft constraints are used as the default constraints, and may be automatically overridden by the test layer if a conflict occurs. Otherwise it behaves like a regular constraint.

Example edit

<' struct my_pkt_s { destination_address: uint (bits: 48); // this field is randomized and is not constrained. data_payload  : list of byte; !parity_field  : uint (bits: 32); // '!' prevents the parity_field from being randomized. keep soft data_payload.size() in [64..1500]; // a soft constraint, used to provide a default randomization keep data_payload.size() not in [128..256]; // this is a hard constraint }; '> 

Assertions edit

e supports assertions with temporal expressions. A temporal expression is used at the same syntactic level as fields and methods and is thereby declarative by nature. A temporal expression describes timed behavior.

Example edit

<' unit temporal_example_u { event a; // declaring an event 'a' event b; // declaring an event 'b' event c; // declaring an event 'c' // This assertion expects that the next cycle after event a // has been detected that event b followed by event c occurs. expect @a => {@b;@c} }; '> 

Coverage edit

e supports coverage that are grouped according to their sampled event and those groups are internally structured with items. Items can be simple items or complex items such as crossed items or transitional items.

Example edit

unit coverage_example_u { event cov_event_e; // collecting coverage will be tied to this event cover cov_event_e is { item a: uint (bits: 4); // this item has 16 buckets from 0 to 15 item b: bool; // this item has two buckets: TRUE and FALSE cross a, b;  // this item contains a cross multiplication matrix of a and b trans b;  // this item is derived of item b and has four buckets   // transitioning each TRUE - FALSE combination }; }; 

Messaging & Reporting edit

Messaging within e can be done with various methods.

Example edit

unit message_example_u { example_message_method() is { out("This is an unconditional, unformatted output message."); outf("This is an unconditional, formatted output message displaying in HEX %x",15); print "This is an unconditional message."; message( LOW, "This is a conditional message, usually tied to a message logger. ",  "You can also concatenate strings like this and even add objects like ",me,  " in this output." ); messagef( LOW, "This conditional output is formatted %x.",15 ); }; }; 

Interfacing With Other Languages edit

An e testbench is likely to be run with RTL or higher-level models. Bearing this in mind, e is capable of interfacing with VHDL, Verilog, C, C++ and SystemVerilog.

Example of an e <-> Verilog Hookup edit

// This code is in a Verilog file tb_top.v module testbench_top;  reg a_clk;   always #5 a_clk = ~a_clk;  initial begin  a_clk = 0;  end endmodule 
This code is in a signal_map.e file <' unit signal_map_u { // Define a port named 'a_clk_p' a_clk_p: in simple_port of bit is instance; // Set the port's hdl_path property to point to the 'a_clk' signal in the top-level testbench keep a_clk_p.hdl_path() == "~/testbench_top/a_clk"; }; '> 

Aspect-Oriented Programming Support in e edit

The process of functional verification requires to raise the level of abstraction of any Design Under Test (DUT) beyond the RTL level. This necessity calls for a language that is capable of encapsulating data and models, which is readily available in object-oriented languages. To address this need has been designed to be e an object-oriented language and on top of that has been augmented with aspect-oriented mechanisms that facilitate not only writing highly flexible and reusable testbenches, but also helps verification engineers by enabling to patch discovered RTL bugs without having to rewrite or touch any of the already existing code base.
Aspect-oriented programming in e allows verification engineers to structure their testbench in aspects. An object is therefore the sum of all its aspects, which may be distributed over multiple files. The following sections illustrate basic aspect-oriented mechanisms in e.

Subtyping Mechanism edit

Subtyping is the prime example of what object-oriented languages without aspect-oriented features can not accomplish. Subtyping allows a verification engineer to add functionality to an already defined/implemented class without having to derive from a base class. The following code shows the original implementation of a base-class and how it is extended. Once the extension took place, all base-class objects contain the extensions as well. The constraints given in the two different subtypes would usually cause a contradiction, however both subtypes are handled separately and thus each subtype yields a different constraint calculation.

Subtyping Mechanism Example edit

subtyping_example.e <' // This enum type definition is used to declare the subtypes ODD and EVEN type ctrl_field_type_t: [ODD, EVEN]; unit base_ex_u { // The subtype_field is the determinant field which calculation is being applied subtype_field: ctrl_field_type_t; data_word  : uint (bits: 32); parity_bit  : bit; // Subtyping the ODD type when ODD'subtype_field base_ex_u { // This is a simple constraint that XORs the index bit 0 of data_word and increments that value keep parity_bit == (data_word[0:0] ^ data_word[0:0] + 1); }; // Subtyping the EVEN type when EVEN'subtype_field base_ex_u { // This constraint is the same as above, however the increment is not done keep parity_bit == (data_word[0:0] ^ data_word[0:0]); }; }; '> 

Extending Methods edit

The original unit definition is given in file1.e. The aspect-oriented mechanism used in this example shows how to execute code before and after an already implemented method.

Method Extension Example edit

This code is in file1.e <' unit aop_example_u { meth_ext() is { out("This is the original method implementation."); }; }; '> 
This code is in file2.e <' extend aop_example_u { meth_ext() is first { out("This method extension is executed before the original method implementation."); }; meth_ext() is also { out("This method extension is executed after the original method implementation."); }; }; '> 

References edit

  • The e Hardware Verification Language, Sasan Iman and Sunita Joshi, Springer, May 28, 2004
  • , David Robinson, 2007
  1. ^ Samir Palnitkar: Design verification with e, Prentice Hall PTR. October 5, 2003. ISBN 978-0-13-141309-2

Sources edit

verification, language, confused, with, programming, language, hardware, verification, language, which, tailored, implementing, highly, flexible, reusable, verification, testbenches, eparadigmaspect, orienteddesigned, byyoav, hollanderfirst, appeared1992, 1992. Not to be confused with E programming language e is a hardware verification language HVL which is tailored to implementing highly flexible and reusable verification testbenches eParadigmAspect orientedDesigned byYoav HollanderFirst appeared1992 1992 Stable releaseIEEE 1647 2019 June 13 2019 4 years ago 2019 06 13 Filename extensions eWebsiteTWiki eda org Contents 1 History 2 Features 3 Language Features 3 1 Comments 3 1 1 Example 3 2 Classes 3 2 1 Example 3 3 Randomization 3 3 1 Example 3 4 Assertions 3 4 1 Example 3 5 Coverage 3 5 1 Example 3 6 Messaging amp Reporting 3 6 1 Example 3 7 Interfacing With Other Languages 3 7 1 Example of an e lt gt Verilog Hookup 4 Aspect Oriented Programming Support in e 4 1 Subtyping Mechanism 4 1 1 Subtyping Mechanism Example 4 2 Extending Methods 4 2 1 Method Extension Example 5 References 6 SourcesHistory edite was first developed in 1992 in Israel by Yoav Hollander for his Specman software In 1995 he founded a company InSpec later renamed Verisity to commercialize the software The product was introduced at the 1996 Design Automation Conference 1 Verisity has since been acquired by Cadence Design Systems Features editMain features of e are Random and constrained random stimulus generation Functional coverage metric definition and collection Temporal language that can be used for writing assertions Aspect oriented programming language with reflection capability Language is DUT neutral in that you can use a single e testbench to verify a SystemC C model an RTL model a gate level model or even a DUT residing in a hardware acceleration box using the UVM Acceleration for e Methodology Can create highly reusable code especially when the testbench is written following the Universal Verification Methodology UVM Formerly known as e Re use Methodology eRM UVM e library and documentation can be downloaded here UVM WorldLanguage Features editThe e language uses an aspect oriented programming AOP approach which is an extension of the object oriented programming approach to specifically address the needs required in functional verification AOP is a key feature in allowing for users to easily bolt on additional functionality to existing code in a non invasive manner This permits easy reuse and code maintenance which is a huge benefit in the hardware world where designs are continually being tweaked to meet market demands throughout the project lifecycle AOP also addresses cross cutting concerns features that cut across various sections of the code easily by allowing users to extend either specific or all instances of a particular struct to add functionality Users can extend several structs to add functionality related to a particular feature and bundle the extensions into a single file if desired providing for more organized file partitioning Comments edit Executable e code is enclosed within code segment markers lt and gt Example edit Anything outside the markers is a comment lt extend sys This is a comment Verilog style This is a comment in VHDL style post generate is also out and everything else within the markers is executable code gt Classes edit e also has two kinds of classes Dynamic classes are labeled with the keyword struct Structs are used for creating data that only exists temporarily and may be cleaned by the garbage collector Static classes are labeled with the keyword unit Units are used for creating the permanent testbench structure A class may contain fields methods ports and constraints Fields can be of type integer real enum string and even complex objects The code segment shows a unit called environment u being instantiated within the e root sys This environment u class contains a list of 5 packet s objects and this packet s class contains two fields and a method Example edit lt This is a dynamic class with two fields struct packet s field0 uint bits 32 This field is called field0 and is a 32 bit wide unsigned integer field1 byte This field is called field1 and is a byte This method is called once a packet s object has been generated post generate is also out field0 Printing the value of field0 This is a static class with a list of five packet struct unit environment u my pkt 5 list of packet s sys is the root for every e environment and instantiates the test env object extend sys test env environment u is instance gt Randomization edit In e each field is randomized by default Field randomization can be controlled by hard constraints soft constraints or even be turned off completely Soft constraints are used as the default constraints and may be automatically overridden by the test layer if a conflict occurs Otherwise it behaves like a regular constraint Example edit lt struct my pkt s destination address uint bits 48 this field is randomized and is not constrained data payload list of byte parity field uint bits 32 prevents the parity field from being randomized keep soft data payload size in 64 1500 a soft constraint used to provide a default randomization keep data payload size not in 128 256 this is a hard constraint gt Assertions edit e supports assertions with temporal expressions A temporal expression is used at the same syntactic level as fields and methods and is thereby declarative by nature A temporal expression describes timed behavior Example edit lt unit temporal example u event a declaring an event a event b declaring an event b event c declaring an event c This assertion expects that the next cycle after event a has been detected that event b followed by event c occurs expect a gt b c gt Coverage edit e supports coverage that are grouped according to their sampled event and those groups are internally structured with items Items can be simple items or complex items such as crossed items or transitional items Example edit unit coverage example u event cov event e collecting coverage will be tied to this event cover cov event e is item a uint bits 4 this item has 16 buckets from 0 to 15 item b bool this item has two buckets TRUE and FALSE cross a b this item contains a cross multiplication matrix of a and b trans b this item is derived of item b and has four buckets transitioning each TRUE FALSE combination Messaging amp Reporting edit Messaging within e can be done with various methods Example edit unit message example u example message method is out This is an unconditional unformatted output message outf This is an unconditional formatted output message displaying in HEX x 15 print This is an unconditional message message LOW This is a conditional message usually tied to a message logger You can also concatenate strings like this and even add objects like me in this output messagef LOW This conditional output is formatted x 15 Interfacing With Other Languages edit An e testbench is likely to be run with RTL or higher level models Bearing this in mind e is capable of interfacing with VHDL Verilog C C and SystemVerilog Example of an e lt gt Verilog Hookup edit This code is in a Verilog file tb top v module testbench top reg a clk always 5 a clk a clk initial begin a clk 0 end endmodule This code is in a signal map e file lt unit signal map u Define a port named a clk p a clk p in simple port of bit is instance Set the port s hdl path property to point to the a clk signal in the top level testbench keep a clk p hdl path testbench top a clk gt Aspect Oriented Programming Support in e editThe process of functional verification requires to raise the level of abstraction of any Design Under Test DUT beyond the RTL level This necessity calls for a language that is capable of encapsulating data and models which is readily available in object oriented languages To address this need has been designed to be e an object oriented language and on top of that has been augmented with aspect oriented mechanisms that facilitate not only writing highly flexible and reusable testbenches but also helps verification engineers by enabling to patch discovered RTL bugs without having to rewrite or touch any of the already existing code base Aspect oriented programming in e allows verification engineers to structure their testbench in aspects An object is therefore the sum of all its aspects which may be distributed over multiple files The following sections illustrate basic aspect oriented mechanisms in e Subtyping Mechanism edit Subtyping is the prime example of what object oriented languages without aspect oriented features can not accomplish Subtyping allows a verification engineer to add functionality to an already defined implemented class without having to derive from a base class The following code shows the original implementation of a base class and how it is extended Once the extension took place all base class objects contain the extensions as well The constraints given in the two different subtypes would usually cause a contradiction however both subtypes are handled separately and thus each subtype yields a different constraint calculation Subtyping Mechanism Example edit subtyping example e lt This enum type definition is used to declare the subtypes ODD and EVEN type ctrl field type t ODD EVEN unit base ex u The subtype field is the determinant field which calculation is being applied subtype field ctrl field type t data word uint bits 32 parity bit bit Subtyping the ODD type when ODD subtype field base ex u This is a simple constraint that XORs the index bit 0 of data word and increments that value keep parity bit data word 0 0 data word 0 0 1 Subtyping the EVEN type when EVEN subtype field base ex u This constraint is the same as above however the increment is not done keep parity bit data word 0 0 data word 0 0 gt Extending Methods edit The original unit definition is given in file1 e The aspect oriented mechanism used in this example shows how to execute code before and after an already implemented method Method Extension Example edit This code is in file1 e lt unit aop example u meth ext is out This is the original method implementation gt This code is in file2 e lt extend aop example u meth ext is first out This method extension is executed before the original method implementation meth ext is also out This method extension is executed after the original method implementation gt References editThe e Hardware Verification Language Sasan Iman and Sunita Joshi Springer May 28 2004 Aspect Oriented Programming with the e Verification Language David Robinson 2007 Samir Palnitkar Design verification with e Prentice Hall PTR October 5 2003 ISBN 978 0 13 141309 2Sources editThe e language blog Team Specman http www deepchip com items 0488 05 html good feedback from users on their experiences with the e language http www cadence com products functional ver specman elite index aspx http www us design reuse com articles article5646 html Janick Bergeron Writing Testbenches Functional Verification of HDL Models Second Edition Kluwer Academic Publishers 2003 ISBN 1 4020 7401 8 https web archive org web 20070405162901 http amiq ro eparser html http www thinkverification com http www dvteclipse com help html documentation e index html Retrieved from https en wikipedia org w index php title E verification language amp oldid 1217062675, wikipedia, wiki, book, books, library,

article

, read, download, free, free download, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, picture, music, song, movie, book, game, games.