Beispiel #1
0
    def create_ports(self, ports):

        angle_diff = self.port1.orientation - self.port2.orientation
        if self.port1.orientation == self.port2.orientation:
            ports += spira.Term(name='T1',
                                width=self.port1.width,
                                orientation=0)
            ports += spira.Term(name='T2',
                                midpoint=list(np.subtract(self.p2, self.p1)),
                                width=self.port2.width,
                                orientation=0)
        elif np.round(np.abs(np.mod(angle_diff, 360)), 3) != 180:
            raise ValueError(
                "2. [DEVICE] route() error: Ports do not " +
                "face each other (orientations must be 180 apart)")
        else:
            ports += spira.Term(name='T1',
                                width=self.port1.width,
                                orientation=0)
            ports += spira.Term(name='T2',
                                midpoint=list(np.subtract(self.p2, self.p1)),
                                width=self.port2.width,
                                orientation=180)

        return ports
Beispiel #2
0
 def test_q1_parallel(self):
     # p1 = spira.Term(name='P1', midpoint=(0,0), orientation=0, width=2)
     # p2 = spira.Term(name='P2', midpoint=(50,50), orientation=0, width=2)
     p1 = spira.Term(name='P1', midpoint=(0, 0), orientation=180, width=2)
     p2 = spira.Term(name='P2', midpoint=(50, 50), orientation=180, width=2)
     rm = RouteManhattan(port1=p1, port2=p2, radius=8)
     return spira.SRef(rm, midpoint=(150, 0))
Beispiel #3
0
 def test_q3_90(self):
     p1 = spira.Term(name='P1', midpoint=(0, 0), orientation=180, width=2)
     p2 = spira.Term(name='P2',
                     midpoint=(-40, -20),
                     orientation=-90,
                     width=2)
     rm = RouteManhattan(port1=p1, port2=p2, radius=8)
     return spira.SRef(rm, midpoint=(-50, -50))
Beispiel #4
0
 def test_q1_180(self):
     p1 = spira.Term(name='P1', midpoint=(0, 0), orientation=0, width=2)
     p2 = spira.Term(name='P2',
                     midpoint=(40, 20),
                     orientation=180,
                     width=1.5)
     rm = RouteManhattan(port1=p1, port2=p2, radius=8)
     return spira.SRef(rm, midpoint=(0, 50))
Beispiel #5
0
    def create_ports(self, ports):

        p1 = [self.port1.midpoint[0], self.port1.midpoint[1]]
        p2 = [self.port2.midpoint[0], self.port2.midpoint[1]]

        ports += spira.Term(name='T1',
                            width=self.port1.width,
                            orientation=self.port1.orientation)
        ports += spira.Term(name='T2',
                            midpoint=list(np.subtract(p2, p1)),
                            width=self.port2.width,
                            orientation=self.port2.orientation)

        return ports
Beispiel #6
0
 def create_port2(self):
     term = spira.Term(name='TERM2',
                       midpoint=[self.route.x_dist, self.route.y_dist],
                       width=self.route.width2,
                       length=0.2,
                       orientation=0,
                       gdslayer=self.llayer)
     term.rotate(angle=-90)
     return term
Beispiel #7
0
 def create_port1(self):
     term = spira.Term(name='TERM1',
                       midpoint=(0, 0),
                       width=self.route.width1,
                       length=0.2,
                       orientation=180,
                       gdslayer=self.llayer)
     term.rotate(angle=-90)
     return term
Beispiel #8
0
 def create_port_input(self):
     midpoint = self.radius * np.cos(self.angle1), self.radius * np.sin(
         self.angle1)
     orientation = self.start_angle - 0 + 180 * (self.theta < 0)
     port = spira.Term(name='P1',
                       midpoint=midpoint,
                       width=self.width,
                       length=0.2,
                       orientation=orientation + 180)
     return port
Beispiel #9
0
    def create_ports(self, ports):

        if self.quadrant in ['Q1', 'Q4']:
            ports += spira.Term(name='T1',
                                midpoint=self.jj1.ports['Input'] + [-10, 0],
                                orientation=-90)
            ports += spira.Term(name='T2',
                                midpoint=self.jj2.ports['Output'] + [10, 0],
                                orientation=90)

        if self.quadrant in ['Q2', 'Q3']:
            ports += spira.Term(name='T1',
                                midpoint=self.jj1.ports['Input'] + [10, 0],
                                orientation=-90)
            ports += spira.Term(name='T2',
                                midpoint=self.jj2.ports['Output'] + [-10, 0],
                                orientation=90)

        return ports
Beispiel #10
0
    def _regular_bend(self, prev_port):
        """ Now connect a regular bend for
        the normal curved portion. """
        B = Arc(shape=ArcRoute(radius=self.radius,
                               width=self.width,
                               theta=45 - np.rad2deg(self.angular_coverage),
                               start_angle=self.angular_coverage,
                               angle_resolution=self.angle_resolution,
                               gdslayer=spira.Layer(number=88)))

        b = spira.SRef(B)

        b.connect(port='P1', destination=prev_port)

        p0 = b.ports['P2']

        self.port2 = spira.Term(
            name='P2',
            midpoint=p0.midpoint,
            #             midpoint=scu(p0.midpoint),
            width=p0.width,
            orientation=p0.orientation)

        return b
Beispiel #11
0
 def create_ports(self, ports):
     ports += spira.Term(name='Input', midpoint=(0.25, 3.5), orientation=90, width=2)
     ports += spira.Term(name='Output', midpoint=(3.6, 3.5), orientation=-90)
     return ports
Beispiel #12
0
 def test_p2p1_180_vertical_bot(self):
     p1 = spira.Term(name='P1', midpoint=(0, 0), orientation=-90, width=2)
     p2 = spira.Term(name='P2', midpoint=(0, 40), orientation=-90, width=2)
     rm = RouteManhattan(port1=p1, port2=p2, radius=8)
     return spira.SRef(rm, midpoint=(150, 0))
Beispiel #13
0
 def test_p1p2_180_horizontal(self):
     p1 = spira.Term(name='P1', midpoint=(0, 0), orientation=0, width=2)
     p2 = spira.Term(name='P2', midpoint=(40, 0), orientation=0, width=2)
     rm = RouteManhattan(port1=p1, port2=p2, radius=8)
     return spira.SRef(rm, midpoint=(150, 0))
Beispiel #14
0
        R1 = RouteBasic(route=route, connect_layer=self.player.layer)
        r1 = spira.SRef(R1)
        r1.rotate(angle=self.port2.orientation - 180, center=R1.port1.midpoint)
        r1.move(midpoint=(0, 0), destination=self.port1.midpoint)

        elems += r1

        return elems


if __name__ == '__main__':

    # p1 = spira.Term(name='P1', midpoint=(0,0), orientation=90, width=2)
    # p2 = spira.Term(name='P2', midpoint=(0,30), orientation=-90, width=1)

    p1 = spira.Term(name='P1', midpoint=(0, 0), orientation=0, width=2)
    p2 = spira.Term(name='P2', midpoint=(30, 0), orientation=180, width=2)

    route = RouteShape(port1=p1,
                       port2=p2,
                       path_type='straight',
                       width_type='straight')

    # p1 = spira.Term(name='P1', midpoint=(0,0), orientation=-90, width=1)
    # p2 = spira.Term(name='P2', midpoint=(30,30), orientation=90, width=1)

    # route = RouteShape(port1=p1, port2=p2, path_type='sine', width_type='straight')

    route.points

    D = RouteBasic(route=route)
Beispiel #15
0
 def create_ports(self, ports):
     ports += spira.Term(name='P1',
                         midpoint=(10, 0),
                         width=self.height,
                         orientation=180)
     return ports