系统级验证时ARM程序运行的debug技巧
扫描二维码
随时随地手机看文章
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方法,也欢迎大家一起交流啊。感谢阅读,别走!点赞、关注、转发后再走吧