Congratulations to the IEEE-1647 e Functional Verification Language Working Group (eWG)
In the beginning of 2017, the IEEE-1647 eWG issued for publication IEEE Std 1647™ 2016, IEEE Standard for the Functional Verification Language e. This version of the standard, issued under the chairmanship of Darren Galpin from Infineon, with input from other members from the EDA industry, contains enhancements of the e language done since 2011, and is a great resource for anyone who wants to get familiar with the exact syntax of the e language.
Many enhancements were made in the last years. We cannot list them all here, but some of the major highlights are summarized below.
The constraint solving approach was improved, providing better distribution hence achieving superior coverage.
As part of the focus on improving the debugging process, Structured Debug Messages (SDM) were added to the language. While the old messages handle strings, with the SDM you can print messages and record transactions with one action.
For example, the following messages print information about the collected data items (a burst and a frame) and also keep the information connected to these items:
msg_started(MY_PROTOCOL, LOW, "Monitoring frame",
cur_frame);
cur_burst.frames.add(cur_frame);
msg_transformed(MY_PROTOCOL,MEDIUM,
"Converting frames to burst",
frame, burst);
For a non-text destination, such as a wave form or a database, the message is sent and handled according to the nature of the destination. Behavior is implementation-dependent, so various tools might handle it differently. For example, a wave form can display matching pairs of msg_started and msg_ended messages as a transaction.
The following screen shot illustrates how debugging tools can use the new standard. Taken from Cadence Debug Analyzer, it shows all the messages that have to do with a specific burst instance; and thanks to the message action msg_transformed(), we also see the frames that are related to the burst.
The functionality of elanguage temporals was extended with the capability to add operation conditions to a temporal expression, either declarative or procedural.
For example, using the procedural condition do_abort_on_expect(), we can abort a check in case of an interrupt event, hence preventing getting false DUT errors:
expect data_flow is @addr_started =>
{[2..5]; @valid; [1..10] * @data; @ended} @clk;
on interrupt {
do_abort_on_expect("data_flow", TRUE);
};
The conditions can also be defined as declarative, as part of the temporal expression definition:
expect full_flow is @addr_started => {[2..5];
@valid; [1..10] * @data; @ended} @clk
using abort @interrupt;
Another important addition to the updated standard is the support of TLM2-0, based on IEEE Std 1666TM-2011. The TLM sockets facilitate the transfer of transactions between verification components, taking advantage of the standardized, high-level TLM 2.0 communication mechanism.
In addition to documenting these and other enhancements to the e Language, the IEEE 1647 eWG technical editors tidied up the documentation of many chapters, making them much more coherent.
You can purchase your very own copy of this brand new standard on the IEEE website here.
Efrat Shneydor,
Team Specman