我已经成功地使用Vivado和SDK在Digilent板上为Zynq XC7Z010
开发了VHDL和C。我还一直在使用GNAT来学习针对STM32F4
处理器的Ada (使用支持的开发板之一)。
GPS还附带了一组针对zynq7000
的XC7Z020
运行时(据我所知)。在查看了BSP的这些目标之后,我认为生成的代码也应该运行在XC7Z010
上,因为ARM核看起来是相同的。结果可能会有差异,在这种情况下,我将尝试根据现有的zynq7000
BSP构建一个特定的运行时(Adacore已经记录了这个过程,并给出了一个生成新STM32F4
BSP的示例)。
我的主要问题是我不知道如何在我的Zybo上加载和运行生成的Ada elf
文件。我试图生成一个BOOT.ini
文件,其中包含一个FSBL
(使用FSBL
构建并使用我从Vivado导出的硬件)、一个位流和Ada elf
文件( Zybo有一个MicroSD接口,可以配置为一个引导设备,这与通过Vivado/ SDK生成的位流和C elf
完美地工作)。
总之,这不管用..。我猜想这可能是链接问题,或者引导加载程序问题,或者类似的问题。以我目前的知识水平,我只是不确定在这个阶段。
任何建议或建议都将不胜感激!
发布于 2018-03-21 14:19:05
事实证明,我的BOOT.ini
很好,这个问题与访问我的位流中定义的自定义AXI
寄存器有关。如果我从Ada中删除这些引用,那么生成的ELF
文件就能很好地工作。例如,使用Text_IO.Put_Line()
打印Zybo的VCP,使用Ada运行时delay
和Clock
操作等。
由于某些原因,当我引导Ada ELF
文件时,ELF
接口无法工作。如果我用这个来代替等价的C,那么一切都很好。
这个问题目前尚未解决,但与我原来的问题无关!
(可能是Ada运行时依赖于FSBL
或u-Boot
来初始化它,但不确定。如果你知道,我也会在我解决这个问题时添加一个评论)
*更新*
这里是一些额外的背景和描述,我必须做什么,以使我的自定义AXI IP工作。
提供的AdaCore BSP
(用于构建运行时的董事会支持包)是针对Xilinx XC702
开发板的。我正在使用Digilent (旧版本)。这两个板使用不同的Zynq部件,XC702
基于一个XC7Z020
,而Zybo使用一个XC7Z010
(有一个带有XC7Z020
选项的新版本)。
我按照AdaCore的指示(可以在他们的网站上找到),专门为Zybo构建了一个BSP
。最初,我只是在Zybo以不同的速度运行时更新了时钟细节,然后验证Ada delay
函数是否正确工作(作为从更新的BSP
构建的Ravenscar
运行时的一部分提供)。然而,我的定制AXI
IP仍然不起作用.
长话短说,Ada运行时包含称为start-ram.S
的程序集文件,其中包括设置MMU
的内容。有一个名为memmap.inc
的包含文件,它包含作为一系列.long
指令的实际MMU
页面定义。我必须通过编辑特定的指令来更新AXI_GP0
地址条目,
.long 0x43c10c16 @ for 0x43c00000, axi_gp0
以前,它被设置为0x00000000 @ for 0x43c00000, *none*
。这些条目在start-ram.S
中解码,然后用于配置MMU
(前12位设置页面,其余的位被分割并用作页面配置)。
因此,一旦我在Zybo BSP
中编辑了这个文件并重新构建了运行时,这些IP就可以从PS访问并按预期工作。这一切都花了一段时间才弄清楚,但这是值得的,因为我学习负载,同时探索死胡同!
我希望这对将来的人有所帮助,我也强烈推荐Ada为Zynq开发,特别是如果你最终需要做-178认证,或类似的。
https://stackoverflow.com/questions/49374281
复制相似问题