我们在编写c程序,在调试的时候,希望能够使用visual studio工具,或者eclipse工具,实现单步调试,让我们能够查看c程序的执行状态,从而帮助我们去调试我们写的c程序。
那在soc验证或cpu core验证(以下简称core验证)的时候。我们也是写了c程序(或者汇编程序,以下不区别),在验证环境中运行,怎么能够知道程序在core上的执行结果呢?我们也希望能有像eclipse这样的工具,能够通过IDE工具,能够知道程序的执行过程以及执行结果。
这个时候,indago中的embedded software debug app(以下简称eswd)工具横空出世,解决了上述问题。
一、eswd工具
首先上图,以下是eswd的界面。cpu的名字,叫xxx。支持aarch64和aarch32两种arm架构指令集。包含8个core。
左上角是源代码区,中间是反汇编区,右上角是状态区(用来查看core状态,以及切换core),最下面界面是波形区,显示各个core指令流的波形(只记录了pc)。
通过这个工具,就能够知道,我们编写的程序,在cpu上的执行过程,以及执行结果。还能够,单步仿真,单步跳过。而单步功能,不仅仅支持向前跳转,还可以向后跳转。
eswd工具,支持多个core,可以分别查看每个core的执行过程,在状态窗口的状态栏,会显示,当前查看的是哪一个core,以及该core的EL。
在源代码窗口,可以加载源文件。
对于加载的源代码,如果代码有执行过,那么在代码行的前面会有向前向后的按钮,点击该按钮,可以将当前的状态,恢复到执行该行代码的状态。
在debug界面,可以查看变量的值,以及调用栈。
在代码处,右键,选择 choose execution。
会弹出time tables窗口,显示,这个函数,在那些时刻有执行过。
在波形窗口,能够看到各个core的执行pc,以及该pc,所在的函数。
二、总结
该工具,可以让我们知道,程序在cpu上的执行过程,以及执行结果,方便我们去定位问题。而不需要去分析波形,才能得到cpu的执行过程与执行结果。
要想使用eswd工具,显示出这些信息,需要我们去做一些工作,产生database,给eswd工具来分析。
产生database,需要如下的一些文件:
-
程序的elf文件
-
cpu架构的描述
-
trace的配置文件
-
cpu的执行结果trace
后面,就要详细来说明一下,如何得到上面的文件,最终产生database,并使用eswd工具进行分析。