01signal.com

那么,你想成为一名 FPGA 设计师吗?

本页是关于如何成为专业 FPGA 设计师的系列五篇文章中的第一篇。我先做一个总的介绍,并就如何起步提几点建议。

引言

这个系列是写给那些想学 FPGA 设计的人——尤其是打算以此为职业的人——但面对外面那片信息的汪洋又不知从何下手。教程、博客文章、视频课程、论坛帖子,多得数不清。而如今,其中很大一部分内容都是 AI 生成的。要分辨哪些出自真正懂行的人之手,哪些只是看上去很专业的废话,实在不容易。

如果你已经觉得自己被“必须学的东西”压得喘不过气,那你绝不是一个人。要掌握的东西确实很多,而且很难判断哪些真正重要,哪些只是噪音。

我不是来告诉你该做什么,也不是要给你一份必须逐条照做的课程表。我想做的是解释每项技能的目的和重要性,这样你就可以自己决定先学什么、什么时候学。这本来就已经够难了。如果能帮你省下不必要的功夫、更快达到目标,那当然更好。

但如果你的目的只是通过一场求职面试,那我恐怕帮不上太多忙。求职面试是难以捉摸的东西。每个面试官都有自己评估候选人的方式,而且他们常常想找的是一个让自己想起自己的人。毕竟,我们都觉得自己是屋子里最聪明的那个人,不是吗?也许最天真的办法反而管用:只要你有实力,总能找到工作。

FPGA 是用来做什么的?

在深入讨论各种技能之前,不妨先花点时间想一想这个职业究竟是做什么的。人们会用 FPGA 造出什么?怎么造?又为什么造?

情况是这样的。某人需要为一件新产品做一块印刷电路板(PCB)。板上大多数元件都可以在市场上买到:存储器、电源、连接器等等。但在整个系统的核心位置,总有一个功能是世上任何现成元件都实现不了的,至少无法完全按产品所需的方式实现。于是你决定自己设计一块芯片。那就是专用集成电路(ASIC),而它真的非常非常昂贵。生产周期可能比一套房子还贵,而且如果之后发现一个缺陷,你能做的只有发布一份勘误报告。再过一阵子,在财务上说得通的情况下,再推出一个新版本。

替代这种昂贵且有风险的设计周期的,就是 FPGA。这类芯片就像放在一块硅片上的电子套件:它包含许多小构建块和导线,而这些导线并没有按某种特定方式连接好。相反,有一大块数据包含了 FPGA 应当如何工作的信息。这些数据被称为比特流(bitstream)。比特流中的信息会配置 FPGA 内部的每一个小构建块,也决定内部导线如何连接。

当比特流(bitstream)加载进 FPGA 之后,我们得到的东西就和专用集成电路(ASIC)有些类似:它是一块芯片,表现得就像我们为了自己的用途专门制造了硅片一样。只不过它更慢、更耗能,而且元件本身也比批量生产出来的 ASIC 更贵。

不要将比特流(bitstream)与软件混为一谈。它们相似的地方在于:一旦出了问题,往往只要修改一行代码并重新编译就行。但 FPGA 不是处理器。它不会“运行”任何东西。把 FPGA 想象成一个由许多小型逻辑机器组成的大型阵列,而比特流会告诉每一台小机器该做什么。

总结一下这一点:FPGA 是电子项目中缺失的那块砖。它用在你原本希望有一块专用集成电路(ASIC)的地方,但为了降低开发风险和成本,你宁愿为每个元件多花钱,并接受更低的性能。而这些风险和成本仍然很高,只是没那么高了。

FPGA 设计师的主要工作,就是完成那些最终生成比特流(bitstream)的设计任务。这可以比作软件设计师编写代码,最后得到一个可执行的软件二进制文件。但 FPGA 设计师的角色绝对不止于此,因为 FPGA 是电子项目的一部分。这一点我稍后会讲到。

如果项目需要嵌入式处理器,那部分通常也属于 FPGA 的一部分。在某些项目中,人们会选择把处理器作为独立元件。无论哪种方式,处理器都可能执行简单任务,也可能表现得像一台运行 Linux 或其他操作系统的完整计算机。

不过——曾经有很多人热炒 FPGA 用作数据中心里的协处理器和硬件加速器。也有人说 FPGA 可以用于 AI。至今仍有公司在吹这个号。我认为这从来就是胡说,而现在已经很清楚:在那一领域 GPU 更胜一筹,尤其是任何和 AI 沾边的应用。所以别上当。FPGA 的用途就是电子项目里那块缺失的重要砖块,有时是极其复杂的项目,但很少用于别的场合。

为什么它这么难?

这么说吧:如果我写了一整篇五页的文章来讲怎样才能成为好的 FPGA 设计师,那这件事大概确实不容易。

FPGA 设计师收入不错,因为这是个复杂的职业,原因在于它同时结合了三项技能。

第一项技能是电子。归根结底,你开发的东西要待在 PCB 上,还得和板上的其他元件通信。项目里涉及引脚、电压、连接器、时钟振荡器等等一大堆东西。你设计的逻辑要和真实板子上的真实元件对话,面对的是真实的电压和真实的温度。

第二项技能是“软件”。你编写和使用的文件看起来非常像软件:Verilog 文件、约束文件、编译脚本(script)。但处理这类“软件”要复杂得多,原因我稍后会讲。可以说,编译器不像软件编译器那样站在你这边,调试工具也一样。

第三项技能是与应用相关的知识。作为 FPGA 设计师,你常常需要自学与项目相关的进阶主题(或者你在以往经验或学业中已经掌握的内容)。信号处理、网络协议、与计算机之间的接口协议、把数据编码送往显示器的各种标准,以及与你在开发的具体产品相关的一长串其他学科。总会有新的通信协议、新的安全规范,或者某个接口要求古怪的新元件等着你去学。

但作为 FPGA 设计师,真正的挑战在于:项目的主要专业领域往往和 FPGA 设计本身紧密相关。这意味着你可能需要成为公司所应用的核心技术的专家。典型的例子有 FIR、IIR 之类的数字滤波器、FFT、抽取与内插;音频与视频处理;无线与软件无线电;雷达;医学影像;网络与包处理;以太网;PCIe 和 USB;HDMI、DisplayPort、SDI、MIPI 之类的视频标准,以及它们那套视频时序和色彩空间的麻烦事;还有控制系统。而且远远不止这些。

你并不需要把这些都学会了才能成为 FPGA 设计师。但在前进的过程中,你最终会学到其中相当多的内容。所以,如果“要不断学习新技术”这个想法对你来说像一场噩梦,那我想问一句:呃,你确定要进入 FPGA 这个领域吗?

我需要成为电子高手吗?

这里有个也许算好消息的消息:FPGA 项目里的逻辑大致可以分成两类,而其中一类完全不需要任何电子学知识。

第一类是接口逻辑。这类逻辑负责与外部元件通信,或者与 IP 核(IP core)通信——无论是硬核还是软核。想想那些采集或产生视频信号、射频信号的芯片,还有 RAM 芯片之类。这类逻辑要和这些元件对接,而这一接口正是 FPGA 与物理世界相遇的地方。要实现这类逻辑,你需要理解电平、时序预算、抖动(jitter)这些东西。

第二类是处理逻辑。真正的计算发生在这里:视频图像增强、数字滤波器、按网络协议组织或解析数据流等等。这类逻辑通常以两种模式之一工作。要么从 FIFO 或其他存储元件读写数据,这种情况下我们可以称之为“纯逻辑”项目。要么与数据流同步,比如一个数字滤波器,从射频信号接收采样,每来一个输入采样就产生一个输出采样,并带有流水线(pipeline)延迟。最后这种往往更难实现,因为每一级都必须跟上数据流的速度。

这里的关键在于,实现处理逻辑完全不需要电子学知识。不管是我所说的“纯逻辑”,还是与外部数据流同步的逻辑:一切都发生在 FPGA 内部,外部世界对逻辑设计毫无影响。因此这是进入 FPGA 世界最轻松的路径。不过有个前提:一个项目里这类逻辑未必很多。而且在小公司里,你什么都得干一点。逃不掉的。

并不存在“典型项目”

如果你去找关于 FPGA 项目如何推进的描述,会看到很多漂亮的框图。对它们要打个折扣。现实要混乱得多,原因如下。

首先,PCB 往往在还没弄清它到底要干什么之前就已经开发出来了。听起来很疯狂,有时候确实如此,但这也是 FPGA 之美——灵活性——带来的结果。只要硬件没有把这份灵活性锁死,你之后可以再决定这块板子该做什么。

其次,FPGA 项目的功能几乎总是逐步开发出来的。先做最基本的功能,然后再随着时间不断增加。一部分原因是管理者通常希望看到东西能动起来,另一部分原因是需求总是在变。PCB 随着项目一起修改也是常有的事,为了支持新的功能需求,或者解决硬件 bug。

第三,接手一个已有项目比从零开始更常见。即使是看起来全新的项目,往往也是从已有的 FPGA 设计和已有的 PCB 出发,改造成满足新需求的样子。如果做过软件开发的人觉得这很熟悉,那并非巧合。

所以你可能会听到关于“典型 FPGA 项目流程”的说法:规格定义、架构、RTL、仿真、综合、实现、时序收敛(timing closure)、比特流(bitstream)、上板调试、验证。或者诸如此类。我不想说这完全是胡说,所以我换个说法:我从没待过一个按这种方式运作的项目。这些阶段有的彼此交叠,有的干脆被跳过,而且通常它们全都同时进行。做 FPGA 这一行的要点,就是习惯所有事情并行发生。

要点是这样的:在公司里,你很可能一开始是给已有项目添加功能。如果那个项目结构良好(呃,很少见),你就不必从第一天起就什么都懂。

我该怎么起步?

学 FPGA 设计,是理论技能与动手能力的结合。你愿意先摆弄电子硬件,还是先学理论,还是一路都两者兼顾,全看你自己。这三种方式都行得通。

不过有一点我要提醒你:小心不要跟 FPGA 爱好者学。这会适得其反,我是认真的。FPGA 这个职业的主要难点在于做出可靠的设计。爱好者一般不在乎这个,因为他们做的不是要在现场跑十年的产品。所以他们常常提供一条又短又快的路径,跳过专业 FPGA 设计所必需的那些细小却关键的地方。跟着他们学,你会养成很糟糕的习惯。

怎么分辨一个人是爱好者,还是值得你学习的人?在自己还没掌握知识之前,很难判断什么对什么错。但如果作者对 FPGA 设计抱有那种正确的严谨态度,你多少能感觉到。我在本系列的最后一篇里描述了这种应有的性格。

说了这些,下面是我建议你动手实践的方式。

网上到处都是示例项目。通常最容易上手的是针对你这块具体板子定制的 FPGA 项目。这类项目常常随开发板一起提供,目的正是为了吸引你去买某块硬件。

从简单的 LED 闪烁项目开始。不是因为闪灯有意思,而是因为它能带你走完一遍完整的实现与烧写比特流(bitstream)流程。你会把工具装好,看到比特流生成出来,也能看到板子上真的发生了什么。这本身就是个里程碑。

然后试试其他示例项目。记住,这类项目的价值在于你从中理解了什么,更重要的是,你能不能对项目做出一些有意义的修改,并观察会发生什么。一个你改不动的项目,就是一个你什么也没学到的项目。

说到这里,要当心那些附着一长串操作说明的厂商演示项目:点这里、点那里,最后板子上做出了很炫的效果。如果你一路下来什么都没搞懂,项目又复杂到你无法理解和修改,那这个项目对你毫无价值。那是个演示(demo),不是设计示例。

最后、也是最难的阶段,是用自己选定的项目来挑战自己。你可以从网上现有的项目中获得大量灵感,但真正的要点是全部由你自己来做。和大多数公开发布的项目不同,你的项目的想法可以毫无意义、可以很傻。用 LED 和按键做个傻乎乎的小游戏,把开发板变成一件乐器(用 PWM 产生类似模拟信号的输出),让 LED 以各种花样变暗、闪烁,想到什么就做什么。这类项目通常不会被公开,因为谁愿意在一个结果毫无意义的小点子上花时间呢?嗯,如果是为了练手艺,结果有没有用并不重要。要点是它能正确工作,而你是用正确的方法做到的。从 LED 和按键起步,再向更具挑战性的东西攀登。

关于 FPGA 的短视频可能很有用,尤其是那些演示如何用硬件做具体事情的。较长的视频通常学习效率更低,因为它们往往啰嗦且没有重点。

最重要的是:掌控学习过程。想清楚你要获得哪项技能,然后去找能帮你获得它的资源。不要被人用一串教程、视频或者别的什么牵着鼻子走。

我该买哪块开发板?

这取决于你想从哪条路起步:“处理逻辑”,还是更偏电子的实验。下面我会分别讨论,但先说两条两种情况下都适用的建议。

首先,也是最重要的,挑一块便宜的板子。把它当作你的第一块,而不是最后一块。所有板子的原理都一样,包括那些 FPGA 很小、逻辑单元很少、性能也不怎么样的简单板子。你在更贵的板子上能做的花哨项目,教学价值通常微乎其微。一开始你得把基础打对,而几乎任何一块 FPGA 都足够。等你觉得自己已经超越了第一块板子,你会更清楚下一块该选什么。

第二,挑一块用 AMD FPGA 的开发板。别的板子可能更便宜、技术上更好,但 AMD 在 FPGA 市场占主导地位,所以用他们的 FPGA 和开发工具套件(Vivado)的经验最有可能在未来帮到你。

此外,其他 FPGA 厂商也在尽力让从 AMD 转过来的过渡尽可能平滑,特别是提供与 Vivado 类似的开发工具。所以即使你最终用的是别家的 FPGA,你还是有个不错的起点。我绝不是说 AMD 的 FPGA 对所有应用都是最佳选择,但作为学习起点,AMD 是最好的,哪怕你以后要转到别的厂商。

在 AMD 提供的各个 FPGA 系列中,我强烈建议 Artix-7 或 Spartan-7。如果你想在 FPGA 里试试 ARM 处理器,我建议 Zynq-7000 系列。这些器件中较便宜的那些实际上就是加了 ARM 处理器的 Artix-7 FPGA。所以如果你买了一块这样的板子,既可以把它当 Artix-7 用,也可以选择同时用上 ARM 处理器。一块 Zynq-7000 等于二合一。

Artix-7、Spartan-7 和 Zynq-7000 都是相当老的 FPGA 系列。不过,它们和市面上最新的 FPGA 之间的差别只是性能(特别是时钟频率)以及一大堆对 FPGA 初学者毫无意义的专用逻辑块。如果你能用上 Artix-7(或 Spartan-7)的全部特性把项目做好,那你基本上该会的都会了。没必要去碰 Ultrascale、Ultrascale+ 和 Versal。

Artix-7、Spartan-7 和 Zynq-7000 的另一个好处是:针对这些 FPGA 时,你可以完全免费地使用 Vivado(Windows 或 Linux 版)来从 Verilog 生成比特流(bitstream)、烧写 FPGA 以及仿真你的设计。这类器件还能免费使用大量 IP 块,软件开发套件也是如此。所以你能用 Vivado 做很多事情而不用为软件付费。实际上,几乎所有 FPGA 厂商都允许免费使用他们的开发工具来开发较简单的 FPGA 系列。

如果你想选一块搭载更新、更“重”的 FPGA 系列的板子,一定要确认在这款 FPGA 上运行 Vivado 是否需要付费许可证。

用于“真正”学 FPGA 的仪器设备

如果你想认真地进入 FPGA 领域,就需要置办一个小小的电子实验室。其实真不算什么大事,你需要买的大部分东西都很便宜,在任何电子创客商店都能买到:小电阻、杜邦线等等。还要确保有一台简单的数字万用表。最简陋的也能用。准备一些基本的焊接工具也是好主意。

我建议购买的昂贵物件是一台简单的示波器。这种测量仪器显示电压随时间的变化。这样你就能观察 FPGA 物理输入输出引脚上的信号。你也能看模拟电子信号,比如驱动扬声器的电压。

示波器很重要,因为你应该学会用这个仪器来检查和调试你的设计。方便的选择是独立式示波器。但也有“USB 示波器”,把它接到电脑上,用电脑上运行的程序观察信号。这都无所谓,两种方式都行。也不需要什么花哨的功能。

但要确保示波器的模拟带宽够用。模拟带宽是你所观察信号变化速度的上限。注意这不是示波器的采样率——采样率有时也被简称为“带宽”,大概是为了让买家糊涂吧。当数字信号的变化速率接近模拟带宽时,它在屏幕上显示的边沿会变得平滑,即使实际上的跳变既陡又快。比这更快的数字信号可能根本分辨不出来。

所以如果你想省点钱起步,就选 10 MHz 模拟带宽的。这意味着你的逻辑设计时钟频率不应高于 10 MHz,否则输出信号在示波器上可能显示不正常。其实,保持在 5 MHz 以下会更好。对 FPGA 来说这是很低的频率,但作为入门阶段完全没问题。唯一的麻烦是,你可能会侥幸做出一个只在低频下才工作的、质量很差的逻辑设计。所以如果你走这条路,一定要试着把时钟提到 100–200 MHz,并确认时序约束(timing constraints)得到满足,以确保你的设计不是只能在极低时钟频率下工作。

如果你能找到模拟带宽 50–100 MHz 而价格相差不大的示波器,我建议就买它。我自己用的话,不会买模拟带宽低于 100 MHz 的示波器。

另外要确保的是,示波器至少有两个输入通道,这样你就能同时看两个波形。说起来挺意外,在大多数实际场合,两个波形通常就够了。我的示波器有四个输入通道,有时我会用上三个,四个全用的情况很少。

关于示波器的最后一点:一定要连探头一起买,通常和示波器一起买。在 10 MHz 下这可能没那么关键,但频率越高,用探头就越重要。

那么……FPGA 开发板呢?

实验室设备备齐了,现在可以选买哪块 FPGA 开发板了。答案很简单:挑一块便宜的、搭载 AMD FPGA 的。那多半就是基于 Artix-7 或 Spartan-7 的板子。或者 Zynq-7000,如果你想享受下一节提到的那些好处。现在我先把重点放在偏电子的 FPGA 环境上。

最需要注意的是,板子上是否带有用于给 FPGA 编程的 USB 接口。为了说明这一点,我先讲几句关于 JTAG 的话。

要把比特流(bitstream)写进 FPGA,FPGA 上有几个用于实验目的的引脚,称为 JTAG。这个接口对别的花招也很有用(尤其是 ILA),但最重要的用途是把电脑上的比特流送入 FPGA。早年间,有一个单独的小盒子(常被称为“JTAG 线”或“JTAG 下载器”)通过 USB 连接到电脑。小盒子的另一端是一组导线,接到 FPGA 板子上的排针。

如今,很多 FPGA 开发板已经内置了这个功能。这意味着你不需要那个“JTAG 下载器”,可以直接把 FPGA 开发板连到运行 Vivado 的电脑上,用你设计的比特流配置 FPGA。简单又方便。

更简单、更便宜的 FPGA 开发板没有这个功能,需要你单独购买 JTAG 下载器。官方的 JTAG 下载器相当贵,而非官方的可能可靠、也可能不可靠。所以作为第一块板子,我觉得多花一点钱来彻底避开这个问题是值得的。至少在你熟悉这套工作流程之前是这样。或者选一块 Zynq 开发板,它可以从 microSD 卡读取比特流。

JTAG 就说到这里。现在说说板子本身的功能。

板子应当有能接到有意义的东西上的 I/O。在学习过程中,把板子连到另一小片电子电路上很有好处,也许是一个模拟元件的开发板之类的东西。最好的学习项目就是你真正自己做出点东西的项目。因此我偏爱带通用排针、能用杜邦线接任何东西的板子。

我通常偏爱板子上有很多 LED 和按键,可以做些直接的交互。对最初的项目来说,一个 7 段数码管也不错。

板子通常自带一些外设元件。想想你能不能拿它们做个小项目,或者那样会不会太复杂。比如,很多 FPGA 开发板有 HDMI 输出插座。这样可以产生直接送到普通电脑显示器的输出信号。你很可能会用一个现成的逻辑块来把像素转成视频信号,因为这实在太复杂了。所以 HDMI 输出本身帮不了你学到多少。另一方面,在视频输出上生成各种画面图案,你能学到不少东西。也许做个简单的文字显示?视频艺术?分形?在屏幕上一块 768×768 像素的区域内显示一幅 100×100 像素的图像,还要有正确的线性插值?把这些做对,你就有点门道了。

那么该选哪块板子?试着想想你要拿板子做什么,你手头有什么设备。然后挑一块价格不太高的。再说一次,把这块板子当作你的第一块,而不是最后一块。

搭载 Zynq-7000 的开发板

对于那些不想马上深入电子学的朋友,也有一条路可以照样用 FPGA 做有意思的事。诀窍是让逻辑与处理器交互,而不是与物理信号打交道,这样就不必真的去碰电子硬件。思路是使用带嵌入式处理器的 FPGA,比如 Zynq-7000。

但嵌入式处理器怎么让起步变得更容易呢?只要你不一头扎进处理器相关的问题以及它与逻辑部分(也就是“FPGA 部分”,称为“PL”)的交互,就可以。反过来,先用一个现成的套件来处理那部分,让你能用简单的手段与逻辑交互。如果你想深入处理器部分的细节,以后有的是时间。

最容易做到这一点的方式是从 Xillinux 开始。这是一个软件包,能让你轻松地准备好一张 microSD 卡,让你的开发板变成一台运行 Linux 的小电脑。你可以给板子接上键盘、鼠标和显示器,得到一个简单的图形桌面,可以打开终端窗口,也可以使用图形化编辑器。你可以用 gcc 和 Makefile 直接在板子的处理器上编译 C 程序,也可以在处理器上运行脚本(script)。

不过,Xillinux 真正的要点在于,它还能让你通过一个简单的接口与“FPGA 部分”(你用 Verilog 写的逻辑)通信。在 Xillybus 的基础上,软件侧用简单的文件 I/O 收发数据,逻辑侧则用标准的 FIFO 做同样的事。这种数据交换方式的重要之处在于,它不是为学习而人为搞出来的把戏:FIFO 本来就是 FPGA 项目里交换数据的常用方式。

所以如果你对设计“处理逻辑”(把数据作为输入、进行处理、再产生输出数据的逻辑)感兴趣,你从一开始就会走上正确的路:在“真实”的 FPGA 项目里,这类逻辑通常通过 FIFO 拿到要处理的数据,并把结果输出到另一个 FIFO。在“真实”的 FPGA 项目里,这些 FIFO 的另一侧通常是别的逻辑模块。而你用 Xillybus 时,另一侧是运行在处理器上的软件。或者干脆就是一条简单的 shell 命令,把数据直接从文件拷贝进 FPGA 的 FIFO,或从那里拷出来。

总结一下,使用 Xillinux 和 Xillybus 能让你顺利起步,把精力集中在你自己的第一批逻辑上,并用类似电脑的接口轻松测试它。此外,这种环境还让你可以方便地用简单的计算机程序或脚本(script)从处理器直接控制这些逻辑。最重要的是,对于不涉及与外界打交道的项目来说,这一整套环境相当自然。

使用 Xillinux 时,有两块开发板特别值得一提:Smart Zynq 和 Z-Turn Lite。它们都是低成本开发板,并且有现成的套件可以搭起 Xillinux。本网站上也有几篇文章介绍可以用 Smart Zynq 开发板做些什么。

不熟悉 Linux 的人可能会觉得,用 Zynq-7000 处理器上跑的 Linux 系统通过 Xillybus 与“FPGA 部分”交互有些困难。用这个相对简单的 Linux 发行版来开发和运行软件,也可能让人望而生畏。

如果你更喜欢一台运行 Linux 或 Windows 的“真正”电脑,那么同样的、基于 Xillybus 的简单配置可以借助带 PCIe 接口的 FPGA 开发板来实现。这类板子更贵,但可以插到运行 Linux 或 Windows 的电脑里,用完全相同的方式与 FPGA 交换数据。这种情况下,Artix-7 绝对够用,不过你可以到 Xillybus 的下载页面查看所支持的 FPGA 系列列表。

说到 Artix-7,我再强调一遍,较便宜的 Zynq-7000 器件就是加了 ARM 处理器的 Artix-7 FPGA。所以完全可以无视处理器,把一块 Zynq 开发板当作普通的 Artix-7 板子来用。

有一个差别是,Zynq-7000 FPGA 还能从 microSD 卡获取比特流(bitstream)。因此,要更新比特流,只需要一个 USB 转 microSD 的读卡器——前提是你的电脑或笔记本上没有自带这个功能。其实,你还可以通过以太网用 U-Boot 走 TFTP 获取比特流,但那需要架设服务器,所以不是最省事的办法。

Zynq-7000 FPGA 也和任何 FPGA 一样有 JTAG 接口,但很少用到,有时甚至根本没连到板子的引脚上。

信息量有点大,总结一下:

FPGA 与 AI(大型语言模型)

最后,来说说那个绕不开的话题。AI。

AI 主要从互联网上的公开材料中学习,而这些材料绝大多数出自爱好者之手,或者就是 AI 自己写的。因此,AI 在这一领域的建议质量明显低于,比方说,它在软件相关问题上的回答。后者也并非总是那么出色,但那是另一个话题了。

那么 AI 会终结 FPGA 这个职业吗?未来会怎样,没人知道。不过不妨想想我们从 80 年代计算机和机器人的引入中学到了什么。有几个规律值得注意。

计算机和机器人取代的是愚蠢而重复的工作。确实有很多人丢了饭碗,但丢饭碗的正是做那些工作的人。从事需要智慧的工作的人留在了岗位上,而且变得更高效、收入更高。

与此同时,机器的实际应用范围远小于理论上可能的范围。在工厂里,人还在做本来可以由机器人代替的体力活,连汽车制造都是如此。建筑、木工、面包房等等也是一样。我猜原因是这样的:够聪明、会用机器人和计算机的人很稀缺,而能用双手学会一项活计的人多得是。

基于 LLM 的 AI 的普及大概会走同样的路。重复而愚蠢的任务会被 AI 取代,而需要聪明才智的任务会由把 AI 当工具用的人来完成。

所以,对你这个未来的 FPGA 设计师来说,结论很简单:一定要深入地学好这门职业。只懂 Verilog 是不够的。FPGA 设计师从来就不只是写 Verilog 代码。只要指令足够具体,AI 也能写出 Verilog。FPGA 设计的核心是做出明智的决策,而这些指令正是由这些决策产生的。把决策变成代码,是最容易的一步。

更深的理解和良好的判断力,是 AI 无法替代的,至少目前如此。即使有一天用机器替代人的判断成为可能,那也必将是最后才会被替代的东西。如果 AI 的普及方式和以往的技术一样,那么人的判断仍然要由人来做。

还有一点:即使 AI 写好了 Verilog 代码、时序约束(timing constraints),完成了其他所有任务,也总得有人来验证所做的是否正确、是否是向前推进的有利方向。LLM 本质上是对大脑活动的一种模拟,因此也和人一样有犯错的倾向。这就需要一位既有能力又有智慧的人,既要引导 AI,也要检查 AI 的输出是否合格。这意味着未来的设计者要比今天的工程师更专业。平庸的工程师可以被 AI 取代,但前提是有一位优秀的工程师在掌控它。而这样的工程师很难找,所以很有可能 AI 在这个行业里并不会被大规模使用——正如传统行业里至今仍有人在做体力活一样。

归根结底:不管你选择学什么,都要学得彻底、学得深入,否则总有一天会被 LLM 踢屁股。也许那一天已经来了。

本系列的第一页到此结束。下一页会讲我认为重要的理论技能,并解释为什么我认为它们值得学习。

本页由机器从英文翻译而来。如有疑问,请参阅原文。
Copyright © 2021-2026. All rights reserved. (852e87d4)