系统级验证时ARM程序运行的debug技巧

david 2022-02-24 09:00:15 3054

1如果碰到ARM运行程序的问题,最好把下面的debug开关打开,这样可以打印出很多有效信息,但也会使得仿真变慢。

2ARM运行的原始程序可以是汇编程序、C语言程序,最后编写Makefile文件,通过ARM专用的交叉编译器编译,生成最后可运行的汇编和二进制代码。

(1)

原始文件类似如下:

start.s/main.c/a.c/b.c/boot.hex

(2)

生成的反汇编文件如下:这个文件在后面的debug过程中非常有用,可以逐一比较,定位出错误点。

(3)

最终运行的二进制代码:

**左边一般为地址,右边为数据。这份二进制代码就是ARM最终运行的代码,一般在数字IC验证中,会通过load的方式,下载到SPI,flash或者DDR等存储模块中,供ARM core运行使用。当然,为了节省时间,IC验证过程中,经常会使用backdoor的方式直接写到对应存储模块中。**

3步骤1中的开关打开之后,仿真就会产生如下的log文件,能精准定位到现在ARM执行哪条指令,然后对照步骤2中的反汇编代码就可以定位出错误点,然后再进一步debug。

4当然最有效的debug方式,还是需要借助波形来进行。下面是几组很有效的debug信号:

(1)

ARM 的AXI bus总线,data bus用于数据读写,instrbus用于读取指令,periphbus主要是对其他IP 模块的读写控制操作。

(2)

PC指针和ARM寄存器:

PC指针是所有CPU debug的必看信号,能清晰的知道ARM运行指令的顺序,有一点需要注意的时,PC指针一般会预先多读取2笔指令。

通用寄存器r*也是debug重点看的信号,可以对照手册和汇编代码来看。

(3)

因为ARM运行的代码都存储在存储模块中,所以经常出现读取的时候出错的情况,比如如果是放在DDR中,那么DDR的端口总线就是重点查看的信号,这里也是经常会出错的。

最后,需要注意的是,ARM的bus总线或者通用寄存器中,一旦读到X值进去,即使这个X值不会被使用,最终整个程序也会出错的。

以上简单罗列了一下在系统级验证中ARM程序运行的debug方法,内容简单,适合初学者使用。有更多的好的debug方法,也欢迎大家一起交流啊。

感谢阅读,别走!点赞、关注、转发后再走吧

转载:全栈芯片工程师

声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
david
红包 点赞 收藏 评论 打赏
评论
0个
内容存在敏感词
手气红包
    易百纳技术社区暂无数据
相关专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
david
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区