zynq程序与数据在SRAM中运行软件调试

2017-01-13 22:50 阅读 546 次 评论 3 条

zynq程序在sram中运行的硬件设计完成打板后,开始进行软件调试。首先来个小代码helloworld。

在vivado中进行bd design时,首先关闭ddr,因为硬件设计上没有,所以去掉。

clip_image002

配置nor flash与sram的接口电压,这个比较重要。由于Bank1还包含uart等外设接口,如果配置不正确,可能导致外设接口或sram等工作不正常。

clip_image004

设置“SMC Timing Calculation”时,需要将T_RC及T_WC设置为10以上的数,因为这个单位为ns,而smc的工作时钟为100MHz,一个使用周期为10ns。而时序要求中的次数是以时钟周期来要求的,所以这个要设置超过10ns。

clip_image006

时钟配置根据你的硬件设计情况配置,我的硬件中时钟源改为了50Mhz,所以这里改变了时钟源,同时也改变了cpu的频率。

clip_image008

生成bit文件,导出bit文件,在sdk中配置软件工程。

首先修改helloworld的lscript.ld文件,将helloworld的程序、数据、堆和栈等空间全部分配到sram的地址空间0xE4000000开始,总共1MB的空间内,如下图。

clip_image010

编译配置debug后,开始在线调试。

刚开始在vivado 2015.1版本SDK下进行调试,load prgoram到SRAM中运行的时,通过XSDB控制台的调试信息,观测如下

clip_image012

PL逻辑部分下载完毕且正常(因为板卡上FPGA done的灯亮起),而hello.elf的下载失败。

再次修改lscript.ld将hello的地址空间分配到ocm存储器,同样load program调试,其调试信息如下,证明PL的bit文件与elf文件都下载成功,且PC指针指向0x00000000地址,且程序可以正常运行。

clip_image014

clip_image016

通过上图中“Dump/Restor Data File”方式将elf文件restore到0xE4000000地址,提示APER_CLK_CTRL寄存器的bit24未使能,smc时钟未使能(此处提示忘了截图),下面是APER_CLK_CTRL的地址及bit24的解释。

clip_image018

clip_image020

而通过在ocm中运行的helloworld程序访问SRAM地址空间,读写均正常。

对比hw_platform中的ps7_init.c与ps7_init.tcl文件,这个寄存器的配置应该都是使能的,一时找不到方法了,百度也没有相关的内容,本来使用sram存储程序运行的童鞋就少。

无意想起在无ddr运行fsbl XIP加载工程中使用的vivado 2016.2版本,改用新版本重新编译工程,load program成功了,如下图。

clip_image022

但运行时仍然出现了问题,通过跟踪代码,怀疑为cache与mmu的问题。

找到BSP下的translation_table.S文件,修改sram对应地址空间的page table属性,如下图

clip_image024

前面的1MB空间设置与ddr的属性相同,便于存储运行程序。后面的31MB空间保持原来的不变。修改后程序helloworld程序可以正常运行了。

ps:后续准备实验一下ucos系统在sram中的运行。

版权声明:本文著作权归原作者所有,欢迎分享本文,谢谢支持!
转载请注明:zynq程序与数据在SRAM中运行软件调试 | 起点博客
分类:应用笔记 标签:, ,

发表评论


表情

  1. themebetter
    themebetter 【农民】

    很久没更新了呀博主?

  2. 春熙路
    春熙路 【农民】

    进来看看

  3. will
    will【站长】

    欢迎