4 Replies Latest reply on Apr 23, 2013 8:35 PM by dan_liddell

    ERC script writing trouble in calibre

    lakshmiprashanth555

           Hi,

       

            I know that calibre provides erc checks when we run lvs. But i wanted to created some coustom calibre erc scripts. We created some calibre scripts. In our last script which we created has some difficulties. (explanation given below):

       

           The pupose of the script is Tie_cells connected to diffusion.( Normally Tie_cells are connected to gates of standard cells.). We need a script to catch this violation. So we created one. When we runned the calibre Tie_cell script on a test layout, it is working. But when we run the same script on top level database, it's not working.

       

           The logic of the layout text based script is like this. Initially we r taking only tie_cell od's and poly's, Then we r assigning it to temp variable. Then we are taking the output pin text of tie cell.

                     Then we are taking the diffusions not of tie_cell od's and checking whether the diffusion is connect to the output pin text. So that the script will report the diffusion which is connected to the tie_cell's output pin.(according to logic, it wouldn't take tie_cell's diffusion)

       

           In test layout we had only 1 tie_cell and 1 device. we connected the output to the device's source. The script reported correctly.

       

           The problem is when we run the script in top level. Since in top level we have so many same tie_cells with same output pin text. For testing the script i created a connecion with some devices diffusion an with a tie_cell's output in top level. When we runned the script it didn't reported anything. When we analysed the problem, the calibre tool was ignoring the same text at many location and taking at only 1 location. The layout text which we took was from the cell level(output pin text of tie_cel). When i took the pin location from error location from top level. the tool was reporting. The tiecell will be not in one locations. It may be around thousands of locations. So it's not practical to take text from thousands of locations from same type cells.

          The same logic is working in hercules tool for toplevel.

       

           We need a solution for running the script on top level. Or extacting the cell level text to top level on all over locations. Or some commands. Or some other help. The script is given below:


      LAYOUT SYSTEM GDS

      LAYOUT ERROR ON INPUT YES

       

      DRC KEEP EMPTY NO    

      DRC CELL NAME YES CELL SPACE XFORM

      DRC MAXIMUM RESULTS ALL

      DRC MAXIMUM CELL NAME LENGTH 100

      DRC MAP TEXT YES

      ERC MAXIMUM RESULTS ALL

      //Text Depth ALL

      LAYOUT USE DATABASE PRECISION YES

      LAYOUT PROCESS BOX RECORD NO

      LAYOUT PROPERTY TEXT 100

      LAYOUT PRIMARY "*"

      LAYOUT PATH "./*.gds"

      DRC RESULTS DATABASE "drc.results"

      DRC SUMMARY REPORT "drc.summary" HIER

      LAYOUT RENAME TEXT "/.*/ /"  DATABASE  // Renaming All The Available Text From Database To Null ( Deletion )

       

      HCELL "*" "*"

      LAYOUT TEXT "X2"  0.7000 0.8400 131 0 TIE1

      LAYOUT TEXT "X3"  0.1400 0.5600 131 0 TIE0

      LAYOUT TEXT "X4"  0.7000 0.8400 131 0 TIE1_1


      //some layer assignments' which is not shown.

       

      poly_2_delete_1 = poly_1 inside cell TIE0 TIE1 TIE1_1

      poly_2_delete = poly_2_delete_1 interact co

      od_2_delete = alldiff_1 inside cell TIE0 TIE1 TIE1_1

      alldiff_2 = alldiff_1 not od_2_delete

      poly = poly_1 not poly_2_delete

      aldiff_rpo = alldiff_2 interact rpo

      alldiff_dev = alldiff_2 interact poly

      alldiff = aldiff_rpo or alldiff_dev

      pdiff = alldiff and pplus

      pgate = pdiff and poly

      psrdr_1 = pdiff and nwell

      psrdr = psrdr_1 not poly

       

      ndiff = alldiff and nplus

      ngate = ndiff and poly

      nsrdr_1 = ndiff not nwell

      nsrdr = nsrdr_1 not poly

      allgate = pgate or ngate

      srdr = nsrdr or psrdr

       

      connect    m7 ap BY rv

      connect    m7 m6 BY via6

      connect    m6 m5 BY via5

      connect    m5 m4 BY via4

      connect    m4 m3 BY via3

      connect    m3 m2 BY via2

      connect    m2 m1 BY via1

      connect    m1 psrdr BY co

      connect    m1 poly  BY co

      connect    m1 nsrdr BY co

      connect    m1 srdr BY co

      connect poly_2_delete m1 by co

      connect poly_2_delete poly

      connect    allgate poly

      connect    pgate poly

      connect    ngate poly

      res1{

      @ "srdr connected to pins of tiecells"

      srdr NET ?

      }

      drc check map res1 gdsii 6 lvl.gds

      drc check map res1 ascii

        • 1. Re: ERC script writing trouble in calibre
          dan_liddell

          Hi Lakshmi,


          The rule file excerpt you show seems to be for a DRC run. For instance:


          DRC KEEP EMPTY NO    

          DRC CELL NAME YES CELL SPACE XFORM

          DRC MAXIMUM RESULTS ALL

          DRC MAXIMUM CELL NAME LENGTH 100

          DRC MAP TEXT YES


          DRC RESULTS DATABASE "drc.results"

          DRC SUMMARY REPORT "drc.summary" HIER


          drc check map res1 gdsii 6 lvl.gds

          drc check map res1 ascii


          I'm guessing what you are using is a dual-purpose rule file. The statements above have no effect in ERC.


          As a side issue, I notice this in the rules:


          HCELL "*" "*"


          On the source side, "*" is treated as a literal cell name, not a wildcard. The source side does not apply to connectivity extraction, but it would apply during LVS comparison. Layout Preserve Cell List might be a better statement to choose for the connectivity extraction phase, which applies to ERC.


          I'm guessing this is the rule you are concerned about:


          res1{

          @ "srdr connected to pins of tiecells"

          srdr NET ?

          }


          This will find any srdr polygons on any labelled net. A label must be present for the NET operation to have any output.


          By default, Calibre only uses text at the top level of the design. Since you have commented out TEXT DEPTH ALL, connectivity text will only be read from the top level. Therefore, these statements:


          LAYOUT TEXT "X2"  0.7000 0.8400 131 0 TIE1

          LAYOUT TEXT "X3"  0.1400 0.5600 131 0 TIE0

          LAYOUT TEXT "X4"  0.7000 0.8400 131 0 TIE1_1

           

          will have no effect if connectivity extraction text is read only from the top level, and your TIE* cells are not at the top level. For this reason, I think you may need to adjust your TEXT DEPTH so the text in your TIE* cells gets read.

           

          You must ensure layer 131 0 is specified (either through a LAYER MAP and/or LAYER statement, or simply as 131) in a TEXT LAYER statement, or it will not apply as connectivity extraction text.

           

          Hope that helps,

           

          dan

           

           

           

           

           


           


          • 2. Re: ERC script writing trouble in calibre
            dan_liddell

            One more thing. You don't want to do this:

             

            pgate = pdiff and poly

            ngate = ndiff and poly

             

            The AND operation passes connectivity from the layer to the right of the = sign to the output layer. So in these cases, your gate polygons are getting the connectivity of diffusion, which probably isn't what you want. Instead, place the poly layer after the = sign.

             

            dan

            • 3. Re: ERC script writing trouble in calibre
              lakshmiprashanth555

              Hi Mr.dan_liddell <http://communities.mentor.com/people/dan_liddell>,

               

              Thanks for your information. But the solutions given by you doesn't help me

              fully. I corrected all the solutions what you have mentioned. I removed the

              hcel, uncommented text depth all, corrected the boolean command.

              The output is same. The main problem is the tie_cel is leaf cell and not

              top cell.

               

              The error is like this. The tool is ignoring the text.

               

              WARNING: Open circuit. Label X15 used at location (941.08,1202.53) and

              ignored at location (1487.5,666.47).

              WARNING: Open circuit. Label X15 used at location (941.08,1202.53) and

              ignored at location (1280.3,940.45).

              WARNING: Open circuit. Label X15 used at location (941.08,1202.53) and

              ignored at location (816.34,13.09).

              WARNING: Open circuit. Label X15 used at location (941.08,1202.53) and

              ignored at location (821.66,9.73).

              WARNING: Open circuit. Label X15 used at location (941.08,1202.53) and

              ignored at location (939.4,11.27)

              WARNING: Open circuit. Label X15 used at location (941.08,1202.53) and

              ignored at location (1223.32,446.53).

              WARNING: Open circuit. Label X15 used at location (941.08,1202.53) and

              ignored at location (1137.08,490.21).

              WARNING: Open circuit. Label X15 used at location (941.08,1202.53) and

              ignored at location (972.16,752.29).

              WARNING: Open circuit. Label X15 used at location (941.08,1202.53) and

              ignored at location (1460.62,787.43).

              WARNING: Open circuit. Label X15 used at location (941.08,1202.53) and

              ignored at location (920.5,1215.97).

              WARNING: Open circuit. Label X15 used at location (941.08,1202.53) and

              ignored at location (941.08,1202.53).

               

               

              We need a solution, We have an idea is to select the cell's from top level

              and get the text of the cells and assign it with an increment order. like

              tie_cel0 x1 (120,123), tie_cel0 x2 (140, 160) etc. But's it's layout tool

              based idea.

               

              We need solution from calibre tool level. I hope you understood my problem.

               

               

              Thanks & Regards,

               

              Lakshmi Prashanth.A.N

              • 4. Re: ERC script writing trouble in calibre
                dan_liddell

                Hi Lakshmi,

                 

                After seeing your results and discussing them on this end with a colleague, we're thinking you may not need text objects for this check. Net Area Ratio may be all that you need. Perhaps an operation like this one:

                 

                NET AREA RATIO srdr poly_2_delete > 0

                 

                Try it out and see.

                 

                dan