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
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))
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))
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))
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
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
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
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
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
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
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
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))
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))
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)
def create_ports(self, ports): ports += spira.Term(name='P1', midpoint=(10, 0), width=self.height, orientation=180) return ports