luceda ipkiss教程 49:以pcell的方式定义线路

在ipkiss中,通常以i3.Circuit来设计线路(见教程2),以i3.Pcell的框架也可以来设计线路:
以SplitterTree为例:

在这里插入图片描述
线路仿真结果:
在这里插入图片描述
所有代码如下:

from si_fab import all as pdk
import ipkiss3.all as i3class SplitterTree(i3.PCell):class Layout(i3.LayoutView):def _generate_instances(self, insts):insts += i3.place_and_route(insts={"splitter1": pdk.MMI1x2Optimized1550(),"splitter2": pdk.MMI1x2Optimized1550(),"splitter3": pdk.MMI1x2Optimized1550(),},specs=[i3.Place('splitter1', (0, 0)),i3.Place('splitter2', (100, -30)),i3.Place('splitter3', (100, 30)),])insts = i3.place_and_route(insts=insts,specs=[i3.ConnectBend("splitter1:out1", "splitter2:in1", bend_radius=10),i3.ConnectBend("splitter1:out2", "splitter3:in1", bend_radius=10),])return instsdef _generate_ports(self, ports):ports += i3.expose_ports(instances=self.instances,port_name_map={"splitter1:in1": "in1","splitter2:out1": "out1","splitter2:out2": "out2","splitter3:out1": "out3","splitter3:out2": "out4",})return portsclass Netlist(i3.NetlistFromLayout):passclass CircuitModel(i3.CircuitModelView):def _generate_model(self):return i3.HierarchicalModel.from_netlistview(self.netlist_view)if __name__ == '__main__':SplitterTree().Layout().visualize(annotate=True)import numpy as npfrom matplotlib import pyplot as pltwavelengths = np.linspace(1.5, 1.6, 2001)cm = SplitterTree().CircuitModel()S = cm.get_smatrix(wavelengths=wavelengths)plt.plot(wavelengths, i3.signal_power_dB(S["out1", "in1"]), label="in1 -> out1")plt.plot(wavelengths, i3.signal_power_dB(S["out2", "in1"]), label="in1 -> out2")plt.plot(wavelengths, i3.signal_power_dB(S["out3", "in1"]), label="in1 -> out3")plt.plot(wavelengths, i3.signal_power_dB(S["out4", "in1"]), label="in1 -> out4")plt.plot(wavelengths, i3.signal_power_dB(S["in1", "in1"]), label="in1 -> in1")plt.legend()plt.xlabel("Wavelengths [um]")plt.ylabel("Transmission")plt.show()

以pcell的方式定义线路需要分别定义:Layout、Netlist 以及CircuitModel

Layout给出线路的版图:

    class Layout(i3.LayoutView):def _generate_instances(self, insts):insts += i3.place_and_route(insts={"splitter1": pdk.MMI1x2Optimized1550(),"splitter2": pdk.MMI1x2Optimized1550(),"splitter3": pdk.MMI1x2Optimized1550(),},specs=[i3.Place('splitter1', (0, 0)),i3.Place('splitter2', (100, -30)),i3.Place('splitter3', (100, 30)),])insts = i3.place_and_route(insts=insts,specs=[i3.ConnectBend("splitter1:out1", "splitter2:in1", bend_radius=10),i3.ConnectBend("splitter1:out2", "splitter3:in1", bend_radius=10),])return instsdef _generate_ports(self, ports):ports += i3.expose_ports(instances=self.instances,port_name_map={"splitter1:in1": "in1","splitter2:out1": "out1","splitter2:out2": "out2","splitter3:out1": "out3","splitter3:out2": "out4",})return ports

Netlist 给出线路中的逻辑连接关系:
layout中定义了ports,Netlist可以直接从Layout继承

class Netlist(i3.NetlistFromLayout):pass

CircuitModel 给出线路中的逻辑连接关系:
线路中的每个器件都有了CircuitModel,所有整个线路的CircuitModel可以通过HierarchicalModel来定义

class CircuitModel(i3.CircuitModelView):def _generate_model(self):return i3.HierarchicalModel.from_netlistview(self.netlist_view)

线路仿真:

	import numpy as npfrom matplotlib import pyplot as pltwavelengths = np.linspace(1.5, 1.6, 2001)cm = SplitterTree().CircuitModel()S = cm.get_smatrix(wavelengths=wavelengths)plt.plot(wavelengths, i3.signal_power_dB(S["out1", "in1"]), label="in1 -> out1")plt.plot(wavelengths, i3.signal_power_dB(S["out2", "in1"]), label="in1 -> out2")plt.plot(wavelengths, i3.signal_power_dB(S["out3", "in1"]), label="in1 -> out3")plt.plot(wavelengths, i3.signal_power_dB(S["out4", "in1"]), label="in1 -> out4")plt.plot(wavelengths, i3.signal_power_dB(S["in1", "in1"]), label="in1 -> in1")plt.legend()plt.xlabel("Wavelengths [um]")plt.ylabel("Transmission")plt.show()

线路仿真结果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/224330.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python】按升序排列 Excel 工作表

发现按名称对 Excel 工作表进行排序很麻烦,因此创建了一个代码来使用 Python 的 openpyxl 对它们进行排序。 1. 本次创建的代码概述 在GUI中指定一个Excel文件(使用Tkinter。这是一个标准模块,因此不需要安装)加载Excel文件&…

带你手把手解读firejail沙盒源码(0.9.72版本)(四)fnet()

文章目录 功能概述main.cveth.cnet_create_vethnet_create_macvlannet_create_ipvlannet_move_interface fnet.h代码解释 arp.carp_scanwhile 循环 interface.cnet_bridge_add_interfacenet_if_upnet_get_mtunet_set_mtunet_ifprintnet_get_macnet_if_ipnet_if_macnet_if_ip6 ├…

#mybatis #mapper.xml 分步查询 与 级联查询 一对多案例

分步查询 <!-- 部门 Mapper XML 文件 --><!-- 查询某个部门及其下的所有员工&#xff0c;使用 resultMap 定义嵌套查询 --> <select id"selectDepartmentWithEmployees" resultMap"DepartmentWithEmployeesResultMap">SELECT * FROM de…

HarmonyOS应用开发者高级认证

系列专题 HarmonyOS应用开发者基础认证【闯关习题 满分答案】 HarmonyOS应用开发者基础认证【满分答案】 HarmonyOS云开发基础认证【最新题库 满分答案】 HarmonyOS应用开发者高级认证【最新题库 包过答案】 如有新题目可以私信我添加进来 HarmonyOS应用开发者高级认证 系列专…

ShellCode注入程序

程序功能是利用NtQueueApcThreadEx注入ShellCode到一个进程中&#xff0c;程序运行后会让你选择模式&#xff0c;按1为普通模式&#xff0c;所需的常规API接口都是使用Windows原本正常的API&#xff1b;在有游戏保护的进程中Windows原本正常的API无法使用&#xff0c;这时候需要…

【Stable Diffusion】在windows环境下部署并使用Stable Diffusion Web UI---通过 Conda

本专栏主要记录人工智能的应用方面的内容&#xff0c;包括chatGPT、AI绘图等等&#xff1b; 在当今AI的热潮下&#xff0c;不学习AI&#xff0c;就要被AI淘汰&#xff1b;所以欢迎小伙伴加入本专栏和我一起探索AI的应用&#xff0c;通过AI来帮助自己提升生产力&#xff1b; 订阅…

[SSD 测试 1.2] SerialTek PCIe/NVMe协议分析仪

依公知及经验整理,原创保护,禁止转载。 专栏 《深入理解SSD》 <<<< 返回总目录 <<<< 全文 3800 字 前言 NVMe SSD权威组织UNH IOL官方网站指定的三个测试/分析工具给大家做一个测试技术普及,这些产品和工具出现在UNH IOL组织的Plugfest就会碰到这…

Oracle创建定时任务——-job

授权 说明&#xff1a; grant create job to xxx; grant manage scheduler to xxx; 必须授这两个用户权限 SQL> grant create job to zxin_jzfp;授权成功。SQL> grant manage scheduler to zxin_jzfp;授权成功。SQL> grant update any table to zxin_jzfp;授权成功。…

计算机网络:物理层(三种数据交换方式)

今天又学到一个知识&#xff0c;加油&#xff01; 目录 前言 一、电路交换 二、报文交换 三、分组交换 1、数据报方式 2、虚电路方式 3、比较 总结 前言 为什么要进行数据交换&#xff1f; 一、电路交换 电路交换原理&#xff1a;在数据传输期间&#xff0c;源结点与…

无机物及分析化学3d虚拟实验室软件提高教学效果

VR化学虚拟仿真实验室软件可以解决以下难题&#xff1a; 实验场地限制&#xff1a;传统的化学实验室需要占用大量的物理空间&#xff0c;并且需要严格的安全措施。而VR技术可以提供一个虚拟的实验室环境&#xff0c;不受空间限制&#xff0c;可以同时容纳更多的学生参与实验。 …

分类信息网商业运营版源码系统:适合各类行业分类站点建站 带安装部署教程

随着互联网的快速发展&#xff0c;信息分类网站在各个行业中得到了广泛应用。为了满足不同行业的需求&#xff0c;罗峰给大家分享一款适合各类行业分类站点建站的商业运营版源码系统。该系统旨在提供一套完整的解决方案&#xff0c;帮助用户快速搭建自己的分类信息网站&#xf…

深入分析ClassLocader工作机制

文章目录 一、ClassLoader简介1. 概念2. ClassLoader类结构分析 二、ClassLoader的双亲委派机制三、Class文件的加载流程1. 简介2. 加载字节码到内存3. 验证与解析4. 初始化Class对象 四、常见加载类错误分析1. ClassNotFoundException2. NoClassDefFoundError3. UnsatisfiledL…

jmeter,动态参数之随机数、随机日期

通过函数助手&#xff0c;执行以下配置&#xff1a; 执行后的结果树&#xff1a; 数据库中也成功添加了数据&#xff0c;对应字段是随机值&#xff1a;

『番外篇三』Swift “乱弹”之带索引遍历异步序列(AsyncSequence)

概览 在 Swift 开发中,我们往往在遍历集合元素的同时希望获得元素对应的索引。在本课中,我们将向小伙伴们展示除 enumerated() 方法之外的几种实现思路。在玩转普通集合之后,我们将用“魔法棒”进一步搞定异步序列带索引遍历的实现。 在本篇博主中,您将学到以下内容: 概…

国标级联/流媒体音视频平台EasyCVR设备录像下载异常该如何解决?

视频监控TSINGSEE青犀视频平台EasyCVR能在复杂的网络环境中&#xff0c;将分散的各类视频资源进行统一汇聚、整合、集中管理&#xff0c;在视频监控播放上&#xff0c;视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放&#xff0c;可同时播放多路视频流&#xff0c;也能支…

7. 异常、断言及日志

1.异常 1).什么是异常 异常&#xff0c;就是不正常的意思。指的是程序在执行过程中&#xff0c;出现的非正常的情况&#xff0c;最终会导致JVM的非正常停止。 在Java等面向对象的编程语言中&#xff0c;异常本身是一个类&#xff0c;产生异常就是创建异常对象并抛出了一个异常…

2023年度总结:3个常用代理IP服务商实测对比

转眼到了2023年末&#xff0c;即将踏入2024新年&#xff0c;业务也即将走过年底冲刺暂告一段落。在这一年&#xff0c;为了保证公司项目的稳定运行&#xff0c;我们花费了大量的精力与费用测试在全球范围内的多家代理IP服务商&#xff0c;综合实测各家产品与服务后&#xff0c;…

Android 长按电源键弹出的GlobalActions菜单

长按事件动作的配置 frameworks\base\core\res\res\values\config.xml 选择1会弹出Global actions menu <!-- Control the behavior when the user long presses the power button.0 - Nothing1 - Global actions menu2 - Power off (with confirmation)3 - Power off…

【Flink on k8s】- 15 - 将 flink on yarn 迁移到 flink on k8s

目录 1、集群现状 2、与 Flink on yarn 对比 2.1 Flink on yarn 的一些痛点 2.2 Flink on k8s 的一些优点

uniApp 中实现一个骰子动效

代码如下 <template><!-- 骰子组件 --><view class"dice-wrap" tap"throwDice"><!-- 筛子运动时候的展示的图片 --><image v-if"isDicing" :src"diceAnimationImages[aniIndex]" class"dice-icon&qu…