我们在EEJournal上写了很多关于fpga的文章,有很好的理由,你可能会觉得它们是解决所有设计问题的正确方案。他们不是。
以下是一份清单,可以帮助您在考虑fpga作为设计替代方案时,保持在成功设计的正确路径上:
- 如果你只需要让LED闪烁,那就用别的东西。通常,您对FPGA设计的第一次介绍是闪烁灯项目。在现实生活中,一些设计只需要让LED闪烁,但这不是FPGA的合适工作。你可以花很少的钱买到微控制器来完成这个任务。使用555定时器IC来闪烁led曾经很流行。那是在20世纪70年代,Signetics刚刚发布了555。就部件成本而言,现在用微控制器闪烁LED比555更便宜。
- 如果一个微控制器可以做这项工作,就使用一个微控制器。微控制器的优点是它已经被设计和测试过了。我们已经知道硬件是可以工作的。因此,如果有一个微控制器,任何微控制器,具有适合你的项目的正确硬件配置,那么使用它而不是FPGA。
- 如果树莓派可以做到这一点,那就用树莓派吧。树莓派组织为嵌入式社区提供了一个巨大的帮助,推出了一系列功能强大且非常便宜的处理器板,从树莓派Zero(你只需5美元就能买到)到树莓派4(价格高达75美元)。在高端,你可以买到一个嵌入式板,它有一个四元64位处理器和无数的接口,包括双频WiFi和摄像头接口。对于树莓派的开发也有广泛的社区支持。如果你认为树莓派不是真正的硬件,想想这个:我最近和一个朋友共进午餐。他的公司正在制造气相色谱设备。他们使用树莓派4作为控制器,因为它便宜,它可以完成这项工作,而且其他人已经设计和调试了电路板。如果可以,就像我朋友的陪伴一样。
- 你的时间就没有更好的用途吗?编译大型FPGA的设计仍然需要几个小时,而实现定时关闭对于复杂的高速FPGA设计可能需要几天甚至几周的时间。你的时间就没有更好的用途吗?如果你选择一个现有的微控制器或ASSP,所有这些设计闭包的东西很久以前就已经发生了。
- 如果功耗很重要,请不要使用FPGA。FPGA供应商喜欢吹捧他们的部件的低功耗方面。小心!问他们:“和什么相比?”一般来说,fpga都不是低功耗器件。想要证据?看看FPGA板上的散热片。你不会看到很多微控制器有散热片或风扇散热片。当FPGA供应商说他们的设备比cpu或gpu消耗更少的功率时,他们说的是耗电量在100瓦左右的设备。你想要一个低能耗的替代品吗?选择别的吧。
- 不关心延迟?如果您不关心系统的延迟是以纳秒还是微秒为单位测量的,那么就不需要FPGA。
- 如果您不了解Verilog或VHDL,请不要使用FPGA。当然,FPGA供应商都试图通过创建将C和c++代码转换为Verilog或VHDL的桥式编译器来扩大他们的市场。这些工具就像将英语转换成匈牙利语或乌尔都语的自动语言翻译工具。这些工具能起作用真是太神奇了,但在翻译过程中却丢失了很多细微差别。在FPGA的情况下,您需要并行思考,以充分利用FPGA的大规模并行硬件架构。如果您需要在一个时钟周期内执行数千个乘法/加法操作,您可以使用FPGA。然而,C和c++并不是为了方便地表达并行操作而设计的,因为它们是为顺序机器(即微处理器)创建目标代码。
- 想用Python或其他慢速解释语言编写代码?不要使用FPGA。如果您使用Python这样的解释语言编写代码,请不要认为您将从FPGA获得任何类型的裸金属性能。解释型语言纯粹是为了方便使用而设计的,它本身就很慢。当然,Xilinx提供了一种名为Pynq的python可编程板。这是一个很好的学习工具。它不是一个性能工具。
- 如果你想省钱,就不要使用FPGA。对于某些应用程序,性能高于成本和功耗。对于其他应用程序,精打细算是主要目标。在你的材料清单上包括一个FPGA将不会帮助节省便士。一般来说,fpga的成本要比微控制器高得多。
- 如果你不希望你的电路板上有很多电源,就不要使用FPGA。出于某种奇怪的原因,fpga需要大量的电源供应——用于核心电压,用于I/O电压,用于内存和内存备份电源等等。如果你看一下FPGA板,你会看到很多板上调节器来创建所有这些不同的电压,只是为了让FPGA满意。在被英特尔收购之前,Altera实际上收购了一家名为Enpirion的电源模块公司。这应该告诉你电源对fpga有多重要。Enpirion制造了非常酷的产品,但电源只是大多数设计工程师达到目的的一种手段,而不是主要设计目标。
- 如果您知道您的设计将用于大批量生产,则不要以FPGA为目标。大批量产品(例如数百万台)属于专用集成电路的领域,如果处于中等批量的灰色区域,则属于结构化专用集成电路。在这样的产品设计中使用fpga原型是可以的,但你想尽快跳到定制设备上,因为fpga在三个“P”(性能、功耗和价格)方面相差一个数量级或更多。
如果您已经列出了不应该使用FPGA的各种理由,并且仍然认为应该使用FPGA,那么您可能应该使用FPGA。
- 如果在处理器中运行软件不能满足您的计算性能要求,那么您应该考虑将FPGA作为设计选择。
- 如果您需要千兆以太网或多个多通道PCIe端口形式的大量高速I/O,那么您应该考虑将FPGA作为设计选择。
- 如果您需要执行大量的高速DSP, fpga应该是您的首选。
- 如果您已经熟练使用Verilog或VHDL,那么您应该毫不犹豫地考虑将fpga作为设计选择。
你有什么建议可以添加到这些列表中吗?如果是的话,请在下面的评论中提出建议。
后记:许多经验丰富的FPGA设计师在这篇文章中提出了这些经验法则不适用的特殊情况,我不得不引用毕加索的话:“像专业人士一样学习规则,这样你才能像艺术家一样打破它们。”
附言#2:如果上市时间对你的项目来说是最重要的因素,那么FPGA会让你第一个到达终点。因此,一个现成的pcb组装,已经测试和调试。
积极的理由5:你不能买一个CPU, GPU或uP,与你的设计所需的I/O外设的精确组合。因此,您可以构建理想的I/O平台,将DSP、AI、硬/软CPU子系统倒入其中。
积极的理由6:你的行业使用的标准和接口,以常规解决方案无法跟上的速度不断发展。只有FPGA能够捕捉今天的系统需求,并在它们出现....时适应明天的需求
最后一点“如果你知道你的设计将进入大批量生产,就不要瞄准FPGA”,我并没有真正理解。可以换个说法吗?
我也很困惑。如果我有一个大容量的设备怎么办
需要低延迟DSP,并且需要易于重新配置以适应未来的协议更改?
(手机上的用户体验很糟糕,很容易在打字时“发表评论”)。
如果你知道你将生产数百万的产品,你应该从一开始就考虑ASIC,因为ASIC的单位成本将比FPGA低得多。然而,在产品生命周期的前端,设计和制造ASIC的NRE成本很高。你需要大量生产最终产品来摊销NRE。否则,较高的NRE成本将抵消ASIC较低的单位成本。许多公司已经瞄准了FPGA,他们知道如果他们开始交付大量的最终产品,他们将切换到ASIC。英特尔为这种情况提供了一种结构化的ASIC,即eASIC。eASIC的NRE成本低于ASIC,但其单位成本较高。有选择的感觉真好。做出明智的选择。
对Pynq不太公平。它是为FPGA soc构建的,允许使用标准DMA驱动程序从Python与您的AXI IP核对话。你仍然用hdl写内核,或者至少用HLS生成,在SoC的FPGA端没有Python。
同样,在成本上也不完全正确。莱迪思制造了很多非常便宜的部件,在价格上很容易与mcu竞争。
fpga是为了性能。Python则不然。Pynq里的P代表PythonPynq是一个顶级的fpga学习工具。这就是它最初被创造出来的原因。它不用于裸金属FPGA编程(尽管如果您愿意,可以在Pynq板上实现)。作为一个Pynq爱好者,我永远不会对这个产品不公平,也不会假装它不是。
Pynq中的Python是用来将东西粘合在一起并以交互方式测试IP核的。我不认为它会在这些特定的用例中损害性能(作为一个从未使用过python的人,但仍然喜欢Pynq的设计)。
测试你的IP核没什么错,元进程。
嗨,metaprog。你会考虑使用c#和Visual Studio来“把东西粘在一起并测试你的IP”吗?
因为您可以在任何您想要的详细级别上定义类/对象,所以可以在调试模式下编译和运行。我这么做了,效果很好。
您还可以使用这些委托来计算布尔表达式和算术表达式,以便您可以对您的IP建模,以任何您想要的详细级别进行描述。我相信定义一个用于IP开发的软“Pynq”并不难。
我将探索更多,因为我是多年的逻辑设计师,我认为仅仅因为HDL/Verilog可以模拟而选择它作为设计入口是一个可怕的错误。
Verilog是一种硬件描述语言。因此,在创建波形之前,工具链会综合(不完整的)设计。
我想在考虑合成之前就输入数据流和控制逻辑,并使用IDE和编译器来连接这些块。我记得一个同事曾经说过“真正的逻辑设计师不使用fsm”。今天,FSM被认为是必不可少的。因为HDL是一种描述语言,而不是设计语言。
Pynq中的Python不是作为hdl的替代品,而是作为从SoC的PS端与AXI ip通信的简单工具。它正在读取.hwh文件,并推断如何从那里访问您的IP核寄存器。您仍然必须使用hdl或至少HLS来设计这些核心。
metaprog写道:“你仍然必须使用HDLs或至少HLS来设计这些内核。”
的确如此!对我来说,这是个大问题。
一个系统是一个相互连接的块的集合,这些块使用接口进行通信,这些接口具有控制信号,通常是使用特定协议在块之间移动的数据。一种协议通常被称为“握手”,它包括选择哪个连接块接收输入数据和确保数据成功传输的控制信号。
握手信号(输入/输出)相对于时钟信号随机发生,并且从输出到相关输入的时间间隔未定义。像always块这样的东西是由本地时钟信号触发的。是的,当事情在随机时间发生变化时,很难定义敏感性列表以及特定时间的条件。
而且,HDLs不进行块间连接。模块可以实例化,但需要手动连接。
创建hdl的目的是合成,而不是设计。这是史蒂文斯的原话
释义:“如果你唯一拥有的是HDL,那么一切都应该被合成”
可惜的是,有一个编译器和IDE可以让事情变得更简单,但仍然不是一块蛋糕。逻辑设计仍然是必需的。
在中国,你可以以每片3美分或更少的价格买到微控制器。这真的是莱迪思目前最便宜的fpga所能得到的吗?如果您正在比较高端MCU和低端FPGA,那么考虑一下您从两者获得的功能,以及价格。最后,所有的经验法则都有例外。
至于第10点....英特尔刚刚封存了Enpirion PDN2133....
一个电源模块的消失是令人遗憾的,但有很多替代方案。这很好,因为fpga需要大量的电源替代品。
不使用FPGA的原因#11“FPGA在性能上偏离了数量级”
使用FPGA #1性能的原因!!????????????????????????
卡尔·史蒂文斯,这两种说法似乎是矛盾的。“FPGA在性能上差了一个数量级”是关于ASIC的。与运行软件的处理器相比,fpga表现出优越的性能。这一点在你没有引用的句子中已经说得很清楚了,但我希望这能让你明白。
原因8:想用Python写代码?但是Python是一种在计算机上运行的编程语言。它是一种编程语言,fpga不运行程序。
除了设计可以在运行程序的FPGA上实现。
有嵌入式处理器可以运行程序,但性能较差,主要原因是指令和数据在芯片外的内存中,访问时间很长。(加载,添加,存储,分支等)
使用嵌入式内存块。为指令和数据使用单独的内存,以便快速并行访问。
如果有人感兴趣,我有一个关于GIT的开源项目。CEngine有一个运行的演示,我正在进行一个基于c# AST的更新。(我忘了名字,但我的ID是KarlS)。
下面是一个pdf文件,它引导了Project Catapult项目,该项目将fpga引入微软数据中心。
这似乎不符合这篇文章的推理。因为性能增益证明了成本的合理性,并增加了FPGA的可编程性,尽管所有声明的原因都不使用FPGA。
重要的是,使用HDL进行设计入口的困难是一个真正的问题。
这是链接:
https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/tr-2008-130.pdf
具有讽刺意味的是,MS Roslyn Compiler API可以提取控制流和表达式,然后用于格式化HDL以用于构建。(这就是HDL的作用)