给MCU工程师详解FPGA硬件属性
时间:03-30
来源:互联网
点击:
作者: Max Maxfield
我的许多朋友都是经验丰富的嵌入式设计工程师,但他们都是微控制器(MCU)背景,因此对于FPGA是什么以及FPGA能做什么只有一个模糊的概念。如果问急了,他们会说“你可以通过配置FPGA让它做不同的事情”诸如此类的话,但他们真的不是很清楚FPGA里面有什么,或者如何在设计中使用FPGA。
事实上,MCU对有些任务来说是很适合的,但对其它一些任务来说可能做的并不好。举例来说,当需要并行执行大量计算任务时,FPGA可能会让你喜出望外。在本文中我们将讨论FPGA的硬件属性。
简单的FPGA构造
在集成电路领域人们经常会听到构造(fabric)这个术语,它指的是FPGA器件的底层基础结构。(作为一个兴趣点,单词“构造”来自中世纪英语fabryke,意思是“建造的某些东西”)。下面让我们从FPGA中的内核可编程构造开始吧……
如果我们仔细观察FPGA封装的内部,我们将看到硅片(技术术语裸片)。可编程构造表现为可编程逻辑块阵列,如下图所示。如果我们用放大镜“放大查看”,我们可以看到这种构造由沉浸于可编程互连“海洋”中的许多逻辑“岛”(可编程逻辑块)组成。
图1:简单的FPGA构造。
基本FPGA可编程构造的一般性表示。
是啊,我确实是用自己的双手亲自创作的这幅图片,我因此感到非常自豪呢,非常感谢你加以关注。如果我们进一步放大,我们可以看到,每个可编程模块都包含有许多数字功能。在这个例子中,我们可以见到一个三输入的查找表(LUT)、一个复用器和一个触发器,但重要的是我们要认识到,这些功能的数量和类型对不同系列的FPGA来说是会变化的。
触发器可以被配置(编程)为寄存器或锁存器;复用器可以被配置为选择一个到逻辑块的输入或LUT的输出;LUT可以被配置为代表任何所要求的逻辑功能。
更详细地了解LUT
上面所示的简单例子包含一个三输入的查找表(LUT)。在实际应用中,即使最简单的FPGA都会使用四输入LUT,而一些更大更复杂的器件甚至会宣称使用六、七或八输入的LUT,但为了简单起见,我们还是讨论三输入版本。
我们会在以后的文章中讨论各种类型的FPGA实现技术。现在我们只需要知道,FPGA内部的可编程单元可以用反熔丝、闪存单元或SRAM内存单元来实现。先让我们看一个用反熔丝技术创建的FPGA吧。这是一种一次性可编程(OTP)技术,这意味着一旦你编程了这个FPGA,它将永远保持这个状态而不再改变。
形象化介绍这种技术的最简单方法是用下图所示级联的2:1复用器(MUX)。对基于反熔丝技术的FPGA来说,编程器件相当于通过“硬件连线”将第一组复用器的输入连接到实现目标逻辑功能所需的正确0或1值。下图中所示的值反映的实际结果是,我们使用这个LUT实现了前面那张图隐含的公式y=(a & b)|c。在实际应用中,复用器可以用场效应管的分支“树”来实现,但我们在这里真的不用担心最底层的实现细节。
图2:输入值经“硬件连接的”反熔丝型LUT(左),输入从SRAM单元馈入的SRAM型LUT(右)。
另外一种非常常见的FPGA实现技术是使用SRAM配置单元。同样,我们会在以后的文章中讨论更多的细节。这里我们所要知道的仅是当电路板第一次上电时,基于SRAM的FPGA会加载配置信息(我们可以把这个过程想像为器件的编程)。作为这种配置的一部分,用作LUT复用器输入的SRAM单元会被加载进上图所示的目标0或1值。
我没有显示0和1被加载进SRAM单元的那种机制,因为我不想让问题变得复杂。出于这次讨论的目的,我们真的无需担心这种“魔术”是如何发生的。我在这里唯一要提的事(给你考虑的空间)是—使用一种被称为部分再配置的技术—FPGA的一部分可以发起对另一部分进行再配置(当然反过来也行)。对于具有微控制器和/或软件背景的读者来说,我们可以将这种技术想象为相当于自我修改代码的硬件。这意味着这种技术是非常非常强大的,但也会带来很难隔离和调试的问题。
通用的输入和输出
FPGA器件还包含有通用的输入/输出(GPIO)引脚和焊盘(图1中没有显示)。通过配置单元,FPGA器件内的互连部分可以被编程为这样:将器件的主输入连接到一个或多个可编程逻辑块的输入。任何逻辑块的输出也可以用来驱动任何其它逻辑块的输入和/或FPGA器件的主输出。另外,GPIO引脚可以被配置为支持种类广泛的I/O标准,包括电压、终端阻抗、摆率等。
世界上第一块FPGA与本文中讨论的架构非常类似。这块FPGA就是赛灵思公司在1985年推出的XC2064(是用2um工艺节点制造的),它包含有8×8=64的逻辑块阵列,每个逻辑块包含一个四输入LUT和其它一些简单功能。从那以后,FPGA发展势不可挡,正像我们看到的那样……
我的许多朋友都是经验丰富的嵌入式设计工程师,但他们都是微控制器(MCU)背景,因此对于FPGA是什么以及FPGA能做什么只有一个模糊的概念。如果问急了,他们会说“你可以通过配置FPGA让它做不同的事情”诸如此类的话,但他们真的不是很清楚FPGA里面有什么,或者如何在设计中使用FPGA。
事实上,MCU对有些任务来说是很适合的,但对其它一些任务来说可能做的并不好。举例来说,当需要并行执行大量计算任务时,FPGA可能会让你喜出望外。在本文中我们将讨论FPGA的硬件属性。
简单的FPGA构造
在集成电路领域人们经常会听到构造(fabric)这个术语,它指的是FPGA器件的底层基础结构。(作为一个兴趣点,单词“构造”来自中世纪英语fabryke,意思是“建造的某些东西”)。下面让我们从FPGA中的内核可编程构造开始吧……
如果我们仔细观察FPGA封装的内部,我们将看到硅片(技术术语裸片)。可编程构造表现为可编程逻辑块阵列,如下图所示。如果我们用放大镜“放大查看”,我们可以看到这种构造由沉浸于可编程互连“海洋”中的许多逻辑“岛”(可编程逻辑块)组成。
图1:简单的FPGA构造。
基本FPGA可编程构造的一般性表示。
是啊,我确实是用自己的双手亲自创作的这幅图片,我因此感到非常自豪呢,非常感谢你加以关注。如果我们进一步放大,我们可以看到,每个可编程模块都包含有许多数字功能。在这个例子中,我们可以见到一个三输入的查找表(LUT)、一个复用器和一个触发器,但重要的是我们要认识到,这些功能的数量和类型对不同系列的FPGA来说是会变化的。
触发器可以被配置(编程)为寄存器或锁存器;复用器可以被配置为选择一个到逻辑块的输入或LUT的输出;LUT可以被配置为代表任何所要求的逻辑功能。
更详细地了解LUT
上面所示的简单例子包含一个三输入的查找表(LUT)。在实际应用中,即使最简单的FPGA都会使用四输入LUT,而一些更大更复杂的器件甚至会宣称使用六、七或八输入的LUT,但为了简单起见,我们还是讨论三输入版本。
我们会在以后的文章中讨论各种类型的FPGA实现技术。现在我们只需要知道,FPGA内部的可编程单元可以用反熔丝、闪存单元或SRAM内存单元来实现。先让我们看一个用反熔丝技术创建的FPGA吧。这是一种一次性可编程(OTP)技术,这意味着一旦你编程了这个FPGA,它将永远保持这个状态而不再改变。
形象化介绍这种技术的最简单方法是用下图所示级联的2:1复用器(MUX)。对基于反熔丝技术的FPGA来说,编程器件相当于通过“硬件连线”将第一组复用器的输入连接到实现目标逻辑功能所需的正确0或1值。下图中所示的值反映的实际结果是,我们使用这个LUT实现了前面那张图隐含的公式y=(a & b)|c。在实际应用中,复用器可以用场效应管的分支“树”来实现,但我们在这里真的不用担心最底层的实现细节。
图2:输入值经“硬件连接的”反熔丝型LUT(左),输入从SRAM单元馈入的SRAM型LUT(右)。
另外一种非常常见的FPGA实现技术是使用SRAM配置单元。同样,我们会在以后的文章中讨论更多的细节。这里我们所要知道的仅是当电路板第一次上电时,基于SRAM的FPGA会加载配置信息(我们可以把这个过程想像为器件的编程)。作为这种配置的一部分,用作LUT复用器输入的SRAM单元会被加载进上图所示的目标0或1值。
我没有显示0和1被加载进SRAM单元的那种机制,因为我不想让问题变得复杂。出于这次讨论的目的,我们真的无需担心这种“魔术”是如何发生的。我在这里唯一要提的事(给你考虑的空间)是—使用一种被称为部分再配置的技术—FPGA的一部分可以发起对另一部分进行再配置(当然反过来也行)。对于具有微控制器和/或软件背景的读者来说,我们可以将这种技术想象为相当于自我修改代码的硬件。这意味着这种技术是非常非常强大的,但也会带来很难隔离和调试的问题。
通用的输入和输出
FPGA器件还包含有通用的输入/输出(GPIO)引脚和焊盘(图1中没有显示)。通过配置单元,FPGA器件内的互连部分可以被编程为这样:将器件的主输入连接到一个或多个可编程逻辑块的输入。任何逻辑块的输出也可以用来驱动任何其它逻辑块的输入和/或FPGA器件的主输出。另外,GPIO引脚可以被配置为支持种类广泛的I/O标准,包括电压、终端阻抗、摆率等。
世界上第一块FPGA与本文中讨论的架构非常类似。这块FPGA就是赛灵思公司在1985年推出的XC2064(是用2um工艺节点制造的),它包含有8×8=64的逻辑块阵列,每个逻辑块包含一个四输入LUT和其它一些简单功能。从那以后,FPGA发展势不可挡,正像我们看到的那样……
嵌入式 MCU FPGA 集成电路 场效应管 电路 电压 赛灵思 DSP 收发器 Altera SoC ARM Cortex 相关文章:
- 基于FPGA的片上系统的无线保密通信终端(02-16)
- 基于Virtex-5 FPGA设计Gbps无线通信基站(05-12)
- 基于FPGA的DVI/HDMI接口实现(05-13)
- 基于ARM的嵌入式系统中从串配置FPGA的实现(06-09)
- FPGA按键模式的研究与设计(03-24)
- 周立功:如何兼顾学习ARM与FPGA(05-23)