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,一经查实,立即删除!

相关文章

ShellCode注入程序

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

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

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

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

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

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

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

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

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

深入分析ClassLocader工作机制

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

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

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

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

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

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

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

7. 异常、断言及日志

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

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

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

mybatis-plus雪花算法自动生成ID到前端后精度丢失问题

问题发生 前端接收到后端的数据出现异常,异常如下: 如图这是后端正常返回的数据, 但是点击预览时发现这个id的数据被改变了 这就导致了我通过id去修改相关数据时无法成功 问题原因 id的长度过长(19位),前…

前端(一):HTML+CSS

参考课程:23最新版web前端开发_哔哩哔哩_bilibili 文档:GitHub - codeNiuMa/HTML-md-file: 学习HTML课程时的资料 目录 1 HTML 1.1 骨架 DOCTYPE html标签 head标签 body标签 title标签 meta标签 1.2 标签标题h1 1.3 段落p 1.4 水平线 1.5 图片img 1.6 …

MacOS下载配置OpenCV

主要参考的是OpenCV官方的这篇文章:OpenCV: Installation in MacOS 安装OpenCV需要下载一些安装包:CMake3.9、Git、Python这些我之前已经下载好,这里就不过多阐述了,自行百度安装即可 1.从Git库获取OpenCV: git clon…

[NAND Flash] 3.3 Flash闪存工艺知识深度解析

依公知及经验整理&#xff0c;原创保护&#xff0c;禁止转载。 专栏 《深入理解NAND Flash》 <<<< 返回总目录 <<<< 全文 3800 字。 1. Wafer 1.1 什么是 Wafer Wafer即晶圆&#xff0c;是半导体组件“晶片”或“芯片”的基材&#xff0c;从沙子里面…

Java医院信息化建设云HIS系统源码

云HIS提供标准化、信息化、可共享的医疗信息管理系统&#xff0c;实现医患事务管理和临床诊疗管理等标准医疗管理信息系统的功能。优化就医、管理流程&#xff0c;提升患者满意度、基层首诊率&#xff0c;通过信息共享、辅助诊疗等手段&#xff0c;提高基层医生的服务能力构建和…

喜讯连连捷报传,文章累累创佳绩,平均IF 18分!!!

爱基百客专注于提供领先的表观组学服务&#xff0c;目前已在表观组学、单细胞时空组学和高通量测序等方向积累了大量的项目经验。近期&#xff08;11月23日-12月4日&#xff09;&#xff0c;高分项目文章频出&#xff0c;涉及物种有梨、腰果、蘑菇、青枯雷尔氏菌和心肌细胞&…

系统的安全性设计

要设计一个安全的系统&#xff0c;除了要了解一些前面讲到的常用的保护手段和技术措施外&#xff0c;还要对系统中可能出现的安全问题或存在的安全隐患有充分的认识&#xff0c;这样才能对系统的安全作有针对性的设计和强化&#xff0c;即“知己知彼&#xff0c;百战百胜”。 下…

【Oracle】创建表

目录 方法一&#xff1a;CREATE TABLE 语法 创建表示例1&#xff1a;创建stuinfo(学生信息表) 创建表示例2&#xff1a;添加stuinfo(学生信息表)约束 方法二&#xff1a;CREATE TABLE AS 语法 创建表示例3&#xff1a; 创建表示例4&#xff1a;实现对select查询的结果进行…

什么是数据可视化?数据可视化的优势、方法及示例

前言 在当今的数字时代&#xff0c;数据是企业和组织的命脉&#xff0c;生成的数据量呈指数级增长。这种被称为大数据的海量数据在洞察力和决策方面具有巨大的潜力。然而&#xff0c;如果没有一种有效的方法来分析和理解这些数据&#xff0c;它就会变得毫无意义和难以管理。这就…