simics hindsight学习笔记(一)
概念
以下介绍一些关于模拟的基本概念。
模拟的限制
Simics是系统层指令集模拟器,也就是说:
指令级的模拟,一次执行一个指令
模拟硬件的二进制接口,任何硬件上运行的软件在target上也能运行
包括firmawre,硬件驱动,操作系统和用户程序在内的任何软件都能在target上运行。
simics的时间系统非常简单,例如它默认所有指令的执行时间是一样的,利用这点将可以编写简单程序来区别模拟与真实系统。
非入侵的观察和调试
Simics有强大的调试和观察功能:
观察和设置**register,memory和硬件状态**
设置断点和观察点
以脚本实现上述功能
有了上述支持,无须在target上安装任何调试程序,因此调试行为也对target及之上的软件是完全透明的。
模拟的时间
可以在target无察觉的情况下暂停系统
也可以保存和恢复状态(checkpoint)
可反向执行,对定位bug和调试非常有用
以上对任何target系统适用,无论是简单系统还是计算网络。
命令行工具
本节介绍simics的命令行选项及环境变量。
从命令行启动simics,在工程目录下运行:
|
|
simics也可以在目录下启动,以无项目状态运行,但是并不推荐。
以上命令将运行指定脚本,它将以缺省配置启动MPC8641-Simple
机器。
模拟模式
模拟模式(simulation mode)用来控制可获得的特性:instruction and data profiling
, memory timing
。最佳性能模式无以上特性的,simics以独立处理器形式实现,这也是simics的缺省模式。
命令行指定模式
fast / stall
不能在运行时改变模式,可以先保存再更换模式加载
|
|
GUI方式指定模式
Simics Control
窗口中,选择Edit
→ Preferences
→Startup
更改此处将导致默认模式更改。如果需要在运行中更改模式,同时可以先保存checkpoint再load:
|
|
normal mode
快速模式,为模拟器风格的使用而优化,以下特性将不可用:
Instruction and data profiling
Attaching timing-models and snoop devices to memory spaces,意味着tracing and cache模块未正常工作,无法stall。
stall模式
内存计时模式,支持stalling和Instruction and data profiling
注意:不是所有的处理器模型都完全支持以上功能
命令选项
以下是simics启动时可用的常用选项:
-h
简短help
-obscure
打印高级命令行flags的概要并退出
-no-win
禁用外部窗口。这将阻止target控制台窗口和任何外部窗口打开
只是将窗口隐藏,并不改变模拟行为,通常在批处理时使用,通常也会更快
-gui
以CLI形式运行,但允许gui打开窗口
-no-gui
CLI形式运行,不打开窗口,除非用CLI命令指定
-no-log
<deprecated>不记录CLI命令到log文件
-log
<deprecated>记录CLI命令到log文件`˜/.simics/4.8/log`
默认开启,可被用户偏好关闭
-log-file FILE
指定log文件位置
-v, -version, --version, -v-short
打印版本号,build时使用的编译器和编译计时参数
-license-file FILE
指定许可文件,会覆盖环境变量`SIMICS_LICENSE_FILE `
-readme
打印README信息
-license
打印默认license信息
-batch-mode
批处理模式。在命令执行完成或者错误会退出,返回相应的返回码(0/1)。
此模式下的命令不会被记录到log中
-verbose
打印执行过程中的详细信息
相反的参数是-quiet,缺省为二者之中
-fast
缺省模式,会覆盖偏好中的设置
-stall
打开stall模式
-q,-quiet
打印较少的信息,在批处理时有用。如果想更安静,可以指定-no-copyright
simics缺省输出就很少,所以这个参数作用并不是很大
-c FILE
加载配置文件,相当于在启动后执行read-configuration命令
如果是命令的最后一个选项,-c可省略
-x
历史兼容原因保留,无作用
-p FILE
运行python文件中代码
-e COMMAND
执行CLI命令,相当在命令提示符中输入命令
高级选项
……略……//or TODO
环境变量
可以改变simics运行行为,都是可选项,一般不需要手动设置。
SIMICS_HOST
覆盖simics检测到的host类型,值必须是包含host-specific files的目录或simics安装目录,典型格式为arch-os,例如linux32