Orange_Pi_AIpro运行蜂鸟RISC-V仿真

news2024/11/25 21:44:42

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

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

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

相关文章

《C++ Primer》导学系列:第 2 章 - 变量和基本类型

2.1 基本内置类型 概述 本小节介绍C中的基本内置类型。基本内置类型是构成C程序的基础&#xff0c;它们用于表示数据的不同形式&#xff0c;如整数、浮点数、字符等。理解和使用这些基本类型是编写C程序的起点。 2.1.1 算术类型 C的算术类型分为整型和浮点型。整型用于表示…

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…

【YashanDB知识库】PHP使用OCI接口使用数据库绑定参数功能异常

【问题分类】驱动使用 【关键字】OCI、驱动使用、PHP 【问题描述】 PHP使用OCI8连接yashan数据库&#xff0c;使用绑定参数获取数据时&#xff0c;出现报错 如果使用PDO_OCI接口连接数据库&#xff0c;未弹出异常&#xff0c;但是无法正确获取数据 【问题原因分析】 开启O…

远程桌面失败:你的凭据不工作

远程桌面失败&#xff1a;你的凭据不工作 远程桌面失败&#xff1a;你的凭据不工作_您的凭据不工作-CSDN博客https://blog.csdn.net/weixin_38004638/article/details/82290796

java设计模式和面向对象编程思想

Java设计模式和面向对象编程思想是软件开发中的核心概念&#xff0c;对于构建可维护、可扩展的软件系统至关重要。下面是对这两个主题的知识点总结&#xff1a; 面向对象编程&#xff08;OOP&#xff09;思想 封装&#xff1a;将数据&#xff08;属性&#xff09;和操作这些数据…

Linux C编译器从零开发一

基础程序汇编 test.c int main() {return 42; } 查看反汇编 cc -o test test.c objdump -d -M intel test 0000000000001129 <main>:1129: f3 0f 1e fa endbr64 112d: 55 push rbp112e: 48 89 e5 mov rbp,rsp1131: b…

攻防世界-fakebook题目__详解

1.打开题目先用dirsearch工具扫描一波&#xff0c;扫出来了robots.php目录&#xff0c;然后访问robots.txt 目录&#xff0c;发现了有一个备份文件 &#xff0c;访问备份文件&#xff0c;下载内容 文件的大致内容如下 里面有一个curl_exec这个函数容易造成ssrf攻击的漏洞 我…

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

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

四川汇聚荣聚荣科技有限公司是干什么的,拼多多运营如何做?

四川汇聚荣聚荣科技有限公司是干什么的&#xff0c;拼多多运营如何做?随着电商行业的快速发展&#xff0c;越来越多的企业开始涉足这一领域。其中&#xff0c;四川汇聚荣聚荣科技有限公司便是其中的一员。那么&#xff0c;这家公司究竟是做什么的呢?简单来说&#xff0c;它是…

【代码随想录】【算法训练营】【第35天】[134]加油站 [135]分发糖果 [860]柠檬水找零 [406]根据身高重建队列

前言 思路及算法思维&#xff0c;指路 代码随想录。 题目来自 LeetCode。 day 35&#xff0c;连休两天~ 题目详情 [134] 加油站 题目描述 134 加油站 解题思路 前提&#xff1a;数组 思路&#xff1a;全局贪心算法&#xff1a;最小累加剩余汽油为负数&#xff0c;说明…

短视频矩阵系统源码搭建--如何基于各平台原生态坏境做开发

短视频矩阵系统源码搭建是一个涉及多个技术层面的复杂过程&#xff0c;它要求开发者能够理解并利用不同平台的原生环境来开发和部署应用程序。以下是一些基于不同平台原生环境开发短视频矩阵系统的一般步骤和考虑因素&#xff1a; 1.需求分析&#xff1a;首先明确系统需要实现的…

Python学习笔记9:入门知识(九)

缩进 什么是缩进&#xff1f; 缩进&#xff0c;简单的理解为本行的首字符相比上一行的首字符位置相对靠后。目前笔者接触的编程语言缩进一般是4字符&#xff0c;直接可以按tab键就行。 为什么突然讲缩进&#xff1f; Python这门语言&#xff0c;是依靠缩进来判断当前行与上…

ISP图像算法面试准备(1)

ISP图像算法面试准备 ISP图像算法面试准备(1) 文章目录 ISP图像算法面试准备前言一、ISP流程二、重点关注1. AWB必须在Demosaic之后进行。2. Gamma矫正通常在CCM之前进行 三、如何实现ISP参数自动化调试四、AE&#xff0c;即自动曝光&#xff08;Auto Exposure&#xff09;总结…

【深度学习】基于EANet模型的图像识别和分类技术

1.引言 1.1.EANet模型简介 EANet&#xff08;External Attention Transformer&#xff09;是一种深度学习模型&#xff0c;它结合了Transformer架构和外部注意力机制&#xff0c;特别适用于图像分类等计算机视觉任务。以下是关于EANet的详细解释&#xff1a; 1.1.1 定义与背…

Qt项目天气预报(3) - qt的http编程获取天气数据

概念 Qt中的HTTP编程主要涉及使用Qt的网络模块来进行HTTP请求和处理HTTP响应。Qt提供了一系列类来处理网络通信&#xff0c;其中最常用的类是 QNetworkAccessManager 、 QNetworkRequest 、 QNetworkReply 以及相关的支持类。 编程实例 以下是一个基本的HTTP编程示例&#xff0…

优雅谈大模型12:一文读懂LoRA/DoRA/MoRA

Microsoft于2021年推出的LoRA是一种经济型微调模型参数的方法。现在大模型的参数规模动不动都在10亿级别以上&#xff0c;微调大模型&#xff08;微调这里代表着SFT&#xff0c;例如读者将某个大模型拿到自身领域&#xff0c;想使用自身领域的知识再次训练和精校大模型&#xf…

Gradle实现类似Maven的profiles功能

版本说明 GraalVM JDK 21.0.3Gradle 8.7Spring Boot 3.2.5 目录结构 指定环境打包 application.yml/yaml/properties 执行 bootJar 打包命令前要先执行 clean【其它和 processResources 相关的命令也要先执行 clean】&#xff0c;否则 active 值不会变&#xff01; spring…

计算机网络:网络层 - IP数据报的转发

计算机网络&#xff1a;网络层 - IP数据报的转发 基于终点转发最长前缀匹配二叉线索树路由表特殊路由特定主机路由默认路由 IP多播 基于终点转发 路由器转发报文时&#xff0c;是通过报文中的目的地址字段来转发的&#xff0c;也即是说路由器只知道终点的IP地址&#xff0c;根…

一种新的一维时间序列信号盲解卷积算法(以旋转机械故障诊断为例,MATLAB环境)

一种新的一维时间序列信号盲解卷积算法&#xff08;以旋转机械故障诊断为例&#xff0c;MATLAB环境&#xff09;&#xff0c;可作为深度学习信号前处理过程&#xff0c;水个SCI不是问题。 机械设备的状态信号中往往蕴含着大量的设备异常信息。如何从繁多的机械状态信号中提取足…

每日一练:攻防世界:ewm

这道题我尝试了使用montagegaps解题&#xff0c;但是没有解出来&#xff0c;图片数量不是很多&#xff0c;可以尝试用PS直接拼图&#xff0c;但是这样学不到东西&#xff0c;我也就没尝试&#xff0c;直接看的官方WP 这段代码应该是改变工作目录到small&#xff0c;并且变量当…