当我开端这个项目的时分,我现已了解到FPGA的长处在于它能够将多种功用集成到单一的芯片中,并能够经过重装备而修正芯片功用。可是这种灵活性也让我想知道:我应该怎么处理FPGA与外部组件的接口以及接口连线等问题呢?由于FPGA的均匀规划周期为两到三年,而且考虑到比如USB 3.0到USB Type-C等通讯技能的更新换代,我很难了解FPGA怎么才干真实地带来长处。
和处理大多数MCU项目时相同,我计划从示例代码开端,然后经过各种示例建立自己的项目。可是关于每一个比如,我发现越来越不熟悉,而且成果也越来越紊乱。在这里代码被用来界说目标和调用函数,这在MCU里却是很常见,可是有些界说是在高阶函数里进行的,而其他的则是在另一个当地。像平常相同,这些函数被用来履行一个功用或使命,但有一些函数要依赖于其他函数而另一些函数则是独立的。正如我企图对它们宣布谈论时所发现的那样,那些没有被直接调用的代码依然是代码功用的要害。
我决定在YouTube上查找“Intel FPGA Setup Cyclone V”来寻觅示例和“Setup&Go”训练。当我阅读这些内容时,我发现一个一起的主题(图1):
1. 看似不连贯的一组指令依然有用,但好像并不完好。
2. 缺少不支持FPGA的外部模块或组件。
有了这些调查,我回忆了更多规划样本和代码,并发现了英特尔Cyclone V和HPS FPGA架构明显的优势。图1显现了HDMI指令集,其间包含一系列未被调用的代码。它们不是按次序运转的,而是并行运转的。它们的功用很像回调函数,在HPS中如果有来自较高等级控制器的数据调用时,这些回调函数就会被激活。然后编译器就会进步向MCU传递信息的才能,反之亦然。在这两者之间需求做的便是和谐界说和时刻组织。
图1:HDMI指令集,其间包含一系列未被调用的代码。
项目流程如下所示:
Linux HPS抓取图画。
Linux将OpenCV处理进程移交给FPGA。
Linux调整图画。
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开发转化的原因也已变得越来越清楚了。