在您的 Linux 机器上使用 gEDA 进行电路设计

作者:Stuart Brorson

很多注意力——以及炒作——都集中在将传统的办公效率程序(例如 OpenOffice.org 套件)引入 Linux。然而,Linux 桌面能力大放异彩的另一个重要——且远不如前者受关注——的领域是工程软件,特别是 CAD(计算机辅助设计)。

非工程师倾向于认为 CAD 术语指的是机械设计软件,他们在某种程度上是对的。我们已经习惯在广告和电视中看到计算机屏幕上出现复杂的机械组件图纸。然而,CAD 并不只意味着机械设计。电子设计师也长期以来一直使用基于计算机的设计工具来帮助他们完成设计任务。

用于电子设计的 CAD 软件领域通常被称为 EDA,是电子设计自动化的缩写。令 Linux 用户高兴的是,现在有许多 EDA 应用程序(包括专有的和开源的)可用于 Linux。也许最大和最古老的开源项目是 gEDA 项目。gEDA 项目是一个活跃的黑客社区,他们为许多不同的电子设计任务开发了高质量的 EDA 应用程序。在本文中,我们将研究一组 gEDA 程序,您可以使用它们从头开始设计自己的电路板。

EDA 概述

使用 EDA 工具设计电路类似于使用传统软件工程工具创建软件。也就是说,电气工程师不会只使用一个程序来完成一项工作,而是会使用各种各样的工具,每个工具都经过专门设计,以高效地完成其特定任务。他们在设计工作的整个过程中按顺序使用每个工具,这个概念被称为设计流程。软件工程师应该熟悉这个概念,他们可能会首先使用流程图工具,然后是编辑器,然后是编译器,再然后是调试器,从而创建可供分发的应用程序。

不同类型的电路设计使用不同的流程。例如,如果您从事数字电子产品工作,您可以使用硬件描述语言(如 Verilog)编写您的设计代码,然后使用 Verilog 编译器,再使用波形分析仪来模拟和分析它。另一方面,如果您正在进行模拟电路设计,您可以使用原理图捕获程序绘制您的电路,然后使用电路仿真程序(如 SPICE)来验证其正确性,然后再继续创建 PC 板。其他更复杂的设计可能需要在设计流程中增加步骤。

在本文中,我们的兴趣是创建一个普通的印刷电路板 (PCB)。要使用任何 EDA 工具集(无论是专有的还是开源的)创建简单的电路板,设计流程如下所示

  1. 收集有关您的设计要求的信息,并查找可用零件的数据表。

  2. 使用纸和笔或通用绘图程序(如 Dia)创建您设计的高级框图。

  3. 将您的详细设计输入计算机,并使用专用原理图捕获程序绘制其原理图。

  4. 网络列表化您的设计原理图,这意味着您导出一个所谓的网络列表,该列表以专用文件格式捕获您设计的所有组件和连接。

  5. 将网络列表读入布局编辑器,这是一个用于创建 PCB 的专用绘图程序。使用布局编辑器创建您的 PC 板物理布局的绘图。

  6. 从您的布局程序导出 Gerber 文件。Gerber 文件是行业标准文件,用于向您的 PCB 制造商描述您的 PCB。

  7. 将 Gerber 文件发送给 PCB 制造商。

  8. 接收您新制造的 PCB,用组件填充它们并进行测试。

在此流程的任何时候,如果您在后续步骤中发现错误,您可能都必须返回并重复某个步骤。同样,这类似于软件工程,如果您发现程序有运行时错误,则必须返回编辑并重新编译程序。唯一的区别是,如果您完成 PCB 设计并订购了电路板,然后发现设计错误,那么您会被一批坏板卡住——您不能简单地删除您的工作并重新编译。

gEDA 的起源和历史

gEDA 项目由 Ales Hvezda 于 1998 年发起。从新墨西哥大学毕业后,他对机器人技术产生了兴趣。Ales 想要使用他的 Linux 机器为机器人设计电路,但发现 Linux 上不存在合适的应用程序。因此,像许多活跃在其他领域的开源开发者一样,他感到有编写自己的 EDA 套件的冲动。Ales 通过编写原理图捕获程序和基本的网络列表生成器来满足了这种冲动。他还创建了一个网站来分享他的成果,他将其命名为 gEDA 项目,因为他想在 GPL 下发布他的 EDA 作品。

很快,一个小型的开发者团队加入了他,开始修补和添加到 gEDA 工具中。其他人也开始贡献自己的工具,其中一些是适度的设计实用程序,另一些是他们自己领域中的主要软件项目。在后一类中,有 ngspice 项目,该项目旨在开发流行的模拟器 SPICE 的开源实现;Gnucap,一个模拟/数字电路模拟器;以及 Icarus Verilog,一个用于数字逻辑生成和仿真的工具。最后,一个非常重要的相关程序是 pcb——印刷电路板布局编辑器。

由于他的想法受到了如此大的热情,并且如此多的工具与 gEDA 项目结盟,Ales 决定将他最初的工具套件重命名为 gEDA/gaf,这是 gschem 和朋友们的首字母缩写。与此同时,gEDA 套件这个术语已经开始用来指代与 gEDA 项目结盟的整个开源 EDA 工具集合。gEDA/gaf 和其他工具之间的主要区别在于,gaf 工具倾向于在设计的前端阶段使用,而其他工具则在后面的阶段使用。

自从 1998 年启动以来,gEDA/gaf 已经发展成为一个完整的前端 EDA 应用程序套件。除了核心程序 gschem 和 gnetlist 之外,还有近二十几个贡献的实用程序,包括属性管理器、符号检查器、refdes 生成器(或组件编号器)、符号生成器和文件格式转换实用程序。与此同时,各种后端工具(如 pcb、ngspice 和 Gnucap)也得到了发展和成熟,从而支持适用于不同设计类型的各种不同流程。目前,开源 gEDA 套件中的设计工具几乎可以支持任何类型的低到中级电子设计任务,提供与价值数千美元的工具相同的强大功能。

当与我的朋友和同事讨论 Linux 上 EDA 的未来时,我喜欢指出 Sun Microsystems 今天之所以成为企业巨头,是因为它为工程设计提供了一个出色的平台。Linux 可以沿着同样的道路走向伟大,因为它也为工程应用程序提供了一个强大的平台。工程师是 Linux 的天然客户群,因为他们聪明、精通技术,并且实际上希望使用 UNIX 原生强大工具(如 TCL、Perl 和 Python)来自动化他们的工作。商业 EDA 供应商刚刚开始意识到他们可以从 Linux 平台获得的客户杠杆,他们正在快速行动以服务于该市场。然而,开源开发者多年前就认识到 Linux 对电子设计的重要性,gEDA 套件的成熟性证明了他们早期的洞察力。

原理图捕获—gschem

理解 gEDA 如何使用的一个好方法是在整体设计流程的背景下检查其各个部分。第一个设计步骤涉及原理图捕获——即,使用专门的绘图程序来绘制电路的原理图表示。gEDA 套件的原理图捕获程序称为 gschem。

gschem 通常从命令行调用;启动后,它会打开一个 GUI,该 GUI 由一个绘图窗口组成,周围环绕着绘制原理图所需的所有菜单和按钮。gschem 像任何原理图捕获程序一样,具有许多内置的图形基元,对应于导线、组件引脚、电阻器、电容器、晶体管以及在创建电路设计时需要连接的其他项目。图 1 显示了 gschem 典型会话的屏幕截图。

Circuit Design on Your Linux Box Using gEDA

图 1. 运行中的 gschem。这是一个双晶体管微波放大器的一部分,正在绘制中,以准备进行 SPICE 仿真。

对于电子器件,gschem 维护一个组件符号库,这些符号是各个电路元件(如电阻器、IC、连接器以及您可能想要放置在原理图上的任何其他元件)的图形。每个符号都存储为 ASCII 文件;当您将组件符号放置到原理图中时,将打开相应的符号文件,并且其中包含的信息用于在屏幕上绘制符号。

目前,gschem 的符号库包含 2,000 多个组件符号,包括大多数常用电子零件的符号。然而,工程师通常需要为他们的设计创建新符号,因为他们想要使用的所有零件不太可能都存在于符号库中。因此,gschem——像所有原理图捕获程序一样——包含一个符号编辑器,该编辑器允许用户创建和保存他们自己的符号,然后他们可以在任何设计中使用这些符号。

gschem 理解电气连接性,这是任何原理图捕获程序的重要属性。也就是说,导线(在 EDA 术语中称为网络)知道它们只能连接到组件引脚和其他网络。当两个网络连接在一起时,gschem 会在连接点绘制一个大点,向用户指示该点存在连接。

gschem 使工程师能够将属性附加到每个组件,这是创建设计的重要组成部分。例如,如果您的原理图中有 499 欧姆的电阻器,gschem 允许您从库中放置一个电阻器符号,双击该电阻器,然后将 value=499 附加到电阻器本身。稍后,当设计被网络列表化时,组件的属性将被写入网络列表文件,并可供其他程序使用。

最后,gschem 以文档完善的 ASCII 格式保存您的设计。《Linux Journal》的读者会理解 ASCII 文件可以使用脚本语言(包括 Perl 和 Python)进行解析和操作,这有很多优点。脚本有助于节省劳动力的设计任务,例如自动化符号生成和原理图合并。许多专有的 EDA 程序不使用 ASCII 文件格式,因为他们对锁定客户感兴趣。开源 EDA 倡导者认为,开放文件格式是像 gEDA 这样的工具集的一个关键优势。

网络列表化—gnetlist

在您捕获原理图后,设计流程中的下一步是创建网络列表。gnetlist 是用于从您的原理图文件生成网络列表的 gEDA/gaf 程序。gnetlist 是一个命令行实用程序;当您运行它时,它会生成输出网络列表文件,并在您的终端窗口中显示诊断信息。

那么什么是网络列表呢?网络列表是一个文件,其中包含您的设计的连接信息,采用适合机器处理的结构化格式。存在许多不同类型的网络列表;每种类型都代表一种针对特定类型的后续处理优化的文件格式。例如,SPICE 模拟模拟器读取以 SPICE 网络列表格式编写的文件,该格式调用模拟组件之间的连接,并指定每个组件参数的值,例如电阻器的电阻。再举一个例子,用作布局程序输入的网络列表通常包含有关每个组件的 PCB 封装的信息,PCB 封装是电路板上组件焊接到的金属化图案,以及所有组件引脚之间的连接信息。

gnetlist 以独特的方式设计。它包含一个用 C 编写的前端,用于读取和解析您的原理图文件。读取完成后,gnetlist 调用一个用 Scheme 编写的后端网络列表生成器。后端特定于所需的输出网络列表。要使用的后端通过命令行标志在您调用 gnetlist 时指定。gnetlist 以这种方式设计是为了方便扩展。想要创建新网络列表生成器的用户只需编写一个 Scheme 程序来实现他们想要的网络列表生成器即可;他们不需要学习 C 或摆弄读取或解析原理图文件的内部结构。

在撰写本文时,gnetlist 可以输出 20 多种网络列表格式。gnetlist 输出的重要网络列表类型之一是 SPICE。功能强大的 gEDA SPICE 网络列表生成器 spice-sdb 支持将供应商 SPICE 模型包含到您的 spice 网络列表中。它已被证明在世界各地的 EE 学生中非常受欢迎,可能是因为它在 Web 上提供的 HOWTO 中有很好的文档记录。此外,还存在几种不同布局工具的网络列表生成器。最后,gnetlist 也用于 BOM(物料清单)生成和 DRC(设计规则检查),使用为实现这些目标而制作的任何几种后端。

对于 PCB 设计而言,重要的问题是如何将 gschem 原理图转换为适合使用开源布局程序 pcb 进行布局的格式。虽然这可以使用 gnetlist 单独完成,但过程很复杂。因此,Bill Wilson 最近为 gEDA 项目做出了贡献,编写了 gsch2pcb,这是一个 C 实用程序,它包装了 gnetlist 并输出正确的文件以读入 pcb 进行布局。gsch2pcb 是 gEDA 套件的关键补充,因为它使从 gschem 原理图到 pcb 布局的过渡变得容易,并且它也说明了 gEDA 在线社区的活力。

布局—pcb

一旦使用 gsch2pcb 创建了初始布局文件,您就可以布局您的设计了。这涉及使用布局编辑器——一个专门的绘图程序,用于将金属走线、组件、钻孔和其他结构绘制到您的电路板上。与 gEDA 一起使用的 PCB 布局工具恰如其名,称为 pcb。pcb 通常从命令行调用;运行后,它会呈现一个绘图窗口,并附带绘制电路板所需的所有小部件和工具。图 2 显示了运行中的 pcb 的屏幕截图。

Circuit Design on Your Linux Box Using gEDA

图 2. pcb 中的电路板布局。红线表示连接电路板顶层组件的金属走线;大的蓝色区域对应于电路板背面的接地层。还可以看到许多组件封装。

pcb 的历史非常有趣。它最初由 Thomas Nau 于 1990 年为 Atari ST 编写。Thomas 于 1994 年将 pcb 移植到 UNIX,并使用 Xaw (X11) 小部件集作为其 GUI。大约在 1998 年,Harry Eaton 接手维护该程序,并且在众多其他贡献中——实现了输出 Gerber 文件的能力。pcb 大约在两年前被放置在 Sourceforge.net 上,目前由 Harry、D. J. Delorie(djgcc 的作者)和 Dan McMahill 维护。最近,Bill Wilson(gsch2pcb 的作者)更新了 pcb 的 GUI 以使用 GTK+,这是一个非常受欢迎的现代化。

使用 pcb 创建电路板布局,与任何布局编辑器一样,首先涉及放置组件封装,然后布线金属连接——称为走线或迹线——在封装的引脚之间。pcb 允许您定义要使用的走线宽度,这在绘制电源(通常较粗)走线与信号(通常较细)走线时非常重要。

对于组件封装,pcb 支持两个不同的封装库:一个基于 M4 宏语言的旧版库和一个较新的库 (newlib),后者通过 ASCII 文件定义封装,该文件定义构成封装的所有图形元素,例如金属焊盘和环、钻孔、丝网印刷文本等。在渲染您的布局时,pcb 使用来自任一库的封装来绘制每个组件所需的封装;使用的封装是在您的 gschem 原理图中指定的封装属性调出的封装。

由于 pcb 的 newlib 使用 ASCII 文件格式定义封装,因此可以使用脚本自动生成封装。为此,gEDA 社区的另一位成员 John Luciani 使用 Perl 脚本创建了大量有用的 pcb 封装;脚本和生成的 pcb 封装都可以从他的网站免费下载(请参阅在线资源)。

pcb 支持在多达八层上布线,这意味着您可以在 PCB 本身上多达八个单独的层上绘制金属连接。这对于实现高密度组件放置非常重要,而高密度组件放置是现代紧凑型设计的常态。不同 PCB 层上的走线之间的连接通过将一对走线连接到过孔来完成,过孔是在 PCB 上钻孔并随后镀上金属的孔,从而将一层上的走线与另一层上的走线电气连接起来。

一旦您使用 pcb 完全布局了您的电路板,您就可以生成 Gerber 文件,这是您的电路板布局的行业标准表示形式。当您生成 Gerber 文件时,还会自动创建装配图、钻孔文件和取放文件。将所有这些文件发送给任何 PCB 制造厂,很快您就会收到在您的 Linux 机器上由您设计的专业质量的 PCB!

成品板

一旦您的裸 PCB 返回,您可以自己贴装(组装)它们,也可以将它们发送给装配商来为您完成这项工作。图 3 显示了使用 gEDA 工具创建的示例 PC 板。该板与图 2 中所示的板相同。它是一块双层板,可聚合来自多个传感器的信号并将它们路由到 A/D 模块。此示例板不是特别大或复杂;使用 gEDA 工具定期完成更大和更复杂的板。然而,它确实显示了各种组件类型:几个通孔连接器、表面贴装和通孔器件、插座中的 14 针 DIP 以及孔和其他元件。这说明了 pcb 处理多种不同类型电气组件的能力。要查看更多使用 gEDA 套件完成的电路板,请查看 gEDA 网站上的特色项目,或进行快速 Google 搜索。可能的电路板种类仅受您的想象力限制!

Circuit Design on Your Linux Box Using gEDA

图 3. 使用 gEDA 套件创建的传感器板。显而易见,pcb 可以处理各种组件类型。

本文资源: /article/8530

Stuart Brorson 自 1994 年以来一直是狂热的 Linux 用户,并于 2003 年成为 gEDA 项目的贡献者。Stuart 的日常工作是一名专业电气工程师,从事光谱学科学仪器的设计。

加载 Disqus 评论