FPGA和CPLD引导加载程序

时间:2018-04-28 23:07:40

标签: fpga bootloader

来自MCU的世界,我创建了引导程序,以便客户可以更新固件。

如何通过FPGA和CPLD完成这项工作。

对于FPGA:

由于固件存储在外部闪存中,FPGA映像是否只是写入其外部闪存然后重新启动?但是如果新文件损坏或更新时连接被删除会发生什么?有没有办法进行默认备份?在MCU中,引导加载程序永远不会被覆盖,因此应用程序可以随时搞砸,引导加载程序仍然可以工作。

是否有单独的专用非易失性存储器部分,在上电时不会重新配置,您可以加载引导加载程序?

对于CPLD:

由于图像是在内部存储的,他们是否有办法自行配置?如何为CPLD制作引导加载程序?

其他想法:

也许您可以使用GPIO设置某种类型的FTDI芯片,您可以通过USB从PC应用程序控制。通过这种方式,您可以将SPI加载到外部闪存上的新映像中吗?有人这样做吗?这样,FPGA映像可能会损坏或丢失,并且仍然可以加载新映像。

请注意,我假设FPGA或CPLD单独在电路板上。这意味着电路板上没有MCU来完成这一切。

有关行业如何完成此任务的任何见解都会很棒。

3 个答案:

答案 0 :(得分:1)

<强>的FPGA

这个问题没有一个共同的答案。对于不同的FPGA和不同类型的应用,它是不同的。

有些FPGA能够在外部闪存中有两个比特流,因此如果一个比特流被破坏,它将回退到第二个比特流。 您必须检查确切FPGA的数据表,以确定它是否具有此类恢复功能,以及它是如何工作的。

另一种常见的方法是让MCU位于FPGA旁边,让MCU管理FPGA的比特流更新。让MCU负责确保外部闪存中存在有效的比特流。 或者,您可以完全跳过外部闪存并使MCU在每次启动时将比特流发送到FPGA。

某些FPGA,如Xilinx ZYNQ,内置硬核处理器。该处理器可以独立于FPGA启动,因此您可以为该处理器编写一个正常的引导加载程序,并使处理器负责更新FPGA比特流。

如果您的应用程序是USB外围设备,那么处理它的一个好方法是跳过闪存,并使PC上的USB驱动程序在每次启动时将比特流加载到FPGA。 建议不要通过FTDIchip GPIO进行BitBanging,因为这需要很长时间。 FTDIchip和其他制造商都为SPI和JTAG提供硬件支持。有了这些,您可以在每次启动时快速完成,没有任何误击。

<强>的CPLD

通常没有内置的恢复机制。 (可能有例外)

CPLD是非常基本的设备。如果您需要比特流更新功能,则通常必须由外部MCU完成。 通常,您不会为CPLD实现比特流更新功能。您可以从一开始就使设计无错误。

答案 1 :(得分:0)

  

有没有办法进行默认备份?

有Intel MAX 10系列的fpga,它具有片上配置闪存,并支持双配置。如果一个配置发生任何错误,另一个仍然存在并将用作后备图像。

但这可能是一个例外,而不是fpga世界中的典型案例。

答案 2 :(得分:0)

如果FPGA不支持双重配置,并且您正在直接对FPGA进行编程(而不是通过微控制器),并且以某种方式弄乱了新的位文件或连接,则必须重新进行编程。 但是,在Spartan 6中,有两种方法可以将程序直接加载到FPGA: 1.这是一个相对较快的过程,只需几分钟。但是,如果安装程序混乱,则必须从头开始。当您进行较小的修改(特别是与时间相关的微调)时,此方法通常使用,因为加载位文件不会占用太多时间。 2.有一个外部存储器可用来加载程序。除非您决定显式重写它,否则将保留加载到此存储器中的位文件。将位文件加载到该存储器上需要花费更多时间(取决于代码的复杂性),但是它停留在那里,您可以将该代码加载到FPGA上。