Skip to content

Commit

Permalink
addding via3 to mimcap_1
Browse files Browse the repository at this point in the history
  • Loading branch information
RehabSayed-G committed Aug 29, 2022
1 parent 7875ebc commit ffa288c
Showing 1 changed file with 39 additions and 24 deletions.
63 changes: 39 additions & 24 deletions sky130/device_generators/mimcap_1.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,15 @@ def mimcap_1(
via3_size : float = (0.2,0.2),
via3_layer : LayerSpec = (70,44),
via3_enclosure : Float2 = (0.09,0.09),
via3_spacing : Float2 = (0.2,0.35),
m4_spacing : float = 0.3,
m4_length : float = 0.3,
via3_spacing : Float2 = (0.2,0.2),#(0.2,0.35),
m4_spacing : float = 0.4,
m4_r_length : float = 0.4,
m4_layer : LayerSpec = (71,20),
capm_length : float = 1,
capm_width : float = 1,
m4_length : float = 1.2,
m4_width : float = 1.2,
capm_layer : LayerSpec = (89,44),
capm_enclosure : float = 0.14
m4_enclosure : float = (0.14,0.14),
capm_enclosure : float = (0.5,0.5)



Expand All @@ -31,42 +32,56 @@ def mimcap_1(
"""
c = gf.Component()

en = (0.02,0.05) # for enclosure
en = (0.02,0.04) # for enclosure
#generating m3 plate
m3_length = capm_enclosure + capm_length + m4_spacing - capm_enclosure + m4_length + en[0]
m3_width = 2*capm_enclosure + capm_width + en[1]
m3_length = capm_enclosure[0] + 2*m4_enclosure[0] + m4_length + m4_spacing + m4_r_length +en[0]
m3_width = 2*capm_enclosure[1] + 2*m4_enclosure[1] + m4_width + en[1]
rect_m3 = gf.components.rectangle(size= (m3_length,m3_width) , layer= m3_layer)
m3 = c.add_ref(rect_m3)

# generate m4 plates

rect_m4_1 = gf.components.rectangle(size= (m4_length,m3_width- en[1] ), layer= m4_layer)
m4_1 = c.add_ref(rect_m4_1)
m4_1.movex (m3_length - m4_length - en[0]/2)
m4_1.movey (en[1]/2)
rect_m4_r = gf.components.rectangle(size= (m4_r_length,m3_width- en[1] ), layer= m4_layer)
m4_r = c.add_ref(rect_m4_r)
m4_r.movex (m3_length - m4_r_length- en[0]/2)
m4_r.movey (en[1]/2)

rect_m4_2 = gf.components.rectangle(size= (capm_length - 2*capm_enclosure ,capm_width - 2*capm_enclosure ), layer= m4_layer)
m4_1 = c.add_ref(rect_m4_2)
m4_1.connect("e3", destination= m3.ports["e3"])
m4_1.movex(- capm_length + 2*capm_enclosure - en[0]/2 - m4_length - m4_spacing)
rect_m4_l = gf.components.rectangle(size= (m4_length,m4_width), layer= m4_layer)
m4_l = c.add_ref(rect_m4_l)
m4_l.connect("e3", destination= m3.ports["e1"])
m4_l.movex(m4_length + capm_enclosure[0] + m4_enclosure[0] + en[0]/2 )

# generate capm
rect_capm = gf.components.rectangle(size= (capm_length,capm_width) , layer= capm_layer)
rect_capm = gf.components.rectangle(size= (m4_length + 2*m4_enclosure[0] ,m4_width + 2*m4_enclosure[1]) , layer= capm_layer)
capm = c.add_ref(rect_capm)
capm.connect("e3", destination= m4_1.ports["e3"])
capm.movex(capm_length - capm_enclosure)
capm.connect("e3", destination= m4_l.ports["e1"])
capm.movex(m4_length + m4_enclosure[0])


# generat3 via3
#rect_via3 = gf.components.rectangle(size= via3_size, layer= via3_layer)
#via3_arr1 = c.add_ref(rect_via3)

rect_via3 = gf.components.rectangle(size= via3_size, layer= via3_layer)

# for the left m4 plate
nc1 = floor ((m4_length) / (via3_size[0] + via3_spacing[0]))
nr1 = floor ((m4_width) / (via3_size[1] + via3_spacing[1]))
via3_arr1 = c.add_array(rect_via3 , rows= nr1 , columns= nc1 , spacing= (via3_spacing[0]+ via3_size[0], via3_spacing[1]+ via3_size[1]))
via3_arr1.movex (capm_enclosure[0] + m4_enclosure[0] + ((m4_length - nc1*via3_size[0] - (nc1-1)*via3_spacing[0])/2))
via3_arr1.movey(capm_enclosure[1] + m4_enclosure[1] + ((m4_width - nr1*via3_size[1] - (nr1-1)*via3_spacing[1])/2 ))

# for the right m4 plate
nr2 = floor ((m3_width - en[1]) / (via3_size[1]+ via3_spacing[1]))
nc2 = floor ((m4_r_length) / (via3_size[0]+via3_spacing[0]))
via3_arr2 = c.add_array(rect_via3 , rows= nr2 , columns= nc2 , spacing= (via3_spacing[0]+ via3_size[0], via3_spacing[1]+ via3_size[1]))
via3_arr2.movex(m3_length - en[0]/2 - m4_r_length)
via3_arr2.movex((m4_r_length - nc2*via3_size[0] - (nc2-1)*via3_spacing[0])/2)
via3_arr2.movey((m3_width - en[1]/2 - nr2*via3_size[1] - (nr2 - 1)*via3_spacing[1])/2 )



return c

if __name__ == "__main__":

c = mimcap_1()
#c = mimcap_1 (capm_length= 5 , capm_width= 3, m4_length=1)
#c = mimcap_1 (m4_length=1.8, m4_width=1.8 , m4_r_length=0.5)
c.show()

0 comments on commit ffa288c

Please sign in to comment.