14.1 EDK - 如何将应用程序引导到Block RAM中。

描述

当FPGA比特流没有经过与软件(ELF)一样多的迭代时,将应用程序从闪存引导到块RAM中是很有用的。每次进行软件迭代时刻录闪存都是不切实际的(为了在硬件中进行测试)。

如果这不是问题,那么(Xilinx答复46518)中描述了一种没有引导加载程序的简单方法。

在本教程中,我们将使用64 KB的Block RAM,将SREC引导加载程序放入比特流,并将我们的Block RAM链接应用程序放在我们的并行闪存器件中的偏移处。您可以使用较少的Block RAM,但本教程假设为64KB。

我们将引导加载程序放在Block RAM范围的END处,这样我们就可以为我们的最终应用程序使用全范围的内存,这样我们就不会在将ELF复制出闪存时覆盖与Block RAM相关的引导加载程序。

  1. 在XPS中为您的电路板创建一个项目,包括一个线性闪存器件(通过EMC)和64K Block RAM。 Base System Builder设计是理想的,但不是必需的。
  2. 使用比特流导出到SDK。
  3. 在SDK中,创建您的应用程序(“userApp”)。
  4. 右键单击应用程序 - > 生成链接器脚本
  5. 确保userApp链接到Block RAM
  6. 创建一个新的SREC引导程序( 文件 - > 新的Xilinx C项目 )(“引导程序”)
  7. 在引导加载程序的src文件夹中,将blconfig.h中的地址更改为闪存基址。
    • 如果您计划将引导加载程序比特流刻录到闪存,请确保包含偏移量。
    • FLASH_BASEADDRESS + 0x01200000的地址适用于大多数器件。
  8. 右键单击引导加载程序 - > 生成链接描述文件
  9. 确保引导加载程序链接到Block RAM。您不需要任何堆空间
  10. 您可以打开bootloader.c文件,并注释掉第42行以获得更小更快的引导加载程序;在此模式下,您应该能够将堆栈空间减少到0x100。
  11. 打开引导加载程序的链接描述文件(位于“src”文件夹下)
  12. 窗口底部会打开一个标题为“Source”的小标签,单击此按钮。
  13. 在引导加载程序的链接描述文件的源代码中,编辑块RAM的原点,并将长度编辑为接近结尾的内容。例如:
    • microblaze_0_i_bram_ctrl_microblaze_0_d_bram_ctrl:ORIGIN = 0x00000050,LENGTH = 0x0000FFAF
    • microblaze_0_i_bram_ctrl_microblaze_0_d_bram_ctrl:ORIGIN = 0x00002000,LENGTH = 0x00002000
  14. 此更改允许引导加载程序开始将用户应用程序复制到用户App仍链接到的原点的相同Block RAM中(Origin 0x00000050)

然后,您可以单击Xilinx Tools - > Program FPGA ,选择bootloader.elf(不是bootloop),并通过(Xilinx答复46518)将此比特流刻录到闪存(或将bootloader.elf添加到您的顶级ISE或PlanAhead)项目,然后刻录该比特流)。

然后,您可以使用FlashWriter( Xilinx工具 - > 程序闪存 )将您的ELF(使用复选框转换为SREC)刻录到您在步骤7中描述的偏移量;仅刻录用户App比整个比特流快得多。您可以调整ORIGIN和LENGTH以满足您的需求。

编辑 重设标签(回车键确认) 标为违禁 关闭 合并 删除

提问于 2018-07-31 14:36:56 +0800

这个帖子被标记为一个社区wiki

这个帖子是一个wiki(维基). 任何一个积分 >500的人都可以完善它