Patent Publication Number: US-8539405-B2

Title: Method and system for implementing top down design and verification of an electronic design

Description:
CROSS-REFERENCE TO RELATED APPLICATIONS 
     The present application is a continuation of U.S. application. Ser. No. 12/340,677, now U.S. Pat. No. 8,234,609, entitled “Method and system for implementing top down design and verification of an electronic design” and filed on Dec. 20,2008, which claims the benefit of U.S. Provisional Application Ser. No. 611016,426, filed on Dec. 21,2007, which are hereby incorporated by reference in their entireties. 
    
    
     BACKGROUND 
     Many phases of modern electronic design are performed with computer aided design (CAD) tools or electronic design automation (EDA) systems. To design an integrated circuit, a designer first creates high level behavior descriptions of the IC device using a high-level hardware design language (HDL). Common examples of HDLs include Verilog and VHDL. 
     An EDA system typically receives the high level behavior descriptions of the IC device and translates this high-level design language into netlists of various levels of abstraction using a computer synthesis process. A netlist describes interconnections of nodes and components on the chip and includes information of circuit primitives such as transistors and diodes, their sizes and interconnections, for example. 
     An integrated circuit designer may use a set of layout EDA application programs to create a physical integrated circuit design layout from a logical circuit design. The layout EDA application uses geometric shapes of different materials to create the various electrical components on an integrated circuit and to represent electronic and circuit IC components as geometric objects with varying shapes and sizes. 
     Verification is performed at several stages to ensure that the electronic circuit design will work for its intended purpose. After an integrated circuit designer has created an initial integrated circuit design, the integrated circuit designer then tests and optimizes the integrated circuit layout using a set of EDA testing and analysis tools. At the logical level, simulation and formal verification are used to test the IC design. At the physical implementation level, common testing and optimization steps include extraction, verification, and compaction. The steps of extraction and verification are performed to ensure that the integrated circuit layout will perform as desired. The test of extraction is the process of analyzing the geometric layout and material composition of an integrated circuit layout in order to “extract” the electrical characteristics of the designed integrated circuit layout. The step of verification uses the extracted electrical characteristics to analyze the circuit design using circuit analysis tools. 
     As the quantity of data in modern IC designs become larger and larger over time, it has become apparent that conventional EDA tools are unable to effectively and efficiently scale upwards to handle very large electronic designs, such as many modern microprocessor, SOC, and systems designs. For example, the ability of conventional verification tools to handle simulation or formal verification is incompatible with many modern IC designs being produced by electronics companies that are constantly increasing in complexity and number of transistors. The basic problem is that conventional simulation and formal verification tools are designed to handle much smaller sets of data than exists for modern designs. This problem is exacerbated for all EDA tools by greatly increased functionality and feature sets for modern IC chips as well as constantly improving IC manufacturing technologies that can create IC chips at ever-smaller feature sizes, which allow increasingly greater quantities of transistors and other objects to be placed within the same chip area. 
     Organizations that design very large circuits may attempt to address these problems by using simulation or formal verification only at certain specified levels of the design, and not the entire design, so that the quantity of data sought to be verified is within the appropriate range for conventional EDA tools. The problem with this approach is that the entirety of the design may not be adequately verified, and it is ineffective for identifying all problems with the design. Moreover, this approach may result in design flaws being found much later in the design cycle and even after market/production release of the product. As is well known in industry, the cost of fixing a design problem tends to significantly increase the further along the product is on the design cycle. 
     One approach to address these problems is to create specialized “ad hoc” models of the design at different levels, e.g., using C-based model to represent RTL. In this approach, the ad hoc designs would be tested and verified along with the RTL. There are many problems with this alternate approach. For example, the alternate approach fails to provide a consistent relationship across different abstraction levels. In other words, this approach has no relationship between the different levels other than at a conceptual level. There is a very large gap between what is determined at one level versus what actually happens at another level. Because of this, this approach requires the verification and correction process at the different levels to be repeated over and over again, often without any assurance that the design problems at a given level are truly being identified. 
     Transaction based verification is another approach for attempting to address the same problems. With transaction based verification, low level signal activities are grouped together into common “transactions”. This is a notable attempt to act upon a circuit design at different levels of abstraction and is becoming more and more prevalent in the EDA product and technology space. The problem with conventional transaction based verification tools is that there is no guarantee of relationship between the different abstraction levels. In other words, there is no airtight guarantee that no errors identified at the transaction level will translate into no errors at the signal level, and vice versa. 
     These problems become even more difficult when viewed in the context of hardware/software co-design. Many electronic systems, whether self-contained or embedded, include both a hardware platform and associated software that run with or on the hardware platform. Hardware/software co-design refers to the process of concurrently forming designs for the hardware and software components of an electronic system. 
     The process of performing hardware/software co-design is considered very challenging for many designers, since it normally requires a multi-disciplinary approach to systems design that must take into account complex effects throughout the different parts of the system. The design of embedded software and systems is particularly seen as a tricky exercise, often needing to consider many acute constraints for a successful design, such as energy consumption, memory space, criticality and safety considerations, and execution time. With many modern systems designs becoming more and more complex, these constraints are causing greater and greater difficulties for the co-design process. 
     SUMMARY 
     Some embodiments of the present invention address the above problems by providing an improved approach for designing and verifying electronic designs. In some embodiments, design and verification are performed using stepwise refinement techniques, which can also include or be referred to as “top-down” design verification. With the present stepwise refinement approach, the electronic design can be acted upon at different levels of abstraction, but with approximately the same level of resolution at each abstraction level. A strong relationship of consistency exists between the successive abstraction levels of the design. On account of this consistency, properties that are established or true at one level of the design remain true for all subsequent levels of abstraction of the design. 
     Embodiments of the present invention also allow designers to more efficiently and accurately perform hardware/software co-design. The stepwise refinement techniques of the present invention can be applied to both the hardware and the software components of a systems design. Each of the hardware and software components of the design is implemented and acted upon at different levels of abstraction, but with approximately the same level of resolution at each abstraction level and with a strong relationship of consistency between the successive abstraction levels of the design. As previously stated, this consistency allows properties that are established or true at one level of the design to remain true for all subsequent levels of abstraction of the design. For the co-design process, this consistency in particular allows a designer to safely implement a systematic and concurrent divide-and-conquer approach to both the hardware and software elements in a design. 
     Further details of aspects, objects, and advantages of the invention are described below in the detailed description, drawings, and claims. Both the foregoing general description and the following detailed description are exemplary and explanatory, and are not intended to be limiting as to the scope of the invention. 
    
    
     
       BRIEF DESCRIPTION OF FIGURES 
         FIG. 1  shows a system for performing stepwise refinement of an electronic design according to an embodiment of the invention. 
         FIG. 2  shows a flowchart of process for verifying an electronic design according to an embodiment of the invention. 
         FIG. 3  shows a flowchart of process for implementing an electronic design according to an embodiment of the invention. 
         FIG. 4  shows a flowchart of process for organizing design portions in an electronic design according to an embodiment of the invention. 
         FIGS. 5A-D  illustrates an approach for designing and verifying an example electronic design according to an embodiment of the invention. 
         FIG. 6  shows an approach for designing and verifying an example electronic design which illustrates both software and hardware properties according to an embodiment of the invention. 
         FIG. 7  shows an architecture of an example computing system with which the invention may be implemented. 
     
    
    
     DETAILED DESCRIPTION 
     The present invention provides improved approaches for designing and verifying electronic designs. In some embodiments, design and verification are performed using stepwise refinement techniques, which can also include or be referred to as “top-down” design verification. The design and verification can be used to perform hardware/software co-design, such as for the design of embedded systems and software. 
     With the present stepwise refinement approach, the electronic design can be acted upon at different levels of abstraction, but with approximately the same level of resolution at each abstraction level. What this means is that the amount of data to be accessed and operated upon at each level of abstraction for the purpose of verification is approximately the same, but the level of detail is different. For example, consider a verification process that first checks a design at a high level of abstraction, then at a medium level of abstraction containing more design details, and then at an even lower level of abstraction with many more details. Each level of verification will be performed at approximately the same level of complexity by focusing on more global properties at the higher levels of abstraction and only on more local properties that require more detail but less of the design at the lower levels of abstraction, thus including more and more local details of smaller and smaller components of the design as the process proceeds through lower and lower levels of abstraction of the design. 
     A strong relationship of consistency exists between the successive abstraction levels of the design. On account of this consistency, properties that are established or true at one level of the design remain true for all subsequent lower levels of abstraction of the design. It is this consistency of relationship between abstraction levels that allows proper scaling for verification tests throughout the entire design by allowing properties to be verified once and for all at the highest level of abstraction for which the property can be manifest in the available details of that level of abstraction, and then known to hold for all subsequently lower levels of abstraction without any need to re-verify them at these lower levels of abstraction. This allows verification made separately at the different levels of the design to be incorporated into an overall assessment of the entirety of the electronic design, including both higher levels as well as lower levels of the design. 
     Each level of abstraction contains a sufficient threshold of resolution such that the given abstraction level may be operated upon by an appropriate EDA tool. By this, it is meant that the amount of information pertaining to the design at a given abstraction level is sufficiently limited such that it can be adequately addressed by intended EDA tools. An EDA tool can therefore access the design at any one of a number of abstraction/magnification levels. If it is desired to operate upon the highest design level, then the EDA tool would simply access and operate at that level. If it is desired to operate upon more detailed levels of the design, then the EDA tool would simply access the design at lower levels of the design. This scaling is accomplished by establishing a hierarchy of the properties to be verified, wherein the more global properties that require larger portions of the design to verify are verified at higher levels of abstraction, whereas the properties that require more details of the design to verify are verified at lower levels of abstraction. The design is arranged in such a manner that for these latter properties that require more details of the design in order to verify them, smaller more local portions of the design are sufficient in order to accomplish this verification. Thus, the hierarchy of properties is accompanied by a design discipline that enforces such locality of lower-level properties. Although designs that fail to follow this discipline may not submit to such scalable verification, such designs would also be harder to design correctly because the design would entail more and more low-level details that were essential to the verification of critical properties and this in turn would yield a growth in behaviors that needs to be checked relative to these properties. The number of such behaviors tends to grow exponentially in the number of design details, and thus verification for this quickly becomes intractable. Thus, the stepwise refinement approach embodies a design discipline that renders verification complete and tractable. 
     In some cases a property will require for its verification different levels of abstraction of respectively different parts of the design. For example, the verification of a particular property may require one or more design blocks to be represented at a low level of abstraction, containing relatively more details of the design, together with other blocks for which a greater level of abstraction is sufficient. Such imbalanced representations of the design are consistent with and may be a part of the stepwise refinement approach. 
     Since each property is limited in the amount of information that is required for its verification, EDA tools can adequately address intended functionality against that level of abstraction of the design without encountering overly large amounts of information that cannot be handled by the tool. Each property of the design to be verified can be progressively addressed in this manner through the stepwise refinement process until the entire set of design properties has been addressed by appropriate EDA design and verification tools. 
     In this manner, the complexity of each property verification remains under the threshold of what is possible with the available tools. Whereas the prior art strives to verify properties in this manner and may or may not succeed in each particular case, the stepwise refinement process disclosed herein increases the likelihood that property verifications will remain tractable by coordinating the design process with the abstraction process used for verification. 
     The property to be verified can be a property of a hardware element, a software element, a mixed hardware/software element, or an as-yet undetermined element that could be either a hardware, software, or mixed hardware/software element once further refinement is applied to the design. In essence, the approach of the present invention is completely agnostic as to its application to hardware or software elements and can be applied to both types of design components. Therefore, the present invention is applicable to any type of system design, whether pure hardware, pure software, or a mix of both hardware and software. In fact, at certain levels of abstraction and for many types of designs, the hardware and software elements may even be indistinguishable from each other. Throughout this document, the term “design”, “electronic design”, “specification”, or “circuit specification” refers to any combination of hardware and software elements within a design. 
       FIG. 1  shows an example system  100  for implementing this type of stepwise refinement design and verification approach. One or more design editing tools  102  are used by one or more users at user station  106  to design, editing, and/or revision of an electronic design. The one or more design editing tools  102  is used to address the hardware and/or software components within the electronic design. 
     One or more verification tools  104  are employed to perform verification functions upon the electronic design created and edited by the design editing tool  102 . The electronic designs may be stored in a data storage device  110 . The data storage device  110  may be used to store the electronic design at different levels of abstraction, e.g., a design  112  at a high level of abstraction and a design  114  at a lower level of abstraction. Both the design editing tool  102  and the users have access to one or more design specifications  108  to guide the formation of the electronic design. 
     The design editing tool  102  provides a framework for the designer to create and edit the electronic design at different levels of detail. At the different abstraction levels, it is contemplated that some portions of the electronic design will have much more detail than other portions of the electronic design. The different levels of detail that is used for a portion of the design are based upon whether the design portion is considered to be “more abstract” or “less abstract”. High levels of detail are expected to be provided at higher abstraction levels for portions which are considered more abstract. However, fewer details are expected at higher abstraction levels for less abstract portions. 
     Many suitable approaches can be taken to partition a set of design properties into incremental categories of “more abstract” or “less abstract” and to then associate with each respectively appropriate portions of the design abstraction hierarchy. For example, one example approach to define whether a particular portion is more or less abstract is to consider the relative global or local nature of the properties related to those design portions. If the property relates to global effects on a system level, then it is more likely to be considered a high abstraction property. On the other hand, if a property is more local in nature, then it is more likely to be considered a lower abstraction property. A property may be considered “local” for some portions of the design and “global” for others. In this case, the property would be verified with the concomitant portions of the design represented at lower and higher levels of abstraction, respectively. The design of the abstraction hierarchy used for stepwise refinement is accomplished by first considering the totality of properties required to be verified and then establishing a stepwise refinement hierarchy that is suitable for the verification of the totality of properties in the manner described. Thus, the design process begins with a specification of required properties. Next, a matching stepwise refinement hierarchy is defined. Then the design is specified through the successive levels of abstraction of the hierarchy and together with this the respective properties are verified as soon as their associated levels of abstraction required by their verification have been defined. 
     This stepwise refinement process is aided through an editing mechanism that allows the designer to add levels of design detail as required by the stepwise refinement process and at the same time ensures that the added details are consistent with the previous levels of abstraction in the sense that the abstraction is “conservative”, meaning that any properties verified at higher levels of abstraction remain true at all subsequent levels of abstraction. Whereas the alternative approaches start with a detailed level of a design and then seeks to find an appropriate conservative abstraction through which a particular property may be verified, the stepwise refinement process begins with an abstraction that is both suitable for verifying a respective property and is also capable of being refined into fully detailed design with respect to which the beginning abstraction is conservative. This process is accomplished through a technique wherein at the higher levels of abstraction, lower level details are represented abstraction through specially designed placeholders or “stubs” whose high-level behavior is nondeterministic and thus captures all possible lower levels of behavior manifest once the stubs are replaced by actual design detail. The editing mechanism enforces the non-determinism of the stubs and the consistency of this non-determinism with the design details with which the stubs are eventually replaced, thus guaranteeing the conservative nature of the stepwise refinement hierarchy. 
     One can compare the coding of a design as is done conventionally, with the coding of that same design under this stepwise refinement process. In the conventional design coding, the design is coded block by block, each successive block at the same low level of detail, generally represented in register transfer level language. In the stepwise refinement process, the design is coded in order of the global extent of its functions. First more global functions are coded, leaving stubs for local details. Then the stubs are replaced with their design details, implementing more local functions of the design. Since both global and local functions touch many or all design blocks, each such design block is coded in stages. First, the global functionalities of all the design blocks are coded; then the more local functionalities of all the design blocks are coded. As a result, the coding of a particular design block is addressed in stages that follow the stepwise refinement hierarchy. Except for the small amount of code that is used to represent the stubs at higher levels of abstraction that are eventually replaced by detailed code at lower levels of abstraction, the actual amount of code written in the conventional process is essentially the same as the amount of code required by the stepwise refinement process, the difference being the order in which pieces of code are written. In conventional design, each block is coded from its beginning to its end. With the stepwise refinement process, a block of code may be partially coded and partially stubbed, then revisited later to replace the stubs with low-level detail. 
     The stepwise refinement process admits any number of levels of refinement. For example, a stub may be replaced with some low-level detail and one or more additional stubs. Moreover, a stub itself may contain some functional details. For example, a stub for an address block may start as a field that is non-deterministically either empty or nonempty. It then may be refined to a more detailed stub that abstracts the address as a single integer assigned by some deterministic process. Ultimately, this refined stub may be refined again to contain its ultimate level of detail, representing the address as a number of subfields with various meanings. Each intermediate representation (in this example, the integer) is a stub for a subsequent more detailed representation, until the last stub is finally replaced with the full level of detail of the design implementation. 
     The editing mechanism that mediates the refinement process would ensure that non-determinism of the first stub subsumed all subsequent behaviors of the successive refinements and that the abstraction of the address as a single value is consistent with the ultimate refinement of the address into its respective subfields. The editor would accomplish this by assuring that all possible values at lower levels of abstraction map in a consistent manner to the associated values at the prior higher levels of abstraction. This assurance could, for example, be accomplished by the editor automatically establishing a homomorphism between successive levels of abstraction. 
     Note that whereas in the example given, a stub was refined through a three-step refinement hierarchy, in general the number of steps engendered by the stepwise refinement process is arbitrary. Thus, when a design is coded using this stepwise refinement process, the coding of any individual block may occur though a arbitrary number of stages in which stubs in that block are replaced by more design details and possibly additional stubs in a successive manner. 
     The design editing tool  102  provides an interface and editing mechanism for the designer to create the design in a staged approach, where portions of the electronic design corresponding to a higher level of abstraction are created first. These design details form the basis of the higher abstraction design. When the higher abstraction level design is complete, it includes comprehensive design details for design portions relating to the higher abstraction properties. However, to the extent the designs at higher abstraction levels need to reference portions that are considered to be at lower abstraction levels, only stubs are placed into the designs to address these lower abstraction portions. The detailed design for these lower abstraction portions are left for later development. 
     With respect to co-design activities or design of embedded software, the hardware and/or software components within the design can both be generally addressed using the same refinement approach. Both the hardware and software elements are formed with different levels of details at the different abstraction levels. Through the refinement process, additional levels of detail are added for each element of the design, regardless of whether a hardware or software element is being addressed. As previously noted, the additional levels of detail are added in a consistent manner that makes the abstraction conservative between all levels of abstraction. 
     The interface between hardware and software components within a design is a particularly difficult aspect to implement and verify for co-design, systems level design, or the design of embedded software. This problem is addressed by specifying non-deterministic interface properties for the design elements within the system. The higher levels of abstraction for the design element would include a stub for the interface behavior that is non-deterministic and captures all possible lower levels details of abstraction. The interfaces between components would be specified in a similar manner regardless of whether the interface relates to two hardware components, two software components, or the interface between a hardware component and software component. However, the stubs for a specific set of behaviors may differ depending upon the type of interface that is being designed. For example, the interface properties on the software element side of the hardware/software interface may differ than the interface properties on the hardware side of the hardware/software interface. The key is that the present approach ensures and reinforces the consistency of those interface properties throughout the different levels of abstraction, allowing the designer the freedom to design the different components, whether hardware of software, at differing levels of global and local detail and yet still be confident that the entirety of the design at increasing levels of abstraction will remain consistent with verification results at previous levels of abstraction. 
     Once the higher abstraction design is complete, verification tools  104  can then be used verify the design for its properties relevant at that abstraction level. Any suitable verification tool can be employed to perform the verification functions. For example, simulation and/or formal verification can be used to verify the electronic design. Referring to  FIG. 2 , if the electronic design has already been implemented consistent with the invention, then verification can be performed separately using each appropriate level of abstraction. For example, verification can be made at the highest levels of abstraction for the design ( 202 ). Once the design has been adequately verified at the high levels, successively lower levels of abstraction for the design can be verified ( 204 ). The process continues until the entire design has been adequately verified ( 206 ). Either or both simulation and formal verification may be used for this verification process. 
     This verification action for higher abstraction designs highlights a significant advantage of the invention, in which problems associated the design can be caught at a much earlier stage of the design process. Instead of waiting until the entire design has been completed, this verification action may be used to identify and correct problems much earlier. 
     In addition, the verification used with the present invention can be performed in a far more focused way than exists with conventional verification approaches. For example, for verification of design at higher abstraction levels using the invention, the verification inherently identifies any higher-level system-related problems with the electronic design. This means that the identified design problems are readily visible as system-related issues, and can be addressed on that basis. The designer does not need to be distracted by localized properties which may obscure or camouflage the system-related problems. Similarly, verification at lower abstraction levels inherently focuses the verification results to the more localized properties, since the more system-related properties have already been verified at higher abstraction levels. 
     These advantages are particularly beneficial for co-design activities, since it is often very difficult to perform co-verification of a systems level or embedded design. In fact, this task is traditionally so difficult to perform that designers often wait to perform co-verification until after prototype hardware is available, e.g., by using circuit emulators or programmable hardware. With the present invention, verification can be performed against any of the components, whether hardware or software, at any level of abstraction with full confidence that the verification results will remain consistent for other levels of abstraction. Verification results can be obtained earlier in the design process, which allows corrections to be made earlier and without the cost of extensive late-stage re-designs. Focused verification can be performed on the design details of the hardware and software components, allowing a designer to isolate the hardware problems from the software problems, and to de-bug specifically with respect to issues in the different hardware and software portions. 
     Once the higher abstraction designs have been adequately verified, the designer at user station  106  uses the design editing tool  102  to create designs at successively lower abstraction levels. Recall that the higher abstraction designs include placeholders—stubs—for portions of the design which correspond to lower abstraction levels. Designs at lower abstraction are created by simply filling in the details of any appropriate stubs for those lower abstraction designs. The existing design details for the higher abstraction portions do not need to change since they had already been created with anticipated contemplation for the detailed design of the lower level details. 
     As each level of abstraction is addressed, the design editor tool  102  is used to create a design version for that abstraction level. More and more details of the design, appropriate for the abstraction level of interest, are provided at abstraction level. The verification tool  104  can be used to verify that design version at each successive abstraction level. Each level of abstraction is addressed in this manner until at the lowest level of abstraction, and the entire design has been completed in detail.  FIG. 3  shows a flow of a process for implementing stepwise refinements for the different abstraction levels. As previously noted, the design editing tool  102  can be used to assist the designer to create higher level abstraction for the electronic design ( 302 ). The designer will then implement designs at successively lower abstraction levels in which properties that are established or true for one level of the design will remain true for other levels of the design ( 304 ). When a designer creates a version of the electronic design at a higher level of abstraction, that version of the design must satisfy certain properties for the design to be correct. As that design is refined to include more and more details for designs at lower levels of abstraction, those properties should be consistently satisfied for each design at each level of abstraction, regardless of the amount of additional design details that are added at each succeeding lower level of abstraction. This process continues, while maintaining consistency of properties across abstraction levels, until the entire electronic design has been completed ( 306 ). 
     The idea is to model successive levels of the design as formal refinements of the respective higher levels. This ensures that all verification at the higher levels carries to all lower levels. In particular, if a higher level is known to be correct with respect to certain property specifications, then the lower levels do not need to be re-verified for those property specifications—they are assured to hold in the lower levels with the same or better confidence that they are deemed to hold at the higher levels. Each level of the design can be verified, e.g., through application of formal verification or as a result of simulation test with sufficiently high coverage. 
     The design editing tool  102  is configured to enforce this consistency of properties across different abstraction levels and the different refinements applied to the design. In one embodiment, the design editing tool  102  checks the design entered by the designer to ensure that, by construction, the design details for one level of abstraction will be consistent with design details at other levels of abstraction. This can be accomplished by making sure the stubs are associated with the expected entry and return behavior as contemplated for the design. The control that enters the stubs should be represented. Importantly, the stubs should be non-deterministic in nature. As such, the surrounding design portions at the higher abstraction levels should be designed to anticipate and capable of addressing any of the possible outputs from stubs. When the details of the stubs are later provided as a refinement, then there should be complete compatibility and conservative consistency of verification results between the multiple levels of abstraction. 
     This highlights another significant contribution of the invention directed to the way in which refinements are defined. If the designer is given no guidance in defining a refinement, then it is very difficult to massage a lower level design to render it a formal refinement of a higher level design abstraction model. Moreover, starting with a low level design, e.g., at the RTL level, and then attempting to abstract it to a succession of higher levels can be very difficult if the low level design was not rendered in a way to make it amenable to abstraction. In fact, many or all successful formal verifications of complex designs through abstraction have been accomplished through modifications of the low level design (or through disregarding the low level design, instead utilizing a higher level “algorithmic” description). However, while such exercises are of considerable significance and value, they cannot ultimately assure the correctness of the low level implementation, from which they deviate. In the present invention, the low level implementation is guaranteed by construction to be a valid formal refinement of the higher level models. 
     One problem that may confront the designer in the practice of stepwise refinement is that even if the successive levels are formally consistent, the designer is required to write more code than would be required to write the bottom level (RTL) implementation alone. Thus, if the design is to be developed through N successive refinements, the designer perceives a requirement to write N designs where in conventional design, just one RTL design suffices. On account of this, notwithstanding the potential benefit of stepwise refinement regarding improved test coverage, designers regard the cost of writing N designs as too high. 
     A significant advantage of the invention is that the designer does not need to completely rewrite the design between different design versions. The existing design details for the higher abstraction levels are re-used for each successively lower level of abstraction for the design. The only significant change between the different abstraction levels is that more details are provided for the properties at the lower abstraction levels. Therefore, the cost of stepwise refinement according to the invention is essentially the same as the cost of writing a single design. Intuitively, this stepwise refinement is accomplished by stratifying the original design into N parts, where each part corresponds to an abstraction at the corresponding refinement level. 
       FIG. 4  shows a flowchart of an embodiment of a process for determining the portions of the overall electronic design that are associated with the different levels of abstraction. As previously noted, any suitable criteria can be taken to partition parts of the design and to identify those parts as being more abstract or less abstract.  FIG. 4  is directed to an approach in which the properties of the design are considered to make this determination, and by considering the relative global or local nature of the properties. The process begins by first identifying the relevant properties of a design ( 402 ). This action can be accomplished either by identifying the properties during high-level design activities or by reviewing a high level design specification. Next, the individual design properties are placed into different groups based upon their relative global or local position relative to the overall design ( 404 ). Finally, each of those groups are organized relative to each other on the scale of being either more/less global or more/less local ( 406 ). The more global properties correspond to higher abstraction levels and the more local properties correspond to lower abstraction levels. 
     This process essentially partitions the functions of a design into levels that correspond to their appearance in the top-down design hierarchy. At the higher levels are functions with more global scope. Likewise, the appearance of data in the design hierarchy is matched to the functions that manage it. At higher levels, data is “stubbed” as a token with no value. At successive levels, data may be represented by 1 bit (“good” vs. “bad”), a message may be represented by its control field alone and values may be encoded as integers. At still lower levels, integers are re-encoded as bit fields and missing fields are added. 
     The process can be implemented by starting with a control flow graph corresponding to the design that is encoded as a state machine. Actions are represented as nondeterministic events with nondeterministic returns. In the course of the refinement process, the state machine is retained, but the tokens that represented the non-deterministic events are replaced by additional state machines that encode their actual behavior. These additional state machines may include additional tokens which represent non-deterministic events, which will eventually be refined into more detailed state machines at a subsequent level of abstraction. Continuing in this fashion through a succession of levels, each successive level adds to the previous level without appreciably deleting from the previous level. In this way, the entire design is developed, with each function encoded only once at its appropriate level of abstraction. 
     To illustrate the invention, consider the specification  502  shown in  FIG. 5A  which corresponds to a set  504  of Properties A-G. The individual Properties A-G within set  504  are organized into groups based upon their relative global or local position relative to the overall design. Assume that Properties A and F are similarly situated as corresponding to high-level system properties. These two properties would be grouped together, e.g., as group  1 . Further assume that Properties C and G correspond to intermediate properties that are both local and global in nature. These two properties would be grouped together, e.g., as group  2 . Also assume that Properties B, D, and E all correspond to local properties. These three properties would be grouped together, e.g., as group  3 . 
     Each of these groups of properties would be categorized as corresponding to different levels of abstraction. The properties in groups that are more global in nature would be categorized as corresponding to higher abstraction levels. The properties in groups that are more local nature are categorized as corresponding to lower abstraction levels. For the sake of illustration, groups  1 - 3  are categorized as shown in  FIG. 5A  in which Properties A and F in group  1  correspond to the highest abstraction level, Properties C and G in group  2  correspond to a medium abstraction level, and Properties B, D, and E in group  3  correspond to the lowest abstraction level. 
     Referring to  FIG. 5B , the process would continue by creating a design version  509  at a high level of abstraction. This level of the design  509  would include a high level of refinement of the design portions associated with the higher abstraction properties, but would have lower levels of refinement for design portions related to lower abstraction properties. Since Properties A and F in group  1  correspond to the highest abstraction, portions  510  and  512  of the electronic design associated with these properties would be designed in refined detail for the design version  509  at the highest abstraction level. 
     Placeholders (or “stubs”), which can be represented as un-interpreted functions, would be placed as appropriate into the design  509  to address design portions associated with lower abstraction levels. As shown in  FIG. 5B , the design portions associated with Properties C and G in group  2  could be represented in design version  509  with stubs  518  and  519 . These stubs  518  and  519  will be replaced with greater design details during subsequent refinement stages of the design. 
     Verification  514  can be performed upon design version  509  at the high level of abstraction. The design at the high level of abstraction can be edited to correct any problems identified by verification  514 . 
     The process can then proceed to refine the design at the next level of abstraction. Referring to  FIG. 5C , this level of the design  511  would include a high level of refinement of the design portions associated with the higher and medium abstraction properties, but would have lower level of refinement for design portions related to lower abstraction properties. Properties A and F in group  1  which correspond to the highest abstraction have already been refined as design portions  510  and  512 . At this point, design version  509  of  FIG. 5B  would be refined into design version  511  of  FIG. 5C  by replacing stubs  518  and  519  of design version  509  with design details  520  and  522  in design version  511 . These detailed design portions  520  and  522  could include stubs  524 ,  526 , and  528  to address Properties B, D, and E which correspond to a lower abstraction level. These stubs  524 ,  526 , and  528  will be replaced with greater design details during subsequent refinement stages of the design. 
     Verification  530  can be performed upon design version  511  at the medium level of abstraction. The design at the medium level of abstraction can be edited to correct any problems identified by verification  514 . 
     The process can then proceed to refine the design at the next lower level of abstraction. Referring to  FIG. 5D , this level of the design  540  would include a high level of refinement of the design portions associated with the high, medium, and low levels of abstraction properties. Properties A and F in group  1  which correspond to the highest abstraction level have already been refined as design portions  510  and  512 . Properties C and G in group  2  which correspond to the medium abstraction level have also been refined already as design portions  520  and  522 . At this point, design version  511  of  FIG. 5C  is refined into design version  540  of  FIG. 5D  by replacing stubs  524 ,  526 , and  528  of design version  511  with design details  542 ,  544 , and  546  in design version  540 . 
     Verification  550  can be performed upon design version  540  at the lowest level of abstraction. The design at the lowest level of abstraction can be edited to correct any problems identified by verification  550 . At this point, refinement has been performed to even the most local portions of the design. Therefore, the entire electronic design is complete at this point. 
     This illustrates the advantage of the invention described above, in which the cost of stepwise refinement is essentially the same as the cost of writing a single design. The original design is essentially stratified into N parts, where each part corresponds to an abstraction at the corresponding refinement level. 
     For example, consider an electronic design that includes a CRC (cycle redundancy check, for error detection) operation. The CRC operation is not encoded at N successive levels of abstraction, which would be burdensome to the designer, but is introduced just once at an appropriate level of abstraction in the stepwise refinement hierarchy. At higher levels, the CRC is represented by a stub or in such a way that the model with the stub is a formal abstraction of the model with the CRC. Therefore, the model with the CRC is a formal refinement of the model with the stub, rendering the two models “consistent”. 
     As noted above, the process can be implemented by starting with a control flow graph corresponding to the design that is encoded as a state machine where actions are represented as nondeterministic events with nondeterministic returns. In the course of the refinement process, the state machine is retained, but the tokens that represented the nondeterministic events are replaced by additional state machines that encode their actual behavior. Through a succession of levels, each successive level adds to the previous level without appreciably deleting from the previous level. For the present CRC example, the design and verification process can be implemented, for example, by encoding global control flows in detail at higher abstraction levels while representing the CRC operation as a stub and representing the packets only as abstract tokens. At the highest levels, specific data structures, e.g., for packets, may remain abstract since the higher level control flows do not necessarily need such low level details to be appropriately encoded. In a subsequent refinement stage, the high level control flows are retained, but the designer replaces the CRC stub by encoding the details of the CRC operation which includes any control flows needed to implement the CRC operation. Any data structures that are needed to implement the CRC operation at this level are also refined in detail, such as any necessary details of data structures for the data packets which are operated upon by the CRC operation. The representation of the packet may still be abstracted as a token in some ways, but will include sufficient data fields/structures as appropriate to address the control flows of the CRC operation. At each subsequent level, the designer will add more control and more data structure details. The level of detail to be encoded for control flows and data structures at each level is driven by the property being addressed at that level. 
     The stub modeling is implemented with non-determination to enable the above consistency considerations. In order to be consistent with its refinements, behavior in the actual CRC level model has a representation in the stub level model. Since the stub in fact makes no computations, it is given the ability to shadow the behaviors of the CRC. This is accomplished by endowing the stub with the entry and return behaviors of the actual CRC. The control that enters the CRC function has a representation in the stub. As well, the action corresponding to the return of the CRC has a representation in the stub, e.g., the CRC and stub both can return “pass” and “fail”. 
     Since the stub embodies no concept of actual computation, it does not represent the actual time or number of clock cycles that occur in the actual CRC computation. To render the stub conservative, it is allowed to model computation for any non-deterministically determined period. Thus, the stub has an entry and non-deterministic return. 
     Likewise, since the stub makes no actual computation, there is no way to correctly return “pass” or “fail” relative to an actual message. Instead, the stub will non-deterministically return either (or both) “pass” or “fail” after a nondeterministic time interval. Since the stub is making no actual computation on a message, the message too will be abstracted at this level to a single token (without data content). Thus, at this level, the correctness of the CRC cannot be verified. What can be verified is the correct handling in the design of the two possible returns of the CRC, i.e., pass or fail. At this level of abstraction, it would be verified that if the CRC returns “pass” then the design performs the correct actions relative to a “pass”, and likewise for “fail”. Only at a subsequent level will the correct action of the CRC itself be checked. This will occur at a level of abstraction at which both the CRC and messages are accurately represented. Since the behavior of the stub is more general than that of the actual CRC, if a property is verified with respect to the stub, it is guaranteed to hold at the CRC level as well. 
     The theories of un-interpreted functions can be applied to stubs. Thus, for example, if an un-interpreted function is modeled so as to return 0 (perhaps as a non-deterministic choice), then its addition to another value is that other value, although the stub did no actual computation. Such analysis can extract useful data form stubs. 
     At the CRC level, in this example, the behavior of the CRC algorithm will be verified. But its correct performance in the context of the larger design has already been verified at a higher level of abstraction and thus does not need to be re-verified. Thus, to verify the CRC (at the CRC level), the associated control code can be disregarded or abstracted. In this way, although the lower level is intrinsically more complex than the higher levels, the verification obligations are more localized. Therefore, the complexity of the verification can be maintained as a feasible computation. The higher levels focus on global behavior at a high level of abstraction, while the lower levels focus on local behaviors with their complex detail made explicit. If this balance is done properly, the computational burden of verification is held more or less constant from level to level and thus verification coverage should be as good for large designs as it is for small designs. 
     As previously noted, the present invention may be applied to any type of electronic design, including designs of embedded software or designs containing both hardware and software elements. 
       FIG. 6  provides a revised illustration of  FIG. 5A  in which some of the identified properties are specifically identified as belonging to either a hardware or software element. For example, property F, even at a very high level of abstraction, is identified as being associated with a hardware element. As noted above, properties G, D, and E are further refinements of property F. Therefore, the more detailed levels of the design associated with property F, i.e., properties G, D, and E, also correspond to properties for hardware elements. 
     Property A is a property at a very high level of abstraction for which it is not apparent whether it belongs to a hardware or software element. In other words, at this level of abstraction, property A could be associated with either or both hardware and/or software elements. As previously disclosed, properties C and B are successively detailed refinements to property A. Property C at a medium level of abstraction that is also associated with either, or both, hardware and/or software elements. Property B, however, is a very low level and is explicitly defined to be associated with a software element. 
     These properties highlight several particular advantages of embodiments of the present invention. For example, one advantage is that designers do not need to immediately and upfront create a partitioning of the system between software and hardware elements in the design. Instead, such partitioning can be delayed until the appropriate level of abstraction for the design before partitioning has to take place. Another advantage is that the level of detail required for such partitioning does not need to be input into the design until the appropriate level of abstraction is being considered. Furthermore, even when the additional levels of detail are added to the design, to create partitioning between hardware and software elements, prior verification results at higher levels of abstraction still remain valid, even for pre-partitioned levels of abstraction, since the post-partitioning lower levels of abstraction are by construction consistent between the different levels of abstraction/details. 
     Embodiments of the invention can be implemented as a business method for distributing design IP (intellectual property). Off-the-shelf components and blocks can be created and distributed at different levels of abstraction. The off-the-shelf blocks should be designed with adequate consistency of properties across different abstraction levels. In one embodiment, specifications can be provided for the off-the-shelf blocks at different abstraction levels so that it can be used in the inventive process by third parties. In this manner, customers can identify and ensure that the commercially obtained design blocks from third parties will work adequately within an organization&#39;s overall design. The published specifications can therefore be used as a marketing tool for greater sales of commercial design blocks. 
     System Architecture Overview 
       FIG. 7  is a block diagram of an illustrative computing system  1400  suitable for implementing an embodiment of the present invention. Computer system  1400  includes a bus  1406  or other communication mechanism for communicating information, which interconnects subsystems and devices, such as processor  1407 , system memory  1408  (e.g., RAM), static storage device  1409  (e.g., ROM), disk drive  1410  (e.g., magnetic or optical), communication interface  1414  (e.g., modem or Ethernet card), display  1411  (e.g., CRT or LCD), input device  1412  (e.g., keyboard), and cursor control. 
     According to one embodiment of the invention, computer system  1400  performs specific operations by processor  1407  executing one or more sequences of one or more instructions contained in system memory  1408 . Such instructions may be read into system memory  1408  from another computer readable/usable medium, such as static storage device  1409  or disk drive  1410 . In alternative embodiments, hard-wired circuitry may be used in place of or in combination with software instructions to implement the invention. Thus, embodiments of the invention are not limited to any specific combination of hardware circuitry and/or software. In one embodiment, the term “logic” shall mean any combination of software or hardware that is used to implement all or part of the invention. 
     The term “computer readable medium” or “computer usable medium” as used herein refers to any medium that participates in providing instructions to processor  1407  for execution. Such a medium may take many forms, including but not limited to, non-volatile media and volatile media. Non-volatile media includes, for example, optical or magnetic disks, such as disk drive  1410 . Volatile media includes dynamic memory, such as system memory  1408 . 
     Common forms of computer readable media includes, for example, floppy disk, flexible disk, hard disk, magnetic tape, any other magnetic medium, CD-ROM, any other optical medium, punch cards, paper tape, any other physical medium with patterns of holes, RAM, PROM, EPROM, FLASH-EPROM, any other memory chip or cartridge, or any other medium from which a computer can read. 
     In an embodiment of the invention, execution of the sequences of instructions to practice the invention is performed by a single computer system  1400 . According to other embodiments of the invention, two or more computer systems  1400  coupled by communication link  1415  (e.g., LAN, PTSN, or wireless network) may perform the sequence of instructions required to practice the invention in coordination with one another. 
     Computer system  1400  may transmit and receive messages, data, and instructions, including program, i.e., application code, through communication link  1415  and communication interface  1414 . Received program code may be executed by processor  1407  as it is received, and/or stored in disk drive  1410 , or other non-volatile storage for later execution. 
     In the foregoing specification, the invention has been described with reference to specific embodiments thereof. It will, however, be evident that various modifications and changes may be made thereto without departing from the broader spirit and scope of the invention. For example, the above-described process flows are described with reference to a particular ordering of process actions. However, the ordering of many of the described process actions may be changed without affecting the scope or operation of the invention. The specification and drawings are, accordingly, to be regarded in an illustrative rather than restrictive sense.