当前位置: 首页 > news >正文

【RISCV LAB】0x01-安装实验仿真辅助工具

安装实验辅助工具

  • 实验环境搭建
    • 安装 Verilator
      • 编译依赖
      • 下载源码
      • 编译安装
      • 测试安装
    • 安装 RISC-V 交叉编译工具链
      • 编译依赖
      • 下载源码
      • 编译安装
      • 编译并安装
      • 添加环境变量并测试
    • 安装 GTKWave
    • 其他模拟器推荐
      • RARS
      • emulsiV
  • FAQ

实验环境搭建

Verilator 是一款开源的支持 Verilog 和 SystemVerilog 仿真工具。它能够将给定的电路设计翻译成 C++ 或者 SystemC 的库等中间文件,最后使用 C/C++ 编写激励测试,去调用前面生成的中间文件,由 C/C++ 编译器编译执行,来完成仿真。此外,它也具有静态代码分析的功能。

我们需要手动编译安装 Verilator,步骤可以参考官方文档。本文主要对文档内容进行整理,并补充一些细节。

安装 Verilator

编译依赖

Verilator 的编译安装需要以下依赖:

sudo apt-get install git perl python3 make autoconf g++ flex bison ccache
sudo apt-get install libgoogle-perftools-dev numactl perl-doc help2man
sudo apt-get install libfl2 (ignore if gives error)
sudo apt-get install libfl-dev (ignore if gives error)
sudo apt-get install zlib1g zlib1g-dev (ignore if gives error)

下载源码

通过以下命令来下载源码:

git clone https://github.com/verilator/verilator

或者 

git clone https://gitee.com/bigdark1024/verilator.git

编译安装

cd verilator
./configure --prefix=your-path-for-output
make -j <nproc>

还可以测试
make test

最后安装
make install

在这里插入图片描述

测试安装

执行以下命令:

verilator -version
Verilator 5.035 devel rev v5.034-61-gaca3b1636

在这里插入图片描述

安装 RISC-V 交叉编译工具链

编译依赖

sudo apt install autoconf automake autotools-dev curl python3 python3-pip 
sudo apt install libmpc-dev libmpfr-dev libgmp-dev gawk 
sudo apt install build-essential bison flex texinfo gperf libtool patchutils 
sudo apt install bc zlib1g-dev libexpat-dev ninja-build git cmake libglib2.0-dev

下载源码

下载 RISC-V 交叉编译工具链的源码。

  • 如果网络可以直接从github下载
git clone --recursive https://github.com/riscv/riscv-gnu-toolchain
  • 如果网络不理想
git clone https://mirror.iscas.ac.cn/riscv-toolchains/git/riscv-collab/riscv-gnu-toolchain.git

cd riscv-gnu-toolchain/

curl https://mirror.iscas.ac.cn/riscv-toolchains/git/riscv-collab/riscv-gnu-toolchain.sh | bash

编译安装

进入源码目录,创建 build 文件夹并进入:

cd riscv-gnu-toolchain
mkdir build
cd build

需要编译的是支持乘除法扩展的 riscv64-unknown-linux-gnu 工具链,因此需要执行以下命令进行配置:

➜  build git:(master)../configure --prefix=/opt/riscv64 --enable-multilib --enable-languages=c,c++ --target=riscv64-linux-multilib
configure: WARNING: unrecognized options: --enable-languages
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether the compiler supports GNU C... yes
checking whether gcc accepts -g... yes
checking for gcc option to enable C11 features... none needed
checking for grep that handles long lines and -e... /usr/bin/grep
checking for fgrep... /usr/bin/grep -F
checking for grep that handles long lines and -e... (cached) /usr/bin/grep
checking for bash... /bin/bash
checking for __gmpz_init in -lgmp... yes
checking for mpfr_init in -lmpfr... yes
checking for mpc_init2 in -lmpc... yes
checking for curl... /usr/bin/curl
checking for wget... /usr/bin/wget
checking for ftp... /usr/bin/ftp
configure: creating ./config.status
config.status: creating Makefile
config.status: creating scripts/wrapper/awk/awk
config.status: creating scripts/wrapper/sed/sed
configure: WARNING: unrecognized options: --enable-languages

在编译 riscv 工具链的时候,可以编译 multilib 版本的 gcc,这样这个工具,可以同时支持 32 位和 64 位。

在这里插入图片描述

编译并安装

sudo make linux -j 6

编译完成后,就可以在 /opt/riscv64/bin 目录下找到交叉编译工具链了。

➜  riscv64 pwd
/opt/riscv64
➜  riscv64 tree -L 2
.
├── bin
│   ├── riscv64-unknown-linux-gnu-addr2line
│   ├── riscv64-unknown-linux-gnu-ar
│   ├── riscv64-unknown-linux-gnu-as
│   ├── riscv64-unknown-linux-gnu-c++
│   ├── riscv64-unknown-linux-gnu-c++filt
│   ├── riscv64-unknown-linux-gnu-cpp
│   ├── riscv64-unknown-linux-gnu-elfedit
│   ├── riscv64-unknown-linux-gnu-g++
│   ├── riscv64-unknown-linux-gnu-gcc
│   ├── riscv64-unknown-linux-gnu-gcc-14.2.0
│   ├── riscv64-unknown-linux-gnu-gcc-ar
│   ├── riscv64-unknown-linux-gnu-gcc-nm
│   ├── riscv64-unknown-linux-gnu-gcc-ranlib
│   ├── riscv64-unknown-linux-gnu-gcov
│   ├── riscv64-unknown-linux-gnu-gcov-dump
│   ├── riscv64-unknown-linux-gnu-gcov-tool
│   ├── riscv64-unknown-linux-gnu-gdb
│   ├── riscv64-unknown-linux-gnu-gdb-add-index
│   ├── riscv64-unknown-linux-gnu-gfortran
│   ├── riscv64-unknown-linux-gnu-gp-archive
│   ├── riscv64-unknown-linux-gnu-gp-collect-app
│   ├── riscv64-unknown-linux-gnu-gp-display-html
│   ├── riscv64-unknown-linux-gnu-gp-display-src
│   ├── riscv64-unknown-linux-gnu-gp-display-text
│   ├── riscv64-unknown-linux-gnu-gprof
│   ├── riscv64-unknown-linux-gnu-gprofng
│   ├── riscv64-unknown-linux-gnu-ld
│   ├── riscv64-unknown-linux-gnu-ld.bfd
│   ├── riscv64-unknown-linux-gnu-lto-dump
│   ├── riscv64-unknown-linux-gnu-nm
│   ├── riscv64-unknown-linux-gnu-objcopy
│   ├── riscv64-unknown-linux-gnu-objdump
│   ├── riscv64-unknown-linux-gnu-ranlib
│   ├── riscv64-unknown-linux-gnu-readelf
│   ├── riscv64-unknown-linux-gnu-run
│   ├── riscv64-unknown-linux-gnu-size
│   ├── riscv64-unknown-linux-gnu-strings
│   └── riscv64-unknown-linux-gnu-strip
├── etc
│   └── gprofng.rc
├── include
│   ├── collectorAPI.h
│   ├── gdb
│   ├── libcollector.h
│   ├── libfcollector.h
│   └── sim
├── lib
│   ├── bfd-plugins
│   ├── gcc
│   ├── gprofng
│   ├── libcc1.la
│   ├── libcc1.so -> libcc1.so.0.0.0
│   ├── libcc1.so.0 -> libcc1.so.0.0.0
│   ├── libcc1.so.0.0.0
│   ├── libgprofng.a
│   ├── libgprofng.la
│   └── libriscv64-unknown-linux-gnu-sim.a
├── libexec
│   └── gcc
├── riscv64-unknown-linux-gnu
│   ├── bin
│   ├── include
│   ├── lib
│   ├── lib32
│   └── lib64
├── share
│   ├── gcc-14.2.0
│   ├── gdb
│   ├── info
│   └── man
└── sysroot
    ├── etc
    ├── lib
    ├── lib32
    ├── lib64
    ├── sbin
    ├── usr
    └── var

31 directories, 49 files

添加环境变量并测试

通过以下命令将交叉编译工具链添加到环境变量中:

  • bash
echo 'export PATH=/opt/riscv64/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
  • zsh
echo 'export PATH=/opt/riscv64/bin:$PATH' >> ~/.zshrc
source ~/.zshrc
  • 查看交叉编译工具链的版本:
➜  ~ riscv64-unknown-linux-gnu-gcc --version
riscv64-unknown-linux-gnu-gcc () 14.2.0
Copyright (C) 2024 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

若输出了编译器的版本信息,则说明已经安装成功。

在这里插入图片描述

➜  ~ riscv64-unknown-linux-gnu-gcc -v
Using built-in specs.
COLLECT_GCC=riscv64-unknown-linux-gnu-gcc
COLLECT_LTO_WRAPPER=/opt/riscv64/libexec/gcc/riscv64-unknown-linux-gnu/14.2.0/lto-wrapper
Target: riscv64-unknown-linux-gnu
Configured with: your-configured-path/riscv-gnu-toolchain/build/../gcc/configure --target=riscv64-unknown-linux-gnu --prefix=/opt/riscv64 --with-sysroot=/opt/riscv64/sysroot --with-pkgversion= --with-system-zlib --enable-shared --enable-tls --enable-languages=c,c++,fortran --disable-libmudflap --disable-libssp --disable-libquadmath --disable-libsanitizer --disable-nls --disable-bootstrap --src=../../gcc --disable-default-pie --enable-multilib --with-abi=lp64d --with-arch=rv64gc --with-tune=rocket --with-isa-spec=20191213 'CFLAGS_FOR_TARGET=-O2    -mcmodel=medlow' 'CXXFLAGS_FOR_TARGET=-O2    -mcmodel=medlow'
Thread model: posix
Supported LTO compression algorithms: zlib
gcc version 14.2.0 ()

说明 :

--target= riscv64-linux-multilib: 指定工具为riscv64-linux-multilib
--prefix=/opt/riscv64:  指定工具生成的目录
--enable-languages=c,c++:  支持c,c++语言
--with-abi=lp64d: 工具链支持的abi方式是lp64d
--with-arch=rv64gc:  工具链支持的riscv架构是 rv64gc
--enabl-multilib: 启动 multilib

安装 GTKWave

GTKWave 是用来查看波形的一款图形化软件,我们将使用它查看 Verilator 生成的电路波形图,完成对硬件逻辑的调试,安装命令:

sudo apt install gtkwave
  • 查看波形命令
gtkwave <vcd-file-path>

其他模拟器推荐

RARS

https://github.com/TheThirdOne/rars/releases/download/v1.6/rars1_6.jar

下载之后执行

java -jar .\rars1_6.jar

在这里插入图片描述

emulsiV

这是一款在线模拟器,简单易上手,对指令的走向更加直观,大家可以自己探索。
链接:https://eseo-tech.github.io/emulsiV/
在这里插入图片描述

FAQ

  1. https://github.com/riscv-collab/riscv-gnu-toolchain
  2. http://blog.chinaaet.com/weiqi7777/p/5100062001
  3. https://github.com/TheThirdOne/rars/releases/tag/v1.6

相关文章:

  • iOS OC使用正则表达式去除特殊符号并加粗文本,适用于接入AI大模型的流模式数据的文字处理
  • 深度学习 Deep Learning 第1章 深度学习简介
  • ByteByteGo学习笔记:通知系统设计
  • Redis分布式锁深度剖析:从原理到Redisson实战,破解脑裂与高并发锁难题
  • jupyter无法转换为PDF,HTMLnbconvert failed: Pandoc wasn‘t found.
  • 如何更新 Oh My Zsh
  • k8s中的控制器的使用
  • NetLink内核套接字案例分析
  • 黄金还能再涨吗?
  • 虚拟健身教练小程序:AI动作识别与个性化训练计划生成
  • 3.14周报
  • 联想拯救者 M600 无线游戏鼠标|自定义驱动程序安装说明
  • 研究整除的性质——最大公约数(GCD)和最小公倍数(LCM)
  • JavaScript基础-作用域概述
  • 【品铂科技工业生产应用案例解析】
  • 使用DeepSeek制作可视化图表和流程图
  • vue处理接口返回EventStream数据并进行展示
  • TI的Doppler-Azimuth架构(TI文档)
  • 负载均衡中四层和七层协议区别
  • 机器人触觉的意义
  • 三人在共享单车上印小广告被拘,北京警方专项打击非法小广告
  • 外媒:哈马斯一名高级指挥官尸体被发现,系辛瓦尔弟弟
  • 义乌至迪拜“铁海快线+中东快航”首发,物流成本降低18%
  • 北方首场高温将进入鼎盛阶段,江南华南多地需警惕降雨叠加致灾
  • 外交部驻港公署正告美政客:威胁恫吓撼动不了中方维护国家安全的决心
  • 中国新闻发言人论坛在京举行,郭嘉昆:让中国声音抢占第一落点