luceda ipkiss教程 57:画微环调制器

2024-01-25 01:52

本文主要是介绍luceda ipkiss教程 57:画微环调制器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

案例分享:画微环调制器
在这里插入图片描述
全部代码如下:

from si_fab import all as pdk
from ipkiss3 import all as i3class DC(i3.PCell):straight_length = i3.PositiveNumberProperty(default=200)radius = i3.PositiveNumberProperty(default=50)spacing = i3.PositiveNumberProperty(default=1)straight_waveguide = i3.ChildCellProperty()arc_waveguide = i3.ChildCellProperty()trace_template = i3.TraceTemplateProperty(default=pdk.SWG450(), doc="The trace template for waveguide and heater")def _default_straight_waveguide(self):wg = i3.Waveguide(trace_template=self.trace_template)wg.Layout(shape=i3.Shape([(0, 0), (self.straight_length, 0)]))return wgdef _default_arc_waveguide(self):wg = i3.RoundedWaveguide(trace_template=self.trace_template)wg.Layout(shape=i3.ShapeArc(radius=self.radius, start_angle=0, start_face_angle=90, end_angle=180,end_face_angle=270))return wgclass Layout(i3.LayoutView):def _generate_instances(self, insts):insts += i3.place_and_route(insts={"wg1": self.straight_waveguide,"wg2": self.arc_waveguide,},specs=[i3.Place("wg1:in", (-self.straight_length / 2, 0)),])insts = i3.place_and_route(insts=insts,specs=[i3.PlaceRelative("wg2:out", "wg1:in",(self.straight_length / 2 - self.radius, -self.radius - self.spacing))])return instsdef _generate_ports(self, ports):ports += i3.expose_ports(instances=self.instances,port_name_map={"wg1:in": "in1","wg2:in": "out2","wg1:out": "out1","wg2:out": "in2",})return portsclass Netlist(i3.NetlistFromLayout):passclass Ring_modulator(i3.Circuit):_name_prefix = "Ring_modulator"dc = i3.ChildCellProperty()heater = i3.ChildCellProperty()radius = i3.PositiveNumberProperty(default=50)dc_distance = i3.PositiveNumberProperty(default=300)heater_length = i3.PositiveNumberProperty(default=100)trace_template = i3.TraceTemplateProperty(default=pdk.SWG450(), doc="The trace template for waveguide and heater")straight_length = i3.PositiveNumberProperty(default=200)spacing = i3.PositiveNumberProperty(default=0.8)# Set the default value for the heaterdef _default_dc(self):return DC(straight_length=self.straight_length,radius=self.radius,trace_template=self.trace_template,spacing=self.spacing)def _default_heater(self):ht = pdk.HeatedWaveguide(trace_template=self.trace_template)ht.Layout(shape=i3.Shape([(0, 0), (self.heater_length, 0)]))return htdef _default_insts(self):  # element naminginsts = {"heater1": self.heater,"heater2": self.heater,"dc1": self.dc,"dc2": self.dc,}return instsdef _default_specs(self):  # coordinatespecs = [i3.Place("dc1", (0.0, 0.0)),i3.PlaceRelative("dc2", "dc1", (0.0, -self.dc_distance)),i3.FlipV("dc2"),i3.Place("heater1", (-self.radius, -self.dc_distance / 2 - self.heater_length / 2), 90),i3.Place("heater2", (self.radius, -self.dc_distance / 2 - self.heater_length / 2), 90),i3.ConnectManhattan("dc1:in2", "heater1:out"),i3.ConnectManhattan("dc1:out2", "heater2:out"),i3.ConnectManhattan("dc2:in2", "heater1:in"),i3.ConnectManhattan("dc2:out2", "heater2:in"),]return specsdef _default_exposed_ports(self):  # port definitionexposed_ports = {"heater1:elec1": "elec1","heater1:elec2": "elec2","heater2:elec1": "elec3","heater2:elec2": "elec4","dc1:in1": "in1","dc2:in1": "in2","dc1:out1": "out1","dc2:out1": "out2",}return exposed_portsif __name__ == "__main__":Ring_modulator().Layout().visualize(annotate=True,legacy=True)

这篇关于luceda ipkiss教程 57:画微环调制器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/641732

相关文章

springboot简单集成Security配置的教程

《springboot简单集成Security配置的教程》:本文主要介绍springboot简单集成Security配置的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录集成Security安全框架引入依赖编写配置类WebSecurityConfig(自定义资源权限规则

MySQL Workbench 安装教程(保姆级)

《MySQLWorkbench安装教程(保姆级)》MySQLWorkbench是一款强大的数据库设计和管理工具,本文主要介绍了MySQLWorkbench安装教程,文中通过图文介绍的非常详细,对大... 目录前言:详细步骤:一、检查安装的数据库版本二、在官网下载对应的mysql Workbench版本,要是

通过Docker Compose部署MySQL的详细教程

《通过DockerCompose部署MySQL的详细教程》DockerCompose作为Docker官方的容器编排工具,为MySQL数据库部署带来了显著优势,下面小编就来为大家详细介绍一... 目录一、docker Compose 部署 mysql 的优势二、环境准备与基础配置2.1 项目目录结构2.2 基

Linux安装MySQL的教程

《Linux安装MySQL的教程》:本文主要介绍Linux安装MySQL的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux安装mysql1.Mysql官网2.我的存放路径3.解压mysql文件到当前目录4.重命名一下5.创建mysql用户组和用户并修

最新Spring Security实战教程之Spring Security安全框架指南

《最新SpringSecurity实战教程之SpringSecurity安全框架指南》SpringSecurity是Spring生态系统中的核心组件,提供认证、授权和防护机制,以保护应用免受各种安... 目录前言什么是Spring Security?同类框架对比Spring Security典型应用场景传统

最新Spring Security实战教程之表单登录定制到处理逻辑的深度改造(最新推荐)

《最新SpringSecurity实战教程之表单登录定制到处理逻辑的深度改造(最新推荐)》本章节介绍了如何通过SpringSecurity实现从配置自定义登录页面、表单登录处理逻辑的配置,并简单模拟... 目录前言改造准备开始登录页改造自定义用户名密码登陆成功失败跳转问题自定义登出前后端分离适配方案结语前言

Centos环境下Tomcat虚拟主机配置详细教程

《Centos环境下Tomcat虚拟主机配置详细教程》这篇文章主要讲的是在CentOS系统上,如何一步步配置Tomcat的虚拟主机,内容很简单,从目录准备到配置文件修改,再到重启和测试,手把手带你搞定... 目录1. 准备虚拟主机的目录和内容创建目录添加测试文件2. 修改 Tomcat 的 server.X

Python中的输入输出与注释教程

《Python中的输入输出与注释教程》:本文主要介绍Python中的输入输出与注释教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、print 输出功能1. 基础用法2. 多参数输出3. 格式化输出4. 换行控制二、input 输入功能1. 基础用法2. 类

Java导入、导出excel用法步骤保姆级教程(附封装好的工具类)

《Java导入、导出excel用法步骤保姆级教程(附封装好的工具类)》:本文主要介绍Java导入、导出excel的相关资料,讲解了使用Java和ApachePOI库将数据导出为Excel文件,包括... 目录前言一、引入Apache POI依赖二、用法&步骤2.1 创建Excel的元素2.3 样式和字体2.

Spring Boot拦截器Interceptor与过滤器Filter详细教程(示例详解)

《SpringBoot拦截器Interceptor与过滤器Filter详细教程(示例详解)》本文详细介绍了SpringBoot中的拦截器(Interceptor)和过滤器(Filter),包括它们的... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)详细教程1. 概述1