Contents
  1. 1. CLI命令行界面
    1. 1.1. 调用命令
      1. 1.1.1. 参数如何被解析
      2. 1.1.2. 引用simics对象
      3. 1.1.3. 命名空间命令
      4. 1.1.4. 表达式
      5. 1.1.5. 中断命令
        1. 1.1.5.1. GUI
        2. 1.1.5.2. 无GUI的CLI
    2. 1.2. Tab自动完成

  继续学习simics的使用。

CLI命令行界面

  simics CLI是一种基于文本的高级用户界面,内置帮助系统,上下文敏感可用tab补全,支持脚本编程,作为hindsight的一部分一起提供。

  如果使用了GUI,那么可以通过Control Window的Tools → Command Line Window来启动。Eclipse中位于Console View中。如果未使用GUI,则位于启动simics的shell中。

调用命令

  在命令行中输入命令+参数来使用,可以在reference manual中找到许多例子,以下是两个例子:

1
2
3
4
SYNOPSIS
command1 -x -y -small [cpu-name] address (size|name)
SYNOPSIS
command2 files . . .

  以短横线开头的选项都是flag并且总是可选的,flag长度可能不止一个字符,且不能以-xy的形式来表示-x -y,位置不敏感,可位于参数列表中的任意位置。

  []中的参数是可选的,(arg1|arg2)表示二选一,此形式称为polyvalue,arg1 , arg2称为sub-arguments

  第二种语法中的三个点号,表示参数可以重复一次或多次

  根据选项名一般能明确判断参数的数据类型,例如size是整数,而name是字符串

  整数可以带负数符号-,也可以用0x,0o,0b表示hex,oct和binary数据。整数可以包含下划线以更易读,例如:

1
2
3
4
simics> 170_000
170000
simics> 0xFFFF_C700
4294952704

  当字符串中含有空格或其它非字符符号时,可以用双引号,双绰号中\是escape字符,可以用来输入特殊字符。escape字符采用c语言格式,例如\t \n \033(oct)\xff,\u1234等。

1
2
3
4
5
6
7
simics> echo no_quotes_needed
no_quotes_needed
simics> echo "first line\nsecond line"
first line
second line
simics> echo "Two As: \101 \x41, and a micro sign: \u00b5"
Two As: A A, and a micro sign: µ

  有一些命令存在别名,比如c 代表continuesi等于step-instruction,命令别名在reference manual文档中。

参数如何被解析

  simics尝试以语法中参数出现的顺序去匹配,如果输入类型相同则匹配成功,如果不匹配且是可选参数,就跳过并继续匹配下一个参数,如果参数失败的参数不是可选的,那么就会失败并报错。如果是polyvalues类型,那么只有在参数匹配sub-arguments之一时成功。

  然而这种解析方式也有不适用的时候,比如两个可选参数拥有相同的数据类型,这时可以使用参数命名的方式name=value,比如:

1
simics> command1 size=32 -y address = 0xf000 -small cpu-name=mpc8641d_simple.soc.cpu[0]

  如此就不会有歧义,实际上这也是为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

1
simics> system0.board0.cache0.print-status

  在大型的配置加使用命名空间命令会不方便,此时可以使用change-namespace or cn命令来设定当前的命名空间,效果类似于cd进入某个文件目录。在当前namespace中可以使用相对名称来调用命令:

1
2
simics> cn system0.board0
simics:system0.board0> cache0.print-status

simics提示符会随着所有命名空间的不同而变化,你只能cn到一个component中,以下操作是非法的:

1
2
simics> cn system0.board0.cache0
system0.board0.cache0 is not a component

  cache0不是component,而是一个位于cache0 slot位置的一个对象。
cn ..可以进入上一层

1
2
simics:system0.board0> cn ..
simics:system0>

  你也可以用.+fullname的形式来引用绝对位置:

1
2
3
simics:system0> .system1.cpu0.ptime
processor steps cycles time [s]
system1.cpu0 14545 14545 0.000

  current-namespace返回当前命名空间,在脚本中可用来保存位置到变量中。

1
2
3
4
5
6
simics:system0> current-namespace
.system0
simics:system0> $location = (current-namespace)
simics:system0> cn ..
simics> cn $location
simics:system0>

表达式

  CLI允许计算表达式,如:

1
print -x 2*(0x3e + %g7) + %pc

  运算符优先级顺序如下:

$           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

  小括号()可以用来覆盖优先级,位于()中的带返回值的命令也可以用在表达式中。

1
print -x (mpc8641d_simple.soc.cpu[0].read-reg g7)

  值可以保存在变量中供稍后使用,命令本身也可以保存在变量中,如

1
$my_read_reg = mpc8641d_simple.soc.cpu[0].read-reg

  注意它和之前表示返回值的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:

1
address = count = cpu-name =

  disamble + tab:自动完成disassemble cpu-name =,继续按tab则将用已定义的名字来填充参数(或者显示列表)。

Contents
  1. 1. CLI命令行界面
    1. 1.1. 调用命令
      1. 1.1.1. 参数如何被解析
      2. 1.1.2. 引用simics对象
      3. 1.1.3. 命名空间命令
      4. 1.1.4. 表达式
      5. 1.1.5. 中断命令
        1. 1.1.5.1. GUI
        2. 1.1.5.2. 无GUI的CLI
    2. 1.2. Tab自动完成