luceda ipkiss教程 18:给线路加文本标签

在ipkiss可以用i3.PolygonText来添加文本标签,但是i3.PolygonText返回的是elements,不是insts,那么如何用i3.PolygonText给线路加文本标签呢:

以下图为例:
在这里插入图片描述

所有代码如下:

from si_fab import all as pdk
from ipkiss3 import all as i3

class demo_gc(i3.Circuit):
    bend_radius = i3.PositiveNumberProperty(default=20.0, doc="the bend radius in the circuit")
    gc = i3.ChildCellProperty()
    space_x = i3.PositiveNumberProperty(default=600.0)
    space_y = i3.PositiveNumberProperty(default=127.0)
    y_offset = i3.PositiveNumberProperty(default=1000)
    waveguide_space = i3.PositiveNumberProperty(default=20)
    number = i3.IntProperty(default=4)
    int_xy = i3.NumpyArrayProperty(default=[0, 0])

    def _default_gc(self):
        return pdk.GratingCoupler()

    def _default_insts(self):
        insts = {}
        for m in range(self.number):
            insts["gc_in_{}".format(m)] = self.gc
            insts["gc_out_{}".format(m)] = self.gc
        return insts

    def _default_specs(self):
        specs = []
        for m in range(self.number):
            specs += [
                i3.Place("gc_in_{}:out".format(m), (self.int_xy[0], self.int_xy[1] + self.space_y * m)),
                i3.Place(
                    "gc_out_{}:out".format(m),
                    (self.int_xy[0] + self.space_x, self.int_xy[1] + self.space_y * m - self.y_offset),
                    angle=180,
                ),
            ]
            specs += [
                i3.ConnectManhattan(
                    "gc_in_{}:out".format(m),
                    "gc_out_{}:out".format(m),
                    control_points=[i3.V(i3.END - self.space_x / 2 + self.waveguide_space * m)],
                    bend_radius=self.bend_radius,
                ),
            ]
        return specs

    class Layout(i3.Circuit.Layout):
        def _generate_elements(self, elems):
            # add text label on the chip
            elems += super()._generate_elements(elems)
            elems += i3.PolygonText(
                layer=i3.TECH.PPLAYER.WG.TEXT,
                text="GRATING_COUPLER_TE_1550",
                coordinate=(0, -150.0),
                alignment=(i3.TEXT.ALIGN.LEFT, i3.TEXT.ALIGN.BOTTOM),
                font=i3.TEXT.FONT.STANDARD,
                height=20.0,
            )
            return elems


if __name__ == "__main__":

    demo_gc_c = demo_gc(y_offset=100.0, space_x=500.0).Layout()
    demo_gc_c.visualize()
    demo_gc_c.write_gdsii("gratingcoupler_Cband.gds")

可以看到线路设计还是用的i3.ciucuit的框架(教程2有讲),不同的是最后加入了
class Layout ,并且其继承i3.Circuit.Layout, 之所以可以这样用是因为i3.Circuit这个类本身就包含Layout, Netlist,CircuitModel这些子类,理解了这点,就可以像给器件加文本标签一样给线路加标签:

    class Layout(i3.Circuit.Layout):
        def _generate_elements(self, elems):
            # add text label on the chip
            elems += super()._generate_elements(elems)
            elems += i3.PolygonText(
                layer=i3.TECH.PPLAYER.WG.TEXT,
                text="GRATING_COUPLER_TE_1550",
                coordinate=(0, -150.0),
                alignment=(i3.TEXT.ALIGN.LEFT, i3.TEXT.ALIGN.BOTTOM),
                font=i3.TEXT.FONT.STANDARD,
                height=20.0,
            )
            return elems

需要注意的是text的图层用的si_fab中的图层:

layer=i3.TECH.PPLAYER.WG.TEXT,

如果用的是流片厂pdk设计的线路,这个图层就要换到对应pdk的图层

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值