Linux 下集成电路设计入门
众所周知,计算机由硬件和软件两个主要元素组成。Linux 下有很多强大且著名的软件开发工具。然而,鲜为人知的是,Linux 下也有硬件开发工具。本文介绍了一些可免费使用的集成电路(IC)创建工具。这些工具包括:Magic,一个 IC 布局编辑器;SPICE,一个模拟电路仿真器;以及 Sigview,一个图形信号查看器。当这些程序协同使用时,Linux 就成为一个可以用来创建真实世界、可工作芯片的平台。
我们将首先简要描述作为 IC 设计基础的布局和仿真。接下来,我们将介绍在哪里以及如何获取这些工具。然后,我们将更详细地介绍芯片布局所代表的内容。我们还将涉及 Magic 的技术文件,最后通过一个完整的设计示例将所有内容联系起来。
简而言之,Magic 是一个图形化工具,电路设计师使用它来指定 IC 的构造方式。这种规范是通过绘制代表导线和晶体管(大多数 IC 的构建模块)的矩形来创建的。矩形以各种颜色和填充图案绘制,这些颜色和填充图案代表用于制造芯片的层。(“层”的概念在下面更详细地解释。)最终的绘图通常被称为芯片的布局。
不要被愚弄——设计 IC 远不止仅仅制作矩形;否则,大多数绘图程序都可以胜任这项工作。IC 设计需要软件的进一步协助。为此,Magic 配备了使 IC 设计更轻松的工具。例如,它执行设计规则,以保证绘制的电路可以正确制造,并且它可以从布局中提取电路组件列表以及它们的连接方式(网络表)。
这些功能有助于对 Magic 及其如何用于进行真实世界的设计进行基本介绍。特别是,我们将开发一个简单的数字电路——一个反相器,它是复杂数字芯片中普遍存在的构建模块。
Magic 用于在布局中绘制矩形,但我们如何知道与这些矩形对应的电路是否按预期运行?仿真是一种验证您绘制的设计是否确实是您想要的设计的方法——它非常像在您正在开发的软件上使用调试器。为什么要费心进行仿真?为什么不直接绘制、构建并看看它是否有效?仿真是有必要的,因为芯片制造在很多方面都很昂贵。制造过程本身非常昂贵,因此您希望最大限度地减少必须重新制造缺陷设计的次数。它也很耗时,因此您希望避免因过多的重新制造周期而错失市场窗口。由于这些成本,投入到通过仿真验证设计的时间会带来巨大的回报。
SPICE(Simulation Program with Integrated Circuit Emphasis,集成电路重点仿真程序)是用于模拟电路性能的一种工具。SPICE 及其衍生产品,特别是 MicroSim Corporation 的 PSpice 和 Meta-Software 的 HSPICE,是在 20 世纪 70 年代中期由加州大学伯克利分校开发的,是模拟电路仿真器最广泛使用的例子。这些程序使用各个电路组件的详细模型,提供设备运行的准确图像,并可以分析电路行为的许多不同方面。稍后,我们将研究在数字电路设计中特别有用的一个方面。
Magic 有一个 WWW 页面(由 DEC Western Research Laboratory 的 Bob Mayo 维护),您可以从中获取源代码并浏览其他相关信息。将您最喜欢的 Web 浏览器指向 http://www.research.digital.com/wrl/projects/magic/magic.html,然后点击“Getting the program and manuals”链接。6.5 版本应该已经可用,并且在您阅读本文时已经脱离 beta 测试阶段。
Magic 安装在用户“cad”的主目录或环境变量 $CAD_HOME 指向的目录中。您必须创建一个“cad”用户并使其文件空间世界可读(假设您希望每个人都能运行这些工具),或者为这些工具指定一个目录并将 $CAD_HOME 设置为指向它。我们假设您将选择第二种方法,并将 $CAD_HOME 指定的目录称为安装工具的目录树的根目录。
设置 $CAD_HOME 后,解压 magic-6.5.tar。转到 magic-6.5 目录并输入 make config。选择选项 1 (X11)、4 (Linux)、5 (基于 Intel 的系统,假设您使用的是 Intel)。接下来是可选模块列表。省略它们可以换取更小的可执行文件大小和编译时间。现在,只需接受所有可选模块。如果您发现您不使用某个功能,您可以随时稍后重新编译。然后,按照屏幕上的说明,执行 make force 来编译所有内容。在此编译成功完成后,make install 会将所有内容安装在正确的位置。不要跳过最后一步,因为 Magic 依赖于将其所有支持文件放在正确的位置。
最新可免费获得的 SPICE 版本是 3f4。Linux 就绪的 SPICE3f4 源代码可在 ftp://ftp.sunsite.edu/pub/Linux/apps/circuits/spice3f4.tar.gz 获取。编译和安装说明在 spice3f4.readme 中。请注意,您必须至少拥有 1.14.5 版本的 BASH 才能编译。当我们编译我们的版本时,我们只做了一个更改。我们从 conf/linux 文件中删除了 -dWANT_X11,因此没有获得 X 界面,但获得了更小的二进制文件。由于我们正在使用 Sigview 来查看输出,因此我们无论如何都不需要此界面。如果您不想编译,可以在 ftp://ftp.eos.ncsu.edu/pub/vlsi/software/Linux/spice3/ 找到 a.out 格式的二进制文件。
Sigview 由 MCNC 的 Lisa Pickel 开发,是一个基于 X11 的程序,用于查看各种仿真器(包括 SPICE)的输出。在本文发表时,它应该可以在 ftp://ftp.sunsite.edu/pub/Linux/apps/circuits/sigview31.tgz 获取。解压此文件后,cd sigview 并编辑 Makefile。如顶部的说明中所述,您可能需要定义 SIG_DEV_FILE 和 SIG_TMP_PATH 以指向系统上的适当位置。如果它们已经正确设置,您可以简单地使用包含的(a.out 格式)可执行文件。否则,简单的 make 即可完成工作。然后,您可以将可执行文件放在 $CAD_HOME/bin 中。
在深入了解使用 Magic 进行设计的细节之前,对 IC 的物理结构及其构造过程有一个基本的了解非常有帮助。有很多不同类型的工艺技术——CMOS、GaAs、双极性和 BiCMOS 是常见的几种。如今,CMOS(互补金属氧化物半导体)是高密度、低功耗、低成本数字电路的主要技术;因此,我们将重点放在 CMOS 设计示例上。但是,这里介绍的概念同样适用于任何工艺。
IC 是通过在硅基底上沉积、注入或生长各种材料的图案化层来构建的。多个层垂直堆叠在一起;每一层都通过一层薄薄的绝缘材料与紧邻的上下层隔开。重要的是要注意,一个层可以包含许多单独的对象——例如,它可以包含数千根导线,这些导线彼此都不接触。
IC 制造商如何形成图案?典型的制造过程类似于喷漆,因为它们将用于制作该层的材料涂覆在整个 IC 表面上;这显然排除了形成不同形状或图案的可能性。如果您曾经使用模板在海报或墙壁上喷漆字母,您就会知道解决此问题的方法是获得一块屏蔽材料,称为掩模,切割出您想要喷漆的区域,然后通过由此产生的孔洞进行喷漆。IC 工艺工程师在非常小的规模上做着同样的事情。
制造过程中的每个步骤都使用不同的掩模。假设我们有一个具有两层金属布线的芯片。我们将最靠近硅基底的层称为“m1”,将最靠近顶部的层称为“m2”。由于 m1 和 m2 是不同的层,因此 m2 导线可以跨越 m1 导线而不会产生电气接触。这就像高架道路使用立交桥跨越低洼道路一样。图 1 的左侧以俯视图和横截面图说明了垂直的 m2 导线与水平的 m1 导线重叠的情况。请注意,两者在电气上是分开的。现在假设我们想要创建一个信号可以从 m1 交叉到 m2 的点。为了构建这种结构,我们需要一个用于 m1 的掩模、一个用于 m2 的掩模和一个用于通孔的掩模。通孔是绝缘层中的一个孔,它将 m1 与 m2 分隔开,并允许 m2 向下流动并接触 m1,形成电气连接。这在图 1 的右侧显示;黑色方块是通孔,它连接两个层。晶体管更复杂,需要更多的掩模和不同的材料。
Magic 通过隐藏许多底层物理复杂性,使设计师的工作更轻松。您不必直接使用掩模层,而是操作抽象层,这些抽象层隐式地表示一个或多个掩模。例如,要创建 m1 到 m2 的通孔,您只需在抽象的“via”层上绘制一个形状即可,而不是在单独的掩模层(m1 层、孔层和 m2 层)上绘制三个形状,“via”层具有所有三个“内置”的掩模层。还有一些抽象层与掩模层具有一对一的对应关系;m1 和 m2 就是例子。一般来说,一个抽象层可以表示任意数量的掩模层,从而大大简化设计。
为了尽可能多地将元件塞进 IC 中,现代工艺以微米 (μm) 为单位定义设计规则测量值。一微米是百万分之一米。例如,在一种特定的 CMOS 工艺中,m1 导线之间必须至少间隔 0.8μm,并且宽度至少为 0.6μm。每个规则都独立于其他规则,并以微米的分数指定。
另一方面,Magic 设计规则不是以微米为单位表示,而是以称为 lambda (λ) 的单位的倍数表示。lambda 由 Carver Mead 和 Lynn Conway 的经典著作 Introduction to VLSI Systems 引入,是规则的“量子”——所有间距和宽度都必须是 lambda 的倍数。先前关于 m1 间距和宽度的规则将用 lambda 表示为 3λ 和 2λ,其中 λ = 0.3μm。
请注意,使用 lambda 规则在面积方面会稍微昂贵一些。间距规则现在有效地为 0.9μm 而不是 0.8μm;但是,基于 lambda 的规则允许可扩展设计。可扩展规则允许我们创建一个设计,并确信它无论 lambda 值如何都是有效的(即,它不违反任何设计规则)。例如,MOSIS 服务是一种低成本、小批量的 IC 原型制作服务,它通过多家不同的供应商在各种工艺中制造芯片。这些工艺的 lambda 值范围从 0.3μm 到 1.0μm;MOSIS 基本上有一套设计规则,涵盖所有这些工艺。实际上,一旦 lambda 开始低于 0.5μm,即使是可扩展规则也会有所变化,但这只是一个细节。这些规则被称为 SCMOS(可扩展 CMOS)规则,我们在设计示例中使用它们。
如前所述,有几种不同的 IC 工艺技术。Magic 与技术无关,可以与所有技术一起使用。Magic 需要的关于目标工艺的信息驻留在称为技术文件(tech 文件)的外部文件中,Magic 在程序启动时读取该文件。默认情况下,Magic 在 $CAD_HOME/lib/magic/sys 中查找文件 scmos.tech27。技术文件的位置和名称都可以在命令行中使用 -T 开关指定,尽管技术文件的名称必须以“.tech27”扩展名结尾。例如,要使用 scmos-sub.tech27 技术文件,您键入 magic -T scmos-sub。
Magic 发行版的 scmos 目录中包含多个技术文件,用于 MOSIS 提供的各种工艺。如上所述,当 lambda 非常小时,设计规则开始发生变化。MOSIS 提供不同的技术文件来解决这个问题。
技术文件中定义的项目包括
层定义(例如,名称、颜色)以及层之间如何相互作用
设计规则
器件(晶体管)几何形状和寄生参数
关于如何将 Magic 的抽象层转换为掩模层以及反之亦然的说明
了解技术文件内部结构对于使用 Magic 来说不是必需的;事实上,除非您正在为新工艺编写技术文件或为现有工艺修改技术文件,否则您可以将技术文件视为一个“黑匣子”。如果您有兴趣,您可以在 Magic Maintainer's Manual #2: The Technology File 中找到技术文件格式的完整讨论,该手册位于 Magic 源代码树的 doc 子目录中。
现在,我们将通过一个真实世界的设计示例——反相器,将所有内容结合在一起。反相器只是简单地翻转一位;它将 1 变成 0,将 0 变成 1。这听起来可能很简单,但它是更复杂的数字电路的基本构建模块。
首先,我们将逐步完成反相器的布局和设计规则检查(DRC),并在过程中解释相关内容。然后,我们将提取网络表并使用 SPICE 模拟芯片。在我们确信芯片正常工作后,我们将构建 CIF 文件发送给代工厂进行芯片制造。
虽然这个例子非常基础,但您可以在 Magic 源代码发行版的 doc 子目录中的 Magic Tutorial 系列中找到更完整的文档。这些优秀的教程涵盖了基本知识和更高级的用法(例如,分层设计、多窗口和交互式布线),这些内容在此处未涵盖。
首先,从您的 shell 提示符调用 Magic。让我们将我们的示例文件命名为“inverter”。我们将使用默认的技术文件,因此我们不需要使用 -T 开关指定一个。
magic inverter
一个新的布局窗口出现,您可以在其中设计您的芯片;错误消息和反馈会出现在您启动 Magic 的窗口中(命令窗口)。Magic 处理窗口焦点的方式与您可能期望的略有不同——即使输入焦点仍然在布局窗口上,您输入的任何内容都会出现在命令窗口中。许多命令无论哪个窗口具有焦点都可以工作。当一切准备就绪后,Magic 会在命令窗口中显示一个提示符。
首先要做的是“绘制”为反相器供电的两条金属线——这些线称为电源轨。要创建第一个电源轨,请确保焦点在布局窗口中,并键入以下命令(第一列中的冒号是必需的)
:grid :box 0 0 4 5 :paint m1
第一个命令只是打开参考网格,尽管我们现在缩放得太远而看不到它。第二个命令更改框的形状,使左下角为 (0,0),右上角为 (4,5)。第三个命令用蓝色油漆填充框,蓝色油漆代表金属的第一层。框是关注的中心;大多数操作(例如,绘制和擦除)仅影响框内的区域。
现在放大以获得更清晰的图像
:box 0 0 12 32
我们没有键入长命令,而是使用了宏。只需按 z,不带冒号,布局窗口就会缩放到框。请注意,放大后会出现参考网格;每个井号标记代表一个 lambda。像这样的快捷方式非常方便,所以让我们进一步探索它们。
宏是不以冒号开头的单个按键。它可以代表任何任意类型的命令序列;例如,上面的 z 代表 :findbox zoom 命令。系统范围的宏在启动时从文件 $CAD_HOME/lib/magic/sys/.magic 中读取。您可以在主目录中的 .magic 文件中定义自己的宏。您可以随时通过输入以下内容定义宏
:macro <key> <action to perform>
鼠标提供了一种快速移动和调整框大小以及绘制的方法。在布局窗口中移动光标,并在移动时单击鼠标左键。此操作会移动框,使其左下角(锚点)放置在您单击的位置。现在在移动光标的同时单击鼠标右键。与锚点相对的角放置在您松开按钮的位置。请注意,这可能会导致锚点移动,因为它始终是框的左下角。
要了解鼠标如何使绘制更容易,请首先输入
:box 0 27 4 32
将框移动到我们想要第二个电源轨的位置。通常,您会使用鼠标移动和调整大小,而不是键入 box 命令,但我们想确保我们都将框放在完全相同的位置。现在,不用键入 :paint m1,将光标移动到现有的 m1 矩形上方,然后单击鼠标中键(对于使用 2 键鼠标的用户,同时单击两个按钮)。框现在填充了金属 1。单击鼠标中键会将框填充为您单击时光标下方的任何油漆层。这导致了一种简单的方法来擦除框中的任何油漆——将光标放在空白背景上并单击鼠标中键,这将“什么也不做”地绘制到框中。
像任何好的编辑器一样,Magic 具有撤消功能,适用于您犯错或只是想尝试某些操作而无需提交的情况。u 宏撤消上一个操作,而 U 宏实现重做命令。它不是无限的;预计只有最近的 10 个左右的操作可以撤消。但是,它足以让您擦除几个矩形并将它们恢复。
CMOS 反相器有两个场效应晶体管,一个 p 型 (PFET) 和一个 n 型 (NFET)。晶体管是通过在多晶硅(或简称 poly)上绘制扩散区来构建的。扩散区有两种类型,p 型和 n 型。PFET 是 poly 在 p 型扩散区之上;NFET 是 poly 在 n 型扩散区之上。
现在让我们开始绘制晶体管。将框定位在左下角 (ll) = (4,19),右上角 (ur) = (8,27),然后键入
:pai pdiff
Magic 理解命令的缩写,例如 pai 代表 paint。层 pdiff 是 p 型扩散区;每个层可以有在技术文件中定义的多个名称。在 SCMOS 中,p 型扩散区可以称为 pdiffusion、pdiff 或 brown。
现在是 n 型扩散区的时候了。将框放在左下角 (ll)=(4,5),右上角 (ur)=(8,9),然后键入
:pai ndiff
此时,您的布局应如图 2 所示。如果不是,您就走错了路;使用撤消命令并重试。
晶体管需要 poly 跨过扩散区。在反相器中,晶体管的两个 poly 连接在一起。这是反相器的输入——驱动反相器的信号连接到 poly。因此,最简单的方法是绘制一块跨越两个扩散区的 poly。将框放在左下角 (ll)=(5,3),右上角 (ur)=(7,29),然后键入
:pai poly
然后您的布局应如图 3 所示。
有几个重要的点需要注意。首先,poly 跨越扩散区的区域具有与 poly 和扩散区都不同的对角条纹图案。此区域代表实际的晶体管,因为 FET 是在 poly 经过扩散区时构建的。要查看这一点,请将光标放在顶部晶体管上方,并通过按 s 键选择它。现在输入 :what,它显示所选油漆的名称。在这里,所选区域是“ptransistor”;当 poly 跨越 p 型扩散区时,Magic 实际上将油漆从 pdiffusion 更改为 ptransistor。当 poly 跨越 n 型扩散区以形成“ntransistor”时,也适用相同的概念。
图 3 中需要注意的另一个非常重要的事情是突然出现白色点。如果您使用 Magic,请习惯这些点——它们表示设计规则冲突,每当发生更改时,Magic 都会始终检查设计规则冲突。要查看违反了哪个规则,请将框放在错误点上方,然后使用 y 宏,它代表 :drc why 命令。Magic 在命令窗口中打印错误原因
Diffusion must overhang transistor by at least 3 (MOSIS rule #3.4)
由于悬垂仅为 1,因此我们得到设计规则冲突。请注意,点仅出现在导致错误的区域中。
现在我们知道了问题所在,让我们修复它们。将框移动到左下角 (ll)=(2,19),右上角 (ur)=(10,27) 以包含上部错误点,然后键入 :pai pdiff。错误消失。现在为 ndiffusion 中的区域着色以消除剩余的错误。布局现在包含两个“DRC 清洁”晶体管——现在未显示错误点。
要查看哪些组件连接到特定矩形,请将光标放在其上方并快速按两次 s 键。第一次按键选择矩形;第二次选择与它电气连接的所有内容。在任一金属轨上尝试此操作,并注意它们在电气上与所有其他内容隔离。顶部电源轨必须连接到 PFET 一侧的扩散区,底部电源轨必须连接到 NFET 一侧的扩散区;否则,电流无法流动。因此,我们需要所谓的扩散区到 m1 的接触,分别缩写为 pdc 或 ndc,具体取决于我们谈论的是 p 型扩散区还是 n 型扩散区。
将框放在左下角 (ll)=(0,5),右上角 (ur)=(4,9),然后键入 :pai ndc。现在在左下角 (ll)=(0,19),右上角 (ur)=(4,27) 处创建一个 pdc。检查连接性表明电源轨连接到相邻的接触点和扩散区,一直到但不包括晶体管。此时,对照图 4 检查您的布局。
现在是输出。在 CMOS 反相器中,输出是通过连接晶体管的未连接到电源轨的侧面来制作的。将框放在左下角 (ll)=(8,5),右上角 (ur)=(12,9),并绘制一个 ndc(尝试使用鼠标中键执行此操作)。然后将框放在左下角 (ll)=(8,19),右上角 (ur)=(12,27),并绘制一个 pdc。要将这两个接触点连接在一起,我们需要它们之间的 m1:将框放在左下角 (ll)=(8,9),右上角 (ur)=(12,19),并绘制 m1。检查输出的连接性,以验证两个接触点是否连接在一起。
恭喜。您刚刚绘制了一个功能齐全的 CMOS 逻辑门的布局——但是,我们还没有完全完成。
标签为布局中指定的矩形分配一个名称,从而为每个与之电气连接的矩形分配一个名称。标签有两个用途。首先,它就像代码中的注释,让您知道信号在哪里。其次,当您选择合理的名称而不是自动生成名称时,它使仿真变得更加容易;对于自动生成,与“a_43_n15#”相比,“input”更容易记住。
让我们首先标记电源轨。通过将光标移动到顶部电源轨上方并按 s 键来选择顶部电源轨。然后键入
:label Vdd
“Vdd”应出现在电源轨旁边。选择另一个电源轨并键入 :lab Gnd。请注意,标签的放置有些随机。现在选择两个晶体管之间的 poly,然后键入 :lab in center。这会将标签放置在所选矩形的中间。最后,选择输出 m1 并键入 :lab out center。现在完成的布局应如图 5 所示。
要保存您的布局,请键入 :save。如果您想以另一个名称保存它,只需也键入名称;例如,:save newcellname。Magic 会自动附加 .mag 扩展名。
下一步是模拟布局以验证其是否正常工作。Magic 的 .mag 文件只是简单地存储为各种类型矩形的集合,但仿真器需要电路组件的网络表,例如晶体管和电容器。回想一下,网络表是电路组件列表以及它们的连接方式。
您可以使用 Magic 本身从布局中提取网络表。Magic 的提取器识别技术文件中定义的各种矩形组合,并将它们转换为适当的电路元件。它还提取形状之间的连接性,从而生成完整的网络表。
您必须选择一种“提取样式”,该样式告诉 Magic 如何解释布局中的形状。要查看可用的样式,请键入 :extract style。对于我们的目的,样式名称的重要部分是数字,它指的是最小晶体管长度。例如,在我们使用的 lambda=1.0(scna20_orb) 样式中,此长度为 2.0μm。这应该是当前的样式;如果不是,请输入
:extract style lambda=1.0(scna20_orb)
要完成提取,只需键入 :extract。Magic 会创建一个 inverter.ext 文件。此文件是电路的中间描述,包含构建各种仿真器网络表所需的所有信息。我们现在准备开始仿真,因此输入 :quit 退出 magic。
首先,将 inverter.ext 文件转换为 SPICE 可以理解的内容。Magic 发行版附带的 Stefanos Sidiropolous 的 ext2spice 程序执行此转换。只需输入
ext2spice -f spice3 inverter.ext
我们指定“spice3”格式输出,因为早期的 SPICE 版本无法处理标签的文本字符串。
我们现在有了一个 SPICE 可以理解的文件,但它在一个重要的方面是不完整的。为了让 SPICE 正确地模拟一个器件,它需要一个模型,即对器件行为的数学描述。 特别是,我们现在需要我们在设计中使用的两个晶体管(n 型和 p 型)的模型。
SPICE 有各种内置的晶体管模型,这些模型用参数集来指定。这些参数根据所使用的制造工艺而变化,因此用户需要为所使用的工艺指定正确的参数。幸运的是,您不必自己弄清楚这些——您可以从 MOSIS 的 ftp://ftp.mosis.edu/pub/mosis/vendors/orbit-scna20 获取它们。这个 FTP 站点包含过去运行的大量数据;我们从“Level 2 Parameters”部分选择了一个典型的。一个小细节——请注意,您需要更改 “CMOSN” 和 “CMOSP” 以匹配 ext2spice 的输出 “NFET” 和 “PFET”。
粘贴晶体管模型后,inverter.spice 文件应如清单 1所示。
我们已经绘制了反相器并提取了网表。现在我们需要模拟芯片,以确保它在芯片制造出来后能按预期运行。像 SPICE 这样的模拟器可以进行多种不同类型的电路分析。我们将演示两种对数字电路设计师非常有用的分析。
对于数字电路,使用模拟电路模拟器似乎很奇怪。我们认为数字电路处于两种状态之一,0 或 1,而模拟电路可以取连续范围内的任何值。重要的是要认识到,数字电路实际上是一种特殊的模拟电路。在电路级别,信号是电压或电流,这些实际上是模拟量。比特的传统 0 和 1 表示只是两个特定电压值的抽象;实际值取决于芯片制造的工艺。特别是对于 CMOS,由于 FET 的工作模式,您通常可以忽略电流而只处理电压。例如,在我们提取反相器的特定工艺中,1 对应于 5 伏特 (5V)。在其他工艺中,它可能对应于 3.3V 或 2.5V。幸运的是,0 通常意味着 0V。众所周知,数字电路不会在其两个值之间瞬时切换。改变电压需要时间,而这种延迟是使您的 CPU 以 100MHz 而不是 133MHz 运行的原因之一。
结果是 SPICE 模拟模拟行为,但作为数字电路设计师,我们将把电路的输出解释为数字位,而不是它们实际是模拟电压。
专门用于数字电路的模拟器不提供 SPICE 那样的细节级别,即精度,但它们的速度要快几个数量级。 IRSIM 可通过 Magic WWW 主页获得(请参阅文章末尾的“资源”),它是此类模拟器的一个例子。
假设我们在 75 纳秒(1 纳秒 = 10-9 秒)的时间段内将测试向量 101 应用于反相器。在这段时间间隔内输出将如何变化?为了回答这个问题,SPICE 可以进行瞬态分析。在瞬态分析中,您定义输入信号,并告诉 SPICE 从电路的角度(而不是实际时间)模拟电路一段时间。瞬态分析提供时序信息,例如,输出从 1 切换到 0 需要多长时间。此分析对于验证电路的功能也很有用;您只需应用测试向量并检查输出是否正确。
让我们将向量 101 应用于我们的反相器。将以下行添加到 inverter.spice 文件的末尾
Vpwr Vdd Gnd 5 Vgnd Gnd 0 0 Vinput in Gnd 0 PULSE( 0V 5V 0ns 2.5ns 2.5ns 25ns 50ns ) .TRAN 0.1ns 75ns .end
让我们逐行查看此规范。第 1 行定义了 Vdd 和 Gnd 之间的 5V 电压源;这是电源。第 2 行是必要的,因为 SPICE 的一个特性总是将地称为 0。我们只是通过使用 0V 电压源(即短路)将 Gnd 和 0 连接在一起(从电气角度来说)。第 3 行定义了 “in” 和地之间的电压源;这是反相器的输入。查看括号中的参数,我们有一个电压源,其初始电压为 0V,“脉冲”电压为 5V,并且在 0ns 延迟后启动。它的上升时间(即从 0 切换到 1 所需的时间)为 2.5ns,下降时间(即从 1 切换到 0 所需的时间)也为 2.5ns。每个脉冲的宽度为 25ns,并在经过 50ns 后重复。第 4 行表示我们要进行分辨率为 0.1ns、持续时间为 75ns 的瞬态分析。第 5 行结束电路文件。保存文件,然后通过键入以下内容运行模拟
spice3 -r inverter.out < inverter.spice现在,让我们通过键入以下内容查看结果
sigview inverter.out我们只对顶部两个信号 “out” 和 “in” 感兴趣,如图 6 所示。
从数字的角度来看,我们看到反相器正确地产生了 010 模式;从模拟的角度来看,我们看到输出的上升时间约为 0.91ns,下降时间约为 0.89ns。
此时,布局已完成并验证,现在是时候将其发送到代工厂进行制造了。由于 Magic 文件不包含任何关于物理尺寸的信息(请记住,所有测量都以 lambda 为单位),我们需要创建一个文件,以微米为单位给出布局形状的明确尺寸。此外,由于该文件被代工厂用来图案化用于制造芯片的掩模,因此它以掩模层而不是 Magic 的抽象层来指定形状。Magic 理解两种用于描述物理几何形状的文件格式,CIF(Caltech Intermediate Format)和 Calma GDS-II;MOSIS 接受两者。我们任意选择 CIF 作为我们的例子。
正如存在多种提取样式一样,也存在多种 CIF 样式。我们需要做的第一件事是指定正确的样式。使用反相器文件再次启动 Magic(在 shell 提示符下键入 magic inverter),然后键入 :cif ostyle 以查看可用 CIF 输出样式的列表。当前样式应为 lambda=1.0(nwell);如果不是,请通过键入 :cif ostyle lambda=1.0(nwell) 使其成为该样式。
创建 CIF 文件很简单;键入 :cif write inverter。这将创建文件 inverter.cif,我们将把它发送到 MOSIS。此过程称为“tapeout”,这个术语是在 FTP 出现之前创造的,当时 IC 设计存储在磁带上。如果这是一个真正的设计,您现在就可以上床睡觉,以弥补您在过去三周内没有睡觉的事实。
我们介绍了在 Linux 下进行 IC 设计的三个强大工具
Magic,用于创建布局
SPICE,用于模拟从布局中提取的电路
Sigview,用于查看 SPICE 模拟的结果。
借助这些工具,设计师可以创建可工作的、商业质量的芯片,而无需在工作站和 CAD 软件上花费大量资金。
我们用来演示这些工具的设计示例很小,但并非无用。 事实上,图 7 显示了一个 32,701 个晶体管的 IC,尺寸为 2.71 毫米 x 6.15 毫米,使用 Magic 设计,它使用的构建块与我们刚刚制作的反相器非常相似。(这听起来可能有很多晶体管,但考虑到当前商业微处理器的晶体管数量正迅速接近 10 百万 个,芯片尺寸小于 2 厘米 x 2 厘米。)
感谢您看到这里。 显然,关于硬件设计的复杂性,我们遗漏了很多。 但是,我们已经证明 Linux 可以用于开发硬件以及软件。 也许未来的“SuperGizmo 6000”将在 Linux 机器上设计出来。

