Nutshell NEMU Xiangshan difftest

目录

下载对应版本的Nutshell和NEMU

安装mill和java

检查mill版本

安装java 配置java

安装verilator4.210

安装 GNU RISCV 工具链

NEMU和Nutshell    RUN 起 来 !

设置环境变量

Difftest简介

参考资料


下载对应版本的Nutshell和NEMU

进入xs-env工程,下载对应的NutShell@3a8832e和NEMU@26c7e50版本,参考仓库的setuptools.sh安装必要的软件。java mill verilator

安装mill和java

参考the Manual section in this guide

https://com-lihaoyi.github.io/mill/mill/Intro_to_Mill.html

sudo sh -c "curl -L https://github.com/com-lihaoyi/mill/releases/download/0.9.8/0.9.8 > /usr/local/bin/mill && chmod +x /usr/local/bin/mill"

 nutshell需要mill运行整个工程 运行mill需要build.sc文件 先不急

chisel有很多依赖项

如果用sbt运行scala,那么这些依赖项在build.sbt文件里规定
如果用mill运行scala,那么这些依赖项在build.sc文件里规定

Chisel基于scala语言,运行环境为JVM。mill作为编译工具,需安装java和mill

Nutshell使用mill作为编译工具,verilator作为仿真工具

进入src/main/scala文件夹  bus nutcore sim system等代码文件+top文件,top文件夹里是chisel代码执行的入口。(之所以用“执行”一词,是因为chisel是基于scala的,这个入口其实是scala执行的入口,所谓chisel的执行,其实就是chisel向verilog的翻译)

/home/liwanwan/Nutshelldifftest/NutShell/src/main/scala/top

把chisel代码转换成verilog,这个“转换”不是自动做的,这种翻译也不是像编译一样,都是通过命令行做的,而是通过scala代码做的。这种执行翻译的scala代码,才是被命令行执行的东西。

检查mill版本

安装java 配置java

参考ubuntu18.04 安装java_普通网友的博客-CSDN博客_ubuntu安装java

配置环境变量

    放到 /usr/local 里面的程序,建议使用系统变量
    用户变量
    ~/.profile 文件是用户的私有配置文件
    ~/.bashrc 是在bash里面使用的私有配置文件,优先级在 .profile 文件之后
    系统变量
    /etc/profile 文件是系统的公用配置文件
    /etc/bash.bashrc 是bash专用的配置文件,优先级在 profile 文件之后

主要是环境变量的设置,不仅是java,这次凡是涉及到环境变量设置,我都使用了export命令导出为环境变量(如果不使用export,仅在当前shell里面有效),全部设置在

sudo vim /etc/profile

 

 环境变量设置完一定要在当前权限下

source /etc/profile

 使环境变量设置生效 ,source是临时加载配置文件,仅在当前shell有效,关闭以后失效,新开shell也要重新source!! 当然,配置以后可以重新登陆使配置生效

在普通用户模式下和root用户模式下source是不互通的 如果切换模式也要重新source

后面在nutshell目录下进行处理器核的仿真运行make emu,在这里踩坑好几回!!!

安装verilator4.210

参考Unbuntu21.04安装Verilator --4.210_甘草梗的博客-CSDN博客_ubuntu安装verilator

参考官网步骤安装

安装verilator过程生成configure文件问题

无法找到python3

总是输入python 找到python3.8.10

 之前tinyriscv把python软链接到python3了

输入”ls -l | grep python”显示所有名字中包含python的文件

sudo mv python python3

将python换成python3

Nutshell NEMU Xiangshan difftest_第1张图片

参考Linux中默认Python版本的切换_槲寄、生下的博客-CSDN博客

安装 GNU RISCV 工具链

我的是Ubuntu 20.04 :

sudo apt-get install g++-riscv64-linux-gnu

NEMU和Nutshell    RUN 起 来 !

设置环境变量

sudo vim /etc/profile

export NEMU_HOME=/home/liwanwan/Nutshelldifftest/NEMU

export NUTSHELL_HOME=/home/liwanwan/Nutshelldifftest/NutShell

source /etc/profile
cd NEMU

提示.config文件不存在

make menuconfig

 

Nutshell NEMU Xiangshan difftest_第2张图片

make riscv64-xs-ref_defconfig #load default configuration

make

 切换到Nutshell目录下

cd Nutshell

source ./env.sh

make clean

make emu EMU_CXX_EXTRA_FLAGS="-DFIRST_INST_ADDRESS=0x80000000"

 当前文件被占用 找出被占用的文件 kill

按照这个顺序会找不到SimTop.v文件 因为根本没有生成。。。。。

参照nutshell/difftest/.github/workflows/main.yml使用预编译的映像文件仿真运行nutshell核

参照main.yml 遇到问题定位:比如在difftest/verilator.mk文件中,将clang++换成g++;或者注释掉41行的VEXTRA-FLAGS += - - instr-count-dpi 1;或者装一些依赖库。

踩坑之后总结的正确的顺序应该是

cd Nutshell

source ./env.sh

make clean

mill

 

在Nutshell目录下有build.sc文件,运行mill,然后

make

Nutshell NEMU Xiangshan difftest_第3张图片

生成 verilog code. The output file is build/TopMain.v   然后

make emu

Nutshell NEMU Xiangshan difftest_第4张图片

The output file is build/SimTop.v

会报一些错

设置NOOP_HOME环境变量 export NOOP_HOME=/home/liwanwan/Nutshelldifftest

然后source

找不到sqlite3.h头文件,原因是系统没有安装函数库

sudo apt-get install sqlite3

sudo apt-get install libsqlite3-dev

最后再make emu以下就ok了

Difftest简介

Difftest是差分测试框架,有什么用呢?高性能CPU的设计需要做复杂的测试,传统的测试方法运行较慢,而且出了问题很难定位,Difftest就是为了解决这两个问题,基本的逻辑也不难:
Nutshell NEMU Xiangshan difftest_第5张图片

    1. 处理器运行一条指令
    2. 模拟器运行相同的指令
    3. 比较两者的状态

为什么能运行更快呢?最著名的模拟器当属Qemu,此外伯克利也提供了针对riscv的模拟器spike,但两者的实现都比较复杂,中科院采用了南大的开发的轻量级教学模拟器Nemu。因为只需要在指令层面做仿真,因此有很大的优化空间。

为什么能容易定位bug?因为每运行一条指令,都会对比关键寄存器的数值,做到动态实时比对,spike需要最终运行完才能比对。计算机的运行就是不同状态的转移,这个观点非常精妙。

总的来说就是,difftest是CPU开发过程中的高校调试框架,是chisel开发非常好用的工具,提供了online的测试,极大的提升了debug效率。

NEMU则为difftest提供了运行时的“标准答案”,主要需要其动态库。

碎碎念:我还没体会到linux对于开发效率的提升啊啊啊啊,可视化界面是这世界上最伟大的发明,命令行操作是是什么鬼啊啊啊啊,希望以后能打破这个认知。还是自己主机上的linux好用,虚拟机搞到后面内存不够用尊的不利于身心健康!

Permission denied一般是权限问题,切换sudo su

参考资料

Difftest踩坑笔记(一)_icfg66的博客-CSDN博客

difftest/main.yml at c02950ee1597bcf45af2c9d0b351c1ff99dba5bb · OpenXiangShan/difftest · GitHub快速上手教程 · GitBook

折腾CPU系列:chisel+mill+difftest环境配置_VOlD-NULL的博客-CSDN博客

你可能感兴趣的:(体系结构,数字设计,linux,risc-v)