首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

干货 | 矿板运行SDK创建的PS简单工程

Zynq PS部分的开发涉及到交叉编译ARM Cortex-A9 CPU运行的程序,也就是Zynq上面运行的程序。这部分工作不是由Vivado负责的,需要用另外一套软件工具:Xilinx SDK.

SDK开发软件又需要Zynq的配置信息,也就是在Vivado工程中设置的PS时钟、DDR、外设那些。根据教程的介绍,在Vivado工程完成之后,使用Export功能,将硬件信息导出给SDK用。

在导出的时候可选择包含bit文件,也就是FPGA部分的配置码流。原因是Zynq启动是由PS部分主导的,需要PS负责PL (FPGA)的初始化,不像单纯FPGA只要将bit烧写到外部flash中就可以自动加载了。导出的文件后缀是 .hdf

SDK的IDE是Eclipse风格的,操作起来和常见的MCU近似了。

在SDK中新建工程的时候,要选择目标硬件平台,而我必须用自己的板子而非所列的硬件,于是点旁边的New按钮。

然后就要用到从Vivado中导出的硬件信息了,点Browse选择之前生成的.hdf文件,软件会自动取一个名称(可能会长,自己可以修改)。

再回到上一个对话框,就看到目标硬件平台已经变成新建的了。

先给新的软件工程取个名(比如我用的demo0),SDK还会同时创建一个BSP: demo0_bsp

再点Next可以看到一些工程的模板供选择。作为新手有必要看一下工程怎么写的,可以选最简单的Hello World,这里选Memory Tests,顺带测试一下DDR的配置是否能工作。

确认以后,SDK就自动创建工程并编译了,可以在Project Explorer中看到源文件等内容

这看起来和开发MCU用的arm-none-eabi工具链有几分相似呢,编译结果也是得到elf文件。选中erf文件,点鼠标右键弹出菜单,就可以选择Debug或者Run来运行了。当然也类似于MCU开发环境,前提是调试器要连好了,这里需要Xilinx 下载器连到了Zynq的JTAG上面。

我已经连好了矿板,确认FPGA可以下载bit文件的情况下,SDK中选择Debug或Run还是遇到了问题:

这像是一个调试器的故障,矿板的PS部分本来已经运行起Linux了,可能不能被JTAG复位。

关于Zynq的启动,我所知是有几种模式的。那么不让矿板的Linux启动,也许是可以解开这个问题。从电路图上分析,矿板是用的NAND flash启动方式,那么改一下 PS MIO[4]脚的上拉为下拉,就可以切换到JTAG boot模式避免板子自己启动了。

矿板上的boot模式没有接死,上拉和下拉电阻都有,不用飞线直接改焊电阻就可以了。

把照片上红框中R2578电阻焊下来,改焊到旁边R2585的位置上,矿板就不会从NAND启动了。

改启动模式之后,在SDK中选择Run,顺利看到了串口打印出来的信息:

作为模板提供的Memtest程序是在Zynq7010的片上SRAM中运行的。这一点可以由lscript.ld脚本佐证:

为了分析程序怎么运行的,可以试着去反汇编一下demo0.elf 文件。使用SDK目录下面的arm-xilinx-eabi-objdump –d 来反汇编,可以看到所有代码部分。

比如,在地址0地方是中断向量表:

也可以查找main函数在哪里:

整个程序的初始化部分比STM32 MCU还是显得代码量多,不过,想想能当成一个667MHz主频,有256MB DDR RAM可以用,还可以自己用verilog写外设的MCU板子来玩,可以发挥的地方就多了。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OY-_LE__5J4dL46ZSOwLYRIg0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券