为什么要在FPGA中实现微控制器?


16

我目前正在“研究” FPGA,它们可以做什么,如何做等。

在多个地方(例如在这里),我看到了使用FPGA实现一个简单微控制器的项目。

所以我的问题是:
我想知道,进行这种实现的目的是什么?为什么要使用在FPGA中实现的微控制器而不是板上的微控制器?有什么好处?也许还有缺点?


其中许多使用固定IP内核,但是自己动手可以是很棒的学习经验。
克里斯·斯特拉顿

1
@ChrisStratton-您能提供更多信息,还是发布有关固定IP内核的链接?是的,我相信这将是一次很棒的学习经历。但这就是我问这个问题的原因之一。我想知道这不只是学习经历。
James C

1
大多数这样做的人都在使用Microblaze,Picobloze,Nios II等产品-这些基本上是“罐装”(库)中的处理器设计,您可以对其进行许可并放入您的项目中。相比之下,您可能会从HDL源代码中自己开发代码,也许是从您典型的CS101讲座中提供的框图中得出的。将讲义图转化为工作硬件时,有许多有趣的实践需要应对。
克里斯·斯特拉顿

1
有关开放源 CPU内核的许多示例,请参见开放内核。
RBerteig 2015年

3
我有一个例子。我们已经淘汰了旧产品的微控制器。我们找不到合适的替代微控制器,并具有适当的外围设备组合。通过将FPGA与嵌入式处理器配合使用,我们可以在FPGA上实现理想的外设组合。
kkrambo 2015年

Answers:


24

好处:

  • 微控制器与任何自定义接口或片上I / O逻辑之间的快速接口。
  • 可定制的处理器和调试接口
  • 而且,与使用VHDL编写控制代码相比,控制逻辑通常更容易

缺点:

  • 与仅将定制逻辑包含在FPGA上相比,可能需要更昂贵的FPGA才能适合微控制器和定制逻辑
  • 可能要比单独芯片上的现成微控制器更难实现,尤其是对于存储器,如果内核很复杂的话。

3
额外的好处:更简单的设计,更少的芯片。
DoxyLover 2015年

4
其他缺点:许可更多IP
Mikhail

功耗有何缺点?
Craig McQueen 2015年

@CraigMcQueen从理论上讲,可以在尚未作为独立硬件生产的FPGA中生成微控制器。在这种情况下,没有功耗可以比较。在任何情况下,它都是特定于设备的,因此无法实现一般的上行/下行。
2015年

所有非常好的评论。很好,我想说一般而言FPGA具有很大的功耗,因为宏单元中的逻辑利用率通常远非100%。FPGA可以使用复杂的功耗最小化技术来弥补这一点。同一时代的FPGA和处理器之间的制造过程(技术)可能非常相似。处理器具有专用的存储块以及FPGA。这些是否满足您的需求取决于您找到符合您需求的FPGA的幸运程度。
PkP

26

如果您的项目要使用FPGA进行繁琐的工作,并且具有备用容量,那么为什么仅在FPGA中实现额外的芯片又为什么花钱呢?

对于许多过程控制环境,用C之类的语言来实现所需的设置要比用VHDL或Verilog来实现要容易得多。通过将微控制器添加到FPGA中,您将获得两全其美的优势-VHDL / Verilog等的强大功能可用于逻辑和接口系统,而过程语言可简化用于核心控制和管理系统。


10
这个答案的第一句话是主要原因。这主要是在电路板上已经具有备用容量的FPGA的情况下完成的。(至少)减少了一个芯片,减少了电路板的复杂度。您不会仅仅为了在FPGA上实现FPGA而将FPGA放在板上,但是当您已经拥有FPGA时,这是降低零件成本和电路板复杂性的好方法。至少这就是我们这样做的原因。
reirab 2015年

13

除了对马延科和PkP的回答:

将CPU嵌入FPGA设计的这种趋势导致了几种异构系统,例如:

  • Xilinx的Zynq-7000系列
  • Altera的Arria / Cyclon / Stratix SoC FPGA
  • MicroSemi的SmartFusion FPGA

市场上还有一种英特尔凌动+ Altera FPGA芯片:http : //www.altera.com/devices/processor/intel/e6xx/proc-e6x5c.html

用于FPGA的大多数免费微控制器都缺乏对工具链的支持。嵌入式ARM CPU带有跟踪/调试支持,编译器(gcc工具链)和完整的linux支持。以下是在FPL 2014上进行的一项调查:http : //dx.doi.org/10.1109/FPL.2014.6927482

编辑1:
赛普拉斯还提供PSoC(可编程片上系统)设备。这些设备包括一个微控制器(M8C,8051,ARM Cortex M0或Cortex M3)和经典的SoC集成I / O控制器或设备(I²C,SPI,定时器,CAN,DAC,ADC,OpAmp等)可编程的部分。这部分不像传统的FPGA那样细粒度可编程,但是可以用于实现附加的I / O控制器或内置的硬件加速器。PSoC允许您在设计中使用模拟组件。
http://www.cypress.com/psoc/?source=CY-ENG-HEADER

PSoC概述: PSoC


10

如果您只需要一个微控制器,而没有FPGA,那么将FPGA与微控制器固件一起使用是不寻常的。但是,并非所有项目都朝这个方向发展。许多任务显然需要FPGA,但最终遇到了实际上不适合VHDL解决方案的任务。有时,仅由通用CPU最好地解决问题。或者,有时情况却相反:有些任务根本不适合通用CPU,它们需要并行处理。

那时,您可以选择。您可以在设备中添加一个额外的芯片,或者您可以意识到FPGA上没有使用一堆备用门。许可一点IP,就可以立即拥有一个可以工作的通用CPU!

另一个有趣的细节是您可以自定义一些微控制器固件。我知道一些嵌入式Power PC的项目,但这些项目剥夺了浮点支持所需的所有功能,并去除了分支预测的大部分内容。这使其足够小,可以与基于VHDL的固件并排安装。


9

在FPGA中实例化微处理器或微控制器有几个有效的理由。这是三个:

  1. 您只想了解处理器的操作。FPGA为您提供了无限的方法来探查处理器在执行代码时发生的情况。这只是为了学习。

  2. 您正在实现一个大型系统,该系统需要FPGA的硬件级速度(比在微处理器上执行的软件要快),但是您的设计需要一个复杂的状态机,而使用在Xilinx PicoBlaze等简单处理器上运行的软件则更容易实现该状态机。比硬件FSM中的要好。请注意,在最新的FPGA处理技术中,PicoBlaze的运行速度可高达240MHz,而且PicoBlaze处理器每两个时钟周期执行一条指令,因此您将获得一个快速,一致的状态机,该状态机可通过软件轻松编程。

  3. 扩展(2),您需要一个可以处理中断的状态机。处理器对此非常有帮助,因为它们已经知道如何在服务中断之前和之后安全地保存和恢复状态。

这是一个警告:如果您想要一个具有标准指令集和大型开发生态系统的快速处理器,那么您需要一个快速的,硬核的处理器,例如Xilinx Zynq SoC中的两个ARM Cortex-A9。Zynq SoC中的FPGA架构仍然允许您实例化可编程逻辑中的更多处理器内核,但是ARM Cortex-A9可以运行标准操作系统(例如Linux)和标准IDE(例如Android)。

在ARM Cortex-A9和PicoBlaze之间,可以使用许多来源的可编程逻辑来实现许多软处理器。有些人喜欢使用自己的处理器,这是一项很棒的教育活动。但是,微处理器需要软件开发工具,并且与创建处理器本身相比,创建/调试这些工具需要付出大量的工作量。您必须始终权衡定制微处理器的潜在优势与创建/调试处理器内核和工具所需的时间和精力。

全面披露:我为Xilinx工作,但我可以肯定地说我没有声明FPGA始终是解决方案。如果50美分的微控制器可以胜任,那么最好使用它。FPGA和Zynq SoC适用于需要超出微控制器能力的繁重工作的项目。


热烈欢迎,史蒂文!
PkP

1
好的答案,但是谁需要一个可以处理中断的状态机呢?中断对于获取-解码-执行处理器来说是必不可少的罪恶,因为处理外部刺激需要专门使用处理器来运行ISR。在FPGA中,外部激励在单独的逻辑块中处理,而状态机也继续运行。无需保存和恢复状态。基本上,中断是解决HDL最初没有的问题的不完善解决方案。
Ben Voigt 2015年

Ben,您当然对硬件实现的状态机是正确的。您始终可以将“中断”引脚连接为另一个状态机输入。但是,使用运行C的处理器来实现时,许多复杂的状态机更容易理解,或者至少对于某些开发人员更容易理解。那是您需要中断的时间。
史蒂文·莱布森,2015年

2

有时,您可能使用FPGA是因为您拥有要在已经过时且不可用的物理处理器上运行的软件,因此您需要将其复活。尽管不兼容引脚(尽管已经看到了DIP样式的安装座),但是这可以使您获得精确的周期。在商品微处理器上进行纯软件仿真的可能性不大。例如apple2fpga

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.