Abstract:
A method and device for scoping nets from a schematic in a hierarchical netlist. The device is a complementary subsystem to a hierarchical netlister software package. The device allows instances or subcircuits in a schematic to systematically reassign (i.e., scope) local nets which represent global nets to other local nets so that the use of such nets does not affect usage of the global nets elsewhere in the circuit. The device tracks all global nets and maps the corresponding scoped nets to their net identifiers. Then, as the netlister creates the hierarchical netlist, the device replaces the global net&#39;s net identifier with the correct net identifier of the corresponding scoped net.

Description:
COPYRIGHT NOTICE 
     A portion of the disclosure of this patent document contains material which is subject to copyright protection. The copyright owner has no objection to the facsimile reproduction by anyone of the patent document or the patent disclosure, as it appears in the Patent and Trademark Office patent file or records, but otherwise reserves all copyright rights whatsoever. 
     FIELD OF THE INVENTION 
     The present invention relates to the design of integrated circuits and in particular to the design, testing, and verification of integrated circuits. 
     BACKGROUND 
     Today&#39;s integrated circuits (ICs) contain many circuit elements. Computer-aided design (CAD) and computer-aided engineering (CAE) tools are essential in producing these complicated integrated circuits. Circuit design can be represented by a schematic. Schematics consist of symbol instances connected by nets which demonstrate the functional design of the circuit. Symbol instances are pictorial icons that represent a complete functional block. Symbol instances can be primitive elements, such as transistors and resistors. Symbol instances can also be abstractions of combinations of primitive elements, such as NAND gates and NOR gates. Symbol instances can also be higher level groupings of these various elements. 
     To produce the complicated schematics of an integrated circuit, CAD software can be used. CAD software allows symbols to be saved in software libraries for use by all circuit designers within the entire IC. Portions of the IC can be easily replicated, deleted, and changed with the CAD software. 
     Another representation of a circuit design is the netlist. A netlist is a text file describing a circuit. The netlist lists all of the symbol instances and their connecting nets within a schematic. CAE software can be used to translate a schematic into a netlist. In an hierarchical netlist, each of the symbol instances are defined a single time, even if the symbol instance is incorporated many times in the circuit. 
     A netlist is used as input to another CAE tool, the simulator. Simulators use netlists and input stimulus files to imitate the function of the circuit design without having to incorporate the design in hardware. Simulating a circuit by providing netlists and stimulus data is an efficient and cost effective method of testing a circuit. 
     However, the massive complexity of current circuits introduces problems in circuit design. A typical circuit may now contain several million individual instances. These instances are connected by several million nets. A change in design implementation may necessitate the same change to several thousand corresponding blocks of the circuit. A change in a net within one block may cause unknown effects on other circuit blocks. Integrated circuit manufacturing also introduces problems with circuit design. Because the manufacturing process of ICs involves so many steps on such small objects, there is a relatively high number of imperfect chips made. To salvage such chips, circuits such as DRAM (dynamic random access memory) chips are designed with a higher number of gates than are needed. For example, a 4 Meg DRAM might be designed as a 4.01 Meg DRAM so that up to one-one hundredths of the memory gates may be imperfect on any chip and the chip will still have 4 Meg of functioning memory. After production, the portions of the memory gates which suffer from imperfections must be disabled. This is accomplished by providing several corresponding nets in the circuit. For example, instead of a single power source net (commonly referred to as vcc|), multiple local vcc nets may be implemented. Then, power may be withdrawn from the local vcc nets in the affected chip areas. 
     These problems in the IC design raise several needs in the art. There is a need for global nets, such as vcc|, to be localized. Then such local nets can be individually managed on the manufactured chips. The implementation of these local nets needs to be convenient and efficient for the circuit designers and the simulation software packages. There is also a need to allow block changes, deletes, and additions to have a minimal amount of affect on the overall design of the circuit. Designers of blocks of ICs should be able to utilize global nets without necessarily worrying about the affect to other blocks of the chip. 
     SUMMARY OF THE INVENTION 
     A scoped global net engine is a complementary subsystem to a hierarchical netlister software package. The hierarchical netlister software package takes a schematic of a circuit and translates the instance primitive symbols, instance hierarchical subcircuits and connecting nets into a textual hierarchical netlist for use by a simulator. The scoped global net engine allows instances to reassign global nets to local nets during the hierarchical netlisting processing so that the use of such nets does not affect usage of the global nets elsewhere in the circuit. 
     The global net engine tracks all global nets and maps the corresponding scoped nets to their net identifiers. Then, as the hierarchical netlister software package creates the hierarchical netlist text, the global net engine replaces the global net&#39;s net identifier with the correct scoped net&#39;s net identifier. 
    
    
     BRIEF DESCRIPTION OF THE DRAWINGS 
     FIG. 1 is a block diagram of a schematic. 
     FIG. 2A is a block diagram of subcircuit C1 from FIG. 1&#39;s schematic. 
     FIG. 2B is a block diagram of an inverter device. 
     FIG. 3A is a hierarchical netlist produced by a hierarchical netlister. 
     FIG. 3B is a hierarchical netlist produced by the present invention, having scoped global nets. 
     FIG. 4 is a block diagram of a computer system. 
     FIG. 5 is block diagram of the interface between hierarchical netlister engine and the formatter. 
     FIG. 6 is a flowchart of the activities performed by hierarchical netlister engine and the formatter. 
     FIG. 7 is a flowchart showing how the formatter maps global nets. 
     FIG. 8 is SKILL code for one embodiment of hierarchical netlister engine. 
    
    
     DETAILED DESCRIPTION 
     In the following Detailed Description, reference is made to the accompanying drawings which form a part hereof and in which is shown by way of illustration specific embodiments in which the invention may be practiced. These embodiments are described in sufficient detail to enable those skilled in the art to practice and to use the invention, and it is to be understood that other embodiments may be utilized and that changes may be made without departing from the spirit and scope of the present invention. The following Detailed Description is, therefore, not to be taken in a limiting sense and the scope of the invention is defined by the appended claims. In the figures, elements having the same number perform essentially the same functions. 
     Overview 
     The process of circuit design begins, in general, with the creation of the schematic using a CAD/CAE system. Referring now to FIG. 1, such schematic 105 can be created by a computer-aided engineering (CAE) tool. One such CAE tool is Design Entry available from Cadence Design Systems, Inc., San Jose, Calif. The schematic includes the directives needed by the present invention to map global nets to local nets. After the schematic is drawn, the hierarchical netlister is executed to create the netlist. This netlist describes each type of instance occurring in the schematic. The netlist&#39;s description includes the global nets scoped to local nets. The netlist is then used by verification and simulation programs (such as HSPICE, available from Meta-Soft, Inc., Campbell, Calif.) to test the schematic before it is implemented in hardware. 
     Schematics 
     In FIG. 1, two instances of block C1 110 and 125 are diagramed in schematic 105. Instance C1 110 includes nets IN1 115 and OUT1 120. Similarly, instance C1 125 includes nets IN2 130 and OUT2 135. At this top hierarchical level of schematic 105, the contents of instance C1 110 and instance C1 125 are hidden from view. Instance 140 is a power supply that applies 3 volts to net MapVccB. Similarly, instance 145 applies 5 volts to net MapVccA. 
     Voltages are often carried throughout a circuit by global nets. A global net is customarily denoted as vcc|, gnd|, etc. The &#34;|&#34; character in the net name indicates that the net is global, i.e. available to the whole schematic. However, circuit designers often need the ability to individually control global nets at various blocks within the circuit. The present invention allows global nets to be scoped to a specific subcircuit. Scoping refers to limiting the affect of a net to a contained hierarchical area. 
     With the present invention, scoping of global nets is accomplished by the use of a parameter. One such parameter is a &#34;property list.&#34; Property lists are data structures supported by Design Entry and other CAD/CAE software systems. A property list for an instance consists of a property name and an associated property value. For example, voltage could be a property which can be indicated on an instance. Power supply instance 140 has such a property list. Instance 140 has voltage shown by a property list. This list has the property name of &#34;v&#34; and the property value of &#34;3.&#34; Thus, for instance 140, schematic 105 indicates that three volts are applied by the power supply. Likewise, power supply instance 145 contains a property list showing that five volts are applied. 
     Subcircuit instances C1 110 and C1 125 each have a property list as well. The property list of these instances has a property name of &#34;mapnodes&#34; and the value of&#34;vcc|=MapVccB&#34; for instance 110 and &#34;vcc|=MapVccA&#34; for instance 125. The present invention achieves scoping of global nets through the creation of these mapnodes property lists. 
     &#34;Node&#34; is just another name for &#34;net.&#34; It follows that the mapnodes property list&#39;s purpose is to map, i.e. associate, nets. This property list allows the circuit designer to map a global net to a local net. Therefore, in instance 110, the global net vcc| is mapped to local net MapVccB by the mapnodes property list, and likewise in instance 125, the global net vcc| is mapped to local net MapVccA. Such mappings indicate that whenever the global net vcc| is referenced within instance C1 110 or instance C1 125, the scoped local nets should instead be implemented. In one embodiment of the present invention, the local nets to which global nets are scoped may contain the string &#34;Map&#34; within their local net names or nets can be globals in order for the scoping to be supported. This naming convention serves as a scope identifier, allowing the present invention to only track a subset of the total local nets, i.e. the nets having &#34;Map&#34; as part of their names. In other embodiments, the scope identifier could be changed to another string or eliminated, allowing all nets to be available for scoping. 
     FIG. 2A is the diagram of subcircuit C1 from schematic 105. Instance C1 contains a combination of two inverters GI0 and GI1 205 and two capacitors 210. Referring to FIG. 2B, one can see the components of inverter GI0 or GI1 205. Inverter 205 consists of a p-type transistor 215 coupled with a n-type transistor 220. 
     HIERARCHICAL NETLISTS 
     To be useful to a simulator software package, schematic 105, must be translated into a textual netlist file. This translation is done by a translation program, called a netlister. There are two types of netlisters. A flat netlister creates a netlist showing the primitive elements of schematic 105. Such a flat netlister is described in the co-pending patent application titled &#34;SYSTEM AND METHOD FOR SCOPING GLOBAL NETS IN A FLAT NETLIST,&#34; by Weber, U.S. patent application Ser. No. 08/692,758, filed on even date herewith, which is hereby incorporated by reference. U.S. patent application Ser. No. 08/692,758 describes an invention which scopes global nets to local nets for output to a flat netlist. 
     There are several differences between the functioning of a flat netlist and a hierarchical netlister that serve to make implementing the scoping of nets different. For example, a hierarchical netlist only provides a single placement definition for each of the named blocks in a schematic. A netlist of FIG. 3A would be such a traditional hierarchical netlist. However, in a flat netlist, every placement of a block is incorporated into the netlist. A second functional difference between the two types of netlisters is that while a hierarchical netlister only inspects the current hierarchical level for the effects of net scoping, a flat netlister inspects the current hierarchical level and all higher hierarchical levels of the circuit design. 
     Netlisters are specific to the subsequent software tools which verify or simulate the circuit from the netlists. For example, one useful simulator is HSPICE, available from Meta-Soft, Inc., Campbell, Calif. The corresponding netlister which produces netlists compatible with HSPICE is the HNL Netlister tool, available from Cadence Design Systems, Inc., San Jose, Calif. Therefore, the schematic is converted by the Netlister tool into a hierarchical netlist. HSPICE accepts the netlist as input for simulation. Other simulation and verification tools and other corresponding netlisters implementing the present invention can also be used. The Netlister tool from Cadence allows the easy integration of client-written subroutines to perform specific functionality. In one embodiment, the present invention, the global netlist engine, is implemented as a set of these interfaced subroutines to the Netlister tool. 
     Again, FIG. 3A is a traditional hierarchical netlist of schematic 105. The hierarchical netlist represents the instances and connecting nets needed to describe schematic 105 for each hierarchical level in the design. Simulators can differentiate between global nets and local nets. A netlist for use by HSPICE would define global nets with the line command &#34;.global&#34;. Notice that FIG. 3A does not have any lines beginning with the command &#34;.global&#34;. In order to implement hierarchical scoping of nets, this command cannot be used. Instead, all nets are passed through each level of the hierarchy as local nets. 
     Now referring to FIG. 3A, the netlist itself is formatted in a standardized manner so that it can be interpreted by the HSPICE simulator. In FIG. 3A, asterisks (*) begin all lines that serve as comments. Thus, line 1 311 and line 2 312 are comment lines beginning each with an asterisk. 
     Line 1 311 starts the definition of the subcircuit instance &#34;inv&#34; and line 2 312 states that this &#34;inv&#34; instance definition was last changed on January 12th. The instance &#34;inv&#34; being defined in this figure corresponds to the inverters within instance C1 110 and C1 125 as shown in FIG. 1 and FIG. 2A. An inverter circuit includes a p-type mosfet, represented by a MPA instance 215 and an n-type mosfet, represented by a MNA instance 220, that have their gates commonly connected to a port &#34;a&#34; and their drains commonly connected to a port &#34;y&#34;. The sources of instance MPA 215 and instance MNA 220 are connected to vcc| and gnd|, respectively. Line 3 313 of the hierarchical netlist indicates that &#34;inv&#34; is a subcircuit having the ports y, a, gnd, vec, bnn and bnp. Line 4 314 defines the MNA instance 220. The initial &#34;M&#34; indicates that the instance is a transistor. Line 4 314 shows that the drain is connected to port y; the gate is connected to port a; and the source is connected to port gnd. The model to use in simulating instance MNA 220 is &#34;N&#34;, its gate length is dependent upon parameter &#34;lnA&#34; and its gate width is dependent on the parameter &#34;wnA&#34;. Similarly, line 5 315 defines MPA instance 215. The definition of the inv subcircuit is closed by line 6 316. 
     Lines 8 318 through lines 15 325 declare the subcircuit C1. Remember that C1 is found twice in schematic 105, as instance C1 110 and as instance C1 125. Unlike a flat netlister, which would define the circuitry for C1 twice (once for C1 110 and another time for instance C1 125), this hierarchical netlister only defines it a single time. Line 10 320 of the C1 definition declares the ports used by the subcircuit: in, out, vpp, vbb, vcc and gnd. Instance C1 consists of two inverters, xgi0 and xgi1 as well as two capacitors chnl --  0 and c9. Line 11 321 defines the first inverter, GI0. The initial &#34;x&#34; signifies that the instance is a subcircuit. The string &#34;inv&#34; indicates a placement of the subcircuit &#34;inv&#34; that was declared in lines 1 311 through 6 316. Port &#34;in&#34; of instance GI0 is equated to instance inv&#39;s port a. Similarly, node net6 is equated to the inverter&#39;s port y, vbb to bnn, gnd to gnd, vpp to bnp and vcc to vcc. Line 11 321 also sets parameter lnA to 1.0 to be passed along to subcircuit inv&#39;s mna instance (refer back to line 4 314). In like fashion, parameters wnA, 1pA and wpA are set. Line 12 322 declares the second inverter in instance C1, GI1. Then line 13 323 defines the first capacitor as having two ports connected to net6 and gnd and a capacitance value of 2e-12. Line 14 324 defines the second capacitor and line 15 325 closes the definition of the subcircuit C1. 
     Lines 17 through 22, 327 through 332, define the highest hierarchical level of schematic 105, called Top. Two power supplies are defined in lines 19 329 and 20 330, which both begin with the identifier &#34;v&#34;. Voltage is indicated as 3.0 volts for the first power supply and 5.0 for the second one. In line 19 329, power supply is connected to net MapVccB. Similarly, in line 20 330, power supply is attached to net MapVccA. Line 21 331 and line 22 332 show that both instances of C1 are connected to global net vcc. 
     Referring to FIG. 3B, which is a hierarchical netlist having scoped global nets, the results of the present invention are seen. Here, the local nets MapVccA and MapVccB have been used to scope the global net vcc| within the instances of C1 110 and 125. The definitions of subcircuit inv and c1 are identical to those from FIG. 3A. Only the Top Cell definition, found on line 17 327 through line 22 332 is different. In FIG. 3B, instead of instance c1 110 being connected to port vcc, it is now connected to the local port MapVccB at line 21 331. Instead of instance c1 125 being connected to port vcc, it is now connected to the local port MapVccA at line 22 332. 
     Creating Hierarchical Netlists 
     FIG. 4 is a block diagram of a computer system 405 in which the present invention is capable of being implemented. A processor 410 is connected to input devices 420, such as a keyboard, mouse or digital drawing pad. Processor 410 is also connected to storage devices 430 (including RAM and disk drives) and a screen display 440. Within RAM storage device 430, is operating system 450, schematic 105, instance libraries 455, and hierarchical netlist 300. Storage devices 430 also include hierarchical netlister engine 460 and an embodiment of the present invention, net scoping engine 465. Hierarchical netlister engine 460 and net scoping engine 465 are software programs residing in computer system 405. Hierarchical netlister engine 460 can be Cadence&#39;s Netlister tool or other available software engine. In one embodiment, net scoping engine 465, is interfaced with hierarchical netlister engine 460 so that hierarchical netlister engine 460 passes the constructed hierarchical netlist file 300 to net scoping engine 465 for processing before being written out to paper or disk. 
     FIG. 5 shows hierarchical netlister engine 460 and net scoping engine 465 in more detail. Schematics 105 and libraries 455 are fed as inputs to hierarchical netlister engine 460. Hierarchical netlister engine 460 contains hierarchy traverse 510, which walks through the designed schematic&#39;s hierarchy of symbol instances and nets, and the symbol instance translator 520, which converts the pictorial symbol instances from schematic 105 into the appropriate text string of netlist 300. Integrated to hierarchical netlister engine 460 is formatter 530. Formatter is a collection of user supplied functions. A subset of these functions make up net scoping engine 465. The resulting product from hierarchical netlister engine 460 and formatter 530 is a hierarchical netlist 300. In one embodiment, hierarchical netlister engine 460 and net scoping engine 465 can be written in SKILL, a language provided by Cadence Design Systems, Inc., San Jose, Calif. In such an embodiment, net scoping engine 465 can be implemented as user-provided SKILL functions MS --  hnlMapNodeName() and MS --  hnlMapNetNames(). One implementation of MS --  hnlMapNetNames() is provided in FIG. 8. In other embodiments, computer languages such as C++, Pascal, and SmallTalk could be used. 
     FIG. 6 is a flowchart illustrating hierarchical netlister engine 460 and its interface with formatter 530. At step 605, schematic 105 of the design is opened. At step 610, hierarchical netlister engine 460 traverses the hierarchy of the design. At steps 615 and 620, each circuit of schematic 105 is delivered from the bottom level to the topmost level of the hierarchy and is opened. Steps 625 and 630 loop through each instance in the circuit and control is passed to formatter 530 at step 635 so that the instance can be formatted. The detailed workings of formatter 530 with respect to the scoping of global nets will be described with reference to FIG. 7. After step 630, if the level being processed is the topmost level, the instances are printed to the circuit at step 640. Otherwise, if the topmost level of the design is not being processed, the instances are printed to the subcircuit at step 645. Then at step 650 a list of nets attached to the terminals of the current circuit together with any global nets used by instances below the current circuit is tracked. This &#34;all-global&#34; list will be used to transport the local nets representing global nets throughout the circuit. This all-global list is saved and is then passed, in step 635, to formatter 530 in order to bring the nets up when the circuit is instantiated in other hierarchical levels. After step 650, control returns to step 620. 
     Now referring to FIG. 7, formatter 530&#39;s scoping of global nets, which in one embodiment is performed by SKILL subroutine hnlMapNetNames, is flowcharted. At step 710, the nets in the instance that are global nets are retrieved. Then at steps 715 through 725, these global nets are added to the circuit&#39;s global node list or other type of mapping association. This node list is made by accumulating all of the global nets used by any of the instances the circuit is made of. Primitive instances (which are the lowest hierarchical level) begin with a list of terminals which, when checked, may be connected to global nets. If they are connected to global nets, these nets are accumulated and are stored as a list of global nets for each subcircuit these primitives are instantiated in. A previously defined subcircuit may be instantiated as an instance in an upper level subcircuit, in which case its list of net names includes global nets used. These nets are accumulated together with nets from primitives and are stored as a list of global nets for the current subcircuit being netlisted. 
     Then at step 730, the mapnodes property list parameter is retrieved from the instance. If this parameter is not empty at step 735, i.e., there are scoped global nets in the instance, then at step 740 a message is displayed to the system user notifying the user that the nets are being mapped. At step 745, the mapNodes property list is parsed. The global nets to be scoped are extracted and placed in an ordered list alongside their associated local nets. Finally, at step 750, a function inspects each of the instance&#39;s nets. For each net which exists in the ordered list, the local net replaces the scoped global net. 
     Other embodiments of the present invention are possible without departing from the scope and spirit of the present invention. Other embodiments of this invention include a configuration allowing global nets to be scoped using the global command. A configuration might also be implemented to allow scoped local nets to not be required to contain the letters &#34;Map.&#34; 
     Although specific embodiments have been illustrated and described herein, it will be appreciated by those of ordinary skill in the art that any arrangement which is calculated to achieve the same purpose may be substituted for the specific embodiment shown. This application is intended to cover any adaptations or variations of the present invention. Therefore, it is manifestly intended that this invention be limited only by the claims and the equivalents thereof.