首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Digilent Zybo开发板在Zynq上运行Ada

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

Stack Overflow用户
提问于 2018-03-19 23:55:58
回答 1查看 491关注 0票数 3

我已经成功地使用Vivado和SDK在Digilent板上为Zynq XC7Z010开发了VHDL和C。我还一直在使用GNAT来学习针对STM32F4处理器的Ada (使用支持的开发板之一)。

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

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

总之,这不管用..。我猜想这可能是链接问题,或者引导加载程序问题,或者类似的问题。以我目前的知识水平,我只是不确定在这个阶段。

任何建议或建议都将不胜感激!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-21 14:19:05

事实证明,我的BOOT.ini很好,这个问题与访问我的位流中定义的自定义AXI寄存器有关。如果我从Ada中删除这些引用,那么生成的ELF文件就能很好地工作。例如,使用Text_IO.Put_Line()打印Zybo的VCP,使用Ada运行时delayClock操作等。

由于某些原因,当我引导Ada ELF文件时,ELF接口无法工作。如果我用这个来代替等价的C,那么一切都很好。

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

(可能是Ada运行时依赖于FSBLu-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地址条目,

代码语言:javascript
运行
复制
.long 0x43c10c16  @ for 0x43c00000, axi_gp0

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

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

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49374281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档