Ejemplo n.º 1
0
stack.add_metal_layer(MetalLayer('PO1', 1.5 * kA, 10 * Ohm_sq, UP), 0)
stack.add_metal_layer(MetalLayer('ME1', 2.0 * kA, 120 * mOhm_sq, DOWN), 2)
stack.add_metal_layer(MetalLayer('ME2', 3.0 * kA, 100 * mOhm_sq, DOWN), 4)
stack.add_metal_layer(MetalLayer('ME3', 3.0 * kA, 100 * mOhm_sq, DOWN), 6)
stack.add_metal_layer(MetalLayer('ME4', 3.0 * kA, 100 * mOhm_sq, DOWN), 8)
stack.add_metal_layer(MetalLayer('ME5', 3.0 * kA, 100 * mOhm_sq, DOWN), 10)
if thick_top_metal:
    stack.add_metal_layer(MetalLayer('ME6', 20*kA, 10 * mOhm_sq, DOWN), 12)
else:
    stack.add_metal_layer(MetalLayer('ME6', 7.0*kA, 30 * mOhm_sq, DOWN), 12)

# Add vias
# Via arguments: name, resistance, width or height (vias are assumed square),
#   spacing (defaults to 0)
# LayerStack.add_via arguments: via, bottom metal name, top metal name
stack.add_via(Via('CONT', 10 * Ohm, 0.15 * um, 0.20 * um), 'PO1', 'ME1')
stack.add_via(Via('VI1', 2 * Ohm, 0.20 * um, 0.20 * um), 'ME1', 'ME2')
stack.add_via(Via('VI2', 2 * Ohm, 0.20 * um, 0.20 * um), 'ME2', 'ME3')
stack.add_via(Via('VI3', 2 * Ohm, 0.20 * um, 0.20 * um), 'ME3', 'ME4')
stack.add_via(Via('VI4', 2 * Ohm, 0.20 * um, 0.20 * um), 'ME4', 'ME5')
stack.add_via(Via('VI5', 0.5 * Ohm, 0.50 * um, 0.60 * um), 'ME5', 'ME6')
# NOTE: when specifying spacing, the via layer's resistivity is calculated 
#   based on the effective via area. This allows to draw a single rectangle
#   instead of a large number of separate vias, which can significantly
#   decrease simulation times while still providing accurate results.
#   In order to obtain the most accurate model, the size of the single via 
#   rectangle should extend the area of the via array by exactly one half
#   of the spacing in both the x and y directions.


if __name__ == '__main__':
Ejemplo n.º 2
0
stack.add_metal_layer(MetalLayer('PO1', 1.5 * kA, 10 * Ohm_sq, UP), 0)
stack.add_metal_layer(MetalLayer('ME1', 2.0 * kA, 120 * mOhm_sq, DOWN), 2)
stack.add_metal_layer(MetalLayer('ME2', 3.0 * kA, 100 * mOhm_sq, DOWN), 4)
stack.add_metal_layer(MetalLayer('ME3', 3.0 * kA, 100 * mOhm_sq, DOWN), 6)
stack.add_metal_layer(MetalLayer('ME4', 3.0 * kA, 100 * mOhm_sq, DOWN), 8)
stack.add_metal_layer(MetalLayer('ME5', 3.0 * kA, 100 * mOhm_sq, DOWN), 10)
if thick_top_metal:
    stack.add_metal_layer(MetalLayer('ME6', 20 * kA, 10 * mOhm_sq, DOWN), 12)
else:
    stack.add_metal_layer(MetalLayer('ME6', 7.0 * kA, 30 * mOhm_sq, DOWN), 12)

# Add vias
# Via arguments: name, resistance, width or height (vias are assumed square),
#   spacing (defaults to 0)
# LayerStack.add_via arguments: via, bottom metal name, top metal name
stack.add_via(Via('CONT', 10 * Ohm, 0.15 * um, 0.20 * um), 'PO1', 'ME1')
stack.add_via(Via('VI1', 2 * Ohm, 0.20 * um, 0.20 * um), 'ME1', 'ME2')
stack.add_via(Via('VI2', 2 * Ohm, 0.20 * um, 0.20 * um), 'ME2', 'ME3')
stack.add_via(Via('VI3', 2 * Ohm, 0.20 * um, 0.20 * um), 'ME3', 'ME4')
stack.add_via(Via('VI4', 2 * Ohm, 0.20 * um, 0.20 * um), 'ME4', 'ME5')
stack.add_via(Via('VI5', 0.5 * Ohm, 0.50 * um, 0.60 * um), 'ME5', 'ME6')
# NOTE: when specifying spacing, the via layer's resistivity is calculated
#   based on the effective via area. This allows to draw a single rectangle
#   instead of a large number of separate vias, which can significantly
#   decrease simulation times while still providing accurate results.
#   In order to obtain the most accurate model, the size of the single via
#   rectangle should extend the area of the via array by exactly one half
#   of the spacing in both the x and y directions.

if __name__ == '__main__':
    # Print the full layer stack to example.pdf.