Esempio n. 1
0
 def add_orientation_text(self):
     """
     Create Orientation Label
     """
     tblock = Cell('WAF_ORI_TEXT')
     for l in self.cell_layers:
         for (t, pt) in self.o_text.iteritems():
             txt=Label(t, 1000, layer=l)
             bbox=txt.bounding_box
             width=np.array([1,0]) * (bbox[1,0]-bbox[0,0])
             offset=width * (-1 if pt[0]<0 else 0)
             txt.translate(np.array(pt) + offset)
             tblock.add(txt)
     self.add(tblock)
Esempio n. 2
0
 def add_label(self, label):
     """
     Create a label
     """
     if self._label is None:
         self._label=Cell(self.name+'_LBL')
         self.add(self._label)
     else:
         self._label.elements=[]
     
     for l in self._cell_layers():
         txt=Label(label, 1000, layer=l)
         bbox=txt.bounding_box
         offset=np.array([0,2]) * self.block_size - bbox[0] + 200
         txt.translate(offset)        
         self._label.add(txt)
Esempio n. 3
0
    def __init__(self, name, cells, size, edge_gap=0, prefix=''):

        Cell.__init__(self, name)
        size=np.asarray(size)
        cell_layers=set()
        for c in cells:
            cell_layers |= set(c.get_layers())
        cell_layers=list(cell_layers)
        d_layers=cell_layers

        #Create alignment marks
        styles=['A' if i%2 else 'C' for i in range(len(d_layers))]            
        am = AlignmentMarks(styles, d_layers)
        ver = Verniers(styles, d_layers)
        for e in ver.elements:
            e.translate((310,-150))
            am.add(e)
        am_bbox=am.bounding_box
        am_size=np.array([am_bbox[1,0]-am_bbox[0,0], am_bbox[1,1]-am_bbox[0,1]])

        sp=size - am_size - edge_gap
        self.add(CellArray(am, 2, 1, sp, -am_bbox[0]+0.5*edge_gap))
        
        #Create text
        for l in d_layers:
            text=Label(prefix+cells[0].name, 150, (am_size[0]+edge_gap, +edge_gap), layer=l)
            self.add(text)        
        bbox=text.bounding_box
        t_width = bbox[1,0]-bbox[0,0]

                
        #Pattern reference cells                
        spacings, corners, widths=[],[],[]        
        for c in cells:
            bbox=c.bounding_box
            corners.append(bbox[0])
            bbox = np.array([bbox[1][0]-bbox[0][0], bbox[1][1]-bbox[0][1]])          
            spacings.append(bbox*1.5)
            widths.append((bbox*1.5)[0])
        
        self.N=0
        
        origin = edge_gap * np.array([1,1])        

        n_cols=_divide_cols(size[0]-2*edge_gap, widths)

        for (c, w, n, s, cr) in zip(cells, widths, n_cols, spacings, corners):
            if ((origin[0]-cr[0])<(am_size[0]+t_width)) or ((origin[0]+n*s[0]) > (size[0]-am_size[0])):
                origin[1]=am_size[1]+edge_gap
                height=size[1]-2*edge_gap-am_size[1]
            else:             
                origin[1]=edge_gap
                height=size[1]-2*edge_gap
            
            rows=np.floor(height/s[1])       
            ar=CellArray(c, n, rows, s, origin-cr)
            self.add(ar)
            self.N+=rows*n
            origin += s[0] * n *np.array([1,0])
Esempio n. 4
0
    def __init__(self, name, cell, size,
                 spacing=None, edge_gap=0, prefix=''):

        Cell.__init__(self, name)
        size=np.asarray(size)
        cell_layers=cell.get_layers()
        d_layers=cell_layers

        #Create alignment marks
        styles=['A' if i%2 else 'C' for i in range(len(d_layers))]            
        am = AlignmentMarks(styles, d_layers)
        ver = Verniers(styles, d_layers)
        for e in ver.elements:
            e.translate((310,-150))
            am.add(e)
        am_bbox = am.bounding_box
        am_size = am_bbox[1]-am_bbox[0]

        sp = size - am_size - edge_gap
        self.add(CellArray(am, 2, 1, sp, -am_bbox[0]+0.5*edge_gap))
        
        #Create text
        for l in d_layers:
            text=Label(prefix+cell.name, 150, (am_size[0]+edge_gap, +edge_gap), layer=l)
            bbox=text.bounding_box
            t_width = bbox[1,0]-bbox[0,0]
            self.add(text)        
        
        bbox = cell.bounding_box
        corner=bbox[0]  
        bbox = bbox[1]-bbox[0]          

        #Pattern reference cell                
        if spacing is None:
            spacing= bbox*(1.5)        

        
        self.N=0

        # upper area
        cols=np.floor((size[0]-2*edge_gap + spacing[0])/spacing[0])
        rows=np.floor((size[1]-am_size[1]-2*edge_gap)/spacing[1])       

        origin = np.ceil((am_size[1])/spacing[1])\
                    * spacing * np.array([0,1]) + edge_gap - corner

        ar=CellArray(cell, cols, rows, spacing, origin)
        self.add(ar)
        self.N+=rows*cols

        # lower area
        cols=np.floor((size[0]-2*am_size[0]-t_width-2*edge_gap)/spacing[0])
        rows=np.ceil(am_size[1]/spacing[1])       

        origin = np.ceil((am_size[0]+t_width)/spacing[0])\
                    * spacing * np.array([1,0]) + edge_gap - corner


        ar=CellArray(cell, cols, rows, spacing, origin)
        self.add(ar)
        self.N+=rows*cols