下一代可编程逻辑开发人员

从前,在逻辑综合时代之前,工程师可能就已经被要求设计纯逻辑的系统。那时我们有雷达但没有微控制器,需要数字信号处理却没有现成的数字信号处理器。尽管如此,我们还是对雷达进行了数字处理。

那时,刚毕业的工程师就应该知道如何设计模拟和数字硬件,以及如何开发软件。我担心技能多样、兼收并蓄的工程师时代正在消逝,对于逻辑设计的未来,我充满担忧。有句格言说,拿着锤子的人,看啥都像钉子。我们是不是已经觉得,每个问题都看起来像软件问题?

如果在互联网上搜索“FPGA 应用”一词,您将找到一系列处于电气工程前沿的应用。应用范围从人工智能和语音识别到通信和图像处理。这些应用的问题在于它们并不简单;不适合初学者。若要掌握这些应用的实施方法,学习曲线非常陡峭,其中包括几个重要的主题。

一个人必须学习可编程逻辑器件本身、它们的集成开发环境(IDE;每个制造商都有自己的 IDE)、新的编程范例(即硬件描述语言 - HDL - 及其对并发性和时间概念的适应),并且必须了解应用本身。除非是专家,否则这些鸿沟几乎不可逾越。对于希望提高可编程逻辑技能的下一代逻辑设计人员来说,这可不是一个让他们大受鼓舞的好兆头。门槛太高了。我认为这会妨碍人们进入该领域,从而使那些最终将成为未来可编程逻辑狂热者的人越来越少。互联网上到处都是人们对可编程逻辑设计现状的沮丧情绪,而有几个开源社区正试图解决这一问题。许多人认为元编程是救赎之道,这种编程技术是一个程序将另一个程序视为自己的数据。

可编程逻辑公司正处于紧要关头。一方面,投资者要求他们开发功能更强大、价格更昂贵的芯片,另一方面,能够使用这种芯片的人相对较少。他们的解决方法是将软件开发人员转换为硬件设计人员,并且他们正在使用新工具来做到这一点。

高级综合 (HLS) 编译器将设计抽象提升到更高的水平,这让我们进一步远离了逻辑设计的根源。我们可以从纯粹的软件描述中生成复杂的硬件设计,这非常了不起,但是这样做却丧失了逻辑设计会对人产生的内在吸引力。我不是反对人在优化方面能胜过计算机,但我认为过去设计简单的电路更为容易。问题在于,如今设计简单的电路比过去更难。

我还记得在看到我的手工逻辑设计电路作品时,那种纯粹的喜悦感。靠我的聪明才智,所需设备的数量减到最少。当我在 1990 年代初学习可编程逻辑时,让我感到更高兴的是,我可以运用自己的电路设计知识,在 128 个逻辑元件构成的单个器件中实现我的逻辑,而且正是靠我的智慧,我精心挑选了每一个逻辑元件。我并没有依靠一些陌生的算法开发人员的智慧。

在逻辑设计不断发展的同时,软件设计也在发展。设计在很大程度上已成为面向对象编程 (OOP) 的世界,常见的设计模式库已经有完善的文档记录,并且在代码库中都是现成的。我的设计模式书是 Erich Gamma 等人一度流行的著作《设计模式:可复用面向对象软件的基础》。我发现有趣的是,硬件设计从面向对象开始,但其发展随着 HDL 的出现而停滞不前。虽然 HDL 允许设计重用,但设计库仍包含最基本的功能。在互联网上搜索“7400 系列集成电路列表”,您会找到一些早期的硬件设计模式。我发现有趣的是,Meilir Page-Jones 在他的《UML 面向对象设计基础》一书中,提到了集成电路是良好对象设计(高内聚和低耦合)的示例。但是,在对越来越复杂可编程逻辑器件的追求中,我们已经失去了简单直接逻辑设计的根本。当今的设计方法依赖于计算机算法来实现我们的逻辑。我认为这种方法为可编程逻辑初学者带来了障碍。

你可能会问:“我们插入到电视背面的第一个 Pong 游戏中有多少行代码?”答案是零。它纯粹是硬件(见图 1)– 不包括任何软件!我认为不会有多少刚毕业的工程师能够在不使用软件的情况下设计 Pong。他们会说:“我为什么要这样做?”我的回答是“为了切入不同的角度,因为你应该知道这是可以做到的。它比你想象的要简单。”

图 1:Pong 原理图(图片:来自 Adafruit 博客,原始来源不明)

IEEE 在 2019 年初发布了工程师喜欢和讨厌的编程语言榜单。其中工程师们最喜欢 Python。我相信这是真的。几年前,我曾在 Texas Instruments 设计比赛中担任评委,并发现 10 个大学团队中有 9 个在参赛项目中使用 Python。VHSIC 硬件描述语言 (VHDL) 和 Verilog 不在这份喜欢和讨厌榜单中。也许 IEEE 的编辑没有考虑这些 HDL 编程语言,但是,我敢打赌,更可能的是接受调查的人甚至都没有考虑 HDL。如果这是真的,则说明几乎没有工程师能想到这些语言或逻辑设计,这对逻辑设计领域来说不是一个好兆头。

那么,该怎么办?我们如何在新工程师中形成一种思路,在对待问题时从软件或硬件角度考虑解决方案?毕竟,多数问题都可以用任一种方法解决。我有个主意。

我认为 Arduino 平台造就了许多对软件感兴趣的年轻人。他们进入学校,希望成为工程师和计算机科学家。该平台是如何做到的?Arduino 缩短了开发软件的学习曲线,让软件开发不再那么令人生畏。

通过定义一块开发板,就可以消除设置链接器命令文件的麻烦,信号名称成为标准,其 IDE 隐藏了编译详细信息。Python 有一个优点,就是要求严格的格式 - 例如,缩进必须统一。这消除了低价值的随意选择做法,从而简化了整个开发过程,使开发人员的工作效率更高。对于可编程逻辑,我们需要同样的效果,因此可编程逻辑行业应该在标准上进行协作。

下面是我就该标准所提议的一些属性。Arduino 本身并没有强大的功能来修改其基础架构(例如容纳嵌套中断)。同样,让我们假设在此平台上解决的逻辑问题非常简单,足以让当今的可编程逻辑器件能满足所有时序约束。Arduino 等效的可编程逻辑器件板 (PLDB) 应具有足够慢的时钟,让任何含有 1,000 个逻辑元件的设计都可以工作。这意味着平台仅需要功能验证。

由于大家都喜欢 Python,因此我建议使用 Python 来支持 PLDB,并以 nMigen 或 MyHDL(参见图 2),甚至带 RTLIL 的 Yosys 之类的框架为基础来构建。这将使初学者可以使用一种解释语言来模拟他们的逻辑设计、生成真值表,并访问他们可用的任何其他 Python 库。说到 Python 的库,使用 Python 还允许社区使用 Python 软件包索引 (PyPI) 分发可重用的硬件模块,从而有助于解决可靠、共享设计模式的缺乏问题。像 Python 一样,nMigen 也支持元编程,因此,即使此框架将支持简单的设计,该平台仍可扩展以支持复杂的设计。

图 2:基于 Python 的框架(图片来源:MyHDL.org 和 m-labs.hk)

从主机 PC 到 PLDB 的接口应该是 USB,同时嵌入 PLDB 的微控制器提供 API,供主机 PC 用来学习 PLDB 的配置,以便可以自动设置用于可编程逻辑开发的 Python 环境。该设置的结果将是隐藏综合、放置和布线以及编程的细节,同时协助进行 PC 上的功能仿真以及在实际硬件上的执行。

为了避免某些读者认为不再需要解决简单的逻辑问题,我展示了关于 Digi-Key 微控制器销售情况的一些统计数据。图 3 显示了客户购买的微控制器类别的细目,图 4 显示了每个类别出售的单位数。Digi-Key 总共展示了超过 80,000 个微控制器零件编号,并有超过 19,000 款微控制器的库存,可以立即发货到世界各地。这些数字表明,更多的工程师使用了简单的 8 位处理器,并且 Digi-Key 交付的 8 位微控制器比其他任何类别的处理器都要多。由此可见,更多的是简单问题,并不是复杂问题。

图 3:购买每种类型微控制器的 Digi-Key 客户数量(图片来源:Digi-Key Electronics)

图 4:Digi-Key 每种微控制器的售出数量(图片来源:Digi-Key Electronics)

我们的目标应该是让任何人,甚至没有经过逻辑设计正规教育的人,都可以成为可编程逻辑爱好者;但是我们必须更改开发范例,才能实现该目标。

关于此作者

Image of Randy Restle

Randall Restle 在电子元器件行业从业四十余载,学识渊博、经验丰富。 现处于半退休状态,担任 DigiKey 应用工程副总裁。他曾经领导过多个应用工程、技术人员和管理人员团队,指导他们开发原创、独有的先进技术产品。

其个人擅长数字信号处理、可编程逻辑实现、运动控制改进和软件设计。 他拥有多项专利,横跨多个行业,是 IEEE 的高级会员。 Randall 拥有辛辛那提大学 BSEE、MS 和 MBA 学位。

More posts by Randall Restle
 TechForum

Have questions or comments? Continue the conversation on TechForum, Digi-Key's online community and technical resource.

Visit TechForum