Patent Publication Number: US-5831867-A

Title: Method and system for automated electromigration verification in accordance with fabrication process rules

Description:
BACKGROUND OF THE INVENTION 
     1. Field of the Invention 
     The present invention relates to design and fabrication of integrated circuits and, more particularly, to electromigration verification. 
     2. Description of the Related Art 
     Electromigration refers to the transport of mass in metals when stressed to high current densities. Electromigration occurs during passage of currents through thin metal conductors in integrated circuits. These thin metal conductors normally have sub-micron widths. Hence, metal piles up in some regions of the thin metal conductors and forms voids in other regions. The formation of voids in the thin metal conductors is very serious because such voids cause opens in the metal conductors which in turn cause the integrated circuit to fail. The pilling up or accumulation of metal in the thin metal conductors can cause shorts between adjacent metal conductors which can also lead to circuit failure. 
     Electromigration sets a fundamental limit on the dimensions of conductors which carry current. The fundamental limit depends strongly on the choice of conductive material and its particular properties. Thus, the dimensions (e.g., width and height of the conductors) must be of a certain size to prevent, or at least minimize, failures due to electromigration for a particular fabrication process. 
     Conventionally, when preparing to fabricate an integrated circuit, process rules for a fabrication setup are used to specify the minimal dimensions and spacing that the conductors should have for the fabrication processing. The process rules are minimum values that are allowable to ensure proper fabrication of the integrated circuit. With respect to electromigration, the process rules pertain to dimensions or sizes of wires, contacts or other conductive features of the integrated circuit for different expected currents. If the circuit design satisfies the pertinent process rules, then failures due to electromigration are avoided or at least minimized. Hence, before fabricating an integrated circuit, it is important to check that the circuit design does not violate the pertinent process rules. Although such checks could be done manually, manual checking is not practical because it is tedious, time consuming and susceptible to error. 
     The conductors of the circuit design can carry either power or signals within the integrated circuit. Power lines tend to be in known locations with known current loads because a detailed analysis is usually performed when forming the power network. In contrast, signal lines tend to be plentiful and have complex routing and varying locations throughout the integrated circuit. Therefore, the checking of a circuit design for electromigration violations in signal lines is substantially more complex than for power lines. Here, even if manual checking were to be done on the signal lines (though it is often not), the checking would be incomplete, susceptible to error, and otherwise unacceptable. If manual checking fails to find one or more electromigration violations, the integrated circuits being fabricated would still fail and would have to be discarded or undergo revisions to the metal layers, both of which are costly. 
     At least one automated tool exists for checking power lines of an integrated circuit design against process rules for electromigration violations. PowerMill™ by Epic Design Technology, Inc. of Santa Clara, Calif. is such a product. However, since power lines tend to be in known locations with known current loads, the checking with respect to power lines can be accomplished. Nevertheless, the automated tool is unable to check signal lines against process rules for electromigration violations. 
     Thus, there is a need for an automated technique that is able to determine whether electromigration limits for a fabrication process are violated by signal lines within an integrated circuit design. 
     SUMMARY OF THE INVENTION 
     According to the principals of the invention, an automated method and system detects electromigration violations in signal lines of an integrated circuit design prior to fabrication. The automated method and system of the invention checks conductive traces (e.g., wires or links), vias and/or contacts that are used to route signals to and from various functional cells within the integrated circuit design against predetermined process rules to detect electromigration violations. The automated method and system according to the invention are able to find all electromigration violations and thus provides complete coverage which is far superior to conventional manual approaches. 
     The invention can be implemented in numerous ways, including as a method and a system. Several embodiments of the invention are mentioned below. 
     As a computer implemented method for detecting electromigration violations in an integrated circuit design, the integrated circuit design having driving nodes and one or more networks, the driving nodes being coupled to the one or more networks, and each of the networks including conductive traces, an embodiment of the invention includes the operations of: providing electromigration process rules for conductive signal traces of the integrated circuit design; identifying the driving nodes within the integrated circuit design; determining a drive strength for each of the driving nodes; determining a capacitance for each of the networks coupled to the driving nodes; determining design dimensions of conductive signal traces within the networks of the integrated circuit design; determining minimum dimensions for the conductive signal traces of the integrated circuit design based on the determined capacitance, the determined drive strength and the electromigration process rules; comparing the determined design dimensions with the minimum dimensions; and identifying violations of the fabrication process rules for the conductive signal traces of the integrated circuit design when the comparing indicates that the determined dimensions are less than the minimum dimensions. Additionally, the embodiment may also include the operation of forming an output error file that includes information concerning the violations identified. 
     As a computer-implemented method for checking an integrated circuit design for violations of fabrication process rules, an embodiment of the invention includes the operations of: partitioning the integrated circuit design into nets that couple functional cells together, each net having wires and contacts; determining a drive strength that drives each of the nets; determining a capacitance for each of the nets; determining a minimum wire width for each of the nets based on the determined capacitance and the determined drive strength that are respectively associated therewith; and identifying violations of the fabrication process rules when the width of the wires within the nets are less than the minimum wire width for the respective net. Additionally, the embodiment may also include the operation of forming an output error file that includes information concerning the violations identified. Further, the embodiment may include the operations of: determining a minimum contact size for each of the nets based on the determined capacitance and the determined drive strength, and identifying violations of the fabrication process rules when the size of the contacts within the nets are less than the minimum contact size for the respective net. 
     As a computer-implemented method for checking an integrated circuit design for violations of fabrication process rules, another embodiment of the invention includes the operations of: partitioning the integrated circuit design into nets that couple functional cells together, each net having wires and contacts; determining a drive strength for each of the nets; determining a capacitance for a plurality of wires and contacts within each of the nets; determining minimum dimensions for the wires and contacts within each of the nets based on the determined drive strength and the determined capacitances for the wires and contacts; and automatically identifying violations of the fabrication process rules when the dimensions of the wires and contacts within the net are less than the minimum wire width. Additionally, the embodiment may also include the operation of forming an output error file that includes information concerning the locations of the violations within the integrated circuit design. 
     As an electromigration check system for automated identification of electromigration errors in an integrated circuit design, the integrated circuit design including at least one network and at least one functional cell, an embodiment of the invention includes: a layout file containing layout information for the integrated circuit design; a capacitance file for storing one or more capacitance values for at least one network or a portion thereof within the integrated circuit design; a library file for storing functional cells and parameters for the functional cells; a rules table containing process rules for fabrication of integrated circuits; and a processing unit for identifying electromigration errors in the integrated circuit design. 
     Other aspects and advantages of the invention will become apparent from the following detailed description in conjunction with the accompanying drawings, which illustrate by way of example the principles of the invention. 
    
    
     BRIEF DESCRIPTION OF THE DRAWINGS 
     The present invention will be readily understood by the following detailed description in conjunction with the accompanying drawings, in which: 
     FIG. 1 is a block diagram of an electromigration check system according to an embodiment of the invention; 
     FIG. 2 is a conceptual diagram illustrating a representative integrated circuit design; 
     FIG. 3A is a schematic diagram of a representative net; 
     FIG. 3B is a schematic diagram of a representative layout file; 
     FIG. 4 is a diagram of a processing unit according to an embodiment of the invention; and 
     FIGS. 5A-5C are flow diagrams illustrating error identification processing performed according to an embodiment of the invention. 
    
    
     DETAILED DESCRIPTION OF THE INVENTION 
     The invention pertains to an automated method and system for detecting electromigration violations in signal lines of an integrated circuit design. The automated method and system checks conductive traces (e.g., wires), vias and/or contacts that are used to route signals to and from various functional cells within the integrated circuit design against predetermined process rules to detect electromigration violations. If electromigration violations are detected, then the integrated circuit design may be modified to remove the electromigration violations before integrated circuits incorporating the integrated circuit design are fabricated. 
     Embodiments of the invention are discussed below with reference to FIGS. 1-5C. However, those skilled in the art will readily appreciate that the detailed description given herein with respect to these figures is for illustrative purposes as the invention extends beyond these limited embodiments. 
     FIG. 1 is a block diagram of an electromigration check system 100 according to an embodiment of the invention. The electromigration check system 100 includes a processing unit 102 that performs the operations associated with checking an integrated circuit design to determine whether or not it is in full compliance with established process rules for a fabrication process. The design of the integrated circuit is contained in a layout file 104. The integrated circuit design includes various modules and each module includes functional cells and nets. A net includes wires and contacts which interconnect the functional cells for the integrated circuit design. The capacitance values for components (i.e., wires and contacts) of the integrated circuit design are held in a capacitance file 106. A library file 108 stores information on the functional cells. Specifically, the functional cells have a drive strength parameter associated therewith which is stored in the library file 108. The processing unit 102 is coupled to the layout file 104, the capacitance file 106, and the library file 108 to receive the information available from these files. The processing unit 102 is also coupled to a rules table 110. The rules table 110 contains the process rules for the fabrication process. 
     Given all the information provided to the processing unit 102, the processing unit 102 of the electromigration check system 100 then operates to identify those wires or contacts within each of the nets of the integrated circuit design that violate the process rules contained in the rules table 110. These violations can then be stored to an output error file 112 for later use by interested parties. The processing unit 102 and its operations are discussed in additional detail below with respect to FIGS. 4 and 5A-5C. 
     The rules table 110 can take many different forms. In one embodiment, the rules table 110 has a structure that relates drive strength and capacitance to a minimal wire or contact size or dimensions. Table 1 provided is an exemplary structure for the rules table 110. 
     
                       TABLE 1                                                     
______________________________________                                    
Drive MET1       MET2     Via1   Via2   Contact                           
______________________________________                                    
32    --         --       &gt;=2pf  &gt;=2pf  &gt;0.5pf                            
                          2 via  2 via  2 Ct                              
48    &gt;=3pf      --       &gt;=1pf  &gt;=1pf  &gt;=0.5pf                           
&lt;1um  &gt;=0.81              2 via  2 via  2 Ct                              
48    1.5pf 1.03 --       &gt;=1pf  &gt;=1pf  &gt;=0.5pf                           
&gt;1um  2.0pf 1.09          2 via  2 via  2 Ct                              
      2.5pf 1.13                                                          
      3.0pf 1.16                                                          
______________________________________                                    
 
    
     Note that, in the rules table 110 illustrated in Table 1, drive strength is in the left most column under the heading &#34;Drive&#34;, and in the remaining columns capacitance values and minimal dimensions are provided for various conductive portions of a network. The column under the heading &#34;MET1&#34;, includes capacitance values above which the wires in layer MET1 are required to have at least the stated minimal width to avoid electromigration problems for the given process to which the process rules in Table 1 pertain. The depth of the wires is typically predetermined by the fabrication process. Namely, with a drive strength of 48 times the minimum drive strength of a minimum size driver (transistor) and a wire width greater than 1 um and a capacitance of 2 pf, the minimal wire width is at least 1.08 um. The column under the heading &#34;Via1&#34; includes a capacitance above which two (2) vias are required to have to avoid electromigration problems for the given process to which the process rules in Table 1 pertain. For example, with a drive strength of 48 times the minimum drive strength of a minimum size driver (transistor) and a wire width greater than 1 um and a capacitance of at least 1 pf, the minimal width of the via is two (2) vias (referred to as a double via). In other words, the cross-sectional width of the via is twice that of a single via. Hence, a double via (i.e., two vias) contains more conductive material than would a single via and therefore can carry more current before being susceptible to electromigration problems. Although Table 1 measures the minimal widths of vias in integer multiples of a single standard via width for the given process, it is not necessary the widths of the vias be limited to integer multiples (though doing so may facilitate fabrication). For example, the rules table 110 illustrated in Table 1 could instead indicate that the minimal width for a via is 1.2 times the single standard via width. Alternatively, the rules table 110 illustrated in Table 1 could specify a specific cross-sectional width in microns. For purposes of this application, it should be noted that vias are considered to be one particular type of contact. 
     FIG. 2 is a conceptual diagram illustrating a representative integrated circuit design 200. The representative integrated circuit design 200 is made up of several modules, namely module-1 202, module-2 204 and module-3 206. Within each of the modules 202, 204 and 206, various nets are provided. In particular, the module-1 202 includes net-1 208 and net-2 210. Similarly, the module-2 204 includes net-3 212, net-4 214 and net-5 216. The module-3 206 includes net-6 218, net-7 220 and net-8 222. Each of the nets 208-222 is a collection of contacts and wires which interconnect various functional cells. 
     FIG. 3A is a schematic diagram of a representative net 300. The representative net 300 includes several functional cells. The functional cells in the representative net 300 include cell-0 302, cell-1 304, cell-2 306, cell-3 308 and cell-4 310. These functional cells 302-310 are interconnected by a net 312. The net 312 is formed by various wires and contacts. The wires are also known as lines, and the contacts represent pads as well as vias. 
     The net 312 includes contacts 314 and 316. The contacts 314 and 316 are also output nodes or driving nodes as they are coupled to the cell-0 302 and the cell-1 304, respectively, which output or drive current into the remaining portion of the net 312. The contact 314 is connected to awire 318, and the contact 316 is connected to a wire 320. The wire 318 and the wire 320 are then connected at a contact 322. The net 312 also includes contacts 324, 326 and 328. The contacts 324, 326 and 328 are input nodes as they receive current from the remaining portion of the net 312. The contact 324 is connected to a wire 330, the contact 326 is connected to a wire 332, and a contact 328 is connected to a wire 334. The wires 330, 332 and 334 are connected together at a contact 336. The contact 336 is also connected to the contact 322 by a wire 338. The contact 336 can also be considered an internal node of the net 312. The wires of the net 312 have defined dimensions (thickness and width) and the contacts have a defined size. Typically, with integrated circuit designs, the wires (also known as conductive traces or lines) can traverse and interconnect with different layers, such as a metal-1 layer, a metal-2 layer and a metal-3 layer. The contacts can be pads on a given layer with a size of a multiple of contacts, or vias which traverse the various layers to interconnect the wires and have a size of a multiple of vias. For example, a single contact or a double contact could be used, with the double contact capable of safely carrying more current. Likewise, a single via or a double via could be used with the double via capable of safely carrying more current. 
     FIG. 3B is a schematic diagram of a representative layout file 332. The layout file 332 is a conceptual view of the representative layout file 332 for the representative net 300 illustrated in FIG. 3A. The layout file 332 includes cells (i0-i4), metal layers (MET1, MET2, MET3 and MET4), and vias (VIA1, VIA2 and VIA3). In practice , the layout file 332 is an electronic file that describes the elements and interconnections for the representative net 300 using a predetermined set of rules. Layout software tools produce layout files and are readily available from several commercial sources. One commercial source for such layout software tools is Mentor Graphics, Inc. of Wilsonville, Oreg. 
     FIG. 4 is a diagram of a processing unit 400 according to an embodiment of the invention. The processing unit 400 is a detailed diagram of an exemplary implementation of the processing unit 102 illustrated in FIG. 1. The processing unit 400 includes an extractor 402 for extracting the needed input information from the layout file 104, the capacitance file 106, and the library file 108. The processing unit 400 also includes a rule extractor 406. The rule extractor 406 operates to extract the appropriate process rules from the rules table 110. The processing unit 400 further includes an error identification unit 404. The extracted input information is forwarded by the extractor 402 to the error identification unit 404. The appropriate process rules information obtained by the rule extractor 406 is also forwarded to the error identification unit 404. The error identification unit 404 then identifies whether there are any violations or errors of the process rules by the integrated circuit design. The processing performed by the error identification unit 404 is described in more detail below with respect to FIGS. 5A-5C. 
     FIGS. 5A-5C are flow diagrams illustrating error identification processing 500 performed according to an embodiment of the invention. The error identification processing 500 identifies violations of process rules for fabrication of an integrated circuit design. In one embodiment, the error identification processing 500 is performed by the processing unit 400. 
     The error identification processing 500 initially retrieves 502 net data. For example, with respect to FIG. 4, the extractor 402 operates to retrieve the net data from the layout file 104. The net data is data pertaining to the layout of a particular network. As an example, the network could be any one of the nets 208-222 (see FIG. 2). Then, using the net data, driving nodes within the net data are identified and collected 504. The driving nodes within the net data operate to drive the net. In one embodiment, the driving nodes are identified by contacts (e.g., pads) that are identified as having a particular output type. Typically, the contacts with the output type connect functional cells to the net at so called driving nodes. Hence, the identification of the contacts of the output type identifies the driving nodes. 
     Then, once the driving nodes for the net are identified, the driving nodes are collected 504 by collapsing the driving nodes into a single driving node. The drive strength for the collected driving node is determined 506. The drive strength can be determined 506 using the drive strengths for the functional cells coupled to the driving nodes that are contained within the library file 108. That is, the library file 108 contains properties of functional cells, and one of these properties is the drive strength for the functional cell. The drive strength for the functional cells connected to the driving nodes can then be summed to determine 506 the drive strength for the collected driving node. 
     Next, a lumped capacitance (LC) for the net is obtained 508. The lumped capacitance (LC) for the net can be obtained from the capacitance file 106. In one embodiment, the capacitance file 106 contains the capacitance value for the net as a whole. In particular, using conventional techniques, the integrated circuit design contained in a layout file 104 is evaluated to determine a capacitance value for each net of the integrated circuit design. This determined capacitance value for the net is referred to as the lumped capacitance (LC) for the net. In effect, determining of the lumped capacitance (LC) for each of the nets involves collapsing the net into what is conceptually a single wire. Commercially available software, such as Checkmate by Mentor Graphics, Inc. of Wilsonville, Oreg., is able to determine the lumped capacitance (LC) for the net. Such commercially available software is primarily designed and used for determining capacitance on clock lines, but can also be used to determining capacitance on signal lines. 
     An acceptable capacitance (AC) for the determined drive strength is retrieved 510 from the rules table 110. Here, the appropriate process rule within the rules table 110 is retrieved 510 to identify the acceptable capacitance (AC) in accordance with the existing drive strength. The acceptable capacitance (AC) is the maximum capacitance that the net can have for the predetermined wire and contact dimensions to be sufficient to avoid violation of the process rules pertaining to electromigration. Table 1, discussed above, provides examples of such process rules. For example, for a drive strength of 32 or less, a capacitance of less than 2 pf is an acceptable capacitance (AC) for one via (either Via1 or Via2) or a capacitance of less than 0.5 pf is an acceptable capacitance (AC) for one contact. After obtaining 508 the lumped capacitance (LC) and retrieving 510 the acceptable capacitance (AC), a decision 512 determines whether the lumped capacitance (LC) is less than the acceptable capacitance (AC). If so, the error identification processing 500 is complete and ends because, in this case, the lumped capacitance (LC) for the net is not great enough to cause electromigration violations given the minimum wire and contact size for the fabrication process. On the other hand, when the lumped capacitance (LC) for the net is not less than the acceptable capacitance (AC), then the error identification processing 500 continues. 
     Next, each of the wires within the net are checked for electromigration violations. Initially, wire data for a first wire is retrieved 514. Preferably, the wire data is retrieved 514 from the layout file 104. For all the wires of the integrated circuit design, the thickness is assumed to be a predetermined thickness, and the width of the wires varies but is indicated in the wire data. A minimum wire width for the lumped capacitance (LC) and the determined drive strength is then determined 516. In one embodiment, the lumped capacitance (LC) and the determined drive strength are used to index into the rules table 110 to obtain the minimum wire width. Table 1, discussed above, is one example of the rules table 110. After determining 516 the minimum wire width, a decision 518 determines whether the wire width of the wire according to the integrated circuit design is greater than the minimum wire width. If so, the wire is identified 520 as having an electromigration error. Otherwise, the identifying operation 520 is bypassed because the wire width is sufficient to satisfy the process rules concerning electromigration given the lumped capacitance (LC) and the determined drive strength. Following either the decision block 518 or the identifying block 520, a decision 522 determines whether all of the wires for the net have been processed. If not, the wire data for a next wire is retrieved 524 and the processing 500 returns to repeat block 516 and subsequent blocks. Once all of the wires have been processed, the decision block 522 causes the processing 500 to proceed to check the contacts within the integrated circuit design for electromigration violations. 
     Each of the contacts within the net are then checked for electromigration violations. Initially, contact data for a first contact is retrieved 526. In one embodiment, the contact data is contained within the layout file 104, and the contact data indicates a size of a contact as a multiple of a regular contact because this is how the contacts are formed. Namely, a double contact is formed from two regular (or single) contacts, one placed over the other. The double contact is capable of carrying more current safely than can a single contact. Recall, the term contacts includes pads and vias. Next, a minimum contact size for the lumped capacitance (LC) and the determined drive strength is determined 528. Here, the lumped capacitance (LC) and the determined drive strength are used to index into the rules table 110 to obtain the minimum contact size. A decision 530 then determines whether the contact size of the contact is greater than the minimum contact size. If not, the contact is identified 532 as having an electromigration error. For example, the contact size of the contact is one (1) regular contact and the minimum contact size is two (2) regular contacts (i.e., a double contact), then there is a violation of the process rules pertaining to electromigration. On the other hand, if the contact size of the contact is greater than or equal to the minimum contact size, then the contact does not have an electromigration error. 
     Following the decision block 530 or the identifying block 532, a decision 534 determines whether all of the contacts within the net have been processed. If all of the contacts in the net have not been processed, the decision block 534 causes the contact data for a next contact to be retrieved 536 and the processing 500 returns to repeat block 528 and subsequent blocks. Once all the contacts have been processed, an output error file is formed 538. The format of the output error file can vary greatly but is designed either for a user or as input to an integrated circuit layout tool which would allow the user to visually perceive the wires and contacts where violations occurred and/or automate the modifications to the integrated circuit design to avoid the electromigration errors which have been identified by the processing 500. Following block 538, the error identification processing 500 is complete and ends. 
     Representative file formats for the capacitance file 106, the library file 108 and the output error file 112 are presented below. 
     
         __________________________________________________________________________
   Representative Capacities File                                         
** This file describes the capacitance values of different                
** nets in a particular exemplary layout. Emphasis is given               
** to certain data by &#34;   &#34; marks. Of particular interest is the          
** capacitance values of net #270 and #880. The capacitance units are     
** femto farads.                                                          
**                                                                        
iCELL sf.sub.-- imu {                                                     
 INOUT zzz.sub.-- asi.sub.-- data1  63!;                                  
 INOUT zzz.sub.-- asi.sub.-- data1  62!;                                  
 INOUT zzz.sub.-- asi.sub.-- data1  61!;                                  
 INOUT zzz.sub.-- asi.sub.-- data1  60!;                                  
 OUT imu.sub.-- tlb.sub.-- pa  14!;                                       
 OUT imu.sub.-- tlb.sub.-- pa  13!;                                       
 IN dmu.sub.-- pcontext  12!;                                             
 IN dmu.sub.-- pcontext  11!;                                             
  . . . . stuff deleted . . . .!                                          
 INST sf.sub.-- imudp imudp en.sub.-- tri.sub.-- pdu.sub.-- 36to8=sf.sub.-
- imu.sub.-- I7.sub.-- P4                                                 
rst.sub.-- tri.sub.-- en=sf.sub.-- imu.sub.-- I4.sub.-- P2                
  st.sub.-- pdu.sub.-- va.sub.-- context.sub.-- d2=sf.sub.-- imu.sub.--   
I513.sub.-- P4 tlb.sub.-- data.sub.-- ld.sub.-- n1=sf.sub.-- imu.sub.--   
I504.sub.-- P6                                                            
                    .sup.                                                 
                    .sup.   For Path # 880 !                              
 INST sf.sub.-- imuctl imuctl ieu.sub.-- va.sub.-- e 1!=ieu.sub.--        
va.sub.-- e.sub.-- ctl 4!.sub.-- P2                                       
imu.sub.-- busy=imu.sub.-- busy.sub.-- P2                                 
  spr.sub.-- io.sub.-- obs.sub.-- bus.sub.-- r1  5!=spr.sub.-- io.sub.--  
obs.sub.-- bus.sub.-- r1 5!.sub.-- P2                                     
  .sup.   For Path #270  !                                                
  . . . . stuff deleted . . . .!                                          
 C C7.sub.-- 23.sub.-- M2.sub.-- TOTAL.sub.-- 1 c=0.9985 s=sf.sub.--      
imu.sub.-- I7.sub.-- P3 d=gnd;                                            
 C C7.sub.-- 23.sub.-- M2.sub.-- TOTAL.sub.-- 2 c=0.9985 s=sf.sub.--      
imu.sub.-- I7.sub.-- P4 d=gnd;                                            
 C C7.sub.-- 24.sub.-- M2.sub.-- TOTAL.sub.-- 1 c=0.953 s=sf.sub.--       
imu.sub.-- I7.sub.-- P1 d=gnd;                                            
 C C7.sub.-- 24.sub.-- M2.sub.-- TOTAL.sub.-- 2 c=0.953 s=sf.sub.--       
imu.sub.-- I7.sub.-- P2 d=gnd;                                            
 C C7.sub.-- 25.sub.-- M3.sub.-- TOTAL.sub.-- 1 c=0.775 s=sf.sub.--       
imu.sub.-- I7.sub.-- P5 d=gnd;                                            
 C C7.sub.-- 25.sub.-- M3.sub.-- TOTAL.sub.-- 2 c=0.775 s=sf.sub.--       
imu.sub.-- I7.sub.-- P6 d=gnd;                                            
 C C8.sub.-- 28.sub.-- M2.sub.-- TOTAL.sub.-- 1 c=0.683 s=sf.sub.--       
imu.sub.-- I8.sub.-- P1 d=gnd;                                            
 C C8.sub.-- 28.sub.-- M2.sub.-- TOTAL.sub.-- 2 c=0.683 s=sf.sub.--       
imu.sub.-- I8.sub.-- P2 d=gnd;                                            
 C C8.sub.-- 29.sub.-- M2.sub.-- TOTAL.sub.-- 1 c=1.13 s=sf.sub.--        
imu.sub.-- I8.sub.-- P3 d=gnd;                                            
 C C8.sub.-- 29.sub.-- M2.sub.-- TOTAL.sub.-- 2 c=1.13 s=sf.sub.--        
imu.sub.-- I8.sub.-- P4 d=gnd;                                            
 C C8.sub.-- 30.sub.-- M3.sub.-- TOTAL.sub.-- 1 c=12.6 s=sf.sub.--        
imu.sub.-- I8.sub.-- P5 d=gnd;                                            
 C C8.sub.-- 30.sub.-- M3.sub.-- TOTAL.sub.-- 2 c=12.6 s=sf.sub.--        
imu.sub.-- I8.sub.-- P6 d=gnd;                                            
 C Cdmu.sub.-- pcontext 3!.sub.-- 33.sub.-- M2.sub.-- TOTAL.sub.-- 1      
c=1.153 s=dmu.sub.-- pcontext 3! d=gnd;                                   
 C Cdmu.sub.-- pcontext 3!.sub.-- 33.sub.-- M2.sub.-- TOTAL.sub.-- 2      
c=1.153 s=dmu.sub.-- pcontext 3!.sub.-- P2                                
d=gnd;                                                                    
  . . . . stuff deleted . . . .!                                          
 C CLumped504 C=45.509 s=sf.sub.-- imu.sub.-- I504.sub.-- P6 d=gnd;       
              For Path # 880 !                                            
 C Clumped2985 C=201.846 s=spr.sub.-- io.sub.-- obs.sub.-- bus.sub.--     
r1 5!.sub.-- P2 d=gnd;                                                    
                For Path #270!                                            
   Representative Library File                                            
** This file describes attributes of cells that are used                  
** in a particular exemplary layout. The K.sub.-- rise and the            
** K.sub.-- fall represent the pull-up and pull-down resistance           
** (i.e., drive strength) for each cell. This is the                      
** information we need for this file.                                     
**                                                                        
}                                                                         
sf.sub.-- x.sub.-- buf.sub.-- 16x {                                       
    attributes {                                                          
     .sup. cell.sub.-- name sf.sub.-- x.sub.-- buf.sub.-- 16x             
    }                                                                     
    properties {                                                          
    }                                                                     
    bbox {                                                                
    }                                                                     
    translation {                                                         
     .sup. Autologic {                                                    
       .sup.   cost 546                                                   
     .sup. }                                                              
    }                                                                     
    model {                                                               
     .sup. cellname sf.sub.-- x.sub.-- buf.sub.-- 16x                     
     .sup. pins {                                                         
       .sup.   out {                                                      
          .sup. type out                                                  
         .sup.  K.sub.-- rise 0.2375                                      
         .sup.  K.sub.-- fall 0.222879                                    
     .sup. }                                                              
     .sup. in {                                                           
         .sup.  type in                                                   
         .sup.  load 0.0483                                               
     .sup. }                                                              
     .sup. out.sub.-- 1 {                                                 
         .sup.  type out                                                  
         .sup.  K.sub.-- rise 0.502232                                    
         .sup.  K.sub.-- fall 0.458147                                    
       .sup.   }                                                          
     .sup. }                                                              
     .sup. equations {                                                    
       .sup.   out = in                                                   
       .sup.   out.sub.-- 1 = ( | in )                                    
     .sup. }                                                              
     .sup. transport.sub.-- delay {                                       
       .sup.   in out.sub.-- 1 0.157 0.1246                               
       .sup.   in out 0.166767 0.197233                                   
     .sup. }                                                              
     .sup. timing.sub.-- constraints {                                    
     .sup. }                                                              
    }                                                                     
}                                                                         
sf.sub.-- x.sub.-- mux2b.sub.-- 32x {                                     
    attributes {                                                          
     .sup. cell.sub.-- name sf.sub.-- x.sub.-- mux2b.sub.-- 32x           
    }                                                                     
    properties {                                                          
    }                                                                     
    bbox {                                                                
    }                                                                     
    translation {                                                         
     .sup. Autologic {                                                    
       .sup.   cost 1001                                                  
     .sup. }                                                              
    }                                                                     
    model {                                                               
     .sup. cellname sf.sub.-- x.sub.-- mux2b.sub.-- 32x                   
     .sup. pins {                                                         
       .sup.   out {                                                      
          .sup. type out                                                  
          .sup. K.sub.-- rise 0.155208                                    
          .sup. K.sub.-- fall 0.0897745                                   
       .sup.   }                                                          
       .sup.   in1 {                                                      
          .sup. type in                                                   
          .sup. load 0.0772                                               
       .sup.   }                                                          
       .sup.   in0 {                                                      
          .sup. type in                                                   
          .sup. load 0.0746                                               
       .sup.   }                                                          
       .sup.   sel0 {                                                     
          .sup. type in                                                   
          .sup. load 0.0227                                               
       .sup.   }                                                          
     .sup. }                                                              
     .sup. equations {                                                    
       .sup.   out = ( ( sel0 &amp;&amp; in0 ) | | ( ( | sel0 ) 
&amp;&amp; in1 ) )                                                                
     .sup. }                                                              
     .sup. transport.sub.-- delay {                                       
          sel0 out 0.4377 0.468729                                        
          in0 out 0.270195 0.319514                                       
          in1 out 0.254459 0.3315                                         
     .sup. }                                                              
     .sup. timing.sub.-- constraints {                                    
     .sup. }                                                              
    }                                                                     
}                                                                         
    { STUFF DELETED }                                                     
   Representative Error File                                              
** This file describes a represented error file produced                  
** by the invention. Two violations are shown  #880, #270!.               
** The drive strength, lumped capacitance (LC), width, layer              
** information of each conductive trace in the net are shown              
** for each net that violates the predetermined process rules.            
** The unit for LC are pico farads.                                       
**                                                                        
# 880: imudp.sub.-- imu.sub.-- dpr.sub.--dpr.sub.-- tlb.sub.-- data.sub.--
 ld.sub.-- n1, 12 paths                                                   
    total len. = 977.51                                                   
     Lumped Cap = 0.0455                                                  
   .sup. Drive   .sup. = 45                                               
    path # 0:                                                             
      head = imudp.sub.-- imu.sub.-- dpr.sub.-- route.sub.-- 5.sub.--     
N119 974!                                                                 
      tail = imudp.sub.-- imu.sub.-- dpr.sub.-- dpr.sub.-- tlb.sub.--     
data.sub.-- ld.sub.-- n1                                                  
      len. = 259.0000                                                     
      wid. = 0.5600                                                       
      lev. = MET2                                                         
    path # 1:                                                             
      head = imudp.sub.-- imu.sub.-- dpr.sub.-- ram.sub.-- size.sub.--    
mux.sub.-- mux.sub.-- 1.se10                                              
      tail = imudp.sub.-- imu.sub.-- dpr.sub.-- route.sub.-- 5.sub.--     
N119 977!                                                                 
      len. = 2.3100                                                       
      wid. = 0.4200                                                       
      lev. = POLY1                                                        
    path # 2:                                                             
      head = imudp.sub.-- imu.sub.-- dpr.sub.-- route.sub.-- 5.sub.--     
N119 976!                                                                 
      tail = imudp.sub.-- imu.sub.-- dpr.sub.-- route.sub.-- 5.sub.--     
N119 977!                                                                 
      len. = 19.6000                                                      
      wid. = 0.5600                                                       
      lev. = MET1                                                         
    path # 3:                                                             
      head = imudp.sub.-- imu.sub.-- dpr.sub.-- ram.sub.-- size.sub.--    
mux.sub.-- mux.sub.-- 0.se10                                              
      tail = imudp.sub.-- imu.sub.-- dpr.sub.-- route.sub.-- 5.sub.--     
N119 976!                                                                 
      len. = 2.3100                                                       
      wid. = 0.4200                                                       
      lev. = POLY1                                                        
    path # 4:                                                             
      head = imudp.sub.-- imu.sub.-- dpr.sub.-- route.sub.-- 5.sub.--     
N119 975!                                                                 
      tail = imudp.sub.-- imu.sub.-- dpr.sub.-- route.sub.-- 5.sub.--     
N119 976!                                                                 
      len. = 512.7500                                                     
      wid. = 0.5600                                                       
      lev. = MET1                                                         
    path # 5:                                                             
      head = imudp.sub.-- imu.sub.-- dpr.sub.-- route.sub.-- 5.sub.--     
N119 975!                                                                 
      tail = imudp.sub.-- imu.sub.-- dpr.sub.-- route.sub.-- 5.sub.--     
N119 974!                                                                 
      len. = 3.6750                                                       
      wid. = 0.5600                                                       
      lev. = MET3                                                         
    path # 6:                                                             
      head = imudp.sub.-- imu.sub.-- buf1.sub.-- route.sub.-- 0.sub.--    
N30 270!                                                                  
      tail = imudp.sub.-- imu.sub.-- buf1.sub.-- dpr.sub.-- tlb.sub.--    
data.sub.-- 1d.sub.-- n1                                                  
      len. = 5.3900                                                       
      wid. = 0.7000                                                       
      lev. = MET2                                                         
    path # 7:                                                             
      head = imudp.sub.-- imu.sub.-- buf1.sub.-- route.sub.-- 1.sub.--    
N55 456!                                                                  
      tail = imudp.sub.-- imu.sub.-- buf1.sub.-- route.sub.-- 0.sub.--    
N30 271!                                                                  
      len. = 61.4600                                                      
      wid. = 0.7000                                                       
      lev. = MET2                                                         
    path # 8:                                                             
      head = imudp.sub.-- imu.sub.-- buf1.sub.-- route.sub.-- 0.sub.--    
N30 271!                                                                  
      tail = imudp.sub.-- imu.sub.-- buf1.sub.-- route.sub.-- 0.sub.--    
N30 270!                                                                  
      len. = 31.7800                                                      
      wid. = 0.7000                                                       
      lev. = MET1                                                         
    path # 9:                                                             
      head = imudp.sub.-- imu.sub.-- buf1.sub.-- route.sub.-- 1.sub.--    
N55 456!                                                                  
      tail = imudp.sub.-- imu.sub.-- buf1.sub.-- route.sub.-- 1.sub.--    
N55 455!                                                                  
      len. = 52.0800                                                      
      wid. = 0.7000                                                       
      lev. = MET3                                                         
    path # 10:                                                            
      head = imudp.sub.-- imu.sub.-- buf1.sub.-- tlb.sub.-- data.sub.--   
ld.sub.-- n1.sub.-- buf.sub.-- i.sub.-- 1.selo                            
      tail = imudp.sub.-- imu.sub.-- buf1.sub.-- route.sub.-- 1.sub.--    
N55 455!                                                                  
      len. = 27.1600                                                      
      wid. = 0.7000                                                       
      lev. = MET2                                                         
    path # 11:                                                            
      head = imudp.sub.-- imu.sub.-- dpr.sub.-- dpr.sub.-- tlb.sub.--     
data.sub.-- ld.sub.-- n1                                                  
      tail = imudp.sub.-- imu.sub.-- buf1.sub.-- dpr.sub.-- tlb.sub.--    
data.sub.-- ld.sub.-- n1                                                  
      len. = 0.0000                                                       
      wid. = 0.5600                                                       
      lev. = MET2                                                         
# 270: .sup. spr.sub.-- io.sub.-- obs.sub.-- bus.sub.-- r1 5!, 7 paths    
    total len. = 734.23                                                   
     Lumped Cap = 0.2018                                                  
   .sup. Drive  .sup. = 40                                                
    path # 0:                                                             
      head = imcut1.sub.-- c14b00a9                                       
      tail = imuct1.sub.-- c130008e                                       
      len. = 133.9800                                                     
      wid. = 0.5600                                                       
      lev. = MET2                                                         
__________________________________________________________________________
 
    
     As discussed above, the error identification processing of the invention uses the lumped capacitance (LC) and the determined drive strength to determine the minimum dimensions for the entire net when checking individual wires and contacts of an integrated circuit design for electromigration errors. However, the results produced by the invention are accurate. In fact, with this approach, the values for the lumped capacitance (LC) and the determined drive strength are in fact conservative estimates so that the processing does not to miss any errors. Nevertheless, it should be recognized that in other embodiments individual values for the lumped capacitance (LC) and the drive strength can be determined and utilized within the error identification processing 400 for possibly greater accuracy. 
     The many features and advantages of the present invention are apparent from the written description, and thus, it is intended by the appended claims to cover all such features and advantages of the invention. Further, since numerous modifications and changes will readily occur to those skilled in the art, it is not desired to limit the invention to the exact construction and operation as illustrated and described. Hence, all suitable modifications and equivalents may be resorted to as falling within the scope of the invention.