AnsweredAssumed Answered

ERC script writing trouble in calibre

Question asked by lakshmiprashanth555 on Apr 21, 2013
Latest reply on Apr 23, 2013 by dan_liddell

     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

Outcomes