# 复旦2023光学荣誉课-光刻 **Repository Path**: bud-primordium/lithography ## Basic Information - **Project Name**: 复旦2023光学荣誉课-光刻 - **Description**: 2023复旦大学物理学系石老师光学荣誉课——光刻project,分为正问题与逆问题,集成为python小程序 - **Primary Language**: Python - **License**: GPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 7 - **Forks**: 0 - **Created**: 2024-01-11 - **Last Updated**: 2024-02-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: GUI, OTF, Python ## README # 复旦2023光学荣誉课-光刻 ## 介绍 2023复旦大学物理学系石老师光学荣誉课——光刻project,分为正问题与逆问题两部分,通过Python小程序进行集成,旨在辅助计算光刻相关基础知识的教学。 ## 软件架构 1. `main.py`:主程序,利用Tkinter创建GUI可视化操作界面,包含四个区域:“装置示意图区”、“掩膜版展示区”、“计算结果区”与“控制区” - 装置示意图区:显示本程序模拟的光学系统 - 掩膜版展示区:显示当前使用的掩膜版(mask),启用OPC后会改变 - 计算结果区:根据指定的输出模式,显示像平面上的光强分布/边界识别 - 控制区:用户可以调节模拟参数与输出模式 2. `mask.npy`:包含10个100*100的numpy数组,前五个为F/U/D/A/N正常二值化掩膜版(mask),后五个为基于OPC修正的mask 3. `device.py`:自定义模块,用于绘制“装置示意图区” 4. `mask.py`:自定义模块,用于绘制“掩膜版展示区” 5. `result.py`:自定义模块,用于绘制“计算结果区” 6. `help.py`:自定义模块,用于绘制帮助窗口,辅助渲染本文档并嵌入主程序 7. `README.(en.)md`:本帮助文档 ## 安装教程 已提供Windows平台下的.exe发行版,注意`main.py`中绑定了WM_DELETE_WINDOW事件,并使用了`screeninfo`库获取显示器真实大小,其他平台请根据源码自行适配修改。 ## 使用说明 本程序模拟主体为低通滤波的4F系统。控制区可调节“sinθ”、“n”、“λ”,表征光阑大小、浸没介质折射能力与光波波长,前两者共同决定数值孔径N.A. 按钮功能: - “相干/非相干”:控制相干与非相干光源 - “是否启用OPC”:启用/取消OPC修正 - “展示光强/边界”:切换结果展示,显示光强分布或边界识别图 注意事项: 1. 启用OPC后,滑条将被锁定为指定值,取消启用OPC(再次点击)后可解锁 2. 当按钮显示“光强”时,“计算结果区”展示像平面上的光强分布,反之则为边界识别图 3. 波长过长时,可能出现紫色区域及边界识别不准确,建议减小波长。 ## 邻近效应纠正(OPC)简介 邻近效应修正(OPC)是一种解决光刻技术中图案偏移和形状畸变问题的技术。它通过对光刻掩模进行局部修正,校正光学限制导致的图案形状和尺寸的变化,以提高芯片制造的精度和可靠性。 ### 背景 随着集成电路设计的不断发展,芯片的特征尺寸越来越小,而光刻技术所能达到的分辨率却受到光学物理学的限制,无法完全满足制程的需求。这就导致了光刻图案的形状失真、尺寸变化和图案间的干涉等问题。 ### 目的 OPC的主要目的是通过对掩模进行局部修正,以校正因光学限制而导致的图案形状和尺寸的变化,从而提高芯片制造的精度和可靠性。 ### 工作原理 OPC的工作原理是在光刻掩模上引入一系列微小的修正,使得芯片上的光刻图案在曝光时能够更好地保持设计时的形状和尺寸。这些微小的修正通常通过软件算法来实现,可以根据具体的制程要求和光刻机的特性进行优化。 ### 类型 OPC通常分为规则OPC(Rule-based OPC)和模型OPC(Model-based OPC)两种类型。规则OPC基于一系列预定义的规则和经验法则来进行修正,适用于简单的制程;而模型OPC则基于物理模型和仿真来进行修正,可以更精细地校正图案形状和尺寸。 ### 本程序采用的修正算法 以最小化目标图案与投影图案的光强分布方差为目标,我们基于掩模板的像素进行优化,采用了两种无剃度优化算法: 1. 设置掩模板上每个像素的振幅透过率为0或1,采用遗传算法(Deap库),迭代10000代后得到优化后的掩模板; 2. 将每个像素的振幅透过率进行变量代换为0.5*(1+cos(t)),利用CMA-ES(协方差矩阵自适应演化算法)进行优化,将迭代10000次后得到的掩模板上振幅透过率大于0.5的像素块设置为1,其余则为0,得到符合实际的掩模板。 最后采用两者中效果更佳者。容易观察到,优化后的掩模板的投影图案光强分布更均匀,且边缘也更接近所期望的图案。需要注意的是,本程序采用的算法仅为入门版示例,更多知识请查阅[Lithography Guru](https://www.lithoguru.com/). ## 参与贡献 - 指导老师:石磊老师、阿光老师 - 项目完成人:郭新会、霍晋元、吴昱璋、杨远青 - 关闭窗口时的进程处理方法来自[郑泽鹏同学](https://gitee.com/zhengzepeng668/honors-in-optics) - 光强分布图彩图绘制灵感来自[谢昀城同学](https://gitee.com/xie-yuncheng/xyc) - 角谱法借鉴了[吴宇航同学推荐的仓库](https://github.com/rafael-fuente/diffractsim/) - 版权归复旦大学物理学系所有 ## 特技 1. GUI可视化互动界面 2. 基于遗传算法的二值化边界识别 3. 函数封装、自定义模块使得代码可维护性较强 4. 借助pyinstaller发行.exe 5. 三大图像区同步随控制区调节 6. 内置numpy二进制文件,功能函数大量优化,最大限度减少内存占用 7. 内嵌基于Markdown的中英双语帮助文档,借助markdown2库转换为html,再借助tkhtmlview库显示在帮助窗口中 ## 参考文献 1. [Hecht E. Optics[M]. 5th edition. Pearson, 2015.](https://www.pearson.com/en-us/subject-catalog/p/optics/P200000006793) 2. [马旭, 张胜恩, 潘毅华, 等. 计算光刻研究及进展. 激光与光电子学进展, 2022, 59(9): 122-170.](https://doi.org/10.3788/LOP202259.0922008) ## 项目仓库地址 您可以在[Gitee上访问本项目的仓库](https://gitee.com/bud-primordium/lithography),可以随手支持,Star一下~