使用Digilent Zybo开发板在Zynq上运行Ada

时间:2018-03-19 23:55:59

标签: ada xilinx zynq gnat-gps

我已成功使用Vivado和SDK为Digilent Zybo板上的Zynq XC7Z010开发VHDL和C.我也一直在使用GNAT GPS IDE来学习针对STM32F4处理器的Ada(使用其中一个支持的开发板)。

GPS还附带一组zynq7000运行时间,目标是XC7Z020(据我所知)。在查看了这些目标的BSP后,我认为生成的代码也应该在XC7Z010上运行,因为ARM内核看起来是相同的。可能会发现存在差异,在这种情况下,我将根据现有的zynq7000 BSP构建特定的运行时(Adacore已经记录了这个过程,并举例说明了生成新的{{} 1}} BSP)。

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

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

非常感谢任何建议或指示!

1 个答案:

答案 0 :(得分:3)

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

由于某些原因,当我启动Ada AXI文件时,ELF界面不起作用。如果我用它代替等价的C,那么一切都很好。

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

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

****更新****

以下是一些其他背景信息,以及我为使自定义AXI IP工作而必须采取的措施的说明。

提供的AdaCore BSP(用于构建运行时的Board Support Package)针对Xilinx XC702开发板。我使用的是Digilent Zybo(旧版本)。这两个板使用不同的Zynq部分,XC702基于XC7Z020,Zybo使用XC7Z010(有一个XC7Z020选项的新版本。)< / p>

我按照AdaCore说明(在他们的网站上提供)并专门为Zybo构建了BSP。最初,我刚刚更新时钟详细信息,因为Zybo以不同的速度运行,然后验证Ada delay函数是否正常工作(作为Ravenscar运行时的一部分提供,该运行时是从更新的{{1}构建的}})。但是,我的自定义BSP IP仍然无效...

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

AXI_GP0

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

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

我希望这对未来的某些人有所帮助,我也强烈建议Ada进行Zynq开发,特别是如果你最终需要DO-178认证,或类似的。