3

我已经成功地使用 Vivado 和 SDKZynq XC7Z010在 Digilent Zybo 板上开发 VHDL 和 C。我也一直在使用 GNAT GPS IDE 来学习针对STM32F4处理器的 Ada(使用支持的开发板之一)。

GPS 还附带了一组zynq7000针对XC7Z020(据我所知)的运行时间。在查看了这些目标的 BSP 之后,我相信生成的代码也应该XC7Z010在 ARM 内核上运行,因为它们看起来是相同的。结果可能存在差异,在这种情况下,我将尝试基于现有zynq7000BSP 构建特定的运行时(Adacore 已经记录了此过程并给出了生成新STM32F4BSP 的示例)。

我的主要问题是我不确定如何elf在我的 Zybo 上加载和运行生成的 Ada 文件。我试图生成一个BOOT.ini文件,其中包含一个FSBL(使用 SDK 构建并使用我从 Vivado 导出的硬件)、一个比特流和 Adaelf文件(Zybo 有一个可以配置为启动设备的 MicroSD 接口,这个工作完美搭配elf通过 Vivado / SDK 生成的比特流和 C )。

无论如何,这不起作用......我猜这可能是一个链接问题,或者一个引导加载程序问题,或类似的问题。以我目前的知识水平,我只是在这个阶段不确定。

任何建议或指示将不胜感激!

4

1 回答 1

4

事实证明我BOOT.ini很好,问题与访问AXI我的比特流中定义的自定义寄存器有关。如果我从 Ada 中删除这些引用,则生成的ELF文件可以完美运行。例如,使用Text_IO.Put_Line()、使用 Ada 运行时delayClock操作等在 Zybo 的 VCP 上打印。

由于某种原因,当我启动 Ada文件AXI时界面无法正常工作。ELF如果我用它代替等效的 C,那么一切都很好。

这个特定问题目前尚未解决,但与我原来的问题无关!

(可能是 Ada 运行时依赖FSBLu-Boot初始化了这个,不确定。如果你知道,请随时发表评论,当我解决这个问题时,我也会添加评论)

**** 更新 ****

下面是一些额外的背景知识,并描述了我必须做些什么才能让我的自定义 AXI IP 工作。

提供的 AdaCore BSP(用于构建运行时的板级支持包)针对 XilinxXC702开发板。我正在使用 Digilent Zybo(旧版本)。两块板使用不同的 Zynq 部件,XC702基于 aXC7Z020和 Zybo 使用 a XC7Z010(有一个带有XC7Z020选项的新版本)。

我按照 AdaCore 说明(可在他们的网站上获得)并BSP专门为 Zybo 构建了一个。最初,当 Zybo 以不同的速度运行时,我只是更新了时钟详细信息,然后验证了 Adadelay功能是否正常工作(作为Ravenscar从更新的运行时构建的一部分提供BSP)。但是,我的自定义AXIIP 仍然不起作用...

长话短说,Ada 运行时包含一个名为的汇编文件start-ram.S,其中包括设置MMU. 有一个名为的包含文件,其中包含作为一系列指令memmap.inc的实际页面定义。我必须通过编辑特定指令来更新地址条目,MMU.longAXI_GP0

.long 0x43c10c16  @ for 0x43c00000, axi_gp0

以前它设置为0x00000000 @ for 0x43c00000, *none*. 这些条目在内部解码start-ram.S,然后用于配置MMU(前 12 位设置页面,其余位被切碎并用作页面配置)。

因此,一旦我在 Zybo 中编辑了这个文件BSP并重新构建了运行时,IP 就可以从 PS 访问并按预期工作。这一切都需要一段时间才能弄清楚,但是当我在探索死胡同时学到了很多东西,这是值得的!

我希望这对未来的人有所帮助,我也强烈推荐 Ada 用于 Zynq 开发,特别是如果您最终需要 DO-178 认证或类似的认证。

于 2018-03-21T14:19:05.473 回答