系统级验证时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方法,也欢迎大家一起交流啊。
感谢阅读,别走!点赞、关注、转发后再走吧
转载:全栈芯片工程师
- 分享
- 举报
-
浏览量:4725次2020-09-23 22:51:55
-
浏览量:4622次2021-03-30 14:17:51
-
浏览量:5053次2021-03-29 14:17:09
-
浏览量:6296次2021-03-29 11:34:27
-
浏览量:2344次2017-12-09 15:51:40
-
浏览量:762次2023-04-17 15:47:23
-
浏览量:5699次2021-03-30 14:44:45
-
浏览量:6043次2021-03-29 15:00:21
-
浏览量:1472次2020-02-29 18:59:29
-
浏览量:521次2023-11-20 15:10:32
-
浏览量:1629次2020-04-25 10:09:40
-
浏览量:2897次2019-11-23 09:04:50
-
浏览量:737次2023-12-25 14:23:01
-
浏览量:615次2023-12-21 16:28:56
-
浏览量:2425次2020-07-09 13:39:17
-
浏览量:5492次2018-06-21 17:58:57
-
浏览量:3187次2020-11-13 09:57:57
-
浏览量:3472次2020-10-30 09:34:38
-
浏览量:3293次2019-11-20 09:20:56
-
广告/SPAM
-
恶意灌水
-
违规内容
-
文不对题
-
重复发帖
david
感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明