FPGA 和 CPLD Bootstrap

标签 fpga bootloader

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

这是如何使用 FPGA 和 CPLD 完成的。

对于 FPGA:

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

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

对于 CPLD:

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

其他想法:

也许您可以将某种带有 GPIO 的 FTDI 芯片放入您可以通过 USB 从 PC 应用程序控制的芯片。这样你就可以通过 bitbang 一个 SPI 来加载外部闪存上的新图像?有人这样做吗?这样,FPGA 图像可能损坏或丢失,但仍然能够加载新图像。

请注意,我假设 FPGA 或 CPLD 单独位于板上。这意味着板上没有 MCU 可以执行所有这些操作。

任何有关行业如何完成此任务的见解都将非常有用。

最佳答案

FPGA

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

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

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

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

如果您的应用程序是 USB 外设,那么处理它的一种好方法是跳过闪存,让 PC 上的 USB 驱动程序在每次启动时将比特流加载到 FPGA。 不推荐通过 FTDIchip GPIO 对其进行 Bitbanging,因为这会花费很长时间。 FTDIchip 和其他制造商对 SPI 和 JTAG 都有硬件支持。有了这些,您就可以在每次启动时快速完成,而不会出现 bitbanging。

CPLD

通常没有内置的恢复机制。 (可能会有异常(exception))

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

关于FPGA 和 CPLD Bootstrap ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50081867/

相关文章:

c - 如何 mmap() 更正地址

verilog - iverilog 模拟器如何解释我的 RAM 代码以确定 'x' 值?

verilog - VERILOG 中的随机 0、1、-1

assembly - 引导加载程序不会跳转到内核代码

fpga - 可以用C语言编写FPGA吗?

fpga - 如果信号不在设计中,如何忽略综合约束?

linux - bochs 从软盘启动 FLOPPY : read() on floppy image returns 0

assembly - 添加彩色文本(我的自定义 MBR)

c - 如何使用 U-Boot API?

c - 如何通过将各自的部分放在不同的位置来链接两个目标文件?