Updated Deep Verification Base (markdown)

Matthias Köfferlein 2018-11-11 22:42:32 +01:00
parent 54f9f00fef
commit 86a91539bb
1 changed files with 62 additions and 0 deletions

@ -97,11 +97,73 @@ Connectivity layers are either taken from their original layers or derived using
After device recognition, schematic extraction can proceed bottom-up to connect shape by shape and form growing clusters of connected shapes. The incremental nature of the connection extraction forms sub-circuits for each cell. When moving up in the hierarchy, nets from these sub-circuits are connected with nets either from the parent cell or with nets from sibling cells. The result is a hierarchical netlist.
Here is a rough idea for a schematic extraction script:
```(ruby)
# device definitions
class MOSDevice < DeviceExtractor
def extract(layout, seed, body)
body.size == 1 || raise("MOS device requires exactly one body layer")
sd = body[0]
sd.size == 2 || raise("Exactly two body shapes (S,D) are required for MOS devices")
sides = seed.edges * sd.edges
width = sides.length * 0.5 * layout.dbu
faces = seed.edges - sd.edges
length = faces.length * 0.5 * layout.dbu
params = { "W" => width, "L" => length }
ports = [
Port::new(SEED, "G", seed),
Port::new(BODY1, "S", sd[0]),
Port::new(BODY1, "D", sd[1])
]
return Device::new(self.DEVICE_NAME, params, ports)
end
end
class NMOSDevice < MOSDevice
self.DEVICE_NAME = "NMOS"
end
class PMOSDevice < MOSDevice
self.DEVICE_NAME = "PMOS"
end
# body
deep
# generation rules
sd = active - poly
gate = active * poly
pmos = gate * nwell
nmos = gate - nwell
# net extraction
extract_nets do
connect metal2, via1
connect via1, metal1
connect metal1, contact
connect contact, sd
connect contact, poly
connect contact, gate
label metal1, metal1_texts
label metal2, metal2_texts
device NMOSDevice, nmos, sd
device PMOSDevice, pmos, sd
end
```