我已成功使用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
完美配合。
无论如何,这不起作用......我猜它可能是一个链接问题,或者引导装载程序问题,或类似问题。凭借我目前的知识水平,我现阶段还不确定。
非常感谢任何建议或指示!
答案 0 :(得分:3)
事实证明我的BOOT.ini
没问题,问题与访问我的比特流中定义的自定义AXI
寄存器有关。如果我从Ada中删除这些引用,生成的ELF
文件将完美运行。例如,使用Ada运行时Text_IO.Put_Line()
和delay
操作等,使用Clock
在Zybo的VCP上打印。
由于某些原因,当我启动Ada AXI
文件时,ELF
界面不起作用。如果我用它代替等价的C,那么一切都很好。
这个特殊问题目前尚未解决,但与我原来的问题无关!
(可能是Ada运行时依赖FSBL
或u-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认证,或类似的。