FPGA和CPLD引导加载程序

3

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

对于FPGA:

由于固件存储在外部闪存中,FPGA图像是否只需写入其外部闪存然后重新启动?但是,如果新文件损坏或连接在更新时断开会发生什么情况?是否有一种方法可以进行默认备份?在MCUs中,引导加载程序永远不会被覆盖,因此应用程序随时可能出错,而引导加载程序仍将正常工作。

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

对于CPLD:

由于图像存储在内部,它们是否有一种自我配置的方式?如何为CPLD制作引导加载程序?

其他想法:

也许您可以放置某种带有GPIO的FTDI芯片,您可以通过USB从PC应用程序控制它。这样,您就可以通过位扰动SPI在外部闪存中加载新图像?有人这样做过吗?这样,即使FPGA图像损坏或丢失,仍然能够加载新图像。

请注意,我假设FPGA或CPLD独自放置在板子上。这意味着板子上没有MCU来完成所有这些操作。

了解行业如何完成此任务的任何见解都将是极好的。


请参阅FPGA和CPLD引导加载程序。该问题似乎对于Stackoverflow来说也过于宽泛。请参阅我可以在这里询问哪些主题? - user1155120
这个问题有点笼统,但是它足够狭窄,可以得到一个通用且有用的答案。对于试图攀登FPGA陡峭学习曲线的人来说,这是一个有效的问题。 - Timmy Brolin
3个回答

4

FPGAs

对于这个问题,没有一个通用的答案。不同的FPGA和不同类型的应用程序有所不同。

一些FPGA具有在外部闪存中具有两个比特流的功能,因此如果一个比特流损坏了,它将回退到第二个比特流。您必须查看您的确切FPGA的数据表,以找出它是否具有此类恢复功能,以及它的工作原理。

另一种常见的方法是在FPGA旁边放置一个MCU,并让MCU管理FPGA的比特流更新。使MCU负责确保外部闪存中有有效的比特流。

或者,您可以完全跳过外部闪存,并使MCU在每次启动时将比特流发送到FPGA。

一些FPGA,如Xilinx ZYNQ,具有内置的硬处理器。该处理器可以独立于FPGA引导,因此您为该处理器编写正常的引导加载程序,并使其成为处理器更新FPGA比特流的责任。

如果您的应用程序是USB外设,则处理它的一种好方法是跳过闪存,并使PC上的USB驱动程序在每次启动时将比特流加载到FPGA中。不建议通过FTDIchip GPIO进行位带操作,因为这需要很长时间。FTDIchip和其他制造商都支持SPI和JTAG的硬件支持。使用这些,您可以在每次启动时快速完成操作,而无需进行位带操作。

CPLDs

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

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


1
如果FPGA不支持双重配置,并且您直接对FPGA进行编程(而不是通过微控制器),并且某种方式新的位文件或连接出现问题,您必须从头开始重新编程。 然而,在Spartan 6中,有两种方法可以直接将程序加载到FPGA上: 1. 这种方法相对快速,只需几分钟即可完成。但是,如果设置出现问题,您必须从头开始。这种方法主要用于进行轻微修改(特别是时间相关的微调),因为位文件的加载不需要太多时间。 2. 有一个外部存储器,您可以在其中加载程序。加载到该存储器上的位文件会一直保留,除非您决定显式地重新编写它。将位文件加载到此存储器上需要更长时间(取决于代码的复杂性),但它会保留在那里,您可以将此代码加载到FPGA上。

1

有没有一种方法可以进行默认备份?

Intel MAX 10系列fpga有内置配置闪存,支持双重配置。如果一个配置出现问题,另一个仍然存在并将用作备用映像。

但这可能是个例外,在fpga世界中不是典型情况。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接