Orange_Pi_AIpro运行蜂鸟RISC-V仿真

Orange_Pi_AIpro运行蜂鸟RISC-V仿真

突发奇想,试一试Orange Pi AIpro上运行蜂鸟RISC-V的仿真。

准备

默认已经有一个Orange Pi AIpro,并且对设备进行一定的初始化配置,可以参考上一篇博文开源硬件初识——Orange Pi AIpro(8T)。

其次,默认要了解Verilog相关的EDA工具使用。

Humming Bird 相关资料

蜂鸟RISC-V开源项目:e203-hbirdv2 GitHub仓库地址,Gitee仓库地址,Quick Start-up;

最主要的步骤需要跟着Quick start一步步进行。

环境安装

环境安装流程如下:

  1. 首先确认系统版本,建议的系统为Ubuntu 18.04,Orange Pi 上的版本为Ubuntu 22.04.3 LTS

  2. 也需要安装一些工具,这条指令只有一行,复制的时候需要注意。

    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. 当然,没有在Orange Pi 上安装VCS + Verdi,那么就用iverilog + GTKwave来实现编译仿真看波形的操作了:

    sudo apt install iverilog gtkwave
    
  4. 克隆e203_hbirdv2仓库:

    # 从GitHub克隆
    git clone https://github.com/riscv-mcu/e203_hbirdv2.git
    # 或者从Gitee克隆
    git clone https://gitee.com/riscv-mcu/e203_hbirdv2.git
    

第二项的安装工具,有些系统里面已经存在了,整体内容比较多,安装之后还得一个个对,哪些是没有安装上的。

或者直接再安装一遍,如果已经安装过会提示下面的字样:

autoconf is already the newest version (2.71-2).
automake is already the newest version (1:1.16.5-1.3).
autotools-dev is already the newest version (20220109.1).
bc is already the newest version (1.07.1-3build1).
......

编译自测

这一步花了不少时间,但是快做完了,发现手册上的Note有说明:

In <your_e203_dir>/riscv-tools/riscv-tests/isa/generated directory, there are pre-generated executable files. If the test codes have been changed, just using above commands could regenerate executable files.

也就是说,仓库里是带有编译好的文件,如果再执行一次编译,只是将文件覆盖。如果没有编译需求的话,可以先跳过这一步,直接运行Demon进行仿真。

系统架构的原因

官方工具链里的系统架构是Ubuntu x86-64的,而Orange Pi AIPro的架构为aarch64也就是ARM64(可以通过指令uname -m查询)。

执行文件如果直接执行,被提示如下问题:

./riscv-nuclei-elf-gcc
bash: ./riscv-nuclei-elf-gcc: cannot execute binary file: Exec format error

使用file指令,查看当前二进制文件的架构与当前系统是否匹配:

file riscv-nuclei-elf-gcc

riscv-nuclei-elf-gcc: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.18, BuildID[sha1]=8b45da0b8ea77ca13deb8d87bc6e5bdb23c04d38, stripped

file 命令的输出可以看到,riscv-nuclei-elf-gcc 是一个 64 位的 x86-64 架构的 ELF 可执行文件,动态链接,并使用 ld-linux-x86-64.so.2 作为解释器。这意味着该文件只能在 x86-64 架构的系统上运行。

这么看,就需要重新编译工具链了。

重新编译工具链

访问工具链的源代码,可以在当前系统上重新编译工具链,以便生成适用于当前架构的二进制文件。

Gitee 上的 RISC-V GNU 工具链文档

  1. 克隆仓库

    git clone https://github.com/riscv/riscv-gnu-toolchain
    

    注意,整个克隆可能需要大于6.65GB的磁盘容量,和下载流量。

  2. 安装依赖项

    Ubuntu系统,执行以下内容:

    sudo apt-get install autoconf automake autotools-dev curl python3 libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev libexpat-dev ninja-build
    
  3. 配置和构建

    因为看到刚才在文档中下载的文件有Newlib的字样,所以选择这种方式进行配置:

    ./configure --prefix=/opt/riscv
    make
    

    这个过程等了很长时间,步骤1提到的大约6.55G的内容应该是在这里下载的。

  4. 更新PATH

    export PATH=/opt/riscv/bin:$PATH
    
  5. 验证安装

    riscv64-unknown-elf-gcc --version
    

尝试到第3步,但是数据下载太慢了,无奈终止,使用已经编译好的数据继续进行。

编译RSIC-V程序产生烧录文件

如果不出意外的话,按照目录上需要的内容进行动态链接库的引用,注意rv_linux_bare_9.21_centos64.tgz.bz2需要替换为下载的压缩包名称,或者是自己编译的路径:

cp rv_linux_bare_9.21_centos64.tgz.bz2 ~/

cd ~/

tar -xjvf rv_linux_bare_9.21_centos64.tgz.bz2

cd <your_e203_dir>/

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

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

ln -s ~/rv_linux_bare_19-12-11-07-12/bin/* .

最后一步注意,需要创建bin目录下面的所有文件到动态链接库,之后使用指令进行编译:

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

source regen.sh

主要内容为<your_e203_dir>/riscv-tools/riscv-tests/isa/generated的文件:

image_generated

以第一组rv32mi-p-breakpoint为例:

  • rv32mi-p-breakpoint为二进制文件,编译后的程序烧录文件;
  • rv32mi-p-breakpoint.dump为程序对应的机器码顺序;
  • rv32mi-p-breakpoint.verilogICMDCM对应的存储数据。

这些内容都是后续仿真,调试中不可或缺的文件。

运行仿真

切换到仓库主目录下,可以运行Verilog code的编译,这里以iverilog为例:

cd <your_e203_dir>/vsim

make clean

make install

// For iVerilog:
make compile SIM=iverilog

开始默认Testcase的仿真:

// For iVerilog:
make run_test SIM=iverilog

Terminal中返回:

image_test_pass

默认case工作的时候,Orange Pi AI pro只有一个CPU工作在100%的状态:

image_cpu_use

运行使用的时间log如下:

real	1m57.420s
user	2m13.176s
sys		0m0.919s

显然,这个时间相对于PC级的处理器还是有些差距的。

显示波形

已经安装了GTKWave,所以可以将仿真的结果以GUI的画面展示出来:

// Using GTKWave:
make wave SIM=iverilog

基于图形化的桌面是可以看到GTKWave的启动,以及仿真的波形状态:

image_sim_wave

图形界面上看波形,操作会稍微有点卡,如果引出来的信号少一点,效果略微流畅一些。

回归测试

官方手册还提供了跑回归测试的方法:

// For iVerilog:
make regress_run SIM=iverilog

make regress_collect

在这种情况下,CPU一直都是单核拉满,而且4个核看上去是随机工作的,总共用时:

real	68m43.395s
user	68m6.481s
sys		0m4.010s

哈哈,对的,花了68分钟才跑完。

整体体验还是不错的,就是没有把gcc编译这一部实现,如果能实现就能使用Orange Pi AIpro进行RISC-V相关的开发了。

Date

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

零代码本地搭建AI大模型,详细教程!普通电脑也能流畅运行,中文回答速度快,回答质量高

这篇教程主要解决&#xff1a; 1). 有些读者朋友&#xff0c;电脑配置不高&#xff0c;比如电脑没有配置GPU显卡&#xff0c;还想在本地使用AI&#xff1b; 2). Llama3回答中文问题欠佳&#xff0c;想安装一个回答中文问题更强的AI大模型。 3). 想成为AI开发者&#xff0c;开…

运行时类型识别RTTI(typeid dynamic_cast)和虚函数机制的关系

1.typeid 2.dynamic_cast 指针类型决定了可以操作的内存范围大小 子类指针转化为父类类型的指针的一般是合法的&#xff1a; 父类的指针类型转化为子类类型指针&#xff0c;超过合法操作范围&#xff0c;不安全 两种转换&#xff1a;编译期的转换&#xff0c;运行时的转化 编译…

【Java】图书管理系统-控制台输出

项目原码压缩包在我主页的资源中免费领取。&#xff08;在IDEA中运行&#xff0c;启动类在src -> Main 中运行&#xff09; 图书管理系统 设计一个简单的控制台输出的图书管理系统&#xff0c;我们首先需要明确其基本功能、设计内容以及设计要求。这个系统可以包括以下几个…

解决Windows中端口占用导致服务启动失败

解决Windows中端口占用导致服务启动失败 在cmd窗口中使用netstat -ano | findstr "3306"来查看哪个线程占用了3306端口。 下面的图片里面表示一个pid为5196的进程占用了端口 接着可以在cmd窗口中使用tasklist | findstr "5196" 根据pid查询进程名称 通过…

LVS三种负载均衡模式:NAT、Tunneling和DR的技术对比

1. LVS-NAT 模式的特性 IP使用&#xff1a;RS&#xff08;Real Server&#xff09;应使用私有地址&#xff0c;RS的网关必须指向DIP&#xff08;Director IP&#xff09;。网络范围&#xff1a;DIP和RIP必须在同一个网段内。数据包处理&#xff1a;请求和响应报文都需要经过Di…

[DDR4] DDR1 ~ DDR4 发展史导论

依公知及经验整理&#xff0c;原创保护&#xff0c;禁止转载。 专栏 《深入理解DDR4》 内存和硬盘是电脑的左膀右臂&#xff0c; 挑起存储的大梁。因为内存的存取速度超凡地快&#xff0c; 但内存上的数据掉电又会丢失&#xff0c;一直其中缓存的作用&#xff0c;就像是我们的工…

基于System-Verilog的FPGA设计与仿真

一、System-Verilog System Verilog的发展 SystemVerilog 的出现是为了因应日益复杂的数位电路设计和验证需求。虽然Verilog HDL 在早期的数位电路设计中得到了广泛应用&#xff0c;但随着技术的发展和电路复杂度的增加&#xff0c;Verilog HDL 在某些方面已经显得有些不足以满…

线稳源极跟随 线性电源前端降压

功率MOSFET线性电源涉及跟随.ms14 根本原理是Vgs对Id的控制&#xff0c;Vgs越大&#xff0c;Id越大&#xff0c;反之亦然。 观察转移特性曲线&#xff0c;结合接线图可知&#xff0c;电路稳定后&#xff0c;如果负载电阻增大&#xff0c;则Vsgnd增大&#xff0c;由于Vggnd有稳…

【数据挖掘】机器学习中相似性度量方法-余弦相似度

写在前面&#xff1a; 首先感谢兄弟们的订阅&#xff0c;让我有创作的动力&#xff0c;在创作过程我会尽最大能力&#xff0c;保证作品的质量&#xff0c;如果有问题&#xff0c;可以私信我&#xff0c;让我们携手共进&#xff0c;共创辉煌。 路虽远&#xff0c;行则将至&#…

在k8s上部署一个简单的应用

部署一个简单的应用 实验目标&#xff1a; 部署一个简单的 web 应用&#xff0c;比如 Nginx 或者一个自定义的 Node.js 应用。 实验步骤&#xff1a; 创建一个 Deployment。创建一个 Service 来暴露应用。验证应用是否可以通过 Service 访问。 今天我们来做一下昨天分享的可…

【TB作品】STM32F102C8T6单片机,PWM发生器

硬件&#xff1a; STM32F102C8T6核心板&#xff0c;按键&#xff0c;0.96 OLED显示屏。 软件&#xff1a; 1、硬件启动触发单片机输出PWM&#xff0c;未触发之前PWM输出为低电平。 2、按键修改PWM的变化模式、变化时间长度、占空比上下限。 3、输出的PWM是固定的10kHZ的。 4、变…

王思聪日本街头在被偶遇

王思聪日本街头再被偶遇&#xff0c;甜蜜约会日常成网友热议焦点近日&#xff0c;有网友在日本街头再次偶遇了“国民老公”王思聪&#xff0c;这次他不仅携带着一位美丽的女友&#xff0c;还展现出了两人之间亲密无间的互动&#xff0c;让不少网友感叹&#xff1a;这真的是每天…

Kafka 如何保证消息顺序及其实现示例

Kafka 如何保证消息顺序及其实现示例 Kafka 保证消息顺序的机制主要依赖于分区&#xff08;Partition&#xff09;的概念。在 Kafka 中&#xff0c;消息的顺序保证是以分区为单位的。下面是 Kafka 如何保证消息顺序的详细解释&#xff1a; ⭕分区内消息顺序 顺序写入&#…

掌握特劳特定位理论核心,明晰企业战略定位之重

在当今瞬息万变的市场环境中&#xff0c;企业战略定位的重要性日益凸显。它不仅是企业在激烈竞争中保持优势的关键&#xff0c;更是企业实现长期可持续发展的基石。 哈佛大学战略学教授迈克尔波特&#xff08;Michael Porter&#xff09;指出战略就是形成一套独具的运营活动&a…

前端组件样式穿透修改

背景&#xff1a; 在style经常用scoped属性实现组件的私有化时&#xff0c;要改变element-ui某个深层元素&#xff08;例如.el-input__inner&#xff09;或其他深层样式&#xff0c; 但是element-ui 并没有提供修改的接口。 这时&#xff0c;就是需要手动修改样式。 解决方法…

Oracle备份失败处理,看这一篇就够了!

作者&#xff1a;IT邦德 中国DBA联盟(ACDU)成员&#xff0c;10余年DBA工作经验&#xff0c; Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主&#xff0c;全网粉丝10万 擅长主流Oracle、MySQL、PG、高斯及Greenplum备份恢复&#xff0c; 安装迁移&#xff0c;性能优化、故障…

canvas学习

Canvas API 提供了一个通过 JavaScript 和 HTML 的 元素来绘制图形的方式。它可以用于动画、游戏画面、数据可视化、图片编辑以及实时视频处理等方面。 Canvas 的基本用法 <canvas> 元素 <canvas id"tutorial" width"150" height"150&quo…

基数和基数转换

目录 一、定义&#xff1a; 二、各个进制&#xff1a; 1、二进制&#xff1a; 2、八进制&#xff1a; 3、十进制&#xff1a; 4、十六进制&#xff1a; 三、基数转换&#xff1a; 1、各类基数转十进制&#xff1a; 二转十&#xff1a; 八转十&#xff1a; 十六转八&a…

1. 人工智能中的相关术语的概述

1.1 机器学习的概念&#xff1a;机器学习是指从有限的观测数据中学习出具有一般性的规律&#xff0c;并利用这些规律对未知数据进行预测的方法。机器学习可以分为监督学习&#xff0c;无监督学习和强化学习。 传统的机器学习主要关注于如何学习一个预测模型。一般需要首先将数据…

【教程】学会用PS做海报(教你如何套模板+模板资源),以研电赛展架为例

网上的视频都是好几十个小时&#xff0c;看起来很耗费时间&#xff0c;其实做海报&#xff0c;展架只用到其中的一部分功能&#xff0c;本文会进行讲解 这里写目录标题 去年研电赛做的展架1.首先打开比赛给的展板照片&#xff0c;按照研电赛要求设置大小2.调出ps的几个窗口&am…