Object Definition File¶
The object definition file contains the almost everything except for the placement information, and the connectivity, both of which are in the Netlist.
An example object definition file can be seen at ip.json
{
"options" :
{
"ignoreSetYoffsetHalf" : false,
"prefix" : "SUNTR_"
},
"include" : [
"dmos_sky130nm_core.json",
"dcap.json",
"tr.json",
"resistors.json",
"dig.json",
"components.json",
"capacitor.json"
],
"cells" : [ ]
}
Options¶
Options are instructions to cic. For example, “ignoreSetYoffsetHalf” is a global parameter to override overlap of source/drain (custom feature).
Prefix is the name to prepend to all cells, which is useful for technologies where one need to have multiple, slightly different, versision of the design.
Include¶
The include sections link to other object definition files, and is mostly to avoid having everything in one big file. The array is read sequentially, as such, the order of the files are important. For example, if tr.json has an instance of a MOSFET from dmos_sky130nm_core.json the MOSFET must be created first.
Cells¶
cells
is an array of all the cells in the design. The order of the
cells are important, since a cell can’t be referenced until it’s been
created.
An example of cell definition can be seen in dig.json
Each of the cells are read by cic, one by one, in sequence. cic will create an instance of the class, and run methods on that class.
"cells":
[
{ "name": "TAPCELLB_CV",
"class" : "Layout::LayoutDigitalCell",
"meta" : {
"symbol" : "cic_wbulk/tap"
},
"boundaryIgnoreRouting" : 1,
"beforeRoute" : {
"addDirectedRoutes" : [ ["M1","AVSS","MN1:B->MN1:G"],
["M1","AVSS","MN1:G-|--MN1:S"],
["M1","AVSS","MN1:G-|--MN1:D"],
["M1","AVDD","MP:S-|--MP:G"],
["M1","AVDD","MP:D-|--MP:G"],
["M1","AVDD","MP:G->MP:B"]
]
}
}
]
Name¶
All cells must have a name. The name is used to search the spice file (assumed to be called dig.spi for a dig.json file). The name will also be used for the cell in the output file
Class¶
The class correspond to a class inside cic
Comments¶
Any line starting with s*// (space followed by //), will be ignored by the compiler.