当我开始这个项目的时候,我已经了解到FPGA的好处在于它可以将多种功能集成到单一的芯片中,并可以通过重配置而修改芯片功能。但是这种灵活性也让我想知道:我应该如何处理FPGA与外部组件的接口以及接口连线等问题呢?由于FPGA的平均设计周期为两到三年,并且考虑到诸如USB 3.0到USB Type-C等通信技术的更新换代,我很难理解FPGA如何才能真正地带来好处。
和处理大多数MCU项目时一样,我打算从示例代码开始,然后通过各种示例搭建自己的项目。但是对于每一个例子,我发现越来越不熟悉,并且结果也越来越混乱。在这里代码被用来定义对象和调用函数,这在MCU里倒是很常见,但是有些定义是在高阶函数里进行的,而其他的则是在另一个地方。像往常一样,这些函数被用来执行一个功能或任务,但有一些函数要依赖于其他函数而另一些函数则是独立的。正如我试图对它们发表评论时所发现的那样,那些没有被直接调用的代码仍然是代码功能的关键。
我很迷糊。
我决定在YouTube上搜索“Intel FPGA Setup Cyclone V”来寻找示例和“Setup&Go”培训。当我浏览这些内容时,我发现一个共同的主题(图1):
l 看似不连贯的一组命令仍然有效,但似乎并不完整。
l 缺乏不支持FPGA的外部模块或组件。
有了这些观察,我回顾了更多设计样本和代码,并发现了英特尔Cyclone V和HPS FPGA架构显著的优势。图1显示了HDMI命令集,其中包括一系列未被调用的代码。它们不是按顺序运行的,而是并行运行的。它们的功能很像回调函数,在HPS中如果有来自较高级别控制器的数据调用时,这些回调函数就会被激活。然后编译器就会提高向MCU传递信息的能力,反之亦然。在这两者之间需要做的就是协调定义和时间安排。
图1:HDMI命令集,其中包括一系列未被调用的代码。
项目流程如下所示:
1. Linux HPS抓取图像。
2. Linux将OpenCV处理过程移交给FPGA。
3. Linux调整图像。
4. FPGA接收原始图像信息,并将其编码为HDMI接口。
这是使用HPS和FPGA的完美示例。FPGA能够处理大量重复的运算并实现协议,而Linux和MCU则处理了程序的动态元素。这让我看到了FPGA的优势。
当我深入研究仅含有MCU的设计时,我发现了FPGA的其他优点:它需要很少的元件,而且可以使成本更低,性能更好的MCU获得非常好的效果。例如,仅含MCU的设计将需要更高的A52等条件来进行图像处理,此外还需要一个GPU来进行图形加速处理和更多的RAM来完成整个设计。设计完成后,最终结果仍然是一个锁定的,有限的可升级模块。有了FPGA,这些组件便可以被引入同一个芯片,所以产品级PCB设计更为简单,因为它需要较少的的组件接口,而且由此产生的模块仍然可以升级或优化。
我头顶上的灯泡在几英里外都可能被看到。
将多功能集成到单个电路上,减少接口数量,或者根据线路修改功能等这些都是FPGA的优势,但它的好处远不止这些。FPGA改变了我为了高效完成任务而增加外部组件的方式:不是“按顺序执行步骤1,步骤2,步骤3”,现在我正在考虑这样完成任务:“执行步骤A,B,C,并且当执行完B之后,就执行D”。现在,为什么要花时间来研究MCU到FPGA开发转换的原因也已变得越来越明晰了。
请继续关注第4部分文章!