本文记录自己在学习蜂鸟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. MAPPO学习笔记(1):从PPO算法开始

    由于这段时间的学习内容涉及到MAPPO算法,并且我对MAPPO算法这种多智能体算法的信息交互机制不甚了解,于是写了这个系列的笔记,目的是巩固知识,并且进行一些粗浅又滑稽的总结. 1.PPO算法的介绍 ...

  2. 【LeetCode动态规划#12】详解买卖股票I~IV,经典dp题型

    买卖股票的最佳时机 力扣题目链接(opens new window) 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格. 你只能选择 某一天 买入 ...

  3. Wine运行问题 希沃-汉字卡无法显示

    在wine环境下运行希沃白板5,汉字卡无法正常显示: 这个模块是我之前参与开发的模块,过了5年还有点印象. 大概原理是获取字体库中字符的笔画路径GraphicsPath,根据里面的路径点集PathPo ...

  4. StringBuilder类用法解析

    一.StringBuilder说明 StringBuilder是一个可变的字符序列.这个类提供了一个与StringBuffer兼容的API,但不保证同步,即StringBuilder不是线程安全的,而 ...

  5. PaddlePaddle 飞桨复现 ResNeXt

    import paddle.nn as nn import paddle class BN_Conv2D(nn.Layer): """ BN_CONV_RELU &quo ...

  6. ChatGPT 打字机效果原理

    一.背景 在初次使用 ChatGPT 时,我就被打字机的视觉效果吸引.总是感觉似曾相识,因为经常在一些科幻电影中看到,高级文明回传的信息在通讯设备的屏幕上以打字机效果逐步出现,在紧张的氛围下,输出人类 ...

  7. 【GiraKoo】Visual Studio开启Asan提示“LINK : fatal error LNK1104: cannot open file 'LIBVCASAN.lib'”

    [解决]Visual Studio开启Asan提示"LINK fatal error LNK1104 cannot open file 'LIBVCASAN.lib'" 环境 Vi ...

  8. 【HDU】1559 最大子矩阵 (二维前缀和,动态规划)

    动态规划之二维前缀和 题目 给你一个m×n的整数矩阵,在上面找一个x×y的子矩阵,使子矩阵中所有元素的和最大. 输入 输入数据的第一行为一个正整数T,表示有T组测试数据.每一组测试数据的第一行为四个正 ...

  9. 03、SECS-I 协议介绍

    03.SECS-I 协议介绍 上一篇我们学习了 SECS-II 协议,对 SECS-II 协议有了初略的了解,现在我们再来一起学习 SECS-I 协议. 文章的内容基本上来自参考资料和自己看的文档,若 ...

  10. CSharp初体验

    入门 初来乍到了解一门新的语言,它可能和熟悉的c/c++有不小差别,整体上需要首先了解下语法文件的整体结构.例如,源文件整体结构如何. 乍看CSharp源文件(compile unit)的结构,官网主 ...