首页 > 技术知识 > 正文

系统级验证时ARM程序运行的debug技巧-系统的验证和系统的确认各有什么作用

系统级验证时ARM程序运行的debug技巧-系统的验证和系统的确认各有什么作用1

1

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

系统级验证时ARM程序运行的debug技巧-系统的验证和系统的确认各有什么作用2

2

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

(1)

原始文件类似如下:

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

(2)

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

系统级验证时ARM程序运行的debug技巧-系统的验证和系统的确认各有什么作用3

(3)

最终运行的二进制代码:

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

系统级验证时ARM程序运行的debug技巧-系统的验证和系统的确认各有什么作用4

3

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

系统级验证时ARM程序运行的debug技巧-系统的验证和系统的确认各有什么作用5

4

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

(1)

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

系统级验证时ARM程序运行的debug技巧-系统的验证和系统的确认各有什么作用6

(2)

PC指针和ARM寄存器:

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

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

系统级验证时ARM程序运行的debug技巧-系统的验证和系统的确认各有什么作用7

(3)

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

系统级验证时ARM程序运行的debug技巧-系统的验证和系统的确认各有什么作用8

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

系统级验证时ARM程序运行的debug技巧-系统的验证和系统的确认各有什么作用9

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

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

系统级验证时ARM程序运行的debug技巧-系统的验证和系统的确认各有什么作用10

转载:全栈芯片工程师

猜你喜欢