目录

下载对应版本的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

参考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

make riscv64-xs-ref_defconfig #load default configurationmake

切换到Nutshell目录下

cd Nutshellsource ./env.shmake cleanmake 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 Nutshellsource ./env.shmake cleanmill

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

make

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

make emu

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就是为了解决这两个问题,基本的逻辑也不难:

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博客

Nutshell NEMU Xiangshan difftest相关推荐

  1. Difftest踩坑笔记(一)

    一.Difftest简介 Difftest是差分测试框架,有什么用呢?高性能CPU的设计需要做复杂的测试,传统的测试方法运行较慢,而且出了问题很难定位,Difftest就是为了解决这两个问题,基本的逻 ...

  2. NEMU(RISC-V64)基础知识(一)

    目录 1.术语和定义 2.CISC和RISC的区别 3.vimtutor指令查看常见VIM使用命令 4.GDB调试 5.x86中寄存器 6.x86中指令的具体行为 7.中断和异常 8.RISC-V的中 ...

  3. Linux下nemu寄存器怎么打开,基础设施(2)

    基础设施(2) AM作为基础设施 编写klib, 然后在NEMU上运行string程序, 看其是否能通过测试. 表面上看, 这个做法似乎没什么不妥当, 然而如果测试不通过, 你在调试的时候肯定会思考: ...

  4. 《C#3.0 in a Nutshell ,3rd Edition》之序言篇

    前言 最近在图书馆看到了<C#3.0核心技术>这本书,看了一下觉得挺不错的,C#3.0的技术从基础语法到新特性到涉及到了,是一部学习C#3.0的好书,本想从网上下载电子版却没找不到,却但看 ...

  5. Deep Learning in a Nutshell: Core Concepts

    转载自:Deep Learning in a Nutshell: Core Concepts | Parallel Forall http://devblogs.nvidia.com/parallel ...

  6. [CHM]果壳中的XAML(XAML in a Nutshell)

    [CHM]果壳中的XAML (XAML in a Nutshell)                                                                   ...

  7. PlantUML in a nutshell(官方文档)

    PlantUML in a nutshell PlantUML是一个开源项目,支持快速绘制: 时序图 用例图 类图 活动图 (旧版语法在此处) 组件图 状态图 对象图 部署图 转存失败重新上传取消 定 ...

  8. NEMU PA1实验思路

    NEMU PA1实验思路 版权归zzy所有,不许外传! 本文主要是提供PA1思路,为了避免踩了一堆坑而浪费时间.若想copy代码请移步他处,本文仅供学习交流用,谢谢! 阅读前请确保仔细阅读了PA1实验 ...

  9. 南大计算机系统实验PA0 Compiling and Running NEMU报错解决方法

    根据pa0的指引,在pa0下第一次运行make menuconfig时,系统会作出如下回应 /home/lee/Desktop/ysyx-workbench/nemu/scripts/config.m ...

最新文章

  1. 深入分析 Jdk - 集合容器 Map 与 Set
  2. SQLite中的SELECT子句使用表达式
  3. OpenCV的支持向量机SVM的程序
  4. web前端入门必知的10个技术
  5. python2异步编程_python异步编程入门
  6. FluentAspects -- 基于 Fluent API 的 Aop
  7. ORA-28056,安装Oracle出错
  8. 爆炸性环境设备通用要求标准_防爆电气设备的适用环境及温度要求
  9. C#从入门到精通之第一篇: C#概述与入门
  10. 4800包括了路线坐标正反算、竖曲线、超高加宽、边坡放样及断面计算等程序。
  11. 【运维】linux shell 编程之函数使用
  12. 利用Python turtle库制作夜空
  13. 【动态规划的方法论】
  14. H5前端学习之一HTML和CSS基础认识
  15. OSPF的三张表(链路状态公告)
  16. AI行业态势感知(第七期)
  17. 电子音乐爱好者的舞台,电音遇上双12
  18. redis的多路复用
  19. Mobx和Mobx-react:集中式状态管理
  20. Spring Boot 自动配置 : RedisAutoConfiguration

热门文章

  1. Java设计模式--原型模式
  2. 软件工程小组问世第八章之测试文档
  3. 【霍罗维兹数据结构】多维数组 | 字符串 | 模式匹配
  4. 云大计算机初试最高分,2018年云南大学考研初试成绩及总分排名查询通知
  5. 江苏省公务员计算机类130分,130分,在江苏省考中是什么水平?
  6. DeepUbi: a deep learning framework for prediction of ubiquitination sites in proteins
  7. AlphaGo Zero ( 阿尔法元 ) 简介
  8. Centos配置163源
  9. Fast Marching算法及其在点云测地线计算中的应用
  10. 测试用例设计白皮书--因果图方法