开源在电子设计自动化中的应用

作者:Michael Baxter
Open Source in Electronic Design Automation

开源软件的世界正在向操作系统、互联网和桌面应用程序、GUI 和脚本语言以外的领域扩展。电子设计自动化 (EDA) 用于硬件描述语言 (HDL) 是一个不太为人所知的开源开发领域。目前主要使用两种 HDL:VHDL 和 Verilog。Verilog 广泛用于半导体行业和其他领域的逻辑设计和仿真。

HDL 是用于表示硬件的语言,通常用于仿真或综合。硬件表示可以在多个抽象级别上完成,具体取决于所需的应用。查看抽象将有助于说明为什么 HDL 与 C、C++ 或 Java 等传统编程语言不同。

出于“假设”仿真的目的,硬件在 HDL 中通过在 HDL 代码中描述它做什么来建模,例如,它的电子行为方式,而不是它是什么,作为一个电路。这种 HDL 代码看起来像一个相当传统的计算机程序。HDL 中经常使用的中级抽象是寄存器传输级 (RTL)。这种代码反映了寄存器级别(使用触发器或其他称为锁存器的双稳态器件实现)的结构实现,这些寄存器之间插入了各种逻辑。描述逻辑的代码可以是行为的,也可以更像实际实现中使用的代码。RTL 首先用于勾勒系统轮廓,然后逐步将其塑造成详细的实现。通过这种细化过程,代码在某种程度上类似于宏,设计人员甚至可以利用 RTL 逻辑库。逻辑电路也可以在非常低的级别建模,其中电路的实现实际上是用代码描述的。这被称为结构化设计,它看起来可能像长长的汇编语言列表。

因此,仅使用一种语言,所有这些抽象级别都可以得到同样好的描述,并且在设计中经常使用它们的混合。HDL 和编程语言之间存在更大的差异:时间。在某种程度上,HDL 描述了“程序计数器”的最终概念,因为它们都对时间进行建模,以便可以正确排序逻辑电路的行为,例如,随着时钟在系统中推进。这导致语言语义上的巨大差异。HDL 是并发的,并且有效地模拟并行系统行为。为了性能,HDL 编译器通常实现为 C 或 C++ 程序。但是,编译器实现了固有的描述并行性的语言的语义,因为这更像硬件。

因此,与传统的软件工具相比,使用 Verilog 的 EDA 工具往往具有一些独特的品质和要求。为了将这个故事置于上下文中,我们提供了一篇对领先的开源 EDA 开发人员 Stephen Williams 的采访,他根据 GPL 编写了 Icarus Verilog 编译器。

LJ:Icarus Verilog 编译器是什么,它是如何工作的?

SW:Icarus Verilog 是 IEEE 标准 1364 硬件描述语言 Verilog(r) 的编译器。那些熟悉 EDA 行业的人会认识到它在概念上类似于 VCS,因为它是一种通常被解释的语言的编译器。

它的工作原理是将 Verilog 的语法解析为带注释的解析树,然后将其“精化”为设计图。精化过程实例化模块,评估和传播符号常量,检查所有设备的连接性,并生成经过检查的、一致的设计。

设计图通过各种优化器和逻辑综合步骤转换为新的设计图,该设计图更适合选定的目标,然后由最终代码生成器扫描。

最后,代码生成器扫描设计并生成所需的格式输出。对于仿真,它生成 C++,该 C++ 使用 Icarus Verilog 附带的仿真类库。它还包括一个 XNF 代码生成器,用于将综合设计发送到进一步的 FPGA 工具。我目前正在开发一个可加载的目标代码生成器,以支持各种其他目标格式。

LJ:您开发 Icarus Verilog 多久了?

SW:我的日志显示它是在 1998 年 11 月引入 CVS 的。在那之前的至少两年里,我有一些错误的开始。如果我没记错的话(而且很少记得),我想我在进入 CVS 之前的当前路径上已经走了将近一年。

LJ:您开发此工具的动机是什么?

SW:一个圆滑的答案是我有一台 Linux/Alpha 系统。但这并不能完全说明问题。很明显,Linux/Alpha 没有得到 EDA 供应商的太多尊重,但即使是 Linux/Intel 也很少受到关注,这也是事实。我只是无法理解为什么这么多 EDA 供应商如此热爱微软产品。

但我真正的理由并没有那么无私。基本上,我这样做是因为我能做到,而且我能做得很好。我的技能组合似乎非常适合这类项目,而且到现在为止,甚至更适合。通过这件事,我对芯片和 FPGA 设计过程的理解比任何软件工程师都应该拥有的要深刻得多。

LJ:您为什么选择开源开发机制?

SW:访问我自己的知识产权。我过去做过相当大的软件系统,由于工作变动和雇员协议,我失去了对它们的访问权限。虽然我目前的雇主对 Icarus Verilog 没有提出任何权利要求(据了解,这是我自己的工作,在我自己的时间里完成的),但版权声明明确说明了这一点,这对于所有相关人员来说似乎都是一个更安全的习惯。

一旦雇主潜在的专有利益消除,我仍然可以将其作为闭源个人项目来完成,但这有什么乐趣呢?

顺便说一句,将源代码公开似乎确实提高了我看到的错误报告的质量。我甚至收到补丁,有时包括新的端口或重要的新功能。

LJ:有哪些关键人物在帮助您完成这项工作?

SW:源代码发行版中的 README 文件中列出了姓名,但 Steve Wilson 可能提供了最大的帮助,他负责管理回归测试套件。我曾多次被告知,测试套件是编译器编写者可以拥有的最重要的单一资产,事实证明情况确实如此。

我也非常感谢用户发给我的错误报告。它们质量很高,详细且几乎总是准确的。我很少发现 Icarus Verilog 是正确的而用户是错误的,而且,当这种情况发生时,它非常微妙。

当我想决定下一步做什么时,我还使用错误报告和更改请求来指导我的优先级。它们也是回归测试的绝佳来源。

LJ:Icarus 的一些典型用途是什么?

SW:嗯,我很难知道,因为我没有营销人员来 выяснять 这类事情。我在这方面唯一的信源是那些选择联系我的人的反馈——主要是错误报告。

似乎在大型机构工作的用户可能对极其昂贵的 HDL 工具的访问权限有限,他们使用 Icarus Verilog 在家或在他们的桌面 Linux 机器上处理库部件和子系统。

我从一些人那里听说,出于各种原因,他们放弃了商业工具来模拟中小型设计,原因从纯粹的成本效益到纯粹的行动主义不等。

规模较小的 HDL 用户可能会选择 Icarus Verilog,因为它对于他们需要的来说足够好,而且价格难以匹敌。它向那些原本会被拒之门外的人敞开了 HDL 设计的大门。

LJ:Icarus 与商业 EDA 工具相比如何?

SW:Icarus Verilog 对更高质量的知名工具没有真正的威胁。他们比我领先一点。不久前,我还认为 Icarus Verilog 根本没有竞争力,但我发现有很多商业工具甚至更不值得出售。

差异在于语言覆盖率、仿真性能和综合质量。Icarus Verilog 在语言覆盖率方面实际上表现相当不错,并且仍在改进。它似乎处于平均水平。

仿真性能受到编译生成的仿真的 g++ 编译器的性能的严重影响。恐怕生成 C++ 作为中间形式是一个错误,因此随着时间的推移,我必须用直接 C 或解释型后端替换它。但是,一旦设计编译完成,它运行得相当好。

Icarus Verilog 中的综合尚未达到商业质量,尽管有些人正在有效地使用它。如果您坚持 Icarus Verilog 合成器的限制,您可以进行重要的 Xilinx 设计。我知道例如有些人已经在他们的设计流程中用 Icarus Verilog 替换了 Abel。

LJ:专有的 EDA 工具有哪些方面使 Icarus 更难做?

SW:首先,Icarus Verilog 并没有做 EDA 用户需要的一切。当然,它可以编译为 XNF,但您仍然需要特定于供应商的工具来映射和优化您正在使用的部件。我很难从“底层”供应商那里获得所需的接口信息,这让我不得不反向工程网表格式。这非常令人恼火。

“底层”工具通常不存在于 Linux 上,这也没有任何帮助。这也非常令人恼火。

LJ:Icarus Verilog 的开源性质是否比专有的 EDA 工具提供了一些优势?

SW:Icarus Verilog 比专有工具最明显的优势是您的工作环境的灵活性。如果您完成了一个您知道可以使用 Icarus Verilog 的设计,您可以确信您可以购买一台新电脑,无论这周流行什么,并且期望能够使用它。

我注意到 EDA 供应商正在宣传永不过期的许可证,但您运行它的计算机和操作系统肯定会过期。而且,当然,供应商 X 不支持您刚购买的新系统上的产品 Y 版本 1。因此,当您购买一台新电脑时,您最终也会购买软件更新,这不仅昂贵,而且如果您谈论的是例如 95% 已满的 XC4013XL 设计,则可能存在风险。

(我见过更高版本的工具破坏了现有设计。)

LJ:商业 EDA 行业似乎在采用 Linux 方面进展缓慢,尽管有些已经采用了。但是,EDA 供应商似乎特别不愿意采用或利用开源。您能推测一下原因吗?

SW:嗯,我可以想象,如果您有一个 100,000 美元的软件产品,那么拥抱开源可能很困难,但除此之外,我一无所知。我在日常工作中的所有同事都不断抱怨被微软操作系统困住,但别无选择。FPGA 供应商对这种特殊的抱怨完全没有反应。我想知道我是否可以做一个开源的布局布线器?

LJ:Icarus 涉及多少代码?

SW:大约有 50,000 行 C++ 代码,其中包含一些 C、lex 和 yacc 代码。在过去的几个月到一年里,它的规模似乎稳定在那个大小。换句话说,我删除的代码与我添加的代码一样多。

还有一个 Verilog 代码测试套件,大约有 300 个小型 Verilog 测试(16,000 行 Verilog)以及一点 Perl 来驱动它。

LJ:您能否为开源开发工具提出一些改进建议,这些改进将对像 Icarus 这样的项目有益?

SW:嗯,如果 g++ 编译速度快十倍就好了。尽管如此,我不应该抱怨得太厉害,因为 MSVC++ 甚至无法编译我的编译器。我还遇到了 Linux/Alpha 和 Cygwin32 binutils 的符号表限制。

LJ:Linux 显然是 Icarus 的中心平台。将 Icarus 移植到其他平台有多困难?

SW:我有由移植者贡献的 Solaris、NetBSD 和 Mac OS 的最后一个稳定版本的预编译二进制文件。最近,使用 Net 版本的 Cygwin32 管理了一个 Windows 端口。所有端口中最困难的部分是支持动态链接(HP/UX 在这方面一直是一个主要的刺激因素)。

但基本上,如果您有一个不错的 C++ 编译器和 GNU Make,那么您可能在编译 Icarus Verilog 时不会遇到太多麻烦。有一个 FAQ 页面,其中显示了一些常见问题及其解决方案。

LJ:Icarus 用户可能还会对哪些其他开源 EDA 工具感兴趣?

SW:嗯,当然有 gEDA 工具套件 (http://www.geda.seul.org/)。此页面链接到各种其他有趣的 Linux EDA 工具。

GTKWave 也是一个值得使用的波形查看器。我总是推荐它作为与 Icarus Verilog 的 VCD 输出一起使用的查看器。Electric VLSI Design System (http://www.staticfreesoft.com/) 非常有趣,顺便说一句,它确实可以在 Linux/alpha 下工作。

EDA 资料的大列表是 Open Collector,http://www.opencollector.org/。在那里浏览可以找到各种巧妙的东西。

LJ:您是否考虑过 Icarus 的任何其他 HDL 语言支持或功能?

SW:目前还没有。我希望跟上 Verilog 标准化进程,这对于一个人来说应该足够了。即使我奇迹般地“赶上”了完整的语言,语言前端背后的编译的所有其他方面也值得高度关注。

如果我感到无聊,我可能会考虑做布局布线。但我需要弄清楚如何在不变得过于特定于供应商的情况下做到这一点。

LJ:您最终希望 Icarus 发生什么?

SW:或多或少与 gcc 发生的事情相同。

如果有人决定付给我很多钱来继续开发 Icarus Verilog,那也会很有趣。

LJ:您在项目的哪些方面需要帮助?

SW:代码生成器!我正在努力清理代码生成器使用的 API。在我的理想世界中,我提供了一些核心代码生成器,然后让贡献者为各种网表格式和仿真引擎完成所有代码生成器。这很像 gcc 的工作方式。

回归测试!这些通常是从错误报告中收集的,尽管有时我需要为我正在开发的功能编写特定的测试。但是,我编写测试的问题是显而易见的。

LJ:您认为开源将在 EDA 工具中发挥什么作用?

SW:我真的不知道。恐怕我不太像一位贤者。至少,它应该提高专有工具的最低标准。

此外,我认为开源工具有可能保护遗留设计。您可以将工具的源代码与您的设计一起存档,但存档专有工具似乎毫无意义。

LJ:神话人物伊卡洛斯有一个不幸的结局。这个名字对您有什么意义?

SW:您会惊讶于很少有人意识到这一点; “伊卡洛斯?你怎么拼写?”

除了飞行联系(我是一名飞行员,是的,我使用 FAA 批准的羽毛)之外,它还带有热情多于理智的内涵。毕竟,我正式是一名软件工程师,而不是硬件设计师。好吧,也许我会使用示波器和逻辑分析仪,而且我曾经将导线焊接到 160 针封装(相邻引脚)的引脚上,但现实是我是一名软件工程师,飞得离太阳太近了。我曾多次被告知,Verilog 编译器比我意识到的工作量更大。硬件工程师曾多次告诉我这一点。但最近没有。我知道我应该有的局限性,即使我选择无视它们。

LJ:您能告诉我们关于徽标的信息吗?

SW:当然可以。Steve Wilson 可以补充更多细节,但基本上它是由一位退休的图形艺术家 Steve 的叔叔绘制的。这位艺术家 Charles Wilson 捐赠了该设计,用于代表 Icarus Verilog,我感谢他的贡献。它一直被这样使用。

所以您看,这场开源运动的触角甚至超越了计算机软件。

Open Source in Electronic Design Automation
Michael Baxter 自九岁起就开始从事计算机技术工作,1969 年观看《2001:太空漫游》后就对此着迷。他是一位经验丰富的计算机架构师、系统、电路板和 FPGA 逻辑设计师。Michael 拥有十项美国计算机架构和逻辑专利,以及四项作为共同发明人的专利。他与 Linux 相关的兴趣包括开源 Verilog 和 EDA 工具、Python、自动化源代码生成、并发性和硬件问题。
加载 Disqus 评论