所有关于电路
技术文章

微控制器爱好者的第一个看可编程逻辑

2017年3月24日通过杜安本森

FPGA对你的阿森​​纳来说可以是一个很好的补充,但它需要一些调整微控制器骑师思考的方式。

现场可编程门阵列(FPGA)传统上驻留在高端专业开发领域。直到最近,由于购买的高初始成本,开发工具以及围绕概念的神秘,FPGA在那个竞技场中几乎完全住在那个舞台上。幸运的是,近年来,大部分都发生了变化。

FPGA板现在在覆盖范围内

现在有很多价格合理且易于使用FPGA开发板,并且通常可以免费下载基本工具。在上一篇文章中指出了一些这些董事会:“新设计师最好的FPGA开发委员会。“

Papilio Duo.

Papilio Duo.FPGA开发板。图片作者自己的工作。

然而,即使FPGA也变得更加实惠,比过去几年更容易使用,你仍然可能会问“为什么?”没有微控制器快速而多功能?也许,也许不是。

FPGA基本上是定制ASIC芯片,可以根据需要编程和重新编程。最高的FPGA有数百万个盖茨。大多数是纯粹的数字。有些是作为芯片(SOC)的系统,在同一包装中使用ARM处理器和模拟外设。

很难确定FPGA能做什么“最好的事情”。它们是功能非常丰富的设备,但如果非要用一个词来回答的话,那就是“并行”,也就是说它们可以同时做不止一件事。

fpga并不局限于单一的执行路径

在微控制器(MCU)或中央处理单元(CPU)中,一切都必须顺序地通过处理器内核汇流。您可以使用多核处理器获得一些并发级别,但它们都仍然使用相同的内存总线。

FPGA不是MCU,也没有内置MCU。不过,您可以在门阵列中构造自己的mcu。事实上,您可以在门阵列中配置许多mcu,创建您自己的多核处理器。更常见的用途是让FPGA做繁重的计算工作,而附加的MCU处理非实时I/O、用户界面和其他更普通的任务。

为了更好地理解FPGA的并行能力,可以将CPU或MCU可视化为由3“x 5”的笔记卡堆栈运行。每张卡片上都写有一条指令或一个数据字。你可以复制任何卡片,只要你想,你可以跳跃在你的堆栈,因为你认为合适。

要处理指令堆栈,每张卡都必须通过单个插槽,一个卡之后。那个插槽代表了通过MCU的路径算术逻辑单元(alu)。如果您使用的是一核处理器,您只有一个ALU。

在每个时钟周期中,一张卡通过ALU被输入。如果你想要执行一个功能5次(卡片的子集分组),你仍然需要将这组卡片送入插槽5次,每一张卡片都是单独的。突然间,一个30行的函数变成了150个时钟周期的工作。

“电线向上”逻辑单元组

另一方面,FPGA更像是一个大袋子的基本逻辑门芯片(也称为“逻辑单元”)。你可以把它们倒在你的桌子上,以任何你想要的方式排列和分组。因此——这是fpga的一个关键属性——如果您想要执行一个功能5次,您可以创建该组逻辑门的5个离散副本。

如果您的功能需要30个门,则需要共150个门来构建电路。但是,由于您创建了有线逻辑电路,所示到电路输入的数据传播到电路的输出而不被时钟控制。此外,由于您有五个电路,因此一个数据集不需要等待完成的。在这组模块中,整个操作在单个时钟周期中进行!

FPGA与单片机复用

将FPGA代码视为蓝图,而不是指示

FPGA设计是使用高级设计语言创建的,就像计算机一样用高级编程语言编程。FPGA语言代码看起来类似于常见的C代码,但它的作用非常不同。在MCU系统中,代码告诉处理器在运行时在每个时钟周期内执行该处理。

在FPGA中,代码更像是在上电时使用的蓝图。FPGA代码而不是运行时指令,用于连接您在表上浇注的所有这些逻辑门。它基本上创建了一个自定义芯片。一旦芯片通电并配置,不需要代码(直到下一个电源)。

单片机代码在顶部盒中,FPGA代码如下:

C VS FPGA代码块

FPGA中的“门阵列”是大量查找表(LUT)。LUT是一种特殊类型的寄存器,有时被称为RAM,配置为模拟逻辑门。当配置了FPGA时,所使用的LUT每个都会模拟某种栅极。从本质上讲,大块寄存器已经转变为逻辑门的分组。

通过在FPGA中配置并行电路,没有任何重复使用(除非您选择重用),并且没有任何内容必须通过ALU瓶颈。

例如,考虑具有20个不同传感器的机器人上的实时传感器融合,每个传感器都通过2C

在传统的微控制器系统中,每个传感器都必须被顺序扫描。在低速应用中这不是问题,但如果是一个快速移动的机器人,整个情况可能会在读取第一个和最后一个传感器之间发生相当大的变化。当第一个传感器被读取时,靠近楼梯的快速机器人可能是安全的,但当最后一个传感器被读取时,它可能会翻倒楼梯边缘。

使用FPGA,您可以配置20个独立i2C接口。这20台机器将同时运行。在一个动作中,你的基于fpga的机器人同时读取所有20个传感器。数据可以输入到您创建的组合逻辑中,并作为对MCU的虚拟实时分析呈现。

几个缺点

FPGA有几个缺点。最大的一个是FPGA是挥发性的事实。每次断开电源时,它都会失去配置。必须在下次上电时重新加载配置。因此,基于FPGA的设备需要车载闪存,或其他非易失性存储器来保持配置代码。这使FPGA PC板更复杂地设计和构建并导致较慢的启动时间。您不能具有即时单芯片FPGA设备。

如果你打算研究fpga,有几件事要记住:

  • 在MCU世界中,你编写一个程序,然后把它编程到板载闪存中。在FPGA世界中,它不被称为“程序”,而是“配置”。
  • 在你的MCU开发系统中,你可以将编译后的代码称为“十六进制文件”或“固件”。对于FPGA,您通常将其称为“位流”或“配置文件”。
  • FPGA设计通常使用两种语言之一创建:Verilog或VHDL。通常,FPGA语言称为HDL,或硬件描述语言。我学习了Verilog,我没有足够的体验VHDL来比较这两者。
  • 在某些方面,hdl看起来像常规的编程语言,但它们不是。特别是,Verilog看起来非常像c语言。不要让你以为你在给一个MCU编程。这只会给你带来痛苦。

FPGA不是镇上唯一可编程逻辑游戏。CPLD(复杂的可编程逻辑设备)类似于FPGA和非易失性,但不太灵活。可编程逻辑块还开始在微控制器中显示,例如Microchip PIC系列的某些成员。而且,Silego公司在其GPAK线中拥有一系列可配置的混合信号可编程逻辑设备。这些其他设备都没有到达高端FPGA的门,但对于更简单的应用,它们可能值得一看。

结论

对我来说,思考FPGA的最大变化是COWER-UP时间内配置的FPGA的概念,而不是运行时。如果呼叫函数(在HDL中也称为一个模块),则不仅在运行程序时不仅重复使用代码块。使用FPGA,当芯片上电并加载比特流时,您正在创建各个逻辑电路。编码时,它看起来像软件,但它不是。这是硬件。

只要稍加努力,fpga就可以打开一个全新的世界。它们功能强大,并不难学,而且与我们大多数人所熟悉的微控制器截然不同。

6评论
  • Lucifer Morningstar. 2017年3月27日

    你基本上证明了Arduino对初学者更好。

    喜欢。 回复
    • D
      杜安本森 2017年3月27日
      对于微控制器初学者来说,Arduino绝对是一个更好的选择。现在有一些板是FPGA/Arduino混合,如文章中描绘的Papilio DUO或XLR8。不过,如果你是编程和电子方面的新手,我建议你从Arduino开始。
      喜欢。 回复
  • Stateathomeelectronics. 2017年3月27日

    作为在职业生涯中使用FPGA的人,很高兴看到有一些演示板落入了“合理定价”的类别。这些设备对于所需的设计非常好,需要快速,并行并包含关键时序。

    同时也为基础数字电路设计提供了良好的学习平台,大大加快了电路的构建速度。

    它是否会填充与Arduino相同的利基,嗯,没有。它也没有尝试。对于那些想要迁移到数字电路世界的人,FPGA是一个良好的开始工具。您可能会发现许多项目不需要Arduino。

    喜欢。 回复