Academia.eduAcademia.edu
SystemVerilog Assertions: Past, Present, and Future SVA Standardization Experience Doron Bustan, Dmitry Korchemny, Erik Seligman and Jin Yang Intel Corporation added means to specify coverage, testbench, and Editors’ notes: assertions. The part of SysThis paper provides insight into the development of System Verilog temVerilog for assertion Assertions standardization efforts. Specifically it covers the evolution from specification and modelAccellera 3.1a version to its current state of standardization (the upcoming ing is called SystemVerilog SVA2012 release). Insight into the new features, changes and the reasons for the same exposes users of SVA to the direction the standard is evolving. Assertions (SVA). VShishpal S. Rawat, Intel, and Sumit DasGupta Si2 Unlike many other assertion specification languages SVA is not written h DURING THE LAST decade assertion-based in the form of interpreted comments, but rather is a verification (ABV) proved itself to be an efficient native part of SystemVerilog. This native integration verification methodology based on instrumenting enables defining a clear and consistent semantics the design with assertions. These assertions are for both simulation and formal verification. The checked by methods including simulation, emula- standardization of SVA makes it possible to integrate tion, and formal verification. Assertions also docu- tools from different vendors or to replace one tool ment the design and play the role of executable with another to achieve a similar functionality. This comments. To address the needs of ABV, many standardization started in Accellera and then moved assertion specification languages were created: to the P1800 project of IEEE. The authors of this Sugar [1], ForSpec [2], CBV [3], etc. The kernel of paper have been deeply involved in the various most assertion languages is declarative, which makes stages of the SVA standardization process. In this paper, we describe different aspects of SVA them concise and raises their level of abstraction. Because of their different nature, early assertion standardization. Sections I and II briefly overview specification languages were separate from hard- the history of SVA standardization. Section III deware design languages (such as Verilog and VHDL). scribes the current standardization effort. Section IV This situation changed with the introduction of describes an important use caseVthe specification SystemVerilog [4], the extension of Verilog that of an internal Intel bus. Section V looks at the reciprocal influence of SVA standard development and academic research. Section VI discusses a numDigital Object Identifier 10.1109/MDT.2012.2183336 ber of major problems that have yet to be addressed Date of publication: 09 January 2012; date of current version by SVA standardization. 26 June 2012. March/April 2012 Copublished by the IEEE CEDA, IEEE CASS, and IEEE SSCS 0740-7475/12/$31.00 B 2012 IEEE 23 EDA Industry Standards The beginnings of SVA standardization From SVA2005 to SVA2009 SVA was first announced as part of the SystemVerilog 3.1a standard [4] by the Accellera EDA standards committee in 2003. It was announced together with PSL as a standard specification language, but in contrast to PSL, it was designed to be closely coupled with the SystemVerilog and had an emphasis on dynamic verification [5]. SVA3.1a has two kinds of assertions: concurrent and immediate. Immediate assertions are nontemporal and are evaluated similarly to design code. In particular, they are sensitive to the order of events inside a single time step. Concurrent assertions have linear semantics, and may specify expressions that span multiple time steps. In linear semantics time progress is considered to be a trace, rather than a tree as in branching semantics. Similarly to PSL, SVA has a layered structure: Booleans, regular expressions (sequences), properties, and statements. This layered structure, which includes: concatenation, union, Kleene closure, on the sequence layer and not, or, and implication operators on the property layer, gives SVA3.1a full !-regular expressibility [2].1 SVA3.1a ties its Boolean layer to the design code of SystemVerilog by sharing the same Boolean expressions and defines the time regions where these expressions are evaluated. SystemVerilog’s clocking is used in SVA3.1a to determine time progression. Beyond the language skeleton described above, there are many more operators that make the language more usable. Among other notable features are local variables for data sampling and manipulation, and recursive properties. These features increased the usability of SVA3.1a but made it hard to formalize. Indeed, SVA3.1a suffered from conflicts, gaps, and redundant restrictions. In 2005, SystemVerilog 2005 was announced as the IEEE 1800 standard. SVA2005 had a set of features similar to those of SVA3.1a, but many of the features, such as use of local variables in expressions, arguments passing, operator precedence, restrictions on recursive properties, etc., were better defined. Nevertheless, there were still weaknesses in the language definition, including gaps in its formal semantics, as described in the following section. The release of the SVA2005 standard was a major milestone for design verification. Industry development teams immediately wanted to begin taking advantage of the new language. However, parts of the language had usability problems, and as a result local dialects emerged at several companies. For example, Intel had a local dialect with improved semantics for immediate assertions. As teams gained experience with the language, they identified a number of flaws that limited the effectiveness of SVA in common design and validation scenarios. We worked with the IEEE P1800 committee to define solutions for these flaws for the next standard. The major improvements are described briefly below. For a more detailed description, refer to [6]. 1 Note that expressibility is proven over ForSpec, which has similar operators, with the syntactic difference that the implication operator is called triggers. 24 Deferred assertions SystemVerilog allows procedures to execute multiple times within a single time step, to allow relaxation of changing values. In such a multiplyexecuted procedure, immediate assertions may be checked during each execution, sometimes reporting failures on intermediate values. To solve this problem, a new kind of immediate assertion, called a deferred assertion, was introduced. When a deferred assertion fails, the report of its failure is put in a queue rather than being reported immediately. If the same procedure is executed again, current assertion reports are flushed, and only the new execution of the assertions will take effect. Improved procedural concurrent assertions It is often useful to include a concurrent assertion inside procedural code. In SVA2005, this was permitted in some types of procedures, but defined through a set of syntactical transformations: the assertion was effectively treated as if outside the procedure, but with any enclosing procedure controls or conditionals integrated into the logic of the assertion. For example, always @ðposedge clkÞ if (en) c: cover property (a); became c: cover property (@(posedge clk) en j > a); IEEE Design & Test of Computers In general, this rewriting could cause unexpected behavior. Most importantly, it could cause incorrect partial execution of assertions in nonexecuted locations in a procedure. In the particular example above, while the original cover property in the code looks like it should not execute in cases where en == 0, the transformed property will start a cover attempt and report it (vacuously) successful, since the property is true. In the revised 2009 standard, concurrent assertions in procedures remain a part of their procedure, and are placed in an execution queue when visited during procedural execution. The assertion is removed from the queue and evaluated at a time that depends on its clocking event. This definition is much more consistent with simulation, provides a natural definition for concurrent assertions in procedural loops, and provides behavior that correctly prevents any attempts of an assertion when it is in a nonexecuted location in procedural code. Strong and weak properties When describing properties that span infinite time it is important to define their behavior in case their clock stops ticking. In particular, when an assertion is used in simulation, its clock will always stop ticking at the end of simulation. In SVA2005 this definition was unintuitive and inflexible. In SVA2009 it is possible to specify user intent explicitly, and the defaults are intuitive. For example, weak and strong qualifiers were introduced for sequential properties. Given a sequence s, a sequential property strong(s) is true iff there is a nonempty match of the sequence s. A sequential property weak(s) is true iff there is no finite prefix of any computation witnessing a mismatch of s. Look at this simple example: a1: assert property (@(posedge clk) req j > ##5 ack); The assertion a1 requires that every req should be followed by an ack after exactly 5 clock ticks. Consider a computation where a request occurs at its last clock tick. Should the assertion pass or fail? There is no clear answer to that; some systems may allow turning off the clock in the middle of a transaction, others may not. Furthermore, whether or not a test may terminate in the middle of a transaction could be a matter of methodology. March/April 2012 On the other hand, in a syntactically similar example: a2: assert property (@(posedge clk) req j > ##[1:$] ack); weak semantics makes the assertion a2 trivially true. SVA2005, does not provide a way of choosing between the semantics. On infinite traces both assertions fail when the clock stops; on finite traces, both are considered pending. In SVA2009 assertion, a2 will pass unless the strong operator is applied to the suffix. Linear Temporal Logic (LTL) and abort constructs Engineers involved in formal verification have experience specifying properties using LTL, a wellknown logical language [2], [7], [8] that provides a basic set of operators including always, eventually, nexttime, and until. Frequently, a property simple to write in LTL would require a very convoluted definition in SVA2005. For example, the simple LTL statement eventually always !rst would have to be written in SVA2005 as: not (##[1:$] !rst j > ##[1:$] rst)) Starting with SVA2009, strong and weak versions (in their bounded and unbounded forms) of the always, eventually, nexttime, and until2 operators have become directly available in the language. SVA2009 also added flexible abort operators preempting a property attempt execution when some Boolean condition holds. Global clocking In many cases, such as checking the stability of a local clock, users want to be able to enforce a condition at every time step. This can be a challenge in SVA2005, since all assertion clocking must be derived from a local clock signal. Thus, if we are trying to check the stability of the clock signal itself, we have no time points to refer to other than its own edges. SVA2009 introduces the concept of a global clock. The global clock can be declared with a global clocking statement and is intended to represent the finest-grained clock in a design. Even if a unit 2 There is no bounded form for the until operator in SVA. 25 EDA Industry Standards does not have any local signal that corresponds to this global clock, it can use a set of system functions to measure time in reference to it. Let expressions SVA2005 provided the useful property construct to enable modular, reusable concurrent assertions. This enabled properties to reuse other properties in building complex assertions. However, there was no corresponding container for immediate assertions. It was possible to use macros, but because these are expanded during preprocessing and not displayed as real language objects by most debuggers, this method caused many difficulties for users. SVA2009 added the new concept of let expressions. While similar to a macro in that it allows the definition of some symbol to represent a more complex expression, a let expression is a scoped object whose expansion is not considered part of preprocessing. Thus let expressions can be used as building blocks for immediate assertions in the same way properties are used to build concurrent assertions. Let expressions (and checkers) also lead to cleaner RTL by enabling a clear distinction between design and instrumentation code, and eliminate the need for many ‘ifdef statements previously used for this purpose. Checker constructs Having generic, flexible verification librariesV centrally maintained sets of packaged assertions and modeling code representing common situations seen in designsVis critical for ABV, and SVA provides a good infrastructure for this [9]. However, SVA2005 had a number of limitations affecting verification libraries. Most notably, the existing SystemVerilog containers were not always satisfactory for packaging sets of assertions and modeling code: the limited nature of the property construct made it hard to describe a set of related assertions and associated behavioral modeling. Modules and interfaces can package several assertions and modeling code, but they have many limitations: they require all arguments to be typed; they cannot accept arguments of the type sequence, property, or event; they cannot be instantiated in procedural code; they cannot infer clocks and resets from their context; and they have no concept of free variable support. 26 SVA2009 has a new container, a checker, designed as a flexible library building block that can contain assertions, modeling code, and other useful constructs [6]. Some notable features of checkers are the ability to take simple signals, sequences, properties, or events as inputs, the ability to be instantiated at the top level of a module or in procedural code, system functions to infer the clock and reset from its instantiation context, and the ability to include both assertions and modeling code. They also supply additional functionality useful in formal modeling, such as free (nondeterministic) variable support. Because of these features checkers are suitable to be containers for Verification IP (VIP). The impact of checkers (and the other features described in this section) on library development is clearly visible when comparing the SVA Checker Library [10], recently donated by Intel to Accellera, to the standard Open Verification Library (OVL) [11], which is based on modules and other SVA2005 constructs. Table 1 illustrates the differences in the two approaches. From SVA2009 to SVA2012 Work on the emerging standard is focused on refining the major enhancements introduced in SVA2009 and on addressing usability problems. Also, initial steps have been undertaken to support Analog and Mixed Signal (AMS) assertions. The features described in this section are not guaranteed to become part of the emerging standard. Checker usability Checkers introduced in SVA 2009 were intended to be building blocks for VIP. However, the checker modeling capability was limited: let expressions, functions, and edge-sensitive always procedures with nonblocking assignments only. Though these capabilities are sufficient for building VIP, the available modeling style is very different from the style VIP developers are used to. This resulted in slow acceptance of checkers for large VIP blocks. It was therefore important to introduce familiar modeling constructs, such as continuous assignments, blocking assignments, different kinds of always procedures, and procedural conditional and looping statements. This task is far from being trivial, considering that the simulation semantics in checkers differs from that of the modules. It requires reconciling free variable support, expression sampling, IEEE Design & Test of Computers and deferred assertions in checkers. At the price of a number of restrictions, it became possible to elaborate a proposal that handles all these issues consistently. Another important problem was a lack of output ports in checkersVthe checkers were pure observers. This fact is a serious obstacle to modularity, and it prevents shaping large VIP blocks as checkers: modules cannot be instantiated in checkers, whereas checkers cannot return computation results to their caller. Therefore it was decided to allow output ports in checkers. This feature also allows using checkers as generators. Taking advantage of nondeterministic modeling based on free variables, checkers may act as stimuli generators for a device under test (DUT), thus providing an attractive alternative to programs, especially for formal verification environments. Checker output ports are also important for capturing the outcome of an assertion (success or failure) and feeding it to scan latches, thus opening the door to automatic assertion synthesis on the silicon. Assertion system functions Assertion system functions such as $onehot (checking 1-hot encoding of a bit vector) belong to the Boolean layer of SVA that was believed to be well-defined. However, massive SVA usage revealed two critical issues with these functions: their behavior is not always satisfactory when their argument contains undefined values X or Z, and it is not clearly defined whether their argument can be of an unpacked type. To address these problems the definition was clarified to allow unpacked data types, and the new function $countbits was introduced to flexibly count the occurrences of any known or unknown bit values. Deferred assertions Deferred assertions introduced in SVA2009 solved the problem of glitch sensitivity in all cases except when the same assertion contains a mix of signals from the DUTand the testbench. To cope with this issue a different flavor of deferred assertions was suggested, one that matures after all value changes in a time step, from both DUTs and testbenches, are complete. Both flavors of deferred assertions are required because the action blocks of the new assertions may only be used to issue messages, but not to modify design or testbench data. March/April 2012 Table 1 OVL versus SVA checker library Assertion controllability SVA has the ability to switch assertions on and off using several system tasks such as $asserton and $assertkill. These capabilities are not sufficient for assertion management in large systems with power control that requires switching groups of assertions. For example, if there is a need to switch off all the assertions in some module hierarchy except those that appear in specific submodules, killing all assertions in the entire hierarchy and then reenabling them in the specific submodules does not work properly because the active assertion attempts have been stopped. To cope with this problem and to allow more finely-grained assertion management, a new system task, $assertcontrol, has been introduced. Global clocking The global clocking construct added in SVA2009, providing a model reference clock, works well for formal verification, but can result in a significant performance penalty in simulation. In practice, for different clock domains it is possible to define different reference clocks which are much slower than the reference clock for the entire system. Therefore it was proposed to allow hierarchical specification of reference clocks. 27 EDA Industry Standards Towards AMS assertions Since analog and mixed signal (AMS) validation is becoming more and more important, it has become necessary to have assertions validating AMS system behavior. Defining and incorporating AMS assertions into SVA requires merging VerilogAMS with SystemVerilog as a prerequisite. One key obstacle to AMS functionality was the requirement in SVA2009 that no real number data values be used in assertion expressions. As a first step towards allowing AMS assertions, this requirement was loosened to allow subexpressions be of a real data type as long as top-level assertion expressions evaluate to a Boolean. Use case: Intel IOSF By seamlessly combining declarative assertions with the behavioral modeling of SystemVerilog, SVA provides a powerful language for building complex VIPs. Here we share our experience in developing an SVA-based VIP for IOSF, an Intel on-chip system fabric standard for connecting various internal and third-party IPs, analogous to the AMBA interconnection used in the ARM community. It is scalable, supports multicore operation, and maintains PCI order for software compatibility [12]. IOSF spans multiple layers, from signal level protocols all the way up to message and transaction level protocols. VIP development methodology Given the central role of IOSF in the reuse of modular IPs and fast system integration, it is critical to ensure that: 1) the IOSF standard is correct, complete and consistent, and 2) that IPs are compliant with the IOSF standard. To achieve this challenging goal, we developed a large-scale SVA-based VIP, CompMon, that implements all the compliance rules annotated in the IOSF standard [13]. We formally verified CompMon against a set of carefully chosen properties, also written in SVA, in order to achieve a high level of confidence that the set of compliant rules it implements and the specification itself are close to the ideal of being complete, correct, and consistent. The verified VIP then became a golden compliance standard that every IP must validate against. To maximize the reuse of the VIP in different validation flows such as simulation, formal verification, and emulation, we implemented CompMon using a synthesizable subset of SystemVerilog with assertions. We also chose to stay with SVA2005 at the 28 time of the development to ensure that the VIP can work with a wide range of vendor and in-house tools. This strategy allowed us to quickly deploy the VIP to all SOC projects in Intel. As more and more tools start to support SVA2009 features, we believe that it is worthwhile to gradually upgrade the VIP to take advantage of these features. In the other direction, the learning we gained in developing and deploying CompMon has helped us identify new language requirements which have influenced the standard. A good example is the SVA checker library mentioned earlier in the paper. Usage and results Using CompMon to check for interface compliance is as simple as instantiating a SystemVerilog module which monitors the interface wires between the IOSF fabric and a connected IP (shown in Figure 1). Since its creation, CompMon has been deployed in seven different Intel design projects, spanning both Soft IP providers and SOC CPU designs. Since then, 18 issues have been found in the validation collaterals and 15 late compliance violations have been discovered in IP designs. All implementations claiming compliance with our protocols are now required to include CompMon as part of their test environment and to document how they check for the few rules that require IP-specific information. A design is considered compliant if it passes IP-specific functional testing without violating any of the rules. While waivers might be granted, some of the assertions will require coverage to ensure interoperability. If an IP exits functional testing without exercising these assertions, a hole in functional testing is revealed that must be filled by additional testing. SVA standardization and academic research The use of logic to describe and verify systems has a long history in academic research, and is beyond the scope of this paper. For a broad review of the history of logic and verification see [14]. SVA and PSL have not only relied on academic research, but inspired more academic research as well. Coming up with an industrial standard requires a new way of thinking. The specification language was judged not only by traditional academic parameters such as expressibility, complexity of the IEEE Design & Test of Computers Figure 1. RTL compliance checking. decision problem, and modularity, but also by ease of use, ease of debug, similarity to design languages, and adaptability to dynamic verification. Publications such as [1], [2], [15] were part of defining what the industry needs: linear vs. branching semantics, clock and reset handling, filling the gap between LTL and full !-regular language. Being able to have properties with consistent semantics for both finite and infinite computations required special care [16], [17]. Once the standards were announced and used, more practical issues arose. The high complexity of model-checking SVA [18] gave rise to several publications on efficient model-checking of a useful fragment of SVA [19]–[22] that can be used for both model checking and dynamic verification. Other efforts aimed at debugging SVA [23] using hybrid approaches [24] that combine static and dynamic methods, and extracting coverage and vacuity conditions from SVA assertions [25]. there are still several problems that remain due to the limited bandwidth that is available for the standardization effort. Coverage One important problem relates to the area of coverage, which is split between SVA and SVTB (SystemVerilog Test Bench). The root of this problem is that these parts of coverage have been owned, since the beginning of SVA standardization, by two different subcommittees. The syntax and the simulation semantics have nothing in common, and a large amount of manual work is required to combine temporal information with combinational coverage constructs. It is therefore important to define a tighter integration between these two parts of SystemVerilog coverage and to create temporal covergroups that combine the concepts of SVTB covergroups and SVA sequences, thereby facilitating compact definition of complex coverage spaces. Open problems Although many important problems have been solved in the course of the history of SVA standardization, or are in the process of being solved now, March/April 2012 AMS assertions Another large and important problem is support of AMS assertions, which requires, as a necessary 29 EDA Industry Standards preliminary condition, integration of Verilog-AMS into SystemVerilog. The first step towards AMS assertions support, the enabling of real data types in SVA, is being taken as part of the current standardization effort. A more challenging task is to define temporal operators based on a continuous time model, as opposed to the discrete time model used in current SVA assertions. UVM integration UVM methodology [26] leverages many aspects of object-oriented programming. Currently, SVA is poorly integrated with the object-oriented portions of SV, with such major limitations as not allowing properties or checkers within classes. It would be preferable, for example, to have monitors implemented as checkers, since this would permit checker reuse at different levels of abstraction. This requires the ability to specify checkers as class members. In general we need extensions of SVA that will fully enable its use in classes and other object-oriented constructs. Transaction-level assertions Currently in SystemVerilog, assertions are well defined only for the RTL level. It is important to adapt SVA for handling transaction-level verification, as well [27]. specific order, it is necessary to specify a group of sequences as an argument to a checker. Because of this fixed-length argument list limitation, different checkers need to be created to handle different numbers of events. IN THIS PAPER we covered several aspects of SVA standardization: its contents, history, justification, practical needs, major applications, interaction with academic research, and organizational problems and challenges. Some of these aspects are common to many standardization processes; others, such as the highly reciprocal interaction with the academic research, are more specific to SVA. For standardization to succeed, an appropriate investment needs to be made: designing features, writing documentation, reviewing, and proofreading require a dedicated effort. SVA is an example of standardization success, characterized by close, effective cooperation between customers and suppliers, industry and academia, and different standardization subcommittees. The history and lessons of the SVA effort can serve as a good example for other standardization projects. h h References [1] I. Beer et al. ‘‘The temporal logic sugar,’’ in Proc. Comput. Aided Verific., 2001. Type system In checkers, properties, and sequences it is possible to declare arguments of type property, sequence, or event. However, there is no generic data type for scalar arguments: they must either be declared using a specific data type or as untyped. Both alternatives are undesirable: the former prevents generality, whereas the latter prevents the code from being self-documenting, and makes error messages more obscure. For examle, instead of an error message like ‘‘a is a sequence, but an integral value is expected’’ at the checker invocation point, the user will get an error message like ‘‘goto repetition cannot be applied to sequences’’ somewhere in the checker internals. [2] R. Armony et al. ‘‘The ForSpec temporal logic: A new temporal property-specification language,’’ Tools and Algorithms for Construct. Analy. Syst., 2002. [3] N. Fedida, J. Havlicek, N. Levi, and H. Miller, CBV Semantics, 2002. [Online]. Available: http://www.vhdl. org/vfv/hm/att-0672/01-cbv_semantics.pdf. [4] IEEE Standard for SystemVerilogVUnified Hardware Design, Specification, and Verification, IEEE Std. 1800-2009, 2009. [5] J. Havlicek and Y. Wolfsthal, ‘‘PSL and SVA: Two standard assertion languages addressing complementary engineering needs,’’ in Proc. DVCon, 2005. [6] E. Cerny, S. Dudani, D. Korchemny, and L. Piper, ‘‘Verification case studies: Evolution from SVA 2005 to SVA 2009,’’ in Proc. DVCon, 2009. Variable number of arguments One more useful enhancement relates to the ability to specify a variable number of arguments in checkers and similar constructs. For example, to state that several events (sequences) happen in a 30 [7] IEEE Standard for Property Specification Language (PSL), IEEE 1850-2005, 2005. [8] A. Pnueli, ‘‘The temporal logic of programs,’’ in Proc. 18th IEEE Symp. Found. Comput. Sci., 1977, pp. 46–57. IEEE Design & Test of Computers [9] E. Cerny, S. Dudani, and D. Korchemny, ‘‘IEEE [24] E. Cerny, A. Dsouza, K. Harer, P.-H. Ho, and 1800-2009 SystemVerilog: Assertion-based Checker T. M. Hi-Keung, ‘‘Supporting sequential assumptions Libraries,’’ in Proc. DVCon, 2010. in hybrid verification,’’ in Proc. ASP-DAC, 2005, [10] E. Cerny, S. Dudani, and D. Korchemny, SVA Checker Library, 2010. [Online]. Available: http://www.accellera. org/apps/org/workgroup/ovl/download.php/3512/ SVACheckerLibrary_101006dk.pptx. [11] Accellera Standard Open Verification Library (OVL) V2.5, Accellera, 2010. [12] P. Clarke, ‘‘Intel SOCs aided by interconnect, IP library,’’ EE TimesVEDN, Jul. 2011. [13] R. Adler, S. Krstic, E. Seligman, and J. Yang, pp. 1035–1038. [25] D. Bustan, A. Flaisher, O. Grumberg, O. Kupferman, and M. Y. Vardi, ‘‘Regular vacuity,’’ Proc. CHARME, pp. 191–206, 2005. [26] Universal Verification Methodology. [Online]. Available: http://uvmworld.org/. [27] W. Ecker, V. Esen, T. Steininger, and M. Velten, ‘‘Requirements and concepts for transaction level assertions,’’ in Proc. IESS, 2007. ‘‘CompMon: Ensuring rigorous protocol specification and IP compliance,’’ presented at the Des. Verification Conf. Exhibition, San Jose, CA, 2011. [14] M. Y. Vardi, ‘‘From philosophical to industrial logics,’’ Proc. ICLA, pp. 89–115, 2009. [15] M. Y. Vardi, ‘‘Branching vs. linear time: Final Doron Bustan is working as software engineer at Intel Corporation and interested in high level modeling, high level specification, and security. In 2002, Bustan received a PhD in computer science from the Technion, Haifa, Israel. showdown,’’ in Proc. 2001 Conf. Tools and Algorithms for the Construct. Anal. Syst., 2001. [16] R. Armoni, D. Bustan, O. Kupferman, and M. Y. Vardi, ‘‘Aborts vs resets in linear temporal logic,’’ Proc. TACAS, pp. 65–80, 2003. [17] C. Eisner, D. Fisman, and J. Havlicek, ‘‘A topological characterization of weakness,’’ in Proc. PODC 2005. [18] D. Bustan and J. Havlicek, ‘‘Some complexity results Dmitry Korchemny is a senior CAD technical staff engineer at Intel. His interests include pre- and post-Si validation and debug. He is actively involved into SystemVerilog Assertion standardization. Korchemny has an MSc in electrical engineering and computer science from Moscow Institute of Radio-engineering, Electronics and Automation. He is a member of IEEE. for SystemVerilog assertions,’’ in Proc. Comput. Aided Verific., 2006, pp. 205–218. [19] M. Boule and Z. Zilic, ‘‘Automata-based assertion-checker synthesis of PSL properties,’’ ACM Trans. Design Autom. Electron. Syst., vol. 13, 2008. [20] S. Takeuchi, K. Hamaguchi, and T. Kashiwabara, ‘‘Checker generation of assertions with local variables Erik Seligman has been with Intel since 1994, in a variety of positions including software development, design, validation, and formal verification. Currently he is a formal verification architect in the Formal Verification Center of Expertise. Seligman has a MS in computer science from Carnegie-Mellon University, Pittsburgh, PA. for model checking,’’ IPSJ Trans. Syst. LSI Design Methodol., 2009. [21] R. Wille et al. ‘‘Identifying a subset of System Verilog assertions for efficient bounded model checking,’’ Digit. Syst. Design, 2008. [22] R. Armoni, D. Korchemny, A. Tiemeyer, M. Y Vardi, and Y. Zbar, ‘‘Deterministic dynamic monitors for linear-time assertions,’’ Proc. FATES, pp. 163–177, Jin Yang is a principal engineer in Strategic CAD Labs, Design and Technology Solutions at Intel. His research interests include system level specification, design, and validation, applied formal methods, and postsilicon validation diagnosis. Yang has a PhD in computer science from the University of Texas at Austin. 2006. [23] M. Siegel, A. Maggiore, and C. Pichler, ‘‘Untwist your h Direct questions and comments about this article brainVEfficient debugging and diagnosis of complex to Dmitry Korchemny, Intel Corporation, Intel Israel (74) LTD. P.O. BOX 1659, Haifa 31015, Israel; dmitry. korchemny@intel.com. assertions,’’ in Proc. Design Autom. Conf. (DAC), 2009. March/April 2012 31