FPGA与微控制器[已关闭]


36

我从事Arduino系列(特别是Sanguino)的工作,构建了一些简单的设备和一个简单的照像镜。因此,我对微控制器(特别是Atmel的)非常满意。我很想知道FPGA与标准微控制器有何不同。我来自技术背景(C / C ++编程),因此喜欢技术解答。请记住,我是电子领域的新手(相对于我的软件经验)。:)

我确实经过了此查询,这很好,但是我正在寻找更深入的细节。

谢谢!Sushrut。


附录-现实世界中是否有使用混合体系结构(即将fpga与微控制器相结合)的良好示例?
Sushrut J Mair

Sushrut J Mair-通常,当您拥有FPGA并需要Micro时,micro会 FPGA中实现。
康纳·沃尔夫

是的,假名,同意。但是,我一直在寻找使用FPGA和MCU来设计系统的任何现实情况。其思想是设计的FPGA部分用于实现“可演变”的硬件,该硬件根据系统的输入变化做出响应和变形,而核心逻辑处理由MCU完成。
Sushrut J Mair

Answers:


48

为FPGA设计需要硬件描述语言(HDL)。HDL绝对不像C一样。C程序是一系列顺序的指令,必须扭曲自身才能实现并行执行,而HDL描述了并发电路,并且必须扭曲自身才能实现顺序执行。这是一个截然不同的世界,如果您试图像软件开发人员那样在FPGA中构建电路,那将会很痛苦。

MCU有时间限制。为了完成更多的工作,您需要更多的处理器周期。时钟对其频率有非常严格的限制,因此很容易碰到计算壁垒。但是,FPGA受空间限制。为了完成更多工作,您只需添加更多电路。如果您的FPGA不够大,则可以购买更大的FPGA。构建一个无法容纳最大FPGA的电路非常困难,即使您这样做,应用笔记也描述了如何将FPGA菊花链在一起。

FPGA将更多的精力集中在并行执行上。有时,您必须担心MCU的ISR需要多长时间来处理该中断,以及是否能够达到硬实时限制。但是,在FPGA中,始终有很多有限状态机(FSM)运行。它们就像“毫微微控制器”,就像控制逻辑的小云。它们都同时运行,因此不必担心会丢失中断。您可能有一个FSM连接到ADC,另一个FSM连接到微控制器的地址/数据总线,另一个FSM将数据流传输到立体声编解码器,另一个FSM缓冲从ADC到编解码器的数据流。需要使用模拟器来确保所有FSM和谐地唱歌。

FPGA是PCB布局设计师的梦想。它们是非常可配置的。您可以有许多不同的逻辑接口(LVTTL,LVCMOS,LVDS等),它们的电压甚至驱动强度都不同(因此不需要串联端接电阻器)。引脚可以互换;您是否见过MCU地址总线,其中引脚分散在芯片周围?您的PCB设计人员可能必须丢掉一堆过孔,才能将所有信号正确地绑在一起。使用FPGA,PCB设计人员可以以几乎任何方便的顺序将信号运入芯片,然后可以将设计回注到FPGA工具链。

FPGA还具有许多精美的玩具。我最喜欢的之一是Xilinx芯片中的Digital Clock Manager。您向它提供一个时钟信号,然后可以使用各种各样的倍频器和分频器从中获得四个信号,所有这些信号都具有原始的50%占空比和100%的相位...甚至可以解决时钟偏斜的问题。由芯片外部的传播延迟引起!

编辑(答复附录):

您可以将“软核”放入FPGA。您实际上是将微控制器电路连接在一起,或者可能是将其他人的电路放入设计中,例如Xilinx的PicoBlaze或MicroBlaze或Altera的Nios。但是,与C-> VHDL编译器一样,与使用FSM和数据路径或实际的微控制器相比,这些内核往往有点肿且速度慢。开发工具还会给设计过程增加相当大的复杂性,当FPGA已经非常复杂的芯片时,这可能是一件坏事。

也有一些FPGA内嵌“硬核”,例如Xilinx的Virtex4系列,其中有一个真正的专用IBM PowerPC,并带有FPGA架构。

EDIT2(回复评论):

我想我现在看到了...您在问有关将分立MCU连接到FPGA的问题;即两个单独的芯片。有充分的理由这样做;具有硬核的FPGA和足够大以支持体面的软核的FPGA通常都是带有数百个引脚的怪兽,这些引脚最终需要BGA封装,这很容易使设计PCB的难度增加了10倍。

但是,C语言要容易得多,因此,MCU肯定可以与FPGA协同工作。由于编写C更加容易,因此您可以在MCU中编写“大脑”或中央算法,而FPGA可以实现可能需要加速的子算法。尝试将可更改的内容放入C代码中,因为它更容易更改,而让FPGA成为更专用的类型,不会经常更改。

MCU设计工具也更易于使用。设计工具需要花费几分钟来构建FPGA位文件,即使对于有些简单的设计也是如此,但是复杂的MCU程序通常需要几秒钟。MCU出错的情况少得多,因此它们也更容易调试...我不能低估FPGA的复杂程度。您确实需要获取所拥有的数据表,并且您应该尝试阅读其中的每一页。我知道,这是几百页...还是要这样做。

连接它们的最佳方法是使用带有外部地址和数据总线的MCU。然后,您可以简单地将FPGA电路映射到MCU中,并添加自己的“寄存器”,每个寄存器都有自己的地址。现在,FPGA可以添加自定义外设,例如32位定时器,当读取第一个字节时可以立即锁存所有4个字节,以防止8位读取之间的溢出。您还可以将其用作粘合逻辑,以从其他芯片(如单独的ADC)中映射更多的外设。

最后,某些MCU设计用于与FPGA等“外部主设备”一起使用。赛普拉斯制造了一些内部具有8051的USB MCU,但其目的是通过例如FPGA来产生/使用USB数据。


这是个很好的信息,谢谢。我听说过C / C ++到HDL编译器。你有没有尝试过它们?
Sushrut J Mair 2010年

他们很好... 对于单个逻辑块,还算不错。但是我不会通过这种编译器来编写整个设计。它们的效率不是很高,因为它们的语言差异如此之大...您必须使用特殊的约定,它们不仅仅采用任何旧的ANSI C代码。
ajs410

谢谢,这很有用。我已经订购了莱迪思半导体的XP2 Brevia开发套件。一旦我对基本的FPGA设计概念感到满意,我打算尝试一些HDL到C的编译器。
Sushrut J Mair

刚刚在原始查询中看到了我附录的答案。谢谢-所以您是说实际上(至少使用当今的技术),标准MCU + FPGA的混合架构几乎没有增加值,因此无法在现实世界中真正使用吗?
Sushrut J Mair 2010年

太棒了 谢谢ajs410。我希望花几周的时间来启动自己的fpga,然后再进入令人兴奋的混合拱门可能性!
Sushrut J Mair

10

“现实世界中的示例……结合了FPGA和微控制器?”

原则上,足够大的FPGA可以完成FPGA加微控制器可以完成的任何工作-也许可以通过在FPGA内部实现软CPU来完成。实际上,与单独的FPGA(或单独的MCU)相比,使用FPGA加单独的微控制器实现时,给定的性能水平通常具有较低的零件成本和更低的功耗。以下是一些同时带有FPGA和微控制器的著名器件:

  • Elphel相机 ; Elphel Project Wiki具有Xilinx(R)Spartan 3e 1200K门FPGA和运行GNU / Linux的ETRAX FS处理器。
  • TS-7500具有5000 LUT格FPGA和一个250MHz的的Cavium ARM9 CPU可以运行Linux操作系统。
  • 气球板具有赛灵思Spartan FPGA和一个ARM CPU
  • 几个Teeny weeny Linux SBC包括FPGA和CPU
  • 所述Armadeus项目wiki文档几块板板既具有赛灵思Spartan-3 FPGA和400MHz的ARM9 CPU。
  • Blackfin处理器手持板既包括赛灵思Spartan 3E FPGA和一个600MHz的模拟器件的Blackfin®ADSP-BF537处理器。(它没有MMU,因此它不能运行完整的Linux,但是可以运行uClinux)。
  • 所述“Minimig”(微型Amiga的)包括赛灵思Spartan-3 FPGA中,M68000 CPU,和一个小的PIC MCU为作用盘控制器。

4

通常,FPGA专门用于执行微控制器无法高效完成的任务,例如高度并行或低延迟的操作,在多个时钟域中运行或以硬件速度执行自定义逻辑。这样一来,它们就会很繁重,并且您几乎不需要MCU作为设计的核心-它们可能会移到管理位置,例如加载配置位流。一个例子是Minimig中的PIC或ARM ,它实现了存储接口。

但是,有些产品模糊了界限。一些例子:

  1. 较大的FPGA往往内置有硬核CPU(较大的项目通常无论如何都需要它们),就像它们具有RAM和乘法器模块一样
  2. 一些微控制器针对并行操作(XMOS XS1,Atmel Xmega,GreenArray,Parallax Propeller)
  3. 一些芯片被设计为混合芯片(Cypress PSoC,Atmel FPSLIC)

来自命令式编程背景,这是对硬件设计的相当大的调整,因为您需要获得FPGA的优势。但是,您也会在其他地方找到有用的经验。


1

像AVR这样的MCU与编程到FPGA中的MCU之间并没有什么区别。OpenCores站点具有可在FPGA中使用的AVR的VHDL代码。您可以研究它,看看它是如何工作的,甚至无需购买合适的FPGA板就可以在模拟器中亲自尝试。


1
我经常发现,对于同一MCU,FPGA必须以较慢的时钟速度运行,否则它们的价格会高得多。在更昂贵的情况下,您可以轻松地在控制器和外部引脚之间实现额外的硬件,这通常是值得的。
Kortuk

如果系统中仍然需要FPGA,则MCU是“免费的”。
莱昂·海勒

1

微控制器是一种数字电路,依次从其程序存储器中依次执行命令。微控制器的数字硬件电路是固定的,构成数字电路的不同栅极之间的互连是永久性的,并蚀刻在硅片上。FPGA可以看作是具有可编程互连的数字门(实际上虽然有luts)池的集合。现在,可以通过对互连编程来在fpga上制作任何数字电路(甚至是微控制器)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.