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-gccriscv-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.bz2cd <your_e203_dir>/mkdir -p ./riscv-tools/prebuilt_tools/prefix/bincd ./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/isasource 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>/vsimmake cleanmake 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=iverilogmake regress_collect

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

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

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

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

Date

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

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

相关文章

FineReport简单介绍

一、介绍 官网 &#xff1a;FineReport产品简介- FineReport帮助文档 - 全面的报表使用教程和学习资料 报表是以表格、图表的形式来动态展示数据&#xff0c;企业通过报表进行数据分析&#xff0c;进而用于辅助经营管理决策。 FineReport 是一款用于报表制作&#xff0c;分析和…

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

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

抽奖系统源码_微信抽奖系统PHP源码开源

介绍&#xff1a; 微信抽奖系统源码是一个以php MySQL进行开发的手机抽奖系统源码。用途&#xff1a;适合做推广营销、直播、粉丝抽奖。 功能介绍&#xff1a; 1、后台可以设置每个抽奖用户的抽奖次数,后台添加设置奖品,适和企业和商场搞活动,后台添加用户&#xff0c;才能抽…

[RL9] Rocky Linux 9.4 搭载 PG 16.1

副标题&#xff1a;Rocky Linux 9.4 升级实录&#xff0c;及 PG 16 相关内容 背景 Rocky Linux 9.4 (以下简称 RL) 于5月9日正式发布&#xff0c;本文记录了从 RL 9.3 升级到 9.4 的过程&#xff0c;以及升级前后的一些变化。 之前介绍过 RL 9 的相关内容&#xff0c;请戳&…

学习笔记——网络管理与运维——SNMP(SNMP架构)

三、SNMP架构 1、SNMP结构概述 SNMP被设计为工作在TCP/IP协议族上&#xff0c;基于TCP/IP协议工作&#xff0c;对网络中支持SNMP协议的设备进行管理。所有支持SNMP协议的设备都提供SNMP这个统一界面&#xff0c;使得管理员可以使用统一的操作进行管理&#xff0c;而不必理会设…

个人网站制作 Part 25 添加实时聊天功能 | Web开发项目添加页面缓存

文章目录 &#x1f469;‍&#x1f4bb; 基础Web开发练手项目系列&#xff1a;个人网站制作&#x1f680; 添加实时聊天功能&#x1f528;使用聊天服务&#x1f527;步骤 1: 选择聊天服务&#x1f527;步骤 2: 安装Socket.io&#x1f527;步骤 3: 创建Socket.io服务器 &#x1…

GStreamer 源码编译,在 Clion 下搭建调试环境

前言 最近在学习 GStreamer&#xff0c;官方提供了一些教程&#xff0c;本人希望能够断点调试&#xff0c;以便学习代码逻辑。本文记录如何在 Clion 搭建 GStreamer 源码编译、调试环境 步骤 下载源码 git clone https://gitlab.freedesktop.org/gstreamer/gstreamer.gitCl…

【漏洞复现】英飞达医学影像存档与通信系统 Upload.asmx 任意文件上传漏洞

0x01 产品简介 英飞达 医学影像存档与通信系统 Picture Archiving and Communication System&#xff0c;它是应用在医院影像科室的系统&#xff0c;主要的任务就是把日常产生的各种医学影像(包括核磁&#xff0c;CT&#xff0c;超声&#xff0c;各种X光机&#xff0c;各种红外…

适配不同数据库厂商方案

背景 在对国产化数据有要求的时候&#xff0c;我们会做对 达梦、海量等数据库的配置。 有些SQL 以前没有写成标准SQL&#xff1b; 那么适配的时候怎么办呢&#xff1f;改成标准SQL。 如果不好改呢&#xff1f;比如SQL比较复杂等&#xff0c;需要判断 当前是哪个厂商的数据库…

2024全球边缘计算大会参会企业名单(首批)

6月22日&#xff0c;第九届全球边缘计算大会将在深圳南山区科兴科学园举办&#xff0c;本次大会由边缘计算社区主办&#xff0c;并得到了EMQ、研华科技、网宿科技等单位的大力支持&#xff01;大会邀请了20重磅嘉宾&#xff0c;聚焦边缘计算前沿技术方向和热点趋势。 以下为首批…

HO-VMD-TCN:西储大学轴承故障诊断全流程详解

声明&#xff1a;文章是从本人公众号中复制而来&#xff0c;因此&#xff0c;想最新最快了解各类智能优化算法及其改进的朋友&#xff0c;可关注我的公众号&#xff1a;强盛机器学习&#xff0c;不定期会有很多免费代码分享~ 目录 原理详解 1.数据预处理 2.特征提取 3.故障…

DomoAI让你轻松变身视频达人!支持20s完整视频生成!

账号注册 官网&#xff1a;https://www.domoai.app/zh-Hant/library 功能 支持不同风格的视频类型&#xff0c;支持图片转视频&#xff0c;支持文字转图片&#xff0c;支持静态图片变为动态。 可以切换语言为中文 风格转换 选择不同风格的 支持生成20s&#xff0c;目前接触…

数据预处理 #数据挖掘 #python

数据分析中的预处理步骤是数据分析流程中的重要环节&#xff0c;它的目的是清洗、转换和整理原始数据&#xff0c;以便后续的分析能够准确、有效。预处理通常包括以下几个关键步骤&#xff1a; 数据收集&#xff1a;确定数据来源&#xff0c;可能是数据库、文件、API或网络抓取…

Zabbix Centos8 安装笔记

Zabbix 安装笔记 安装环境 Centos 8 正常发行版 安装版本 Zabbix 7 (LTS) 安装步骤 1、关闭防火墙 systemctl stop firewalld && systemctl disable firewalld && setenforce 0 && sed -i s/SELINUXenforcing/SELINUXdisabled/g /etc/selinux/c…

【C#】开发过程中记录问题

1.DateTimePicker控件获取时间 拖动控件&#xff0c;设置属性format为custom格式。例如我想获得20240101这种类型的string类型的数据&#xff1a; string DateTime DateTimePicker.Value.ToString("yyyyMMdd");2.ComboBox下拉列表控件 默认为DropDown&#xff0c;…

【Apache Doris】周FAQ集锦:第 6 期

【Apache Doris】周FAQ集锦&#xff1a;第 6 期 SQL问题数据操作问题运维常见问题其它问题关于社区 欢迎查阅本周的 Apache Doris 社区 FAQ 栏目&#xff01; 在这个栏目中&#xff0c;每周将筛选社区反馈的热门问题和话题&#xff0c;重点回答并进行深入探讨。旨在为广大用户和…

聚焦新版综合编程能力面试考查汇总

目录 一、业务性编程和广度能力考查 &#xff08;一&#xff09;基本定义 &#xff08;二&#xff09;必要性分析 二、高频考查样题&#xff08;编程扩展问法&#xff09; 考题1: 用java 代码实现一个死锁用例&#xff0c;说说怎么解决死锁问题&#xff1f;&#xff08;高…

大模型应用:LangChain-Golang核心模块使用

1.简介 LangChain是一个开源的框架&#xff0c;它提供了构建基于大模型的AI应用所需的模块和工具。它可以帮助开发者轻松地与大型语言模型(LLM)集成&#xff0c;实现文本生成、问答、翻译、对话等任务。LangChain的出现大大降低了AI应用开发的门槛&#xff0c;使得任何人都可以…

2_2、MFC对话框应用

对话框应用 模态与非模态对话框模态对话框弹出模态对话框创建模态对话框 非模态对话框 属性页对话框向导对话框一般属性页对话框 消息对话框函数原型函数返回值调用 文件对话框字体对话框获取字体对话框中所选字体选取字体样式并显示在编辑框中 颜色对话框获取取颜色对话框中所…

word空白页删除不了怎么办?

上方菜单栏点击“视图”&#xff0c;下方点击“大纲视图”。找到文档分页符的位置。将光标放在要删除的分节符前&#xff0c;按下键盘上的“Delet”键删除分页符。