本文记录自己在学习蜂鸟E203的过程。下面简单介绍一下仿真之路所遇到的困难和走过的坑。

1、环境开发 :一般选择ubuntu 18.04 这个版本,安装这个教程很多,可以自行学习。

2、在Linux中安装工具:

sudo apt-get install autoconf automake autotools-dev curl device-tree-compiler libmpc-dev libmpfr-dev libgmp-dev
gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev git

3、下载  e203_hbirdv2 project   选择其中一种即可

git clone https://github.com/riscv-mcu/e203_hbirdv2.git
git clone https://gitee.com/riscv-mcu/e203_hbirdv2.git

4、编译工程自带例程 ,下载芯来的工具链

芯来工具链官网:芯来工具链_专业RISC-V处理器IP及解决方案公司 (nucleisys.com)

 

下载好 RISC-V GNC toolchain 后,可以将压缩包直接拖进虚拟机中。可以看到如下:

接下开始配置riscv- tests。打开终端,在终端中操作如下命令:

cp nuclei_riscv_newlibc_prebuilt_linux64_2022.12.tar.bz2 ~/ 

cd ~/

tar -xjvf nuclei_riscv_newlibc_prebuilt_linux64_2022.12.tar.bz2

cd <your_e203_dir>/

mkdir -p ./riscv-tools/prebuilt_tools/prefix/bin

cd ./riscv-tools/prebuilt_tools/prefix/bin/

ln -s ~/gcc/bin/* .

其中 两个地方需要注意:

nuclei_riscv_newlibc_prebuilt_linux64_2022.12.tar.bz2  这里是根据自己下载的工具版本而定。
your_e203_dir  是自己的E203存放目录。

注意最后一步有的是这样的命令:
ln -s ~/nuclei_riscv_newlibc_prebuilt_linux64_2022.12.tar.bz2/gcc/bin/\* . 

完成之后,开始编译测试:

cd <your_e203_dir>/riscv-tools/riscv-tests/isa

source regen.sh

完成之后,进行跑仿真,需要安装两个软件 iverilog+gtkwave 或者 VCS+Verdi 。这里我们以iverilog+gtkwave 为说明。

注意:如果要使用iverilog为仿真工具,确保这个工具版本为12.0。

安装 iverilog 和gtkwave 命令如下:

# 从github下载
git clone https://github.com/steveicarus/iverilog.git
#进入iverilog目录
cd iverilog
#检测依赖文件、配置环境并编译
sh autoconf.sh
./configure
make
#运行测试demo检查是否编译成功
make check
#安装iverilog
sudo make install
#查看iverilog的版本
iverilog –v
#安装波形查看工具
sudo apt-get install gtkwave

注意:安装iverilog12.0时vvp_proc_loops.c:28:31: error: initializer element is not constant static  unsigned break_label = LABEL_NONE?这里会报错!

解决方案找到这个c文件把这两个信号声明后面的“= LABEL_NONE”去掉,在之后的两个int()块里面再分别加上= LABEL_NONE赋值就行。

#找到该文件
cd ~/iverilog/tgt-vvp
#使用vim或者gvim 打开该文件 并修改。保存
gvim vvp_proc_loops.c

在安装好iverilog 和gtkwave 后,我们开始综合网表。

# cd ~/e203_hbirdv2/vsim 进入自己文件存放位置
cd ~/<your_e203_dir>/vsim

make clean
make install
make compile SIM=iverilog

综合网表成功后,可以运行仿真。

make run_test SIM=iverilog

成功仿真界面:

注意:如果出现错误 /bin/sh: Syntax error: “&” unexpected,则需要转换shell类型为bash:

# 查看shell类型,需要将dash改成bash
ls -l /bin/sh
sudo dpkg-reconfigure dash
#选择 no

查看波形:

// Using Verdi:
make wave SIM=vcs // Using GTKWave:
make wave SIM=iverilog

运行一下命令进行回归测试,并查看回归结果:

// For VCS:
make regress_run SIM=vcs // For iVerilog:
make regress_run SIM=iverilog

make regress_collect

至此,仿真成功。

参考资料:

1、Hummingbirdv2 E203 仿真排坑之路 - 简书 (jianshu.com)

2、4.1. How to run simulation — Hummingbirdv2 E203 Core and SoC 0.2.1 documentation (nucleisys.com)

蜂鸟E203 仿真之路的更多相关文章

  1. 蜂鸟E203系列——Linux开发工具

    欲观原文,请君移步 Vivado安装 vivado是运行工程的工具,所以必须安装 后台回复[vivado2017]可获取vivado 2017.4 | 后台回复[vivado2020]可获取vitis ...

  2. 蜂鸟E203系列——Linux调试(GDB+Openocd)

    欲观原文,请君移步 本文基于文章<蜂鸟E203系列--利用 Hbrid-E-SDK 环境开发程序> GDB 简介 GDB(GNU Project Debugger),是 GNU 工具链中的 ...

  3. 手把手教你蜂鸟e203移植(以Nexys4DDR为例)

    准备工作:(网盘链接:) 1.蜂鸟e203的RTL源码: 2.一段分频代码: 3.顶层设计文件(system.v) 4.开发板文件: 5.Nexys4DDR电路图: 6.Nexys4DDR管脚约束模板 ...

  4. 蜂鸟E203 IFU模块

    E203的IFU(instruction fetch unit)模块主要功能和接口如下: IFU的PC生成单元产生下一条指令的PC. 该PC传输到地址判断和ICB生成单元,就是根据PC值产生相应读指请 ...

  5. 蜂鸟E203系列——Linux下运行hello world例程

    欲观原文,请君移步 创建程序 在 -/hbird-e-sdk-master/software 路径下创建一个"helloworld"中文件夹 在 -/hbird-e-sdk-mas ...

  6. IIC_slaver 的仿真之路

    IIC_slaver 是网上下载的.testbench文件是自带的,出现如图错误. compile  >> compile  option  >> include direct ...

  7. 真正的RISC-V开发板——VEGA织女星开发板开箱评测

    前言 由于最近ARM公司要求员工"停止所有与华为及其子公司正在生效的合约.支持及未决约定",即暂停与华为的相关合作,大家纷纷把注意力投向了另一个的处理器架构RISC-V,它是基于精 ...

  8. RISCV 入门 (学习笔记)

    文章目录 1. risv 相关背景 1.1 arm 授权费 1.2 riscv 发展历史 1.3 riscv 风险 2. 指令集 2.1 可配置的通用寄存器组 2.2 规整的指令编码 2.3 简洁的存 ...

  9. 痞子衡嵌入式:盘点国内RISC-V内核MCU厂商(2018年发布产品)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是国内RISC-V内核MCU厂商(2018). 虽然RISC-V风潮已经吹了好几年,但2019年才是其真正进入主流市场的元年,最近国内大量 ...

  10. UART学习之路(四)VerilogHDL实现的简单UART,VIVADO下完成仿真

    用VerilogHDL实现UART并完成仿真就算是对UART整个技术有了全面的理解,同时也算是Verilog入门了.整个UART分为3部分完成,发送模块(Transmitter),接收模块(Recei ...

随机推荐

  1. Caused by: java.net.BindException: Address already in use: JVM_Bind(ActiveMq已经启动)

    1.本地启动项目开启两个启动类出错. Error creating bean with name 'brokerService' defined in class path resource [com ...

  2. js对象方法大全

    JavaScript中Object构造函数的方法 Object构造函数的方法节 Object.assign() 通过复制一个或多个对象来创建一个新的对象. Object.create() 使用指定的原 ...

  3. Python 创建数字列表

    创建数字列表 用于存储数字集合,高效地处理数字列表 使用函数range() range(value1,value2),从指定的第一个值开始数,到达指定的第二个值后停止,输出不包含第二个值 使用rang ...

  4. Rust中的函数指针

    什么是函数指针 通过函数指针允许我们使用函数作为另一个函数的参数.函数的类型是 fn (使用小写的 "f" )以免与 Fn 闭包 trait 相混淆.fn 被称为 函数指针(fun ...

  5. Pytorch数据操作

    1.Pytorch中tensor的生成与访问 可以使用arange()创建一个张量:如,torch.arange(12)创建0开始的前12个整数: 除非特殊指定,否则新的张量将存放在内存中,并采用CP ...

  6. PHP获取网页返回的JSON数据并在微信换行展示

    1 $url ="http://japi.juhe.cn/joke/content/text.from?page=&pagesize=&key=c968d04ab0ea15e ...

  7. #Python 利用pandas 合并csv/xlsx文件

    上次我们分享了利用powerquery来合并文件进行数据分析,但是Pq有一部分局限性,在现实工作中,我们往往需要合并多个文件去处理数据, 如果面对20个甚至更多的文件,pq中的每一步的步骤都会去读取每 ...

  8. 2022-10-28:以下go语言代码输出什么?A:false false;B:true false;C:true true;D:false true。 package main import “f

    2022-10-28:以下go语言代码输出什么?A:false false:B:true false:C:true true:D:false true. package main import &qu ...

  9. 2022-03-07:K 个关闭的灯泡。 N 个灯泡排成一行,编号从 1 到 N 。最初,所有灯泡都关闭。每天只打开一个灯泡,直到 N 天后所有灯泡都打开。 给你一个长度为 N 的灯泡数组 blubs

    2022-03-07:K 个关闭的灯泡. N 个灯泡排成一行,编号从 1 到 N .最初,所有灯泡都关闭.每天只打开一个灯泡,直到 N 天后所有灯泡都打开. 给你一个长度为 N 的灯泡数组 blubs ...

  10. TestForPicGo

    如果显示,则为成功 否则,失败 同时为CN-BLOG的vscode插件进行测试