2021-09-19 13:41:50 +02:00
|
|
|
|
---
|
2021-10-30 10:33:38 +02:00
|
|
|
|
title: "Calibre Physical Verification Hacks 🐛🐛"
|
2021-09-19 13:41:50 +02:00
|
|
|
|
date: 2021-09-14T11:30:11+02:00
|
2021-10-03 11:42:10 +02:00
|
|
|
|
draft: false
|
|
|
|
|
toc: true
|
2021-09-19 13:41:50 +02:00
|
|
|
|
tags:
|
|
|
|
|
- calibre
|
|
|
|
|
- config
|
|
|
|
|
- verification
|
|
|
|
|
---
|
|
|
|
|
|
2021-10-30 10:33:38 +02:00
|
|
|
|
This page details a variety of 'modifications' to the standard Calibre
|
|
|
|
|
verification flow I have used in the past to either modify the checks performed
|
|
|
|
|
tools in the physical verification flow. None of which are particularly clean
|
|
|
|
|
since they depart from what is usually an approved rule deck / verification
|
|
|
|
|
flow. Designs do need to pass the verification process in a meaningful way at
|
|
|
|
|
the end of the day so your mileage may vary.
|
2021-09-19 13:41:50 +02:00
|
|
|
|
|
|
|
|
|
## Extended Device Checks
|
|
|
|
|
|
2021-10-30 10:33:38 +02:00
|
|
|
|
It is generally good practice to be able to check for internal design
|
|
|
|
|
conventions when it comes to layout. Making a custom set of rules that does
|
|
|
|
|
exactly this is highly advised to yield better quality designs. For example
|
|
|
|
|
it could be required that varactor or mosfet primitives should never have
|
|
|
|
|
overlapping shapes with other devices of the same type. The rule below
|
|
|
|
|
will check for exactly this and report it as a "NVA0.VAR_OVLP" violation.
|
|
|
|
|
|
2021-09-19 13:41:50 +02:00
|
|
|
|
```tvf
|
|
|
|
|
NVA0.VAR_OVLP { @ Varactors / Tiles should not overlap
|
|
|
|
|
VARi AND > 1
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
2021-10-30 10:33:38 +02:00
|
|
|
|
There are other rules that are required or suggested by the DRM that simply
|
|
|
|
|
don't have a good DRC rule. For example requiring tear-shaped geometries on
|
|
|
|
|
the RDL layer near flip-chip balls. Getting an approximate rule check that
|
|
|
|
|
catches the more obvious issues is worthwhile including.
|
|
|
|
|
|
2021-09-19 13:41:50 +02:00
|
|
|
|
```tvf
|
2021-10-30 10:33:38 +02:00
|
|
|
|
NVA0.RDL.TEAR { @ Shape of RDL near pad: tear shape required
|
|
|
|
|
X0 = EXT RDL <1 ABUT <125 INTERSECTING ONLY REGION
|
|
|
|
|
X1 = EXT RDL <1 ABUT <180 INTERSECTING ONLY REGION
|
|
|
|
|
X2 = INT RDL <1 ABUT <180 INTERSECTING ONLY REGION
|
2021-09-19 13:41:50 +02:00
|
|
|
|
X3 = EXPAND EDGE (X1 NOT TOUCH INSIDE EDGE X0) BY 1 EXTEND BY 50
|
|
|
|
|
X4 = EXPAND EDGE (X2 NOT TOUCH INSIDE EDGE X0) BY 1 EXTEND BY 50
|
|
|
|
|
(X3 AND X0) OR (X4 AND X0)
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
2021-10-30 10:33:38 +02:00
|
|
|
|
The above rule finds regions with acute angles (internal and external)
|
|
|
|
|
near regions with obtuse angles where the latter is generally the rounded
|
|
|
|
|
RDL landing pad for the ball.
|
2021-09-19 13:41:50 +02:00
|
|
|
|
|
|
|
|
|
## Layer / Device Aliasing
|
|
|
|
|
|
2021-10-30 10:33:38 +02:00
|
|
|
|
Layer aliasing or remapping is another way to add indirection to the DRC rule
|
|
|
|
|
deck that will allow you to both run your own checks and device recognition
|
|
|
|
|
without interfering with the standard flow.
|
|
|
|
|
|
2021-09-19 13:41:50 +02:00
|
|
|
|
```tvf
|
|
|
|
|
LAYER MAP 107 DATATYPE 0 746
|
|
|
|
|
```
|
|
|
|
|
|
2021-10-30 10:33:38 +02:00
|
|
|
|
In the above scenario we allocated an additional layer in the Cadence design
|
|
|
|
|
to designate inductor recognition beside the standard inductors. This was
|
|
|
|
|
required since the standard inductors also implied metallization free regions
|
|
|
|
|
which is not always be acceptable. By adding this layer and mapping it to
|
|
|
|
|
the same inductor recognition data type during LVS these inductors would still
|
|
|
|
|
be recognized but did not trigger the associated metallization rules during DRC.
|
2021-09-19 13:41:50 +02:00
|
|
|
|
|
|
|
|
|
## Adding New Device Primitives
|
|
|
|
|
|
2021-10-30 10:33:38 +02:00
|
|
|
|
Another good know how is the process behind device recognition when you run
|
|
|
|
|
the Calibre LVS process. The code snippets below take us through a process of
|
|
|
|
|
defining a new device for LVS recognition that is bound together with a spice
|
|
|
|
|
definition to produce the extracted netlist. This should allow you to define
|
|
|
|
|
custom layers and define custom devices on those layers while still getting
|
|
|
|
|
LVS clean at the end of the day. This example will define a custom resistor.
|
|
|
|
|
|
2021-09-19 13:41:50 +02:00
|
|
|
|
```tvf
|
|
|
|
|
LAYER RESLYR 450
|
|
|
|
|
LAYER MAP 215 DATATYPE 21 450 // layer to form memresistor
|
|
|
|
|
XTERM = RESLYR AND M4
|
|
|
|
|
XCDTR = RESLYR NOT M4
|
|
|
|
|
CONNECT metal4 MEMRESLYRT
|
|
|
|
|
DEVICE XDEVICE XCDTR XTERM(PORT1) XTERM(PORT2) netlist model xdevice
|
|
|
|
|
```
|
|
|
|
|
|
2021-10-30 10:33:38 +02:00
|
|
|
|
The section of code above are LVS rule statements that first define a named
|
|
|
|
|
layer `RESLYR` and then map a data type onto that layer. The data type should
|
|
|
|
|
correspond to what ever you new layer you used to define the device in the
|
|
|
|
|
layout editor. Then we define the terminals of this device when ever this layer
|
|
|
|
|
overlaps and connects with metal 4 otherwise it is the resistive section.
|
|
|
|
|
Finally you specify a device in terms of the relevant layers and how they map
|
|
|
|
|
to the actual model.
|
|
|
|
|
|
|
|
|
|
Notice the device maps to a netlist model called `xdevice` with named ports.
|
|
|
|
|
This model is defined below. Note that we haven´t extracted any parameters
|
|
|
|
|
but this could be done in the rule deck definition. Also note that here
|
|
|
|
|
we also specify the mapping of this `xdevice` to a cell in the design library.
|
2021-09-19 13:41:50 +02:00
|
|
|
|
|
|
|
|
|
```lisp
|
|
|
|
|
(xdevice
|
|
|
|
|
(DEVICE_LIB DEVICE_CELL DEVICE_VIEW)
|
|
|
|
|
(
|
|
|
|
|
(PORT1 PIN1)
|
|
|
|
|
(PORT2 PIN2)
|
|
|
|
|
)
|
|
|
|
|
(
|
|
|
|
|
(nil multi 1)
|
|
|
|
|
(nil m 1)
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
```
|
|
|
|
|
|
2021-10-30 10:33:38 +02:00
|
|
|
|
Finally a spice definition must also be included in order to run the netlist
|
|
|
|
|
comparison. Assuming the cell in the design library correctly netlists with a
|
|
|
|
|
auCDL view. The spice definition below presumes both the layout and schematic
|
|
|
|
|
perform black-boxed comparison of this new resistor.
|
|
|
|
|
|
|
|
|
|
```spice
|
|
|
|
|
.SUBCKT xdevice PORT1 PORT2
|
|
|
|
|
.ENDS
|
|
|
|
|
```
|
|
|
|
|
|
2021-09-19 13:41:50 +02:00
|
|
|
|
## Extending Connectivity Layers
|
|
|
|
|
|
2021-10-30 10:33:38 +02:00
|
|
|
|
In some occasions it could be that certain extra layers are defined in the DRC
|
|
|
|
|
deck but not in the LVS deck. For example there are optional metallization
|
|
|
|
|
layers for your process. Adding connectivity is rather strait forward.
|
|
|
|
|
The main challenge here is to choose the correct data type mappings as to
|
|
|
|
|
avoid conflicts with the original rule statements.
|
|
|
|
|
|
2021-09-19 13:41:50 +02:00
|
|
|
|
```tvf
|
|
|
|
|
LAYER PM1i 5001
|
|
|
|
|
LAYER MAP 5 DATATYPE 1 5001
|
|
|
|
|
LAYER Cu_PPIi 7410
|
|
|
|
|
LAYER MAP 74 DATATYPE 10 7410
|
|
|
|
|
LAYER UBM 170
|
|
|
|
|
LAYER MAP 170 DATATYPE 0 170
|
|
|
|
|
LAYER PM2i 5002
|
|
|
|
|
LAYER MAP 5 DATATYPE 2 5002
|
|
|
|
|
VIA8 = COPY CB2
|
|
|
|
|
metal9 = COPY Cu_PPIi
|
|
|
|
|
VIA9 = COPY PM2i
|
|
|
|
|
metal10 = COPY UBM
|
2021-10-30 10:33:38 +02:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Once these layers are defined we can go ahead and specify the order of
|
|
|
|
|
connectivity. Notice that we can´t directly operate / manipulate layer
|
|
|
|
|
definitions so simply running a `COPY` statement resolves this. Below we
|
|
|
|
|
see also that adding ports and text labels connectivity for the relevant
|
|
|
|
|
layers is also needed for your pins to connect.
|
|
|
|
|
|
|
|
|
|
``` tvf
|
2021-09-19 13:41:50 +02:00
|
|
|
|
CONNECT metal9 metal8 BY VIA8
|
|
|
|
|
CONNECT metal10 metal9 BY VIA9
|
|
|
|
|
TEXT LAYER 140 ATTACH 140 metal9
|
|
|
|
|
PORT LAYER TEXT 140
|
|
|
|
|
TEXT LAYER 141 ATTACH 141 metal10
|
|
|
|
|
PORT LAYER TEXT 141
|
|
|
|
|
TEXT LAYER 125 ATTACH 125 metal10
|
|
|
|
|
PORT LAYER TEXT 125
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## Hot fixing LVS comparison
|
|
|
|
|
|
2021-10-30 10:33:38 +02:00
|
|
|
|
Finally the rule statements below are global deck adjustments. They are
|
|
|
|
|
for the most part self explanatory except for `CULL` which actually
|
|
|
|
|
removes empty spice sub-circuits that are identified by a hierarchical LVS run
|
|
|
|
|
but does not actually contain active devices (i.e. a dummy digital filler cell).
|
|
|
|
|
|
2021-09-19 13:41:50 +02:00
|
|
|
|
```tvf
|
|
|
|
|
LVS SPICE CULL PRIMITIVE SUBCIRCUITS YES
|
|
|
|
|
VIRTUAL CONNECT NAME "POWER"
|
2021-10-30 10:33:38 +02:00
|
|
|
|
TEXT "NET_NAME" LOCX LOCY DATATYPE
|
2021-09-19 13:41:50 +02:00
|
|
|
|
LAYOUT RENAME TEXT "/DATA\\[(.*)\\]/DATA<-1>/M-"
|
|
|
|
|
```
|