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

news2025/4/22 1:49:34

安装实验辅助工具

  • 实验环境搭建
    • 安装 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2315602.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Trae插件革命:用VSPlugin Helper实现VSCode市场插件全自动安装

之前有读者留言说trae都没有c的插件用&#xff0c;确实是这样&#xff0c;trae的插件源用的是open vsx&#xff0c;而c/c插件是vscode官方插件市场的&#xff0c;如果想直接在trae中安装c/c插件是不行的&#xff0c;只能先从vscode官方插件市场把vsix后缀文件先下载下来&#x…

使用PHP进行自动化测试:工具与策略的全面分析

使用PHP进行自动化测试&#xff1a;工具与策略的全面分析 引言 随着软件开发的复杂性不断增加&#xff0c;自动化测试已成为确保软件质量的关键环节。PHP作为一种广泛使用的服务器端脚本语言&#xff0c;拥有丰富的生态系统和工具支持&#xff0c;使其成为自动化测试的理想选…

字符串函数和结构题内存对齐

图下为函数使用&#xff1a; #include <ctype.h>int main() {int ret isdigit(Q);printf("%d\n", ret);return 0; }int main() {printf("%c\n", toupper(a));printf("%c\n", tolower(A));return 0; }

Odoo18 Http鉴权+调用后端接口

最近在调研Odoo18&#xff0c;包括它的前后端原理、源码等。发现官方的开发文档并不十分实用&#xff0c;比如标题这种简单的实用需求&#xff0c;竟然浪费了一点时间&#xff0c;特此记录。 官方文档&#xff1a;External API — Odoo 18.0 documentation 前提&#xff1a;首…

【sql靶场】第11、12关-post提交注入

目录 【sql靶场】第11、12关-post提交注入 POST 一、URL 二、核心组成部分 三、数据编码规范 四、应用场景与请求方法 第十一关 方法一 步骤一 步骤二 步骤三 步骤四 步骤五 步骤六 步骤七 方法二 步骤一 步骤二 步骤三 步骤四 步骤五 步骤六 步骤七 第…

框架、云原生、微服务的基本概念

架构 互联网应用的架构设计随着业务需求的增长和技术的发展经历了从单一架构到垂直架构&#xff0c;再到分布式架构的演变。以下是这三种架构的定义、特点以及具体的例子&#xff1a; 1. 单一架构&#xff08;Monolithic Architecture&#xff09; 定义 单一架构是一种将所有…

Discuz建站教程之论坛头部logo跳转链接怎么修改?

在修改头部logo跳转链接前&#xff0c;我们需要知道对应代码在哪个文件目录&#xff0c;进入宝塔或是服务器&#xff0c;找到文件&#xff1a;\template\default\common\header.htm&#xff0c;编辑器打开&#xff0c;搜索以下代码&#xff0c;大概在135行 <a href"{i…

AI重构SEO关键词布局

内容概要 在搜索引擎优化&#xff08;SEO&#xff09;领域&#xff0c;AI技术的深度应用正在颠覆传统关键词布局逻辑。通过机器学习算法与语义分析模型&#xff0c;智能系统能够实时解析海量搜索数据&#xff0c;构建动态词库并精准捕捉用户意图。相较于依赖人工经验的关键词筛…

OpnenHarmony 开源鸿蒙北向开发——1.开发环境搭建(DevEco Studio 5.03)

我这边是基于window下对OpenHarmony开源鸿蒙进行北向开发。 一、安装DevEco Studio 1、下载 下载中心 | 华为开发者联盟-HarmonyOS开发者官网&#xff0c;共建鸿蒙生态 2、安装 下载完成之后进行解压 双击进行安装 按照我的步骤进行 选择安装目录&#xff0c;全部配置完成后…

钉钉(excel)能让表格中不是‘北京’的字符串自动加亮显示(方便查看)以及隔行填充严颜色是斑马色(方便查看)嘛

在钉钉在线表格中&#xff0c;虽然功能相对Excel有所简化&#xff0c;但仍然可以通过条件格式实现对特定内容的高亮显示。以下是具体步骤&#xff1a; 一、在钉钉在线表格中设置条件格式 1. 打开钉钉在线表格 登录钉钉&#xff0c;进入“钉钉在线表格”应用。 打开你需要操作…

【工具】ReConPlot一个可视化和解释基因组重排的R包

文章目录 介绍代码案例加载R包导入数据 参考 介绍 人类肿瘤的全基因组测序研究表明&#xff0c;复杂形式的结构变异&#xff0c;统称为复杂基因组重排&#xff08;cgr&#xff09;&#xff0c;在不同类型的癌症中普遍存在。cgr的检测、分类和机制解释需要对体细胞拷贝数畸变&a…

OSPF-2 邻接建立关系

上一期我们说了OSPF的邻居建立关系以及OSPF邻居关系建立中建立失败的因素以及相关实验案例 这一期我们来说说OSPF的邻接关系建立时需要交互哪些报文以及失败因素及原因和相关实验案例 一、概述 在运行了OSPF的网络当中为了交互链路状态信息和路由信息,互相之间需要建立邻接关…

最完美的WPF无边框设计!

常规的无边框方法设计 常规的WPF无边框设计方法都是通过AllowsTransparency="True"和WindowStyle=“None”,并且使用WindowChrome样式来实现,但是这样会有问题就是,窗体最大化的时候将底部任务栏给挡住了,另外最大化的时候不能拖动窗体。参考这个大佬的设计@ 若…

工作记录 2017-01-12

序号 工作 相关人员 1 协助BPO进行Billing的工作。 处理Amazing Charts的数据查询。 修改BillingJobPoster&#xff0c;处理CCDA 的自动导入&#xff0c;预计还需一天才能完成。 修改录入Code的界面&#xff08;code 移动到指定位置&#xff09;&#xff0c;预计明天更新。…

【Linux】从互斥原理到C++ RAII封装实践

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &#x1f4e2;本文由 JohnKi 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f4e2;未来很长&#…

爬虫案例十三js逆向模拟登录中大网校

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、网站分析二、代码 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; js 逆向模拟登录中大网校 提示&#xff1a;以下是本篇文章正文内…

WPF窗口读取、显示、修改、另存excel文件——CAD c#二次开发

效果如下&#xff1a; using System.Data; using System.IO; using System.Windows; using Microsoft.Win32; using ExcelDataReader; using System.Text; using ClosedXML.Excel;namespace IfoxDemo {public partial class SimpleWindow : Window{public SimpleWindow(){Initi…

01 | Go 项目开发极速入门课介绍

提示&#xff1a; 所有体系课见专栏&#xff1a;Go 项目开发极速入门实战课。 你好&#xff0c;欢迎学习本课程。本课程是一个 Go 项目开发极速入门课程。旨在帮助刚学习完 Go 基础语法的 Go 开发者&#xff0c;快速掌握如何开发一个功能相对全面的 Go 项目。 根据课程设计目标…

Spring Cloud LoadBalancer 原理与实践

背景 当前我们的微服务架构基于Spring Cloud Alibaba体系&#xff0c;通过定制NacosRule实现了跨集群访问和灰度发布功能。但随着Spring Cloud与Nacos版本升级&#xff0c;官方已弃用Ribbon转向LoadBalancer&#xff0c;这要求我们完成以下技术升级&#xff1a; 负载均衡机制…

Vmware下的openEuler

1.下载openEuler操作系统镜像 https://repo.openeuler.org/openEuler-20.03-LTS/ISO/ 2.在VM新建虚拟机 3.虚拟机联网 我是出现了没有网络&#xff0c;ping不通的问题 参考&#xff1a;https://blog.csdn.net/FHY26828/article/details/140941234 修改文件&#xff1a; 在…