simics hindsight学习笔记(二)
继续学习simics的使用。
CLI命令行界面
simics CLI是一种基于文本的高级用户界面,内置帮助系统,上下文敏感可用tab补全,支持脚本编程,作为hindsight的一部分一起提供。
如果使用了GUI,那么可以通过Control Window的Tools → Command Line Window
来启动。Eclipse中位于Console View中。如果未使用GUI,则位于启动simics的shell中。
调用命令
在命令行中输入命令+参数来使用,可以在reference manual中找到许多例子,以下是两个例子:
以短横线开头的选项都是flag并且总是可选的,flag长度可能不止一个字符,且不能以-xy的形式来表示-x -y,位置不敏感,可位于参数列表中的任意位置。
[]中的参数是可选的,(arg1|arg2)表示二选一,此形式称为polyvalue
,arg1 , arg2称为sub-arguments
。
第二种语法中的三个点号,表示参数可以重复一次或多次
根据选项名一般能明确判断参数的数据类型,例如size是整数,而name是字符串
整数可以带负数符号-,也可以用0x,0o,0b表示hex,oct和binary数据。整数可以包含下划线以更易读,例如:
|
|
当字符串中含有空格或其它非字符符号时,可以用双引号,双绰号中\是escape字符,可以用来输入特殊字符。escape字符采用c语言格式,例如\t \n \033(oct)\xff,\u1234等。
|
|
有一些命令存在别名,比如c
代表continue
,si
等于step-instruction
,命令别名在reference manual
文档中。
参数如何被解析
simics尝试以语法中参数出现的顺序去匹配,如果输入类型相同则匹配成功,如果不匹配且是可选参数,就跳过并继续匹配下一个参数,如果参数失败的参数不是可选的,那么就会失败并报错。如果是polyvalues
类型,那么只有在参数匹配sub-arguments
之一时成功。
然而这种解析方式也有不适用的时候,比如两个可选参数拥有相同的数据类型,这时可以使用参数命名的方式name=value
,比如:
|
|
如此就不会有歧义,实际上这也是为sub-arguments具有相同数据类型的polyvalue赋值的唯一方式。
命名赋值时顺序可以是任意的
引用simics对象
许多命令接受配置对象引用作为参数。对象引用是包含对象全名(full quanlified name)的字符串。simics为对象使用层级形式的命名空间,对象全名类似文件系统路径,但是用点号.
分隔,例如system0.cpu0
。
除root之外的每个命名空间都同时也是一个称为component的特殊配置对象。
命名空间命令
定义用户命令的配置对象(Configuration object,如CPU和设备)常常位于独立的命名空间中。命名空间是对象的全名(full quanlified name),接口也可以定义命令,此时所有实现了接口的对象会在各自的命名空间中继承这些命令。
通过输入对象全名.命令名
or namespace.comand
来调用命名空间命令,例如:system.component.object.command
|
|
在大型的配置加使用命名空间命令会不方便,此时可以使用change-namespace
or cn
命令来设定当前的命名空间,效果类似于cd
进入某个文件目录。在当前namespace中可以使用相对名称来调用命令:
|
|
simics提示符会随着所有命名空间的不同而变化,你只能
cn
到一个component
中,以下操作是非法的:
|
|
cache0不是component,而是一个位于cache0 slot位置的一个对象。cn ..
可以进入上一层
你也可以用.
+fullname
的形式来引用绝对位置:
|
|
current-namespace
返回当前命名空间,在脚本中可用来保存位置到变量中。
|
|
表达式
CLI允许计算表达式,如:
|
|
运算符优先级顺序如下:
$ variable access
% register access
[] list indexing
-> attribute access
pow power of
~ bitwise not
*, /, % multiplication, division, modulo
+, - addition, subtraction
<<, >> left, right shift
& bitwise and
ˆ bitwise xor
| bitwise or
<, <=, ==, !=, >=, > comparison
not boolean not
and boolean and
or boolean or
小括号()可以用来覆盖优先级,位于()中的带返回值的命令也可以用在表达式中。
|
|
值可以保存在变量中供稍后使用,命令本身也可以保存在变量中,如
注意它和之前表示返回值的print -x (mpc8641d_simple.soc.cpu[0].read-reg g7)
是不一样的。
中断命令
在GUI和CLI中进程中断。
GUI
在running>提示符中使用stop
,或者使用Simics Contrrol窗口中的stop按钮。
无GUI的CLI
任何导致模拟器前进的命令都可以用ctrl+c
来中断,simics会合适地中断并提示继续输入。当simics因为某些原因hang,很可能是因为内部错误,可以连续输入ctrl+c
来强制返回。
Tab自动完成
CLI有tab自动完成功能,对命令和参数都生效,理念是当用户不知道如何输入时可以按下tab,simics会自动完成或者列出选项。例如disamble
+ tab:
disamble
+ tab:自动完成disassemble cpu-name =
,继续按tab则将用已定义的名字来填充参数(或者显示列表)。