首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏龙进的专栏

    riscv64编译uboot和grub

    安装工具链 首先需要安装交叉编译工具链,可以用apt安装riscv64的gcc编译工具链。 _smode_defconfig CC="riscv64-linux-musl-gcc" make -j $(nproc) CC="riscv64-linux-musl-gcc" OBJCOPY=riscv64 -linux-musl-objcopy STRIP=riscv64-linux-musl-strip RANLIB=riscv64-linux-musl-ranlib NM=riscv64-linux-musl-nm =efi BUILD_CC=gcc HOST_CC=x86_64-linux-gnu-gcc TARGET_CC=riscv64-linux-musl-gcc TARGET_OBJCOPY=riscv64 =riscv64-linux-musl-nm TARGET_LD=riscv64-linux-musl-ld make -j $(nproc) && sudo make install

    93420编辑于 2023-11-20
  • 来自专栏FPGA技术江湖

    基于FPGA的轻量级RISCV SoC

    1.4关键性能指标 本作品实现了一个RISCV处理器内核,该处理器是使用状态机实现的,完全兼容RISCV32I指令集和A拓展指令,并且具有MMU和RISCV定义的大部分CSR。 同时我们添加了多项功能,不仅可以编辑RISCV汇编,还可以生成多种文件类型以供仿真和烧录。 图3 SoC原理框图 在这个FPGA里面我们独立研发了一个RISCV处理器核心并基于这个核心自主搭建了一个SoC。 图5 CPU内核 整个SoC的PRV332处理器核心如图5所示,PRV332SV0处理器内核是一款支持RISCV-32 I和A拓展指令集,完全实现RISCV定 义的所有功能的处理器,不仅具备机器模式(M (3)本系统的SoC不仅可以在仿真软件上运行,我们还制作了相应的系统主板,突破了目前国内同类教学用RISCV系统只有仿真文件的问题。

    4K42发布于 2020-12-29
  • 来自专栏嵌入式iot

    浅析riscv中的plic与eclic

    浅析riscv中的plic与eclic 1.PLIC中断处理 2.sifive中断的编程模型 3.关于eclic 4.关于jalmnxti 1.PLIC中断处理 在RISC V体系架构中,对中断有着一些定义 在riscv中一共定义了三种状态中断,对于hart层面,hart包含local中断源和global中断源。

    5.4K40发布于 2021-04-16
  • 来自专栏全栈程序员必看

    arm架构和riscv架构_开源芯片架构

    第一个区别就是所谓的“复杂指令集”与“精简指令集”系统,也就是经常看到的“CISC”与“RISC”。 Intel和ARM处理器,前者使用复杂指令集(CISC),而后者使用精简指令集(RISC)。属于这两种类中的各种架构之间最大的区别,在于它们的设计者考虑问题方式的不同。

    2.1K20编辑于 2022-10-04
  • 来自专栏嵌入式iot

    ​nuttx在riscv的qemu上运行体验

    nuttx在riscv的qemu上运行体验 1.前言 2.环境准备 2.1 安装riscv32交叉编译工具链 2.2 安装qemu 2.3 获取Nuttx源代码 2.4 安装kconfig-frontends 2.1 安装riscv32交叉编译工具链 Install RISC-V toolchains $ git clone --recursive https://github.com/riscv/riscv-gnu-toolchain 国内下载地址,每天更新一次 #git clone --recursive git@gitee.com:mirrors/riscv-gnu-toolchain.git $ cd riscv-gnu-toolchain /configure --prefix=/opt/riscv --enable-multilib $ sudo make $ export PATH=$PATH:/opt/riscv/bin 编译和下载过程很慢 /configure --target-list=riscv32-softmmu $ make $ sudo make install 可以输入qemu-system-riscv32 --version

    3.7K30发布于 2021-01-08
  • 来自专栏嵌入式iot

    教你在RISCV中使用DSP指令!

    教你在RISCV中使用DSP指令! 上述是ARM对DSP支持的使用,RISCV也支持DSP扩展,在RISCV的架构手册上,就对DSP扩展有着一些描述。 https://github.com/riscv/riscv-p-spec 目前的支持riscv dsp的riscv core已经有了,但是实际的硬件芯片,市面上还没有见到。 下面来描述一下具体如何在RISCV上进行DSP的编程。 2.RISCV P扩展编程实践(内联汇编) riscv-p-spec规定了P扩展的一些常用的函数功能。 RISCV生态上也有一个NMSIS。

    2.5K11发布于 2021-09-15
  • 来自专栏嵌入式iot

    riscv gcc中添加自定义的csr支持

    riscv gcc中添加自定义的csr支持 1.概述 2.不改变编译工具链实现CSR添加 3.在编译器中集成CSR名称 4.编译开发riscv gcc相关 5.小结 1.概述 由于RISCV的模块化的指令集的定义 为了让其更加的直观,可以修改RISCV工具链。 这里使用的是riscv-gnu-toolchain,目前做编译器开发需要对该仓库的使用非常熟悉。 https://github.com/riscv/riscv-gnu-toolchain.git 将代码进行clone后,更新子模块。 git submodule init git submodule update 其中需要修改的是riscv-gnu-toolchain/riscv-binutils/include/opcode/riscv-opc.h 4.编译开发riscv gcc相关 如果要研究riscv gcc的开发工作,搭建环境,加快编译效率很关键。

    2.4K20发布于 2021-08-20
  • 来自专栏嵌入式iot

    riscv gcc工具链是如何被编译的

    工具链的构建顺序 riscv gcc编译器的目录结构 riscv gcc编译器的构建 编译最小支持RVB和RVV的riscv gcc 概述 gcc工具链是一个复杂而又巧妙的工程,随着riscv上层软件的逐渐完善 riscv gcc编译器的目录结构 在了解如何编译之前,首先看一下riscv gcc仓库有哪些东西。 riscv-gcc gcc主要的程序 riscv-gdb 通过外设接口,可以通过gdb调试 riscv-glibc 支持编译的程序在Linux运行的glibc库 riscv-newlib 支持编译的程序在 rtos或者baremetal上运行的的C库 riscv gcc编译器的构建 当前公认的riscv gcc主线在 https://github.com/riscv-collab/riscv-gnu-toolchain 但是现在做riscv扩展指令集分析,这里选择 https://github.com/riscv-collab/riscv-gnu-toolchain/tree/basic-rvv 该分支实现了也就是riscv

    2.6K40编辑于 2022-01-10
  • 来自专栏嵌入式iot

    riscv gcc中添加custom自定义指令

    riscv gcc中添加custom自定义指令 1.概述 2.riscv指令集基础 3.利用.insn模板进行编程 4.修改`binutils`让riscv gcc认识到这条指令 4.1 利用riscv-opcodes 本文主要介绍这两种办法进行riscv custom指令的添加。 2.riscv指令集基础 要想设计一条自定义的riscv指令,必须了解riscv指令的构成。 从riscv指令集手册上来说,riscv的指令集被分成了R-type,I-type,S-type,B-type,U-type,J-type。 https://github.com/riscv/riscv-opcodes 可生成对应的指令模板。 /riscv-binutils中,修改 include/opcode/riscv-opc.h 上述riscv-opcodes生成的三条宏定义放到该文件中。

    5.7K42发布于 2021-10-09
  • 来自专栏龙进的专栏

    riscv:ra寄存器的设置与保存

    printf("b\n"); } void a() { printf("a\n"); b(); } int main() { a(); return 0; } 接着使用以下命令编译: riscv64 -linux-musl-gcc -static -o a a.c 接着反汇编: riscv64-linux-musl-objdump -D a > a.txt 于是得到了以下片段: 0000000000010216 因此,riscv是“调用者设置ra,被调用者保存ra到栈上”。 转载请注明来源:https://longjin666.cn/?p=1852(在新窗口中打开)

    80310编辑于 2024-04-01
  • 来自专栏嵌入式iot

    riscv64 裸机编程实践与分析

    riscv64 裸机编程实践与分析 1.概述 2.最小工程的构成 3. 本文就针对riscv64的最开始的启动部分代码进行分析,从最小的一个裸机代码开始分析,彻底的弄清楚riscv启动的流程。 其中就上面的脚本而言: OUTPUT_ARCH("riscv"):表示输入文件的架构是riscv。 OUTPUT_FORMAT("elf64-littleriscv"):表示elf64小端。 一个RiscV兼容的核心能够通过多线程技术(或者说超线程技术)支持多个RiscV兼容硬件线程(harts),harts这儿就是指硬件线程, hardware thread的意思。 ? 6.总结 riscv64最小裸机程序的运行很好理解,主要梳理清楚其启动地址与链接文件即可。还有就是注意gcc的编译参数,这些对于riscv的启动来说也是非常关键的部分。

    3.8K21发布于 2021-01-08
  • 来自专栏龙进的专栏

    关于dragonos在riscv上的启动流程的概述

    关于dragonos在riscv上的启动流程的概述 dragonos在linux上的启动流程包括以下部分: DragonStub DragonStub是依托于uboot提供的efi环境来运行的,它基于linux 16, 视频作者 灯珑LoGin, 作者简介… 内核head.S 对应的代码在 https://code.dragonos.org.cn/xref/DragonOS/kernel/src/arch/riscv64

    39010编辑于 2024-05-02
  • 来自专栏ExASIC

    riscv core代码变成网表最少需要几步

    逻辑综合其实可以很简单,下面以github上一个riscv core cv32e40p的代码(https://github.com/openhwgroup/cv32e40p)为例介绍一下怎么从零开始做综合

    1.2K20编辑于 2022-06-21
  • 来自专栏嵌入式iot

    riscv实现自定义指令并用qemu运行

    riscv实现自定义指令并用qemu运行 1.说明 2.riscv扩展指令的添加 3.裸机代码编译 4.qemu编译和指令的扩展 4.1 添加扩展指令的decodetree 4.2 添加扩展函数 4.3 解析函数实现 5.功能测试与验证 1.说明 riscv支持指令集自定义扩展,这大大增加了riscv的可玩性,同时对于一些实际应用中,自己通过一条指令来实现特定的功能,效率非常高,当然,前提是硬件平台需要对该指令的支持 riscv指令的类型: 对于riscv,其指令按照特定的类型分为一下几种。 ? 目前的实现只基于R-type。 https://github.com/riscv/riscv-opcodes 也可以在riscv官网上 https://github.com/riscv/riscv-isa-manual/releases riscv定义的指令码。

    4.5K41发布于 2021-04-30
  • 来自专栏OpenFPGA

    RISC-V又一开源SoC-zqh_riscv

    RISC-V又一开源SoC-zqh_riscv 项目地址: ❝https://github.com/zhouqinghua/zqh_riscv 介绍 zqh_riscv是一套开源SoC开发平台,核心部分包含处理器 公众号:OpenFPGA zqh_riscv平台还提供了一套仿真脚本,可以运行仿真测试用例。综合脚本实现ASIC电路综合。 可以在FPGA上跑原型仿真,zqh_riscv内会自动替换部分FPGA相关的cell。 zqh_riscv平台的实现语言以python为主,硬件描述代码使用的是PHGL,PHGL可以构建高度参数化的模块电路。 硬件系统架构 zqh_riscv的完整硬件系统如上图所述,zqh_riscv处理器外挂tilelink master与slave接口,memory bus与IO bus分别由独立的tileink master

    1.7K71编辑于 2022-03-11
  • 来自专栏嵌入式iot

    GD32VF103 RISCV开发板试用体验

    GD32VF103 RISCV开发板试用体验 1.本文目的 2.工具下载 3.硬件连接 4.工程测试 1.本文目的 riscv的mcu的开发目前到底如何?目前可以做那些有意思的项目? 本人从嵌入式软件开发的角度去探索GD32VF103的开发模式,以及做一些实际的物联网项目的demo,所以这段时间都会用业余时间去探索riscv的mcu在物联网应用领域上面的落地情况。 同时评测一下现有的riscv开发体验模式,下面会通过搭建一个开源的工程项目来展示探索过程。

    94120发布于 2021-03-29
  • 来自专栏Rust语言学习交流

    【Rust 日报】2022-09-30 Cranelift 已经 merge 了 RISCV 后端

    announcing-the-rust-style-team.html RFC: https://rust-lang.github.io/rfcs/3309-style-team.html Cranelift 已经 merge 了 RISCV

    37320编辑于 2022-11-28
  • 来自专栏嵌入式iot

    riscv32 qemu rt-thread的最小移植实现(1)

    riscv32 qemu rt-thread的最小移植实现(1) 1.说明 2.工具准备 2.1 安装riscv32交叉编译工具链 2.2 安装qemu 2.3 获取rt-thread的代码 3.移植整体思路规划 4.riscv32工程模板的构建 5.代码正常的跳转 6.栈帧布局设计 7.本文小结 1.说明 本文主要梳理riscv32在qemu的移植过程,将通过几天时间将其整理和最小系统的bring up。 2.1 安装riscv32交叉编译工具链 Install RISC-V toolchains $ git clone --recursive https://github.com/riscv/riscv-gnu-toolchain 3.移植整体思路规划 第一阶段的任务是将riscv32最小系统在qemu-system-riscv32上bring up起来,第二阶段会考虑将其适配到具体的硬件平台上。 也会在近期选择riscv32的硬件平台进行选型以及移植测试。

    1.9K30发布于 2021-02-08
  • 来自专栏homura的博客

    基于xv6 riscv实现学习os 其零:helloworld

    pixiv:30933181 前言 这个系列的目的还是以讲解xv6-riscv的代码以及记录我在做的事情为主,也会掺杂许多mini-riscv-os的代码介绍(关于xv6-riscv和mini-riscv-os 注意事项 mini-riscv-os是针对riscv32,而xv6针对的是riscv64,导致一些汇编上、编译选项以及一些其他的内容会有所不同 代码引用会直接使用项目名/路径的格式 此后不再赘述 环境配置 hart是riscv中硬件线程的最小单位,在riscv的spec中是这样描述的 A RISC-V compatible core might support multiple RISC-V-compatible 指定OUTPUT_ARCH( “riscv” ) 指定汇编入口地址,比如ENTRY( _entry ) xv6-riscv/kernel/entry.S OUTPUT_ARCH( "riscv" ) ENTRY o os.elf $^ qemu: $(TARGET) @qemu-system-riscv32 -M ?

    1.4K20编辑于 2023-04-07
  • 来自专栏嵌入式iot

    D1 riscv芯片上运行rt-thread进行RVV性能评估

    D1 riscv芯片上运行rt-thread进行RVV性能评估 概述 rt-thread在D1芯片上的移植 如何开启D1&&D1s的rvv扩展 RVV性能对比评估 RVV在RTOS如何使用的更好 概述 nezha-rtthread 移植的难点在于: 1.启动,从芯片上电启动入口处跳转到rt-thread入口处的汇编代码 2.硬件串口的初始化,这里会涉及到时钟配置 3.tick时钟中断,目前采用的是riscv RVV性能对比评估 riscv 的RVV其编程模型主要有两种方式,第一种采用rvv-intrinsic。这就是在编译器中进行intrinsic函数的构建,可以将相关的rvv操作变成编辑器的内置函数。 其操作详情可以参考: https://github.com/riscv-non-isa/rvv-intrinsic-doc/ 本质上就是将复杂的汇编代码操作换成C语言函数的形式,这种方式可读性更强。 分别代表rt-thread内置的内存拷贝函数,采用C语言进行实现,memcpy是newlib库函数的实现,里面会对riscv架构进行优化处理,csi_c906_memcpy则是采用向量操作,进行内存拷贝

    1.9K31编辑于 2022-03-04
领券