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
@ "srdr connected to pins of tiecells"
srdr NET ?
drc check map res1 gdsii 6 lvl.gds
drc check map res1 ascii