一、前言
最小配置的香山核(CONFIG=Minimal)编译完后,已经可以继续按照readme指引试用下两个GUI工具了。但目的不在于正式开始分析代码、功能啥的,而是期望:通过这种可视化的方式,让初学者体验到自己的一顿折腾是有意义的,会有助于在入门阶段保持兴趣。
二、虚拟示波器gtkwave
1、简介
gtkwave用来对香山核在仿真过程中记录下来的波形进行回放显示(即不是实时的),从CPU时钟的粒度回溯芯片内部各个IO或总线的电平或数据,实现定位bug的目的。
2、安装与使用
先进入香山工程路径下,看有没有编译好的emu
文件,
cwq@ubuntu:~/1_xiangshan/xs-env/XiangShan$ ls ./build/emu
./build/emu
然后执行以下命令来生成波形文件vcd——只记录CPU时钟周期10000~11000之间的:
(因为我用的emu
是完整配置、而不是最小配置的香山,所以这个过程超级慢。最后我只跑一段时间后用Ctrl+C中止)
cwq@ubuntu:~/1_xiangshan/xs-env/XiangShan$ ./build/emu -i $NOOP_HOME/ready-to-run/linux.bin --dump-wave -b 10000 -e 11000
Emu compiled at Dec 7 2021, 06:53:16
The image is /home/cwq/1_xiangshan/xs-env/XiangShan/ready-to-run/linux.bin
Using simulated 8192MB RAM
dump wave to /home/cwq/1_xiangshan/xs-env/XiangShan/build/2021-12-08@07:07:50.vcd...
--diff is not given, try to use $(NEMU_HOME)/build/riscv64-nemu-interpreter-so by default
NemuProxy using /home/cwq/1_xiangshan/xs-env/NEMU/build/riscv64-nemu-interpreter-so
[src/isa/riscv64/init.c,50,init_isa] NEMU will start from pc 0x80000000
The first instruction of core 0 has commited. Difftest enabled.
bbl loader
freq-mhz = 500
CLINT: set frequency to 500 MHz
vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
vvvvvvvvvvvvvvvvvvvvvvvvvvvv
rrrrrrrrrrrrr vvvvvvvvvvvvvvvvvvvvvvvvvv
rrrrrrrrrrrrrrrr vvvvvvvvvvvvvvvvvvvvvvvv
rrrrrrrrrrrrrrrrrr vvvvvvvvvvvvvvvvvvvvvvvv
rrrrrrrrrrrrrrrrrr vvvvvvvvvvvvvvvvvvvvvvvv
rrrrrrrrrrrrrrrrrr vvvvvvvvvvvvvvvvvvvvvvvv
rrrrrrrrrrrrrrrr vvvvvvvvvvvvvvvvvvvvvv
rrrrrrrrrrrrr vvvvvvvvvvvvvvvvvvvvvv
rr vvvvvvvvvvvvvvvvvvvvvv
rr vvvvvvvvvvvvvvvvvvvvvvvv rr
rrrr vvvvvvvvvvvvvvvvvvvvvvvvvv rrrr
rrrrrr vvvvvvvvvvvvvvvvvvvvvv rrrrrr
rrrrrrrr vvvvvvvvvvvvvvvvvv rrrrrrrr
rrrrrrrrrr vvvvvvvvvvvvvv rrrrrrrrrr
rrrrrrrrrrrr vvvvvvvvvv rrrrrrrrrrrr
rrrrrrrrrrrrrr vvvvvv rrrrrrrrrrrrrr
rrrrrrrrrrrrrrrr vv rrrrrrrrrrrrrrrr
rrrrrrrrrrrrrrrrrr rrrrrrrrrrrrrrrrrr
rrrrrrrrrrrrrrrrrrrr rrrrrrrrrrrrrrrrrrrr
rrrrrrrrrrrrrrrrrrrrrr rrrrrrrrrrrrrrrrrrrrrr
INSTRUCTION SETS WANT TO BE FREE
[ 0.000000] OF: fdt: Ignoring memory range 0x80000000 - 0x80200000
[ 0.000000] Linux version 4.18.0-00046-g2ba394515c09-dirty (wkf@xiangshan-05) (gcc version 9.2.0 (GCC)) #113 Thu Feb 4 21:45:54 CST 2021
[ 0.000000] bootconsole [early0] enabled
[ 0.000000] Initial ramdisk at: 0x(____ptrval____) (23552 bytes)
[ 0.000000] Zone ranges:
[ 0.000000] DMA32 empty
[ 0.000000] Normal [mem 0x0000000080200000-0x0000000081ffffff]
[ 0.000000] Movable zone start for each node
[ 0.000000] Early memory node ranges
[ 0.000000] node 0: [mem 0x0000000080200000-0x0000000081ffffff]
[ 0.000000] Initmem setup node 0 [mem 0x0000000080200000-0x0000000081ffffff]
^CCore 0: SOME SIGNAL STOPS THE PROGRAM at pc = 0xffffffff800ba514
...
然后用MobaXterm连上Ubuntu——因为MobaXterm自带可以打开远程GUI工具的功能(好像叫“X server”?),执行以下命令安装gtkwave并打开上一步生成的波形文件:
sudo apt-get install gtkwave
gtkwave ./build/2021-12-08@07:07:50.vcd
就能看到如下图的界面:
然后在左上角随便打开几个信号引脚,可以看到类似以下的波形图:
(既有单个IO的电平,也有32bit位宽的总线的十六进制数值)
3、点评
gtkwave可以反映出很精细的运行细节,功能很强大。但同时仿真速度也变得非常慢。
三、LogViewer
1、简介
logviewer基本上就是一款文本查看器,特点在于可以快速打开超大文件(体积没有限制)、高亮显示不同类型的信息,还带一些分析统计之类的功能。
2、安装与使用
因为完整版香山跑linux太慢,我选择最小配置版的香山来跑coremark,生成log文件快一些(命令中使用的emu_minimal是我提前编译保存好的最小配置的emu):
sudo apt-get install lnav
./emu_minimal -i $NOOP_HOME/ready-to-run/coremark-2-iteration.bin 2>&1 | tee > test1.log
lnav test1.log
能看到如下的内容:
随便按上下键,再按m
键可以标记某一行(具体能用来做啥还不知道,但看起来是挺方便的;如果能快速跳转浏览这些标记行更好了。)
可以参考这篇文章(https://www.howtoing.com/ubuntu-lnav-log-viewer)来折腾一下。
3、点评
暂时没有深入研究logviewer的具体功能,但官网可以找到最全的使用说明。相信它对比器简单地用vim或nano之类的文本编辑器,在查看log文件方面会有很大的便利性。
到正式需要使用时再回头查阅具体用法。