如果碰到ARM运行程序的问题,最好把下面的debug开关打开,这样可以打印出很多有效信息,但也会使得仿真变慢。
2
ARM运行的原始程序可以是汇编程序、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方法,也欢迎大家一起交流啊。
感谢阅读,别走!点赞、关注、转发后再走吧
转载:全栈芯片工程师
免责声明:文章内容来自互联网,本站不对其真实性负责,也不承担任何法律责任,如有侵权等情况,请与本站联系删除。
转载请注明出处:系统级验证时ARM程序运行的debug技巧-系统的验证和系统的确认各有什么作用 https://www.yhzz.com.cn/a/10528.html