卢骏 · 2020年06月05日

cadence indago征程(六) eswd工具配置与仿真

上一文介绍了eswd工具的使用,该工具,可以将cpu的执行流,与elf程序对应起来,让我们方便的去debug。

下面,就说一下,怎么实现上述过程。

需要三个文件

◾cpu架构描述文件

◾cpu执行的指令流文件,下文简称tarmac文件

◾eswd配置文件

一、cpu架构的描述

eswd工具,需要cpu架构的描述文件。我们使用自定义架构的方式,传递给eswd工具。

这款自定义架构的处理为xxx(基于ARMv8)。定义xxx_eswd.conf文件。

首先是xxx(架构的名字),随后跟着一个大括号,描述这款架构的信息。
1.png

◾disassembly_tool:定义反汇编工具,因为ARMv8支持aarch64和aarch32两种架构,因此这里有2个反汇编工具。

◾pc:定义pc寄存器的名字,后面程序的对应,就根据该名字进行对应

◾reg_alias: 寄存器的别名,ARMv8有X和W寄存器的区别,W寄存器,其实就是X寄存器的低32bit。
2.png

ARMv8架构,包括了aarch32的R寄存器,因此在reg_alias中,也需要进行定义。

1、reg_banks

reg_banks,定义寄存器。需要查看的寄存器,需要在这里定义。格式如下图:
3.png

这里定义了系统寄存器,向量寄存器,通用寄存器。图中的。。。,是省略的寄存器描述,需要自己填写完整。
4.png

对于寄存器描述,需要如下的描述信息

寄存器的名字 "寄存器位宽,寄存器描述"

◾寄存器的名字:该寄存器将来显示在eswd工具上的寄存器的名字,eswd工具,会从cpu仿真log中,查找该寄存器名字,并将值进行关联。

◾寄存器位宽:指定寄存器的位宽

◾寄存器描述:该寄存器的功能

如 CPSR "32,program status register"

表示,有一个系统寄存器CPSR,32bit寄存器,是program status register。

将自己关心的寄存器,给描述出来。不关心的寄存器,可以不用描述。寄存器描述多了,会减慢eswd分析的过程。

有描述的寄存器,在eswd工具的registers子界面,就可以看到寄存器的值。
5.png

2、modes

modes,定义cpu允许的模式。其格式如下:
6.png

对于ARMv8,使用CPSR,来判断当前cpu的模式。
7.png

mode_reg,指定cpu mode,关联的寄存器,后面的0x1f,表示取该寄存器的低5个bit。

mode_enum:对cpu的mode的枚举描述,第一列是cpu的模式,第二列是对应寄存器的值,也就是 CPSR & 0x1f的值。

对于cpu架构,描述这些信息,就已足够了。更多的内容,要查看eswd工具的userguide。

3、dwarf_regs

dwarf_regs段,用来描述cpu的不同mode下,dwarf寄存器与物理寄存器的映射关系。
8.png

在xxx架构中,描述如下:
9.png

上图是dwarf_regs段描述的一部分,对于modes段,指定的每个cpu模式,都需要进行定义。

4、event

event的定义如下,可以用来追踪一些event。
10.png

如果tarmac文件中,有相应的event关键字,那么会在波形文件中,有显示。

如以下,定义了三个event。mode_change是自带的event。

events mode_change,RESET_EVENT,CALL_EXCEPTION

indago工具中,显示如下。
11.png

在569465ns,出现过CALL_EXCEPTION这个event。和tarmac文件中一致。

12.png

二、cpu执行的指令流

要将cpu的仿真指令流,最终转化成tarmac文件。将来提供给eswd工具使用。

tarmac文件的格式如下图:
13.png

1、pc change

对于pc change,格式如下图:
14.png

2、寄存器访问

对于寄存器,格式如下图:

15.png

有了寄存器的信息,indago界面,才可以显示出寄存器的值。

3、memory访问

对于memory访问,格式要复杂一些:
16.png

有了memory的信息,我们就可以在indago界面中,看到c代码的各个变量的值。

4、event

对event,格式如下图:
17.png

5、自己实现

只有tarmac的格式,符合上面定义的格式,eswd工具,才能够将tarmac的结果,与elf程序给对应起来。

打印的tarmac的格式如下图所示:
18.png

第一列,表示仿真时间,第二列是时间单位。

如果是指令的信息,PC表示指令的PC,后续跟指令码。最后跟反汇编。反汇编信息这一列,可以不要。

如果是指令的执行结果,REG表示寄存器,后续跟寄存器的值。这里的寄存器,要和cpu架构描述文件中的寄存器描述的名字要一致。

如果是EVENT,EVENT表示事件,后面跟时间的名字,名字要和cpu架构描述文件中,event指定的事件一致。

对于CPSR,在17905ns,值是0x600003cd,和0x1f与,结果是0x0000000d。从cpu架构描述文件中,可以知道,当前cpu处于EL3H模式。
19.png

时间,最好和波形中的时间一致,这样当发现问题后,可以很快的定位到波形的位置。

cpu仿真打印的log,可能和eswd要求的log格式不一致,因此需要脚本进行处理,将cpu仿真打印的log,和eswd要求的log格式一致。

三、eswd配置文件

在提供了cpu架构描述文件,cpu执行指令流log(以下简称tarmac文件)后,还需要配置文件。

配置文件,以config关键字开始,配置的描述,都在config包围的大括号中。

tarmacfile_optional 1:如果该core的tarmac文件不存在,那么忽略该core的分析。xxx是一个8core的cpu,在某些情况下,可能只有某几个cpu在跑。

1、archs段

描述架构信息,格式如下图:
20.png

我实现的如下图:
21.png

archs段,描述cpu的架构信息。corecfgfile,指定cpu架构描述文件,initmode指定cpu在初始时刻,的cpu模式。archs段中,可以描述多个cpu的架构信息。

2、processors段

22.png

processors段,指定处理器的配置信息。processor中,可以嵌套多个processors。

对于嵌套的每一个processors,name表示该processors的名字,cores,表示该processors中包含的core。

对于每个core:

◾name表示该core的名字

◾coretype,指定archs段中的cpu架构

◾tarmactype:PROCTARMAC,表示使用tarmac文件的方式进行追踪,还有一种是使用shm波形文件方式。

◾tarmacfile:cpu执行的指令流log文件

◾imagefile:core上执行的elf文件

◾events:指定event,eswd工具,支持在不同的时刻,载入不同的elf程序。如果有这样的需求,就在events中指定。

上面的描述,在eswd的cores界面如下:

23.png

如果processors描述如下:
24.png

那么eswd工具上,cores的子界面如下图所示:

25.png

通过该配置文件,就告诉了eswd工具,追踪的cpu架构,cpu架构文件,tarmac文件,elf文件。

四、仿真

完成上述工作后,就是用使用irun工具,搭配-esw选项,产生eswd database,之后使用eswd工具分析。

 irun -log logfile -64bit -esw arch_config:./xxx_eswd.conf -esw config:./config_proctarmac_aarch64.in

◾-esw arch_config: 指定cpu架构描述文件

◾-esw config: 指定eswd配置文件

仿真完毕后,会生成ida.db,esw.db,eswtarmac.shm这3个文件夹。这些就是eswd database。
26.png

指定indago -64bit命令,就会启动indago工具。

3、总结

要使用cadence公司提供的eswd工具,需要进行一些配置。配置比较花时间与精力,但是花费的时间与精力是值得的。因为通过这个工具,我们能够看到软件,在cpu上的执行流程以及执行结果,从而方便我们去debug。

eswd还有其他的一些更高级的功能,这部分,我就不介绍了,大家可以看到eswd的userguide。

到这里,cadence indago征程,就结束了,主要是介绍了indago系列的2个工具,debug app与eswd。至于另外一个协议分析,我没有用过,因此就不再介绍。

更多相关阅读

cadence indago征程(三)indago工具的使用
cadence indago征程(四)仿真加速indago database
cadence indago征程(五)最强cpu debug工具-eswd

原文首发于骏的世界博客
作者:卢骏
更多IC设计相关的文章请关注IC设计极术专栏,每日更新。

推荐阅读
关注数
19638
内容数
1303
主要交流IC以及SoC设计流程相关的技术和知识
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息