1

我想知道为串行 SPI 闪存创建 PROM 文件 (.MCS) 的正确程序,其中包括 FPGA 配置比特流和 Microblaze 处理器使用的软件。这是假设我的硬件和软件设计都已完成。

我正在使用 Xilinx Spartan-6 评估板 SP605,它具有多个非易失性存储设备,我希望使用串行 SPI 闪存来存储 FPGA 比特流和需要加载到内存中的 Microblaze 软件。只有当 Microblaze 的代码驻留在内部 BRAM 中时,我才能实现这一点。如果我创建我的链接脚本,以便将代码或数据部分放在外部 DDR3 RAM 中,它会失败。

- 编辑 -

好的,所以我尝试了几种不同的方法,并且对我需要做的事情有了更好的理解,但仍然没有成功(顺便说一句,感谢您的回复安迪)。所以,我尝试了两种不同的方法。对于他们两个,我首先将系统比特流与引导加载程序合并以生成一个运行良好的新 .bit (download.bit) 文件(当您在 SDK 中点击程序并选择引导加载程序来加载 BRAM 时,它调用 data2mem 到生成新的 download.bit 文件)。

第一种方法 - BIN 文件

一旦我的主程序完成(使用针对 DDR RAM 和所有的链接器脚本),我调用 mb-objcopy 从 .elf 生成一个 bin 文件:

mb-objcopy -O binary program -R .vectors_reset -R .vectors.sw_exception -R vectors.interrupt -R .vectors.hw_exception dummy.elf dummy.b

然后我使用 iMPACT 创建和使用 download.bit 和 dummy.b 的 MCS 文件。我将 download.bit 放在 SPI Flash 的起始地址,然后将 dummy.b 放在更下方(引导加载程序已经指向该地址)。然后我将 MCS 刻录到串行 SPI 闪存,重新启动,引导加载程序运行,并且应该将所有内容复制到 DDR RAM,但是,主程序不起作用。我在这里错过了什么吗?如果我尝试在不将主程序从 .elf 更改为 BIN 的情况下使用 iMPACT,PC 会挂起(有时我什至必须完全重置计算机)并且我有一台速度非常快且配备内存的 PC。

我使用的引导加载程序与 Xilinx XAPP1146 文档中链接的引导加载程序相同。

第二种方法 - SREC 文件

步骤几乎相同,除了我使用相同的 mb-objcopy 命令生成 SREC 而不是 BIN 文件(这次我不删除任何扇区,否则我需要为 BIN 文件执行此操作它会生成一个巨大的文件)。

我使用的引导加载程序是 SDK 软件具有的引导加载程序。

如果您已成功为 Microblaze 创建了引导加载程序,请告诉我。

在此先感谢,埃里克

4

3 回答 3

0

我已经构建了引导加载程序,但与您的有两个不同:

  • 他们不会从与比特流来源相同的闪存设备中获取程序。
  • 我使用自定义代码对闪存进行编程,而不是使用影响。

如果它给你任何想法,这就是我所做的:

我有一个单独的 SPI 闪存设备,我从中读取了一个 ELF 文件,然后我对其进行动态解析并将相关的代码/初始化部分传输到 DRAM 中。不过,您的引导加载程序没有理由无法从与配置相同的闪存设备加载。

它不是一个完全灵活的 ELF 解析器,因为它假定节的顺序与节头表报告它们的顺序相同,但这就是 Microblaze 工具生成文件的方式,所以它工作正常。

(并且不要忘记在将文件编程到闪存之前从文件中删除调试信息!)

于 2012-02-09T15:48:58.560 回答
0

这比这一切都容易。

  1. 从 SDK 创建引导加载程序 (srec_bootloader)
  2. 使用系统位文件和 srec 引导加载程序对 FPGA 进行编程。
  3. 从硬件平台获取download.bit文件
  4. 运行以下命令

impact -batch make_bpi_up.impact

xmcsutil -accept_notice -18 pi outfile.hex -o bootloader.bin

(上面的最后一个命令使用您的 FPGA 位文件和引导加载程序创建可引导映像)

然后使用 XSDK 在引导加载程序指定的偏移量处对应用程序进行编程 接下来,使用 XSDK 对引导加载程序 @ 0x0 进行编程 - 注意,当您从 XSDK 中选择“Program Flash”时,您需要浏览至 bootloader.bin 并选择* 与.bin 相对;.elf;*.srec 在浏览器窗口的文件类型过滤器中,这样您就可以选择 bootloader.bin

如果您需要我澄清任何步骤,请告诉我。在下周将其添加到我的博客和屏幕截图的过程中。

make_bpi_up.impact 文件包含以下内容

setMode -pff                                  
setSubmode -pffparallel                        
setPreference -pref StartupClock:Auto_Correction
addPromDevice -p 1 -size 32768
addDesign -version 0 -startaddress 000000
addDeviceChain -index 0
addDevice -p 1 -file download.bit 
generate -format hex -fillvalue FF -output outfile
quit

麦吉弗奎

于 2013-10-09T20:47:33.120 回答
0

右键单击 microblaze,单击关联 ELF 文件添加您的 .elf 文件并配置模式 .generate 比特流。并将 .bit 转换为 .mcs 并下载文件 ..elf 和 .mcs 文件都存储在闪存中

于 2017-01-30T07:56:20.737 回答