本文讨论了模拟电路设计与开源电子设计自动化(EDA)工具的结合,强调了它们在设计和仿真过程中的重要作用。模拟电路,如CMOS反相器,是电子学的基础,需要精确的布局和验证。像Magic VLSI、Xschem和KLayout这样的工具为创建和验证这些电路提供了便捷的解决方案。例如,由PMOS和NMOS晶体管组成的CMOS反相器展示了如何使用这些工具来确保设计的准确性和功能性。这些开源工具的集成提升了模拟电路开发的效率和精度。
1、简介
模拟电路简介
模拟电路处理幅度连续变化的信号,如电压或压力,这些信号与其他时间相关变量相对应。与处理离散二进制信号的数字电路不同,模拟电路处理信号的全范围值,从而实现放大、滤波和调制等功能。它们在需要精确且高效的信号处理应用中至关重要,包括音频、温度、光和电压调节。模拟集成电路(IC)的示例包括电压和电流调节器、运算放大器、数据转换器和音频放大器。每种电路在各种电子设备中都扮演着关键角色,确保信号处理的准确性和性能。
模拟电路的重要性
模拟电路因其处理连续信号的能力而至关重要,可以处理广泛的数值,使其在许多电子应用中不可或缺。它们执行关键功能,如放大微弱信号、调节电源以及在模拟和数字格式之间转换信号。模拟电路设计所需的复杂性和精度要求采用先进技术以确保可靠性和性能。由于模拟电路在众多设备中起着关键作用,设计和实施得当对于实现高功能性和效率至关重要。
EDA工具简介
电子设计自动化(EDA)工具包括用于设计和制造半导体器件或芯片的软件、硬件和服务。这些工具支持设计过程的各个阶段,包括定义、规划、设计、实施、验证和制造半导体器件。EDA涵盖了几个关键领域:技术计算机辅助设计(TCAD)用于工艺设计,制造可制造性设计(DFM)确保设计符合制造要求,硅生命周期管理(SLM)用于监控制造后设备性能。EDA工具包括仿真、设计和验证工具,每种工具在预测电路行为、组装电路元件和确认设计性能方面发挥独特作用。它们对于管理当代半导体设计的复杂性至关重要,确保设备按预期运行,并降低昂贵错误的风险。
在模拟集成电路(IC)设计领域,EDA工具的重要性不言而喻。行业中著名的EDA工具包括Calibre和Virtuoso。在开源EDA工具领域,Efabless主办的开放电路设计计划是一个重要的发展。这个计划受到Google/SkyWater公共开源工艺设计套件(PDK)计划的重大影响,这代表了开源EDA工具的变革性进展。历史上,开源EDA工具不得不依赖专有或学术进程,没有真实目标代工厂流程的支持,限制了它们的适用性和实用性。而这个開源PDK计划的引入,通过提供对现实世界代工厂流程的访问,扩展了开源EDA工具的覆盖范围和有效性。
模拟电路设计流程
模拟设计流程本质上非常复杂,涉及广泛的手工设计工作和与工具的反复迭代过程,并且相比于数字设计流程,更加注重与物理设计和器件模型的紧密结合。尽管商业工具主要用于高级模拟设计,但许多模拟设计中的基本任务可以通过开源工具有效地管理。以下概述了从概念化到布局的推荐开源模拟设计流程:
- 设计概念: 使用 Octave 或 Python。Python 提供了多种用于模拟设计的包,包括 numpy 和 scipy,它们的功能与 Octave 脚本相当。
- 设计规范: 使用 CACE 和 CICsim 等工具来指定设计参数。
- 原理图输入: 使用 Xschem 或 Xcircuit。Xschem 尤其受欢迎,并且具有类似于商业工具的界面。
- 原理图捕获(网表生成): Xschem 和 Xcircuit 都能生成适用于布局与原理图对比(LVS)检查和仿真的分层网表。
- 仿真: 使用 ngspice 或 Xyce 进行仿真任务。Ngspice 提供了强大的交互式命令接口,而 Xyce 在多处理能力方面表现出色。两者都兼容 Verilog-A 模型。
- 布局: 选择 Magic 或 KLayout。KLayout 提供了类似于商业工具的用户界面,并有效地表示布局对象。Magic 则以其高级提取、连通性检查、布线功能和交互式 DRC 检查器而闻名。KLayout 支持 Ruby 或 Python 脚本,而 Magic 可以用 Tcl/Tk 脚本编写。Magic 还支持 SPICE 网表的导入以及器件和子单元的生成。两者都通过脚本提供参数化器件生成器。
- 器件和寄生提取: 使用 Magic 执行这些任务。
- 物理验证:
- 设计规则检查(DRC): 使用 Magic 进行交互式 DRC,使用 KLayout 进行非交互式 DRC。
- 布局与原理图对比(LVS): 推荐使用 Netgen 进行 LVS 任务。
- 电气规则检查(ERC): 使用 Circuit Validity Checker (CVC) 进行可靠性验证。
- 特性化: 使用 CACE 和 CICsim 在不同工艺角落下进行仿真。
- 数据表生成: CACE 和 CICsim 也推荐用于生成数据表。
图一 模拟电路设计流程
该工作流程展示了一种全面的模拟电路设计方法,利用开源工具有效地完成各种设计和验证任务。
2、MOSFET
金属氧化物半导体场效应晶体管(MOSFETs)是现代模拟集成电路(ICs)中的基本组件。MOSFET是一种晶体管,能够将输入电压转换为输出电流,或反之,从而实现模拟集成电路设计。本文介绍了MOSFET的物理结构及其工作原理。
MOSFET 结构
MOS晶体管是一个具有四个端子的器件,包括栅极(G)、漏极(D)、源极(S)和体极(B)。MOS晶体管主要有两种类型:N沟道MOSFET(NMOS)和P沟道MOSFET(PMOS),它们具有互补的特性。图2(a)和(b)展示了NMOS和PMOS晶体管的电路符号,其中栅极控制着漏极和源极之间的电流流动。
在NMOS晶体管中,漏极的电势通常高于源极,而PMOS晶体管则是源极的电势高于漏极。体极连接到构建晶体管的基底,在单电源系统中,NMOS的体极通常接地,而PMOS的体极则连接到最高电压水平,通常是VDD。
在许多数字电路中,源极和体极常常连接在一起,使MOSFET看起来像是一个三端器件。然而,在模拟设计中,所有四个端子都可能对器件的行为至关重要。
MOSFET的物理结构
NMOS和PMOS晶体管在结构基础上相似,如图2(c)所示。这些晶体管都在轻掺P型的硅基底上制造,这是集成电路晶体管的一个典型特征。
栅极端子与基底之间有一层绝缘层,通常由二氧化硅构成。这层绝缘层防止栅极与其他端子(源极、漏极或体极)之间的漏电流。栅极材料通常由多晶硅或金属构成。
对于NMOS晶体管,源极和漏极区域通过在基底上掺入高浓度的N型杂质形成,从而形成高度导电的N型掺杂区域。这些区域由于其相同的物理性质是可以互换的。为了确保有效的电气连接,体极也会掺入与基底相同极性的杂质。
PMOS晶体管具有与NMOS相同的结构元素,主要区别在于掺杂极性相反。在PMOS器件中,体极由主要是P型基底中的轻掺N型区域组成,形成所谓的N井。
这一概述提供了MOSFET结构和操作的基础,为进一步深入了解这些晶体管在模拟IC中的布局构造奠定了基础。
(a)NMOS 符号 | (b)PMOS 符号 |
(c)物理结构 | |
图二 NMOS and PMOS 符号与物理结构 |
3、Open-Source EDA Tool
Open Circuit Design 是一个全面的开源电子设计自动化(EDA)工具库,这些工具在现代电路设计中至关重要。这些工具根据 GNU 公共许可证(GPL)或类似的开源许可证免费提供,旨在与商业 EDA 解决方案保持竞争力。该平台托管了一系列软件,支持电路设计过程的各个方面,从布局编辑和原理图捕捉到数字合成和验证。
Open Circuit Design 提供的工具包括:
Open_PDKs: 为开源 EDA 工具量身定制的工艺设计套件(PDK)安装程序。
Magic: VLSI 布局编辑器,支持提取和设计规则检查(DRC)。
XCircuit: 用于电路绘图和原理图捕捉的工具。
Netgen: 电路网表比较工具,执行布局与原理图(LVS)检查并支持网表转换。
Qrouter: 适用于海量门设计的单元细节路由器。
Qflow: 完整的数字合成设计流程,利用开源软件和标准单元库。
Open Circuit Design 与 eFabless 合作,eFabless 是一个将社区驱动的协作带入电路设计的平台。eFabless 平台集成了 Open Circuit Design 工具,提供了如 CACE(电路自动表征引擎)这样的功能,用于严格的电路测试和表征,并通过 cloudv 提供基于云的合成和验证,使用工具如 Qflow 和 Qrouter。
Open Circuit Design 的一个重要里程碑是其参与了 2020 年启动的 Google / SkyWater 公共开源 PDK 计划。这个计划标志着开源 EDA 工具的突破,提供了对实际铸造工艺的访问,这在以前是有限的。该平台确保与 Google / SkyWater 开放 PDK 的兼容性,从而扩展了开源工具在实际应用中的可用性。
通过持续更新和与 GitHub 仓库的每日同步,Open Circuit Design 仍然是工程师、研究人员和开发者寻求开源 EDA 替代方案的重要资源。
开源EDA工具
Linux对EDA工具的好处
Linux长期以来一直是电子设计自动化(EDA)工具的首选操作系统,特别是在开源社区中。Linux的强大、稳定和可定制的特性使其非常适合处理与EDA工作流程相关的复杂和资源密集型任务。以下是使用Linux,特别是Ubuntu或POP!OS,进行EDA工具开发和使用的一些关键好处:
稳定性和可靠性:Linux系统以其稳定性著称,可以长时间运行而无需重启。这对于需要长时间模拟或设计过程的情况尤为重要,因为中断可能会导致显著的延迟。
开源生态系统:Linux是开源社区的基石,这与许多EDA工具的理念相契合。开源EDA工具经常在Linux上开发、测试和优化,确保了无缝的兼容性和最新更新的访问。
性能:Linux因其高效的系统资源利用而提供卓越的性能。它提供了更好的内存管理、更快的I/O操作,并且相比其他操作系统更节省资源,使你能够最大化硬件的性能。
可定制性:Linux允许用户根据特定需求自定义环境,无论是调整内核设置还是选择各种桌面环境。这种灵活性对需要优化系统以适应特定任务的EDA专业人员尤为有利。
安全性:由于其用户权限结构和开源特性,Linux固有的安全性优于许多其他操作系统,这使得能够快速识别和修复漏洞。这对于保护敏感设计数据和知识产权至关重要。
支持工具广泛:许多开源EDA工具,包括Magic、Netgen、OpenROAD等,都设计为在Linux上原生运行。这确保了更好的支持、更流畅的操作,以及访问大量工具和库。
为什么选择Ubuntu或POP!OS?
在众多Linux发行版中,Ubuntu和POP!OS作为EDA工作的优秀选择脱颖而出:
Ubuntu:Ubuntu是最受欢迎的Linux发行版之一,以其用户友好的界面、广泛的社区支持和丰富的软件包库而闻名。它提供了一个稳定的环境和频繁的更新,使其成为EDA新手和经验丰富的用户都可靠的选择。
POP!OS:基于Ubuntu,POP!OS由System76设计,特别注重易用性,尤其适合开发人员和工程师。它提供了对广泛硬件的开箱即用支持,并具有如平铺窗口管理等功能,这可以显著提高在复杂设计任务中的生产力。POP!OS还强调安全性和性能,是EDA专业人员的理想选择。
安装命令
- cd ~
- mkdir -p gits
- cd ~/gits
- sudo apt install python3 build-essential gcc
- sudo apt install m4 tcsh csh libx11-dev tcl-dev tk-dev libcairo2-dev
- sudo apt install mesa-common-dev libglu1-mesa-dev
Open_PDK
Open_PDKs 解决了与硅晶圆厂工艺设计包(PDK)非标准化相关的挑战。硅晶圆厂提供的PDK通常以多样化且不可预测的文件配置形式交付,这使得它们与开源电子设计自动化(EDA)工具的集成变得复杂。此外,这些PDK通常针对商业EDA工具进行定制,往往忽视了开源工具的需求。
Open_PDKs通过标准化文件和目录的组织,解决了这些问题。它针对常用的开放标准格式,如SPICE、Verilog、Liberty和LEF,提供了一致的组织结构。该工具还支持一系列开源EDA工具,包括Magic、Netgen、OpenROAD和KLayout。其安装程序使用Makefile系统和转换脚本,确保所有所需的工艺文件都放在一致且可预测的目录中。
Open_PDKs 的核心目标包括:
- 标准化:为各种EDA工具和格式建立统一的文件结构。
- 灵活性:通过通用脚本支持对新工具、格式和晶圆厂的适应性。
- 定制化:允许添加自定义安装文件,以根据需要修改或注释供应商提供的数据。
Open_PDKs预配置了支持Google/SkyWater SKY130开放工艺的文件。它有助于设置与SKY130工艺兼容的环境,支持开源EDA工具和工具流程,如Magic、Qflow、OpenLane、Netgen和KLayout。
安装命令
- git clone https://github.com/RTimothyEdwards/open_pdks
- cd open_pdks
- ./configure --enable-sky130-pdk --enable-sram-sky130
- make
- sudo make install
- make veryclean
- ./configure --enable-gf180mcu-pdk --enable-osu-sc-gf180mcu
- make
- sudo make install
- make veryclean
- make distclean
- cd ~/gits
Magic
Magic 是一款杰出的 VLSI(超大规模集成电路)布局工具,最初由加州大学伯克利分校的 John Ousterhout 在 1980 年代开发,他还因创造了 Tcl 脚本语言而闻名。得益于其宽松的伯克利开源许可证,Magic 保持了持久的受欢迎程度,特别是在学术机构和小型企业中。这种许可证使得具有编程倾向的 VLSI 工程师能够为工具增添创新功能,确保 Magic 随着制造技术的进步不断演变。
Magic 的持续相关性主要归功于其强大的核心算法,这些算法支撑了其用户友好的界面和功能。该工具因其在电路布局方面的易用性而受到高度评价,这一特点使得它即使在最终设计阶段仍然是许多专业人士的首选,尽管他们最终使用的是商业工具。
主要特点:
- 开源许可证: 其宽松的许可证促进了广泛的采用和社区的持续改进。
- 用户友好设计: Magic 以其直观的界面和电路布局任务的易用性而闻名。
- 先进算法: 该工具的成熟算法在管理 VLSI 设计方面贡献巨大,显著提升了其受欢迎程度和有效性。
安装命令
- git clone https://github.com/RTimothyEdwards/magic
- cd magic
- ./configure --enable-cairo-offscreen
- make
- sudo make install
- make clean
- cd ~/gits
Netgen
Netgen 是一款专门用于比较电路网表的工具,称为布局与原理图对比(LVS)。这一关键步骤在集成电路(IC)设计流程中至关重要,确保电路的实际布局与预期原理图一致。通过验证布局的几何形状是否与期望的电路匹配,LVS 有助于在设计过程的早期捕捉错误。
对于非常小的电路,这一步骤通常可以跳过,因为电路操作可以通过直接提取和模拟来确认。然而,对于非常大的数字电路,其中布局通常由自动化工具从高层描述生成,LVS 变得尤为重要,以确保布局几何的准确性和正确性。
LVS 在设计大型模拟或混合信号电路时需求最大。这些类型的电路通常过于复杂,难以在合理的时间内进行全面模拟,因此 LVS 成为一种更快、更高效的替代方案。即使是较小的电路,LVS 也可以比全面模拟完成得更快,并提供有针对性的反馈,便于识别和纠正错误。
主要特点:
- 确保布局准确性:验证实际布局是否与预期原理图相匹配。
- 对大型电路至关重要:尤其适用于那些难以模拟的大型模拟和混合信号电路。
- 更快的反馈:比全面电路模拟提供更快的结果和错误检测。
- 对设计流程至关重要:在确保集成电路设计的可靠性和正确性方面发挥关键作用。
安装命令
- git clone https://github.com/RTimothyEdwards/netgen
- cd netgen
- ./configure
- make
- sudo make install
- make clean
- cd ~/gits
Xschem
Xschem 是一款强大的原理图捕获程序,旨在创建层次化的电路表示。通过采用自顶向下的设计方法,Xschem 使设计师能够通过更简单的构建块来描述复杂的系统,专注于接口、层次结构和实例属性。这种模块化的方法简化了复杂电路的设计和验证。
Xschem 支持直接从绘制的原理图生成 VHDL、Verilog 或 Spice 网表,使得使用各种工具模拟电路变得更加容易。Xschem 的一个关键特点是其高性能的绘图引擎,该引擎用 C 语言编写,并利用 Xlib 绘图原语。这种架构提供了卓越的速度和响应能力,即使对于非常大的电路也能保持高效。
用户界面使用 Tcl-Tk 工具包构建,Tcl 也作为扩展语言使用,允许进行可定制的脚本编写。绘图窗口中的任何用户命令都对应一个 Tcl 命令,从而可以创建定制的脚本来增强设计工作流程。
主要特点:
- 层次化原理图设计: Xschem 支持无限层次的原理图绘制,使电路设计具有可扩展性。
- 灵活的对象属性: 原理图中的任何对象都可以分配属性,如 VHDL 泛型或 Spice/Verilog 参数,为设计规范提供了多样性。
- 可定制的原语和网表: 用户可以创建新的 Spice/Verilog 原语并定义自定义网表格式,以满足特定需求。
- 可脚本化环境: Tcl 扩展语言允许创建脚本,增强了设计过程的自动化和定制化。
- 模拟就绪网表: Xschem 生成 VHDL、Verilog 和 Spice 网表,准备好进行电路模拟。
- 行为代码嵌入: 设计师可以将行为 VHDL/Verilog 代码嵌入到原理图块的属性中,将高层次描述与详细电路设计集成。
安装命令
- git clone https://github.com/stefanschippers/xschem.git
- cd xschem
- ./configure
- make
- sudo make install
- make clean
- cd ~/gits
Ngspice
Ngspice 是一个功能强大的开源 SPICE 模拟器,专为电气和电子电路的分析与模拟设计。它支持各种电路组件,包括 JFET、双极型和 MOS 晶体管、被动元件(电阻、电感、电容)、二极管、传输线及其他设备,这些组件通过网表进行互连。
Ngspice 还支持数字电路的模拟,提供事件驱动的高速模拟能力。这使得模拟电路范围从单个逻辑门到复杂的数字系统都可以实现。此外,Ngspice 能够模拟混合信号电路,将模拟和数字组件无缝集成在一个框架内。
该模拟器配备了一个全面的设备模型库,涵盖了主动、被动、模拟和数字元件。这些模型来自行业标准集合、半导体制造商和半导体铸造厂。用户通过网表定义电路,Ngspice 生成以电流、电压和其他电气量表示的图形输出,这些输出也可以保存为数据文件以便进一步分析。
虽然 Ngspice 主要通过命令行或文件输入操作,但它没有内置的原理图录入工具。然而,有多个第三方接口可用,这些接口可以提供原理图捕获功能,填补电路设计与模拟之间的空白。
主要特点:
- 全面的设备建模:支持多种主动、被动、模拟和数字组件。
- 混合信号模拟:能够模拟包含模拟和数字元素的电路。
- 高速数字模拟:事件驱动的模拟,高效处理复杂的数字电路。
- 灵活的输出选项:生成详细的电气量图形,并支持数据导出以进行进一步分析。
- 第三方接口支持:虽然没有内置的原理图录入功能,但与外部原理图捕获工具兼容良好。
安装命令
- git clone git://git.code.sf.net/p/ngspice/ngspice
- cd ngspice
- ./autogen.sh
- mkdir release
- cd release
- ../configure --with-x --enable-xspice --disable-debug --enable-cider --with-readline=yes --enable-openmp --enable-klu --enable-osdi
- make 2>&1 | tee make.log
- sudo make install
- cd ~gits
KLayout
KLayout 是一款强大的工具,用于查看和编辑 GDS 和 OASIS 布局文件,对于 VLSI 设计至关重要。它在模拟设计和其他复杂布局任务中发挥着关键作用,提供了可视化和编辑功能。KLayout 以其性能和多功能性脱颖而出,使其成为需要精确和高效布局管理的工程师不可或缺的工具。KLayout 不仅是一个查看器,还是一个编辑器,能够全面操作布局文件。凭借其速度、灵活性和强大的功能,KLayout 是从事 VLSI 设计,特别是模拟和混合信号电路设计的人员的必备工具。
主要特点:
- 快速而准确的性能:KLayout 以快速加载和渲染布局文件而闻名。它在处理大型设计和提供准确的可视化表现方面效率极高,使其在详细分析和编辑中非常有价值。
- 高级层管理:该工具支持复杂的层配置,包括多层叠加能力、灵活的层显示属性和高级分组选项。用户可以轻松管理和可视化复杂设计,包括设置透明度和动画以便更好地分析层。
- 智能编辑功能:KLayout 提供了广泛的编辑功能,包括智能绘图功能、真实就地编辑和无限撤销/重做能力。用户可以进行精确修改、拉伸形状以及轻松管理层次操作。
- 广泛的脚本和自动化:该工具包括一个强大的脚本环境,支持 Ruby 和 Python。用户可以自动化任务、自定义功能以及开发宏来处理重复的过程,从而提高生产力和布局管理的灵活性。
安装命令
- sudo apt install qtcreator qtbase5-dev qt5-qmake
- sudo apt install qtmultimedia5-dev libqt5xmlpatterns5-dev
- sudo apt install libqt5svg5-dev qttools5-dev-tools qttools5-dev
- sudo apt install python3-dev
- git clone https://github.com/KLayout/klayout
- ./build.sh
- sudo mv bin-release /usr/local/share/klayout
- sudo ln -s /usr/local/share/klayout/klayout /usr/local/bin/klayout
- sudo cat > /etc/ld.so.conf.d/klayout-x86_64.conf << EOF
- /usr/local/share/klayout
- EOF
- sudo ldconfig
4、反相器
反相器是数字电子学中的一个基本组件,主要用于反转信号的逻辑状态。它也被称为 NOT 门。反相器由一对互补的 MOS 晶体管组成——一个 NMOS 和一个 PMOS,它们以一种配置排列,其中输入信号控制这两个晶体管。当输入为高电平(逻辑 1)时,NMOS 晶体管导通,将输出拉低(逻辑 0),而 PMOS 晶体管则关闭。相反,当输入为低电平(逻辑 0)时,PMOS 晶体管导通,将输出拉高(逻辑 1),而 NMOS 晶体管则关闭。这种开关行为确保了输出始终与输入相反。在 Skywater 130nm 工艺的背景下,设计和模拟一个反相器涉及将该工艺特定的技术文件集成到 Magic VLSI 中,从而实现准确的布局创建,并随后进行模拟以验证该反相器在此特定技术节点中的性能。
将 SkyWater PDK 集成到 Magic VLSI
要将 SkyWater 130nm PDK(工艺设计套件)集成到 Magic VLSI 中,需要将相关的技术文件链接到 Magic 的库中,因为这些文件并未预安装。以下命令创建一个符号链接,允许 Magic 访问绘制布局所需的 SkyWater 技术文件。
在 Xschem 中创建 CMOS 反相器的原理图和符号
要在 Xschem 中设计 CMOS 反相器,您需要通过添加必要的组件来创建原理图,包括 NMOS 和 PMOS 晶体管、电源(VDD)、地(GND)以及用于测试反相器功能的脉冲源。以下是如何操作的步骤:
- 添加 NMOS 和 PMOS 晶体管:
- 首先,将 SkyWater PDK 库中的 NMOS 晶体管(nfet_01v8)和 PMOS 晶体管(pfet_01v8)放置到原理图画布上。
- 将 PMOS 晶体管放置在顶部,它将连接到 VDD,将 NMOS 晶体管放置在底部,连接到 GND。
- 电源(VDD)和地(GND):
- 在 PMOS 晶体管的源极位置放置一个 VDD 符号。
- 在 NMOS 晶体管的源极位置放置一个 GND 符号。
- 这种设置确保 PMOS 晶体管连接到正电源,而 NMOS 晶体管连接到地,从而形成 CMOS 反相器的基本结构。
- 连接栅极:
- 将 NMOS 和 PMOS 晶体管的栅极连接在一起。这个连接将作为反相器的输入(Vin)。
- 连接漏极:
- 将两个晶体管的漏极连接在一起。这个节点将作为反相器的输出(Vout)。
- 添加脉冲源:
- 为了测试反相器,添加一个脉冲电压源到输入(Vin)。这个脉冲将交替变化高电平和低电平,模拟数字信号。
- 将脉冲源的正端连接到 NMOS 和 PMOS 晶体管的公共栅极连接处。
- 将脉冲源的负端连接到 GND。
- 完成连接:
- 确保所有节点正确连接:VDD 连接到 PMOS 的源极,GND 连接到 NMOS 的源极,脉冲源连接到输入,公共漏极连接作为输出。
图三. 反相器原理图在 Xschem 中
- 为反相器创建符号:
- 完成原理图后,可以生成一个反相器的符号。这个符号将在更高层级的原理图中作为一个单一组件来表示整个反相器电路。
- 该符号通常包括输入(vin)、输出(vout)、VDD 和 GND 连接。
图四. 反相器符号在 Xschem 中
- 通过测试平台运行仿真:
- 运行仿真的最模块化方法是通过测试平台。你可以直接创建一个 SPICE netlist 或通过 Xschem 创建测试平台。
- 在 Xschem 中,设置以下属性:
- name=SPICE only_toplevel=false
- value="
- .tran 0.01n 1u
- .save all"
此 SPICE 指令将运行一个瞬态分析 (.tran),时间步长为 0.01 纳秒,总仿真时间为 1 微秒。.save all 命令确保所有节点电压和电流在仿真后被保存,以便进行后续分析。
图五.仿真中的反相器
反相器布局
要使用 SkyWater 130nm 工艺在 Magic VLSI 中创建 CMOS 反相器布局,请按照以下详细步骤操作。每个命令都进行了解释,以帮助您理解布局创建过程:
- 启动 Magic 并加载 SkyWater 配置:
- magic -rcfile sky130A.magicrc
- 这个命令启动 Magic VLSI 加载用于 SkyWater 130nm 工艺技术的配置文件。
- Adjust the Grid: 调整网格:
- % grid 50nm 50nm
- 默认网格可能对于 SkyWater 130nm 工艺的 150nm 通道长度来说过于精细。此命令将网格设置为 50nm x 50nm,更适合涉及的尺寸。
- 设置光标对齐到用户网格:
- % snap user
- 此命令使光标对齐到前面设置的网格上,确保布局元素的精确放置。
- 绘制晶体管的栅极(多晶硅):
- 使用 poly 命令绘制 NMOS 和 PMOS 晶体管的栅极区域。这是形成栅极电极的多晶硅层。
- 绘制 NMOS 晶体管的漏极和源极(n-扩散):
- 使用 ndiff 命令创建 NMOS 晶体管的 n-扩散区域。这些区域将作为 NMOS 晶体管的漏极和源极端子。
- 扩展多晶硅超出 n-扩散区域:
- 将多晶硅栅极区域(poly)扩展到 n-扩散(ndiff)上,以解决与栅极重叠相关的设计规则检查(DRC)错误。这确保了正确的连通性,并避免了 DRC 问题。
- 创建 NMOS 晶体管的漏极和源极端子:
- 在 n-扩散区域(ndiff)中放置局部互连(li),并使用 ndc 命令将其与局部互连连接。此步骤完成漏极和源极端子的创建。
- 创建 NMOS 晶体管的体注入:
- 在 NMOS 晶体管的源极旁边放置 p-基片扩散(psd)和局部互连(li)。使用 psc 命令将 p-基片扩散与局部互连连接,形成体注入连接。
- 绘制 PMOS 晶体管:
- 复制 NMOS 晶体管布局(包括体注入)并将其转换为 PMOS 晶体管。使用 nwell 命令将复制品包围在 n-well 中。这将把 n-扩散(ndiff)转换为 p-扩散(pdiff),n-局部互连(ndc)转换为 p-局部互连(pdc),p-基片扩散(psd)转换为 n-基片扩散(nsd),p-局部互连(psc)转换为 n-局部互连(nsc)。
- 创建接地和电源轨:
- 使用 metal1 命令绘制接地和电源轨,确保 NMOS 和 PMOS 晶体管正确连接到电源(VDD)和接地(GND)供应。
图六.反向器在Magic中的布局
- 运行 .tcl 脚本以提高便利性:
- 为了方便起见,可以将构建布局所需的所有命令收集到一个名为tcl 的 .tcl 脚本中。这个脚本可以自动化布局创建过程,并确保一致性。
图七. 反向器在Magic中的仿真
5、结论
在模拟电路设计中,确保准确性和功能性的细致过程至关重要。模拟电路,如 CMOS 反相器,需要精确的布局和仿真,以验证设计是否符合预期的性能。开源 EDA 工具,如 Magic VLSI、Xschem 和 KLayout,为实现这一目标提供了强大且经济有效的手段。例如,Magic VLSI 支持多种工艺的布局设计,包括 SkyWater 130nm 工艺,而 Xschem 则便于原理图创建和仿真。KLayout 通过提供先进的布局查看和编辑功能,增强了这些工具的能力,使工程师能够叠加、编辑和验证设计。CMOS 反相器作为模拟电路设计中的经典例子,由一个 PMOS 和一个 NMOS 晶体管组成,分别连接到电源(VDD)和地(GND)。反相器的功能是将逻辑低输入转换为逻辑高输出,反之亦然。使用 Magic VLSI 和 Xschem 等工具,工程师可以高效地创建、仿真和验证这样的设计。将这些工具集成到设计流程中,可以确保模拟电路满足性能规格和设计规则,促进健壮可靠的电子系统的实现。
参考文献
[1] https://github.com/efabless/openlane/#setting-up-the-pdk-skywater-pdk
[2] http://opencircuitdesign.com/
[3] https://www.youtube.com/watch?v=IQ_DcWT_cbc
推荐教学视频
[1] https://www.youtube.com/watch?v=bm3l21ExLOY&list=PLgsDG5BJZpBTEUaxjfvYUiMPpUPU_vQpr&index=1
[2] https://www.youtube.com/watch?v=mpF2o2uTbC8&t=4s
[3] https://www.youtube.com/watch?v=3xHnzdCIvSY
[4] https://www.youtube.com/watch?v=Li2ZdC3MwA0&list=PLEAC5YKV9X4tbrpQFZuSkuKagIMlaszjM
[5] https://www.youtube.com/watch?v=XvBpqKwzrFY&t=744s