2016-11-09 20:35:32 +01:00
|
|
|
import os
|
2018-10-12 18:44:36 +02:00
|
|
|
from design_rules import *
|
2016-11-09 20:35:32 +01:00
|
|
|
|
2016-11-08 18:57:35 +01:00
|
|
|
"""
|
2017-11-14 23:59:14 +01:00
|
|
|
File containing the process technology parameters for FreePDK 45nm.
|
2016-11-08 18:57:35 +01:00
|
|
|
"""
|
2016-11-09 20:35:32 +01:00
|
|
|
|
2016-11-08 18:57:35 +01:00
|
|
|
#GDS file info
|
|
|
|
|
GDS = {}
|
2017-05-24 01:18:11 +02:00
|
|
|
# gds units
|
2016-11-08 18:57:35 +01:00
|
|
|
GDS["unit"] = (0.0005,1e-9)
|
2017-05-24 01:18:11 +02:00
|
|
|
# default label zoom
|
|
|
|
|
GDS["zoom"] = 0.05
|
2016-11-08 18:57:35 +01:00
|
|
|
|
2017-11-14 23:59:14 +01:00
|
|
|
###################################################
|
|
|
|
|
##GDS Layer Map
|
|
|
|
|
###################################################
|
2016-11-08 18:57:35 +01:00
|
|
|
|
|
|
|
|
# create the GDS layer map
|
|
|
|
|
# FIXME: parse the gds layer map from the cadence map?
|
|
|
|
|
layer = {}
|
|
|
|
|
layer["active"] = 1
|
|
|
|
|
layer["pwell"] = 2
|
|
|
|
|
layer["nwell"] = 3
|
|
|
|
|
layer["nimplant"]= 4
|
|
|
|
|
layer["pimplant"]= 5
|
|
|
|
|
layer["vtg"] = 6
|
|
|
|
|
layer["vth"] = 7
|
|
|
|
|
layer["thkox"] = 8
|
|
|
|
|
layer["poly"] = 9
|
|
|
|
|
layer["contact"] = 10
|
2018-01-11 19:24:44 +01:00
|
|
|
layer["active_contact"] = 10
|
2016-11-08 18:57:35 +01:00
|
|
|
layer["metal1"] = 11
|
|
|
|
|
layer["via1"] = 12
|
|
|
|
|
layer["metal2"] = 13
|
|
|
|
|
layer["via2"] = 14
|
|
|
|
|
layer["metal3"] = 15
|
|
|
|
|
layer["via3"] = 16
|
|
|
|
|
layer["metal4"] = 17
|
|
|
|
|
layer["via4"] = 18
|
|
|
|
|
layer["metal5"] = 19
|
|
|
|
|
layer["via5"] = 20
|
|
|
|
|
layer["metal6"] = 21
|
|
|
|
|
layer["via6"] = 22
|
|
|
|
|
layer["metal7"] = 23
|
|
|
|
|
layer["via7"] = 24
|
|
|
|
|
layer["metal8"] = 25
|
|
|
|
|
layer["via8"] = 26
|
|
|
|
|
layer["metal9"] = 27
|
|
|
|
|
layer["via9"] = 28
|
|
|
|
|
layer["metal10"] = 29
|
|
|
|
|
layer["text"] = 239
|
|
|
|
|
layer["boundary"]= 239
|
2018-09-05 01:35:40 +02:00
|
|
|
layer["blockage"]= 239
|
2016-11-08 18:57:35 +01:00
|
|
|
|
2017-11-14 23:59:14 +01:00
|
|
|
###################################################
|
|
|
|
|
##END GDS Layer Map
|
|
|
|
|
###################################################
|
2016-11-08 18:57:35 +01:00
|
|
|
|
2017-11-14 23:59:14 +01:00
|
|
|
###################################################
|
|
|
|
|
##DRC/LVS Rules Setup
|
|
|
|
|
###################################################
|
2016-11-08 18:57:35 +01:00
|
|
|
|
|
|
|
|
#technology parameter
|
|
|
|
|
parameter={}
|
|
|
|
|
parameter["min_tx_size"] = 0.09
|
2017-12-01 17:31:16 +01:00
|
|
|
parameter["beta"] = 3
|
2016-11-08 18:57:35 +01:00
|
|
|
|
2018-10-17 16:28:56 +02:00
|
|
|
parameter["6T_inv_nmos_size"] = 0.205
|
|
|
|
|
parameter["6T_inv_pmos_size"] = 0.09
|
|
|
|
|
parameter["6T_access_size"] = 0.135
|
|
|
|
|
|
2016-11-08 18:57:35 +01:00
|
|
|
drclvs_home=os.environ.get("DRCLVS_HOME")
|
2018-10-12 18:44:36 +02:00
|
|
|
|
|
|
|
|
drc = design_rules("freepdk45")
|
|
|
|
|
|
|
|
|
|
drc["body_tie_down"] = 0
|
|
|
|
|
drc["has_pwell"] = True
|
|
|
|
|
drc["has_nwell"] = True
|
|
|
|
|
|
2016-11-08 18:57:35 +01:00
|
|
|
#grid size
|
|
|
|
|
drc["grid"] = 0.0025
|
|
|
|
|
|
|
|
|
|
#DRC/LVS test set_up
|
|
|
|
|
drc["drc_rules"]=drclvs_home+"/calibreDRC.rul"
|
|
|
|
|
drc["lvs_rules"]=drclvs_home+"/calibreLVS.rul"
|
|
|
|
|
drc["xrc_rules"]=drclvs_home+"/calibrexRC.rul"
|
2016-11-19 00:05:17 +01:00
|
|
|
drc["layer_map"]=os.environ.get("OPENRAM_TECH")+"/freepdk45/layers.map"
|
2016-11-08 18:57:35 +01:00
|
|
|
|
2018-01-08 20:57:51 +01:00
|
|
|
# minwidth_tx with contact (no dog bone transistors)
|
2018-10-12 18:44:36 +02:00
|
|
|
drc["minwidth_tx"] = 0.09
|
2016-11-08 18:57:35 +01:00
|
|
|
drc["minlength_channel"] = 0.05
|
|
|
|
|
|
2018-03-17 01:46:29 +01:00
|
|
|
# WELL.2 Minimum spacing of nwell/pwell at different potential
|
2017-08-24 00:02:15 +02:00
|
|
|
drc["pwell_to_nwell"] = 0.225
|
2018-03-17 01:46:29 +01:00
|
|
|
# WELL.3 Minimum spacing of nwell/pwell at the same potential
|
|
|
|
|
drc["well_to_well"] = 0.135
|
2018-01-08 20:57:51 +01:00
|
|
|
# WELL.4 Minimum width of nwell/pwell
|
2016-11-08 18:57:35 +01:00
|
|
|
drc["minwidth_well"] = 0.2
|
|
|
|
|
|
2018-01-08 20:57:51 +01:00
|
|
|
# POLY.1 Minimum width of poly
|
2016-11-08 18:57:35 +01:00
|
|
|
drc["minwidth_poly"] = 0.05
|
2018-01-08 20:57:51 +01:00
|
|
|
# POLY.2 Minimum spacing of poly AND active
|
2016-11-08 18:57:35 +01:00
|
|
|
drc["poly_to_poly"] = 0.14
|
2018-01-08 20:57:51 +01:00
|
|
|
# POLY.3 Minimum poly extension beyond active
|
2016-11-08 18:57:35 +01:00
|
|
|
drc["poly_extend_active"] = 0.055
|
2018-08-30 01:12:06 +02:00
|
|
|
# Not a rule
|
|
|
|
|
drc["poly_to_polycontact"] = 0.075
|
2018-01-08 20:57:51 +01:00
|
|
|
# POLY.4 Minimum enclosure of active around gate
|
2016-11-08 18:57:35 +01:00
|
|
|
drc["active_enclosure_gate"] = 0.07
|
2018-01-08 20:57:51 +01:00
|
|
|
# POLY.5 Minimum spacing of field poly to active
|
2016-11-08 18:57:35 +01:00
|
|
|
drc["poly_to_active"] = 0.05
|
2018-01-08 20:57:51 +01:00
|
|
|
# POLY.6 Minimum Minimum spacing of field poly
|
2016-11-08 18:57:35 +01:00
|
|
|
drc["poly_to_field_poly"] = 0.075
|
2018-01-08 20:57:51 +01:00
|
|
|
# Not a rule
|
2016-11-08 18:57:35 +01:00
|
|
|
drc["minarea_poly"] = 0.0
|
|
|
|
|
|
2018-01-08 20:57:51 +01:00
|
|
|
# ACTIVE.2 Minimum spacing of active
|
2016-11-08 18:57:35 +01:00
|
|
|
drc["active_to_body_active"] = 0.08
|
2018-01-08 20:57:51 +01:00
|
|
|
# ACTIVE.1 Minimum width of active
|
2016-11-08 18:57:35 +01:00
|
|
|
drc["minwidth_active"] = 0.09
|
2018-01-08 20:57:51 +01:00
|
|
|
# Not a rule
|
|
|
|
|
drc["active_to_active"] = 0
|
|
|
|
|
# ACTIVE.3 Minimum enclosure/spacing of nwell/pwell to active
|
2016-11-08 18:57:35 +01:00
|
|
|
drc["well_enclosure_active"] = 0.055
|
2018-01-08 20:57:51 +01:00
|
|
|
# Reserved for asymmetric enclosures
|
2016-11-08 18:57:35 +01:00
|
|
|
drc["well_extend_active"] = 0.055
|
2018-01-08 20:57:51 +01:00
|
|
|
# Not a rule
|
|
|
|
|
drc["minarea_active"] = 0
|
2016-11-08 18:57:35 +01:00
|
|
|
|
2018-01-08 20:57:51 +01:00
|
|
|
# IMPLANT.1 Minimum spacing of nimplant/ pimplant to channel
|
2016-11-08 18:57:35 +01:00
|
|
|
drc["implant_to_channel"] = 0.07
|
2018-01-08 20:57:51 +01:00
|
|
|
# Not a rule
|
2018-01-11 19:24:44 +01:00
|
|
|
drc["implant_enclosure_active"] = 0
|
2018-01-08 20:57:51 +01:00
|
|
|
# Not a rule
|
2018-01-11 19:24:44 +01:00
|
|
|
drc["implant_enclosure_contact"] = 0
|
2018-01-08 20:57:51 +01:00
|
|
|
# IMPLANT.2 Minimum spacing of nimplant/ pimplant to contact
|
2016-11-08 18:57:35 +01:00
|
|
|
drc["implant_to_contact"] = 0.025
|
2018-01-08 20:57:51 +01:00
|
|
|
# IMPLANT.3 Minimum width/ spacing of nimplant/ pimplant
|
2016-11-08 18:57:35 +01:00
|
|
|
drc["implant_to_implant"] = 0.045
|
2018-01-08 20:57:51 +01:00
|
|
|
# IMPLANT.4 Minimum width/ spacing of nimplant/ pimplant
|
2016-11-08 18:57:35 +01:00
|
|
|
drc["minwidth_implant"] = 0.045
|
|
|
|
|
|
2018-01-08 20:57:51 +01:00
|
|
|
# CONTACT.1 Minimum width of contact
|
2016-11-08 18:57:35 +01:00
|
|
|
drc["minwidth_contact"] = 0.065
|
2018-01-08 20:57:51 +01:00
|
|
|
# CONTACT.2 Minimum spacing of contact
|
2016-11-08 18:57:35 +01:00
|
|
|
drc["contact_to_contact"] = 0.075
|
2018-01-08 20:57:51 +01:00
|
|
|
# CONTACT.4 Minimum enclosure of active around contact
|
2016-11-08 18:57:35 +01:00
|
|
|
drc["active_enclosure_contact"] = 0.005
|
2018-01-08 20:57:51 +01:00
|
|
|
# Reserved for asymmetric enclosures
|
2016-11-08 18:57:35 +01:00
|
|
|
drc["active_extend_contact"] = 0.005
|
2018-01-08 20:57:51 +01:00
|
|
|
# CONTACT.5 Minimum enclosure of poly around contact
|
2016-11-08 18:57:35 +01:00
|
|
|
drc["poly_enclosure_contact"] = 0.005
|
2018-01-08 20:57:51 +01:00
|
|
|
# Reserved for asymmetric enclosures
|
2016-11-08 18:57:35 +01:00
|
|
|
drc["poly_extend_contact"] = 0.005
|
2018-01-08 20:57:51 +01:00
|
|
|
# CONTACT.6 Minimum spacing of contact and gate
|
|
|
|
|
drc["contact_to_gate"] = 0.0375 #changed from 0.035
|
|
|
|
|
# CONTACT.7 Minimum spacing of contact and poly
|
|
|
|
|
drc["contact_to_poly"] = 0.090
|
2016-11-08 18:57:35 +01:00
|
|
|
|
2018-01-08 20:57:51 +01:00
|
|
|
# METAL1.1 Minimum width of metal1
|
2016-11-08 18:57:35 +01:00
|
|
|
drc["minwidth_metal1"] = 0.065
|
2018-01-08 20:57:51 +01:00
|
|
|
# METAL1.2 Minimum spacing of metal1
|
2016-11-08 18:57:35 +01:00
|
|
|
drc["metal1_to_metal1"] = 0.065
|
2018-01-08 20:57:51 +01:00
|
|
|
# METAL1.3 Minimum enclosure around contact on two opposite sides
|
2016-11-08 18:57:35 +01:00
|
|
|
drc["metal1_enclosure_contact"] = 0
|
2018-01-08 20:57:51 +01:00
|
|
|
# Reserved for asymmetric enclosures
|
2016-11-08 18:57:35 +01:00
|
|
|
drc["metal1_extend_contact"] = 0.035
|
2018-01-08 20:57:51 +01:00
|
|
|
# METAL1.4 inimum enclosure around via1 on two opposite sides
|
2016-11-08 18:57:35 +01:00
|
|
|
drc["metal1_extend_via1"] = 0.035
|
2018-01-08 20:57:51 +01:00
|
|
|
# Reserved for asymmetric enclosures
|
2016-11-08 18:57:35 +01:00
|
|
|
drc["metal1_enclosure_via1"] = 0
|
2018-01-08 20:57:51 +01:00
|
|
|
# Not a rule
|
2016-11-08 18:57:35 +01:00
|
|
|
drc["minarea_metal1"] = 0
|
|
|
|
|
|
2018-01-08 20:57:51 +01:00
|
|
|
# VIA1.1 Minimum width of via1
|
2016-11-08 18:57:35 +01:00
|
|
|
drc["minwidth_via1"] = 0.065
|
2018-01-08 20:57:51 +01:00
|
|
|
# VIA1.2 Minimum spacing of via1
|
2016-11-08 18:57:35 +01:00
|
|
|
drc["via1_to_via1"] = 0.075
|
|
|
|
|
|
2018-01-08 20:57:51 +01:00
|
|
|
# METALINT.1 Minimum width of intermediate metal
|
2016-11-08 18:57:35 +01:00
|
|
|
drc["minwidth_metal2"] = 0.07
|
2018-01-08 20:57:51 +01:00
|
|
|
# METALINT.2 Minimum spacing of intermediate metal
|
2016-11-08 18:57:35 +01:00
|
|
|
drc["metal2_to_metal2"] = 0.07
|
2018-01-08 20:57:51 +01:00
|
|
|
# METALINT.3 Minimum enclosure around via1 on two opposite sides
|
2016-11-08 18:57:35 +01:00
|
|
|
drc["metal2_extend_via1"] = 0.035
|
2018-01-08 20:57:51 +01:00
|
|
|
# Reserved for asymmetric enclosures
|
2016-11-08 18:57:35 +01:00
|
|
|
drc["metal2_enclosure_via1"] = 0
|
2018-01-08 20:57:51 +01:00
|
|
|
# METALINT.4 Minimum enclosure around via[2-3] on two opposite sides
|
2016-11-08 18:57:35 +01:00
|
|
|
drc["metal2_extend_via2"] = 0.035
|
2018-01-08 20:57:51 +01:00
|
|
|
# Reserved for asymmetric enclosures
|
2016-11-08 18:57:35 +01:00
|
|
|
drc["metal2_enclosure_via2"] = 0
|
2018-01-08 20:57:51 +01:00
|
|
|
# Not a rule
|
2016-11-08 18:57:35 +01:00
|
|
|
drc["minarea_metal2"] = 0
|
|
|
|
|
|
2018-01-08 20:57:51 +01:00
|
|
|
# VIA2-3.1 Minimum width of Via[2-3]
|
2016-11-08 18:57:35 +01:00
|
|
|
drc["minwidth_via2"] = 0.065
|
2018-01-08 20:57:51 +01:00
|
|
|
# VIA2-3.2 Minimum spacing of Via[2-3]
|
2016-11-08 18:57:35 +01:00
|
|
|
drc["via2_to_via2"] = 0.075
|
|
|
|
|
|
2018-01-08 20:57:51 +01:00
|
|
|
# METALINT.1 Minimum width of intermediate metal
|
2016-11-08 18:57:35 +01:00
|
|
|
drc["minwidth_metal3"] = 0.07
|
2018-01-08 20:57:51 +01:00
|
|
|
# METALINT.2 Minimum spacing of intermediate metal
|
2018-10-12 18:44:36 +02:00
|
|
|
#drc["metal3_to_metal3"] = 0.07
|
|
|
|
|
# Minimum spacing of metal3 wider than 0.09 & longer than 0.3 = 0.09
|
|
|
|
|
# Minimum spacing of metal3 wider than 0.27 & longer than 0.9 = 0.27
|
|
|
|
|
# Minimum spacing of metal3 wider than 0.5 & longer than 1.8 = 0.5
|
|
|
|
|
# Minimum spacing of metal3 wider than 0.9 & longer than 2.7 = 0.9
|
|
|
|
|
# Minimum spacing of metal3 wider than 1.5 & longer than 4.0 = 1.5
|
|
|
|
|
drc["metal3_to_metal3"] = drc_lut({(0.00, 0.0) : 0.07,
|
|
|
|
|
(0.09, 0.3) : 0.09,
|
|
|
|
|
(0.27, 0.9) : 0.27,
|
|
|
|
|
(0.50, 1.8) : 0.5,
|
|
|
|
|
(0.90, 2.7) : 0.9,
|
|
|
|
|
(1.50, 4.0) : 1.5})
|
2018-01-08 20:57:51 +01:00
|
|
|
# METALINT.3 Minimum enclosure around via1 on two opposite sides
|
2016-11-08 18:57:35 +01:00
|
|
|
drc["metal3_extend_via2"] = 0.035
|
2018-01-08 20:57:51 +01:00
|
|
|
# Reserved for asymmetric enclosures
|
|
|
|
|
drc["metal3_enclosure_via2"] = 0
|
|
|
|
|
# METALINT.4 Minimum enclosure around via[2-3] on two opposite sides
|
2016-11-08 18:57:35 +01:00
|
|
|
drc["metal3_extend_via3"]=0.035
|
2018-01-08 20:57:51 +01:00
|
|
|
# Reserved for asymmetric enclosures
|
|
|
|
|
drc["metal3_enclosure_via3"] = 0
|
|
|
|
|
# Not a rule
|
2016-11-08 18:57:35 +01:00
|
|
|
drc["minarea_metal3"] = 0
|
|
|
|
|
|
2018-01-08 20:57:51 +01:00
|
|
|
# VIA2-3.1 Minimum width of Via[2-3]
|
2018-10-11 18:56:15 +02:00
|
|
|
drc["minwidth_via3"] = 0.07
|
2018-01-08 20:57:51 +01:00
|
|
|
# VIA2-3.2 Minimum spacing of Via[2-3]
|
2018-10-11 18:56:15 +02:00
|
|
|
drc["via3_to_via3"] = 0.085
|
2016-11-08 18:57:35 +01:00
|
|
|
|
2018-01-08 20:57:51 +01:00
|
|
|
# METALSMG.1 Minimum width of semi-global metal
|
2016-11-08 18:57:35 +01:00
|
|
|
drc["minwidth_metal4"] = 0.14
|
2018-01-08 20:57:51 +01:00
|
|
|
# METALSMG.2 Minimum spacing of semi-global metal
|
2018-10-12 18:44:36 +02:00
|
|
|
#drc["metal4_to_metal4"] = 0.14
|
|
|
|
|
# Minimum spacing of metal4 wider than 0.27 & longer than 0.9 = 0.27
|
|
|
|
|
# Minimum spacing of metal4 wider than 0.5 & longer than 1.8 = 0.5
|
|
|
|
|
# Minimum spacing of metal4 wider than 0.9 & longer than 2.7 = 0.9
|
|
|
|
|
# Minimum spacing of metal4 wider than 1.5 & longer than 4.0 = 1.5
|
|
|
|
|
drc["metal4_to_metal4"] = drc_lut({(0.00, 0.0) : 0.14,
|
|
|
|
|
(0.27, 0.9) : 0.27,
|
|
|
|
|
(0.50, 1.8) : 0.5,
|
|
|
|
|
(0.90, 2.7) : 0.9,
|
|
|
|
|
(1.50, 4.0) : 1.5})
|
2018-01-08 20:57:51 +01:00
|
|
|
# METALSMG.3 Minimum enclosure around via[3-6] on two opposite sides
|
2018-10-11 18:56:15 +02:00
|
|
|
drc["metal4_extend_via3"] = 0.0025
|
2018-01-08 20:57:51 +01:00
|
|
|
# Reserved for asymmetric enclosure
|
2018-10-11 18:56:15 +02:00
|
|
|
drc["metal4_enclosure_via3"] = 0.0025
|
2018-10-11 00:33:16 +02:00
|
|
|
# Not a rule
|
|
|
|
|
drc["minarea_metal4"] = 0
|
2016-11-08 18:57:35 +01:00
|
|
|
|
2018-01-08 20:57:51 +01:00
|
|
|
# Metal 5-10 are ommitted
|
2016-11-08 18:57:35 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-11-14 23:59:14 +01:00
|
|
|
###################################################
|
|
|
|
|
##END DRC/LVS Rules
|
|
|
|
|
###################################################
|
2016-11-08 18:57:35 +01:00
|
|
|
|
2017-11-14 23:59:14 +01:00
|
|
|
###################################################
|
|
|
|
|
##Spice Simulation Parameters
|
|
|
|
|
###################################################
|
2016-11-08 18:57:35 +01:00
|
|
|
|
|
|
|
|
#spice info
|
|
|
|
|
spice = {}
|
|
|
|
|
spice["nmos"] = "nmos_vtg"
|
|
|
|
|
spice["pmos"] = "pmos_vtg"
|
2018-02-10 00:33:03 +01:00
|
|
|
# This is a map of corners to model files
|
2016-11-09 22:29:33 +01:00
|
|
|
SPICE_MODEL_DIR=os.environ.get("SPICE_MODEL_DIR")
|
2018-02-12 18:33:23 +01:00
|
|
|
spice["fet_models"] = { "TT" : [SPICE_MODEL_DIR+"/models_nom/PMOS_VTG.inc",SPICE_MODEL_DIR+"/models_nom/NMOS_VTG.inc"],
|
|
|
|
|
"FF" : [SPICE_MODEL_DIR+"/models_ff/PMOS_VTG.inc",SPICE_MODEL_DIR+"/models_ff/NMOS_VTG.inc"],
|
|
|
|
|
"SF" : [SPICE_MODEL_DIR+"/models_ss/PMOS_VTG.inc",SPICE_MODEL_DIR+"/models_ff/NMOS_VTG.inc"],
|
|
|
|
|
"FS" : [SPICE_MODEL_DIR+"/models_ff/PMOS_VTG.inc",SPICE_MODEL_DIR+"/models_ss/NMOS_VTG.inc"],
|
2019-01-23 01:40:46 +01:00
|
|
|
"SS" : [SPICE_MODEL_DIR+"/models_ss/PMOS_VTG.inc",SPICE_MODEL_DIR+"/models_ss/NMOS_VTG.inc"],
|
|
|
|
|
"ST" : [SPICE_MODEL_DIR+"/models_ss/PMOS_VTG.inc",SPICE_MODEL_DIR+"/models_nom/NMOS_VTG.inc"],
|
|
|
|
|
"TS" : [SPICE_MODEL_DIR+"/models_nom/PMOS_VTG.inc",SPICE_MODEL_DIR+"/models_ss/NMOS_VTG.inc"],
|
|
|
|
|
"FT" : [SPICE_MODEL_DIR+"/models_ff/PMOS_VTG.inc",SPICE_MODEL_DIR+"/models_nom/NMOS_VTG.inc"],
|
|
|
|
|
"TF" : [SPICE_MODEL_DIR+"/models_nom/PMOS_VTG.inc",SPICE_MODEL_DIR+"/models_ff/NMOS_VTG.inc"],
|
|
|
|
|
}
|
2016-11-08 18:57:35 +01:00
|
|
|
|
|
|
|
|
#spice stimulus related variables
|
2018-02-12 18:33:23 +01:00
|
|
|
spice["feasible_period"] = 5 # estimated feasible period in ns
|
|
|
|
|
spice["supply_voltages"] = [0.9, 1.0, 1.1] # Supply voltage corners in [Volts]
|
2018-02-23 21:21:32 +01:00
|
|
|
spice["nom_supply_voltage"] = 1.0 # Nominal supply voltage in [Volts]
|
2018-02-10 00:33:03 +01:00
|
|
|
spice["rise_time"] = 0.005 # rise time in [Nano-seconds]
|
|
|
|
|
spice["fall_time"] = 0.005 # fall time in [Nano-seconds]
|
2018-02-23 21:21:32 +01:00
|
|
|
spice["temperatures"] = [0, 25, 100] # Temperature corners (celcius)
|
|
|
|
|
spice["nom_temperature"] = 25 # Nominal temperature (celcius)
|
|
|
|
|
|
2016-11-08 18:57:35 +01:00
|
|
|
|
|
|
|
|
#sram signal names
|
2018-02-12 18:33:23 +01:00
|
|
|
#FIXME: We don't use these everywhere...
|
2016-11-08 18:57:35 +01:00
|
|
|
spice["vdd_name"] = "vdd"
|
|
|
|
|
spice["gnd_name"] = "gnd"
|
2018-08-13 23:09:49 +02:00
|
|
|
spice["control_signals"] = ["CSB", "WEB"]
|
2016-11-08 18:57:35 +01:00
|
|
|
spice["data_name"] = "DATA"
|
|
|
|
|
spice["addr_name"] = "ADDR"
|
|
|
|
|
spice["minwidth_tx"] = drc["minwidth_tx"]
|
|
|
|
|
spice["channel"] = drc["minlength_channel"]
|
|
|
|
|
spice["clk"] = "clk"
|
|
|
|
|
|
2017-07-06 17:42:25 +02:00
|
|
|
# analytical delay parameters
|
2019-03-04 09:42:18 +01:00
|
|
|
spice["vdd_nominal"] = 1.0 # Typical Threshold voltage in Volts
|
|
|
|
|
spice["temp_nominal"] = 25.0 # Typical Threshold voltage in Volts
|
2018-10-23 21:55:54 +02:00
|
|
|
spice["v_threshold_typical"] = 0.4 # Typical Threshold voltage in Volts
|
2017-07-06 17:42:25 +02:00
|
|
|
spice["wire_unit_r"] = 0.075 # Unit wire resistance in ohms/square
|
|
|
|
|
spice["wire_unit_c"] = 0.64 # Unit wire capacitance ff/um^2
|
|
|
|
|
spice["min_tx_r"] = 9250.0 # Minimum transistor on resistance in ohms
|
|
|
|
|
spice["min_tx_drain_c"] = 0.7 # Minimum transistor drain capacitance in ff
|
|
|
|
|
spice["min_tx_gate_c"] = 0.2 # Minimum transistor gate capacitance in ff
|
|
|
|
|
spice["msflop_setup"] = 9 # DFF setup time in ps
|
|
|
|
|
spice["msflop_hold"] = 1 # DFF hold time in ps
|
|
|
|
|
spice["msflop_delay"] = 20.5 # DFF Clk-to-q delay in ps
|
|
|
|
|
spice["msflop_slew"] = 13.1 # DFF output slew in ps w/ no load
|
2018-02-10 00:33:03 +01:00
|
|
|
spice["msflop_in_cap"] = 0.2091 # Input capacitance of ms_flop (Din) [Femto-farad]
|
2018-02-15 00:16:28 +01:00
|
|
|
spice["dff_setup"] = 9 # DFF setup time in ps
|
|
|
|
|
spice["dff_hold"] = 1 # DFF hold time in ps
|
|
|
|
|
spice["dff_delay"] = 20.5 # DFF Clk-to-q delay in ps
|
|
|
|
|
spice["dff_slew"] = 13.1 # DFF output slew in ps w/ no load
|
|
|
|
|
spice["dff_in_cap"] = 0.2091 # Input capacitance of ms_flop (Din) [Femto-farad]
|
2017-11-14 23:59:14 +01:00
|
|
|
|
2018-02-27 01:32:28 +01:00
|
|
|
# analytical power parameters, many values are temporary
|
|
|
|
|
spice["bitcell_leakage"] = 1 # Leakage power of a single bitcell in nW
|
|
|
|
|
spice["inv_leakage"] = 1 # Leakage power of inverter in nW
|
|
|
|
|
spice["nand2_leakage"] = 1 # Leakage power of 2-input nand in nW
|
|
|
|
|
spice["nand3_leakage"] = 1 # Leakage power of 3-input nand in nW
|
|
|
|
|
spice["nor2_leakage"] = 1 # Leakage power of 2-input nor in nW
|
|
|
|
|
spice["msflop_leakage"] = 1 # Leakage power of flop in nW
|
|
|
|
|
spice["flop_para_cap"] = 2 # Parasitic Output capacitance in fF
|
|
|
|
|
|
|
|
|
|
spice["default_event_rate"] = 100 # Default event activity of every gate. MHz
|
2018-09-10 23:27:26 +02:00
|
|
|
spice["flop_transition_prob"] = .5 # Transition probability of inverter.
|
|
|
|
|
spice["inv_transition_prob"] = .5 # Transition probability of inverter.
|
|
|
|
|
spice["nand2_transition_prob"] = .1875 # Transition probability of 2-input nand.
|
|
|
|
|
spice["nand3_transition_prob"] = .1094 # Transition probability of 3-input nand.
|
|
|
|
|
spice["nor2_transition_prob"] = .1875 # Transition probability of 2-input nor.
|
2017-11-14 23:59:14 +01:00
|
|
|
|
2018-12-13 08:59:32 +01:00
|
|
|
#Parameters related to sense amp enable timing and delay chain/RBL sizing
|
2019-04-04 01:19:49 +02:00
|
|
|
parameter['le_tau'] = 2.25 #In pico-seconds.
|
|
|
|
|
parameter['cap_relative_per_ff'] = 7.5 #Units of Relative Capacitance/ Femto-Farad
|
2018-12-15 03:02:19 +01:00
|
|
|
parameter["static_delay_stages"] = 4
|
|
|
|
|
parameter["static_fanout_per_stage"] = 3
|
2019-02-14 07:24:58 +01:00
|
|
|
parameter["static_fanout_list"] = parameter["static_delay_stages"]*[parameter["static_fanout_per_stage"]]
|
2018-11-09 05:47:34 +01:00
|
|
|
parameter["dff_clk_cin"] = 30.6 #relative capacitance
|
|
|
|
|
parameter["6tcell_wl_cin"] = 3 #relative capacitance
|
2018-12-18 08:32:02 +01:00
|
|
|
parameter["min_inv_para_delay"] = 2.4 #Tau delay units
|
2018-11-09 05:47:34 +01:00
|
|
|
parameter["sa_en_pmos_size"] = .72 #micro-meters
|
|
|
|
|
parameter["sa_en_nmos_size"] = .27 #micro-meters
|
2019-04-02 10:09:31 +02:00
|
|
|
parameter["sa_inv_pmos_size"] = .54 #micro-meters
|
|
|
|
|
parameter["sa_inv_nmos_size"] = .27 #micro-meters
|
2018-12-13 08:59:32 +01:00
|
|
|
parameter["rbl_height_percentage"] = .5 #Height of RBL compared to bitcell array
|
2019-04-09 10:56:32 +02:00
|
|
|
parameter['bitcell_drain_cap'] = 0.1 #In Femto-Farad, approximation of drain capacitance
|
2018-12-15 03:02:19 +01:00
|
|
|
|
2017-11-14 23:59:14 +01:00
|
|
|
###################################################
|
|
|
|
|
##END Spice Simulation Parameters
|
|
|
|
|
###################################################
|
|
|
|
|
|