Skip to content

[Feature] [risc-v] RISC-V 的toolchain 讨论 #10161

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
supperthomas opened this issue Apr 1, 2025 · 29 comments
Open

[Feature] [risc-v] RISC-V 的toolchain 讨论 #10161

supperthomas opened this issue Apr 1, 2025 · 29 comments

Comments

@supperthomas
Copy link
Member

Describe problem solved by the proposed feature

目前RISC-V的toolchain版本比较多,这里加一些讨论,讨论哪些toolchain版本是比较通用和官方的,方便后续RISC-V平台整理和使用比较统一的版本。
大家可以提供一些自己常用的RISCV的toolchain的下载路径和RISCV平台的详细信息。

Describe your preferred solution

No response

Describe possible alternatives

No response

@supperthomas
Copy link
Member Author

@supperthomas
Copy link
Member Author

@supperthomas
Copy link
Member Author

supperthomas commented Apr 1, 2025

下面是当前的bsp中的RISCV的版本

riscv-none-embed-gcc:
  bsp:
  - gd32/risc-v/gd32vf103r-start
  - gd32/risc-v/gd32vf103v-eval
  - hifive1
  - juicevm
  - k210
  - rv32m1_vega/ri5cy
  - wch/risc-v/ch32v103r-evt
  - wch/risc-v/ch32v208w-r0
  - wch/risc-v/ch32v307v-r1
  - wch/risc-v/ch569w-evt
  - wch/risc-v/yd-ch32v307vct6
  count: 11
  download_url: https://github.com/RT-Thread/toolchains-ci/releases/download/v1.5/xpack-riscv-none-embed-gcc-8.3.0-2.3-linux-x64.tar.gz
riscv-nuclei-elf-gcc:
  bsp:
  - nuclei/gd32vf103_rvstar
  - nuclei/nuclei_fpga_eval
  count: 2
riscv32-esp-elf-gcc:
  bsp:
  - ESP32_C3
  count: 1
  download_url: https://github.com/espressif/crosstool-NG/releases/download/esp-2022r1-RC1/riscv32-esp-elf-gcc11_2_0-esp-2022r1-RC1-linux-amd64.tar.xz
riscv32-unknown-elf-gcc:
  bsp:
  - core-v-mcu/core-v-cv32e40p
  - hpmicro/hpm5300evk
  - hpmicro/hpm5301evklite
  - hpmicro/hpm6200evk
  - hpmicro/hpm6300evk
  - hpmicro/hpm6750evk
  - hpmicro/hpm6750evk2
  - hpmicro/hpm6750evkmini
  - hpmicro/hpm6800evk
  count: 9
  download_url: https://github.com/hpmicro/riscv-gnu-toolchain/releases/download/2022.05.15/riscv32-unknown-elf-newlib-multilib_2022.05.15_linux.tar.gz
riscv64-unknown-elf-gcc:
  bsp:
  - bluetrum/ab32vg1-ab-prougen
  - bouffalo_lab/bl60x
  - bouffalo_lab/bl61x
  - bouffalo_lab/bl70x
  - bouffalo_lab/bl808/lp
  - bouffalo_lab/bl808/m0
  - cvitek/c906_little
  - cvitek/cv18xx_risc-v
  - qemu-virt64-riscv
  - sparkfun-redv
  - thead-smart
  count: 11
  download_url: https://github.com/RT-Thread/toolchains-ci/releases/download/v1.4/riscv64-unknown-elf-toolchain-10.2.0-2020.12.8-x86_64-linux-ubuntu14.tar.gz
riscv64-unknown-linux-musl-gcc:
  bsp:
  - allwinner/d1
  - allwinner/d1s
  - bouffalo_lab/bl808/d0
  count: 3

@supperthomas
Copy link
Member Author

字段含义:
32bit:表示处理器支持 32 位指令集。
a:表示支持 RISC-V 的 A 扩展(原子操作指令集),用于实现原子操作。
c:表示支持 RISC-V 的 C 扩展(压缩指令集),用于减少指令长度。
i:表示支持 RISC-V 的基础指令集 I(Integer Instruction Set),是 RISC-V 的核心指令集。
m:表示支持 RISC-V 的 M 扩展(整数乘除指令集),用于执行整数乘法和除法。
zaamo:表示支持 RISC-V 的 Zaamo 扩展,这是从标准 A 扩展拆分出来的部分,专注于原子操作。
zalrsc:表示支持 RISC-V 的 Zalrsc 扩展,这是从标准 A 扩展拆分出来的部分,专注于 LR/SC(Load-Reserved/Store-Conditional)指令。
zicsr:表示支持 RISC-V 的 Zicsr 扩展,用于访问控制和状态寄存器(CSR)。
zifencei:表示支持 RISC-V 的 Zifencei 扩展,用于指令缓存一致性操作。
zmmul:表示支持 RISC-V 的 Zmmul 扩展,用于实现乘法指令。

@supperthomas
Copy link
Member Author

Image

@supperthomas
Copy link
Member Author

supperthomas commented Apr 1, 2025

统一来看
32bit和64bit的嵌入式非linux平台没有特殊情况,都可以用:
https://github.com/xpack-dev-tools/riscv-none-elf-gcc-xpack/releases

支持的arch架构:
xpack-riscv-none-elf-gcc-14.2.0-3

rv32e/ilp32e;@march=rv32e@mabi=ilp32e
rv32ec/ilp32e;@march=rv32ec@mabi=ilp32e
rv32ea/ilp32e;@march=rv32ea@mabi=ilp32e
rv32em/ilp32e;@march=rv32em@mabi=ilp32e
rv32eac/ilp32e;@march=rv32eac@mabi=ilp32e
rv32emac/ilp32e;@march=rv32emac@mabi=ilp32e
rv32i/ilp32;@march=rv32i@mabi=ilp32
rv32ia/ilp32;@march=rv32ia@mabi=ilp32
rv32im/ilp32;@march=rv32im@mabi=ilp32
rv32imc/ilp32;@march=rv32imc@mabi=ilp32
rv32if_zicsr/ilp32f;@march=rv32if_zicsr@mabi=ilp32f
rv32ifd_zicsr/ilp32d;@march=rv32ifd_zicsr@mabi=ilp32d
rv32iaf_zicsr/ilp32f;@march=rv32iaf_zicsr@mabi=ilp32f
rv32iafd_zicsr/ilp32d;@march=rv32iafd_zicsr@mabi=ilp32d
rv32imf_zicsr/ilp32f;@march=rv32imf_zicsr@mabi=ilp32f
rv32imfd_zicsr/ilp32d;@march=rv32imfd_zicsr@mabi=ilp32d
rv32iac/ilp32;@march=rv32iac@mabi=ilp32
rv32imafc_zicsr/ilp32f;@march=rv32imafc_zicsr@mabi=ilp32f
rv32imafdc_zicsr/ilp32d;@march=rv32imafdc_zicsr@mabi=ilp32d
rv64i/lp64;@march=rv64i@mabi=lp64
rv64ia/lp64;@march=rv64ia@mabi=lp64
rv64im/lp64;@march=rv64im@mabi=lp64
rv64if_zicsr/lp64f;@march=rv64if_zicsr@mabi=lp64f
rv64ifd_zicsr/lp64d;@march=rv64ifd_zicsr@mabi=lp64d
rv64iaf_zicsr/lp64f;@march=rv64iaf_zicsr@mabi=lp64f
rv64iafd_zicsr/lp64d;@march=rv64iafd_zicsr@mabi=lp64d
rv64imf_zicsr/lp64f;@march=rv64imf_zicsr@mabi=lp64f
rv64iac/lp64;@march=rv64iac@mabi=lp64
rv64imac/lp64;@march=rv64imac@mabi=lp64
rv64imafc_zicsr/lp64f;@march=rv64imafc_zicsr@mabi=lp64f
rv64imafdc_zicsr/lp64d;@march=rv64imafdc_zicsr@mabi=lp64d

@supperthomas
Copy link
Member Author

supperthomas commented Apr 1, 2025

https://github.com/xpack-dev-tools/riscv-none-embed-gcc-xpack/releases
这个也比较好用,最后版本是10.2.0-1.2 不更新维护了。

rv32e/ilp32e;@march=rv32e@mabi=ilp32e
rv32ea/ilp32e;@march=rv32ea@mabi=ilp32e
rv32em/ilp32e;@march=rv32em@mabi=ilp32e
rv32ema/ilp32e;@march=rv32ema@mabi=ilp32e
rv32i/ilp32;@march=rv32i@mabi=ilp32
rv32ia/ilp32;@march=rv32ia@mabi=ilp32
rv32im/ilp32;@march=rv32im@mabi=ilp32
rv32ima/ilp32;@march=rv32ima@mabi=ilp32
rv32if/ilp32f;@march=rv32if@mabi=ilp32f
rv32ifd/ilp32d;@march=rv32ifd@mabi=ilp32d
rv32iaf/ilp32f;@march=rv32iaf@mabi=ilp32f
rv32iafd/ilp32d;@march=rv32iafd@mabi=ilp32d
rv32imf/ilp32f;@march=rv32imf@mabi=ilp32f
rv32imfd/ilp32d;@march=rv32imfd@mabi=ilp32d
rv32imaf/ilp32f;@march=rv32imaf@mabi=ilp32f
rv32imafd/ilp32d;@march=rv32imafd@mabi=ilp32d
rv64i/lp64;@march=rv64i@mabi=lp64
rv64i/lp64/compact;@march=rv64i@mabi=lp64@mcmodel=compact
rv64ia/lp64;@march=rv64ia@mabi=lp64
rv64ia/lp64/compact;@march=rv64ia@mabi=lp64@mcmodel=compact
rv64im/lp64;@march=rv64im@mabi=lp64
rv64im/lp64/compact;@march=rv64im@mabi=lp64@mcmodel=compact
rv64ima/lp64;@march=rv64ima@mabi=lp64
rv64ima/lp64/compact;@march=rv64ima@mabi=lp64@mcmodel=compact
rv64if/lp64f;@march=rv64if@mabi=lp64f
rv64if/lp64f/compact;@march=rv64if@mabi=lp64f@mcmodel=compact
rv64ifd/lp64d;@march=rv64ifd@mabi=lp64d
rv64ifd/lp64d/compact;@march=rv64ifd@mabi=lp64d@mcmodel=compact
rv64iaf/lp64f;@march=rv64iaf@mabi=lp64f
rv64iaf/lp64f/compact;@march=rv64iaf@mabi=lp64f@mcmodel=compact
rv64iafd/lp64d;@march=rv64iafd@mabi=lp64d
rv64iafd/lp64d/compact;@march=rv64iafd@mabi=lp64d@mcmodel=compact
rv64imf/lp64f;@march=rv64imf@mabi=lp64f
rv64imf/lp64f/compact;@march=rv64imf@mabi=lp64f@mcmodel=compact
rv64imfd/lp64d;@march=rv64imfd@mabi=lp64d
rv64imfd/lp64d/compact;@march=rv64imfd@mabi=lp64d@mcmodel=compact
rv64imaf/lp64f;@march=rv64imaf@mabi=lp64f
rv64imaf/lp64f/compact;@march=rv64imaf@mabi=lp64f@mcmodel=compact
rv64imafd/lp64d;@march=rv64imafd@mabi=lp64d
rv64imafd/lp64d/compact;@march=rv64imafd@mabi=lp64d@mcmodel=compact
rv32ec/ilp32e;@march=rv32ec@mabi=ilp32e
rv32ec_zba_zbb/ilp32e;@march=rv32ec_zba_zbb@mabi=ilp32e
rv32eac/ilp32e;@march=rv32eac@mabi=ilp32e
rv32eac_zba_zbb/ilp32e;@march=rv32eac_zba_zbb@mabi=ilp32e
rv32emc/ilp32e;@march=rv32emc@mabi=ilp32e
rv32emc_zba_zbb/ilp32e;@march=rv32emc_zba_zbb@mabi=ilp32e
rv32emac/ilp32e;@march=rv32emac@mabi=ilp32e
rv32emac_zba_zbb/ilp32e;@march=rv32emac_zba_zbb@mabi=ilp32e
rv32ic/ilp32;@march=rv32ic@mabi=ilp32
rv32ic_zba_zbb/ilp32;@march=rv32ic_zba_zbb@mabi=ilp32
rv32iac/ilp32;@march=rv32iac@mabi=ilp32
rv32iac_zba_zbb/ilp32;@march=rv32iac_zba_zbb@mabi=ilp32
rv32imc/ilp32;@march=rv32imc@mabi=ilp32
rv32imc_zba_zbb/ilp32;@march=rv32imc_zba_zbb@mabi=ilp32
rv32imac/ilp32;@march=rv32imac@mabi=ilp32
rv32imac_zba_zbb/ilp32;@march=rv32imac_zba_zbb@mabi=ilp32
rv32imfc/ilp32f;@march=rv32imfc@mabi=ilp32f
rv32imfc_zba_zbb/ilp32f;@march=rv32imfc_zba_zbb@mabi=ilp32f
rv32imafc/ilp32f;@march=rv32imafc@mabi=ilp32f
rv32imafc_zba_zbb/ilp32f;@march=rv32imafc_zba_zbb@mabi=ilp32f
rv32imfdc/ilp32d;@march=rv32imfdc@mabi=ilp32d
rv32imfdc_zba_zbb/ilp32d;@march=rv32imfdc_zba_zbb@mabi=ilp32d
rv32imafdc/ilp32d;@march=rv32imafdc@mabi=ilp32d
rv32imafdc_zba_zbb/ilp32d;@march=rv32imafdc_zba_zbb@mabi=ilp32d
rv64ic/lp64;@march=rv64ic@mabi=lp64
rv64ic/lp64/compact;@march=rv64ic@mabi=lp64@mcmodel=compact
rv64ic_zba_zbb/lp64;@march=rv64ic_zba_zbb@mabi=lp64
rv64ic_zba_zbb/lp64/compact;@march=rv64ic_zba_zbb@mabi=lp64@mcmodel=compact
rv64iac/lp64;@march=rv64iac@mabi=lp64
rv64iac/lp64/compact;@march=rv64iac@mabi=lp64@mcmodel=compact
rv64iac_zba_zbb/lp64;@march=rv64iac_zba_zbb@mabi=lp64
rv64iac_zba_zbb/lp64/compact;@march=rv64iac_zba_zbb@mabi=lp64@mcmodel=compact
rv64imc/lp64;@march=rv64imc@mabi=lp64
rv64imc/lp64/compact;@march=rv64imc@mabi=lp64@mcmodel=compact
rv64imc_zba_zbb/lp64;@march=rv64imc_zba_zbb@mabi=lp64
rv64imc_zba_zbb/lp64/compact;@march=rv64imc_zba_zbb@mabi=lp64@mcmodel=compact
rv64imac/lp64;@march=rv64imac@mabi=lp64
rv64imac/lp64/compact;@march=rv64imac@mabi=lp64@mcmodel=compact
rv64imac_zba_zbb/lp64;@march=rv64imac_zba_zbb@mabi=lp64
rv64imac_zba_zbb/lp64/compact;@march=rv64imac_zba_zbb@mabi=lp64@mcmodel=compact
rv64imfc/lp64f;@march=rv64imfc@mabi=lp64f
rv64imfc/lp64f/compact;@march=rv64imfc@mabi=lp64f@mcmodel=compact
rv64imfc_zba_zbb/lp64f;@march=rv64imfc_zba_zbb@mabi=lp64f
rv64imfc_zba_zbb/lp64f/compact;@march=rv64imfc_zba_zbb@mabi=lp64f@mcmodel=compact
rv64imafc/lp64f;@march=rv64imafc@mabi=lp64f
rv64imafc/lp64f/compact;@march=rv64imafc@mabi=lp64f@mcmodel=compact
rv64imafc_zba_zbb/lp64f;@march=rv64imafc_zba_zbb@mabi=lp64f
rv64imafc_zba_zbb/lp64f/compact;@march=rv64imafc_zba_zbb@mabi=lp64f@mcmodel=compact
rv64imfdc/lp64d;@march=rv64imfdc@mabi=lp64d
rv64imfdc/lp64d/compact;@march=rv64imfdc@mabi=lp64d@mcmodel=compact
rv64imfdc_zba_zbb/lp64d;@march=rv64imfdc_zba_zbb@mabi=lp64d
rv64imfdc_zba_zbb/lp64d/compact;@march=rv64imfdc_zba_zbb@mabi=lp64d@mcmodel=compact
rv64imafdc/lp64d;@march=rv64imafdc@mabi=lp64d
rv64imafdc/lp64d/compact;@march=rv64imafdc@mabi=lp64d@mcmodel=compact
rv64imafdc_zba_zbb/lp64d;@march=rv64imafdc_zba_zbb@mabi=lp64d
rv64imafdc_zba_zbb/lp64d/compact;@march=rv64imafdc_zba_zbb@mabi=lp64d@mcmodel=compact

@unicornx
Copy link
Contributor

unicornx commented Apr 1, 2025

这个议题是不是没有考虑 RT-smart 的情况?

@supperthomas
Copy link
Member Author

这个议题是不是没有考虑 RT-smart 的情况?

是的,这块我没有接触。有经验的也可以讨论。给出一些参考。

@unicornx
Copy link
Contributor

unicornx commented Apr 2, 2025

补充一些我这边维护比较多的 riscv 相关 bsp 使用的 toolchain 信息(包括了 RT-standard 和 RT-smart):

cvitek(milkv-duo 系列): https://github.com/RT-Thread/rt-thread/blob/master/bsp/cvitek/README.md#41-toolchain-%E4%B8%8B%E8%BD%BD

virt64-riscv: https://github.com/RT-Thread/rt-thread/blob/master/bsp/qemu-virt64-riscv/README_cn.md#21-%E5%AE%89%E8%A3%85%E5%B7%A5%E5%85%B7%E9%93%BE

另外,我一直在跟踪的 riscv 工具链不统一的问题,提的相关 issue:

感觉推动很困难,拖了很长时间了。

@supperthomas
Copy link
Member Author

补充一些我这边维护比较多的 riscv 相关 bsp 使用的 toolchain 信息(包括了 RT-standard 和 RT-smart):

cvitek(milkv-duo 系列): https://github.com/RT-Thread/rt-thread/blob/master/bsp/cvitek/README.md#41-toolchain-%E4%B8%8B%E8%BD%BD

virt64-riscv: https://github.com/RT-Thread/rt-thread/blob/master/bsp/qemu-virt64-riscv/README_cn.md#21-%E5%AE%89%E8%A3%85%E5%B7%A5%E5%85%B7%E9%93%BE

另外,我一直在跟踪的 riscv 工具链不统一的问题,提的相关 issue:

感觉推动很困难,拖了很长时间了。

嗯,标准版理论上应该可以用官方的。下面的链接对于RISCV64和RISCV32都是兼容的
https://github.com/xpack-dev-tools/riscv-none-embed-gcc-xpack/releases
或者
https://github.com/xpack-dev-tools/riscv-none-elf-gcc-xpack/releases

@supperthomas
Copy link
Member Author

supperthomas commented Apr 2, 2025

SMART 版本可以尝试下下面的链接:
https://github.com/riscv-collab/riscv-gnu-toolchain/releases/download/2025.01.20/riscv64-musl-ubuntu-22.04-gcc-nightly-2025.01.20-nightly.tar.xz
选择musl版本,这块没经验,不确定,只能建议尝试,后面会出一些文章介绍相关术语

@unicornx
Copy link
Contributor

unicornx commented Apr 2, 2025

SMART 版本可以尝试下下面的链接: https://github.com/riscv-collab/riscv-gnu-toolchain/releases/download/2025.01.20/riscv64-musl-ubuntu-22.04-gcc-nightly-2025.01.20-nightly.tar.xz 选择musl版本,这块没经验,不确定,只能建议尝试,后面会出一些文章介绍相关术语

这个估计不行,rt-smart 用的 musl gcc 听说是定制了 rtt 自己的什么东西,具体要问睿赛德了。

@unicornx
Copy link
Contributor

unicornx commented Apr 2, 2025

补充一些我这边维护比较多的 riscv 相关 bsp 使用的 toolchain 信息(包括了 RT-standard 和 RT-smart):
cvitek(milkv-duo 系列): https://github.com/RT-Thread/rt-thread/blob/master/bsp/cvitek/README.md#41-toolchain-%E4%B8%8B%E8%BD%BD
virt64-riscv: https://github.com/RT-Thread/rt-thread/blob/master/bsp/qemu-virt64-riscv/README_cn.md#21-%E5%AE%89%E8%A3%85%E5%B7%A5%E5%85%B7%E9%93%BE
另外,我一直在跟踪的 riscv 工具链不统一的问题,提的相关 issue:

感觉推动很困难,拖了很长时间了。

嗯,标准版理论上应该可以用官方的。下面的链接对于RISCV64和RISCV32都是兼容的 https://github.com/xpack-dev-tools/riscv-none-embed-gcc-xpack/releases 或者 https://github.com/xpack-dev-tools/riscv-none-elf-gcc-xpack/releases

但是要注意类似 duo 这些使用的 c906 里的 cpu core 上会用到一些 vendor 自己的扩展,譬如 v-ext v0.7, 这些 gcc 主线不一定支持的,所以说还不能完全确定。

@zhangjing0303
Copy link
Contributor

zhangjing0303 commented Apr 2, 2025

SMART 版本可以尝试下下面的链接: https://github.com/riscv-collab/riscv-gnu-toolchain/releases/download/2025.01.20/riscv64-musl-ubuntu-22.04-gcc-nightly-2025.01.20-nightly.tar.xz 选择musl版本,这块没经验,不确定,只能建议尝试,后面会出一些文章介绍相关术语

这个估计不行,rt-smart 用的 musl gcc 听说是定制了 rtt 自己的什么东西,具体要问睿赛德了。

应该是的,musl libc库是定制过的,前几天我刚问过

@supperthomas
Copy link
Member Author

supperthomas commented Apr 2, 2025

嗯,首先确定的是:
标准版和smart版不能共用一个toolchain。

@supperthomas
Copy link
Member Author

标准版就是当前仓库版本倒是可以统一用一个,当然也不是强制的,只是当大家不知道用哪款toolchain的时候,给一个统一的建议。当然也有一些特殊的指令拓展像c906,大家也可以把遇到的不能用的也列出来。

@BernardXiong
Copy link
Member

smart工具链可另看。

riscv的工具链问题确实头大,开源的ISA,然后工具链一堆的发散,收敛不了,很头疼,我在公开场合也提到过……

@supperthomas
Copy link
Member Author

xPack的Toolchain通过以下方式来保证与其他开发工具的兼容性:

  • 遵循标准规范:xPack的Toolchain遵循相关的行业标准和规范,如GCC遵循C、C++等编程语言的标准,这样能确保与按照相同标准开发的其他工具,如代码编辑器、调试器、构建系统等兼容。
  • 提供统一接口:xPack对不同平台和架构的Toolchain进行封装,提供统一的命令行接口和编程接口。其他开发工具可通过这些标准接口来调用xPack Toolchain的功能,减少因不同工具链接口差异导致的兼容性问题。
  • 积极的社区维护与反馈:xPack有活跃的社区,开发者在使用过程中遇到兼容性问题会在社区反馈。维护者会根据反馈及时修复问题、更新版本,以保证与其他常用开发工具的兼容性。同时,社区也会不断推动xPack与新出现的开发工具进行适配。
  • 广泛的测试:在发布前,xPack项目团队会对Toolchain进行广泛测试,包括在不同操作系统、不同开发环境下与各种常用开发工具进行集成测试,以发现并解决潜在的兼容性问题。

@supperthomas
Copy link
Member Author

https://releases.linaro.org/components/toolchain/binaries/

最后2019年12月,已经没有继续更新了

@helloeagleyang
Copy link
Contributor

HPMicro用的toolchain是基于标准的riscv-gnu-toolchain仓库编译出来的,只包含了RV32系列的,是xpack版本的子集,理论上可以换成xpack版本的。https://github.com/xpack-dev-tools/riscv-none-elf-gcc-xpack/releases/tag/v14.2.0-3 这个似乎是最新的GCC14.x版本的

@kaidegit
Copy link
Contributor

wch对mrs的toolchain写的编译选项,换成xpack可能会有点问题。。。快速中断和代码压缩啥的。不过目前看来似乎并不影响编译。

可以参考
https://github.com/cjacker/opensource-toolchain-ch32v

@kaidegit
Copy link
Contributor

hpm的用xpack的问题不大,hslink项目都在用

@supperthomas
Copy link
Member Author

zephyr 的toolchain,也只用了一种RISCV64的toolchain,兼容RISCV32:

https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.17.1-rc1/toolchain_linux-x86_64_riscv64-zephyr-elf.tar.xz

Target Linux macOS Windows
riscv64-zephyr-elf [AArch64][toolchain_gnu_linux-aarch64_riscv64-zephyr-elf.tar.xz] / [x86-64][toolchain_gnu_linux-x86_64_riscv64-zephyr-elf.tar.xz] [AArch64][toolchain_gnu_macos-aarch64_riscv64-zephyr-elf.tar.xz] / [x86-64][toolchain_gnu_macos-x86_64_riscv64-zephyr-elf.tar.xz] [x86-64][toolchain_gnu_windows-x86_64_riscv64-zephyr-elf.7z]
-- -- -- --

@supperthomas
Copy link
Member Author

RISC-V指令集由“基本指令集(I) + 扩展指令集(E)”组成。

基本指令(I)集是必选的,扩展指令集(E)是可选的。意思就是可以根据你的实际需求,选择需要使用的指令。例如在一个项目中,如果不需要用到压缩指令,那么就不需要把压缩指令添加进来,从而做到定制化,这也是RISC-V的一大特点。

RISC-V 指令集有 RV32I、RV32E、RV64I、RV64E、RV64I 等等。

RV 代表 RISC-V,32/64 代表 32 位或 64 位,I 和 E 都是基本指令集,在 I 和 E 的基础上,可以添加 D(双精度浮点扩展)、M(整数乘除法)、A(原子扩展)、C(压缩扩展)等扩展指令。

例如,在 RV64I 基础上,添加原子、整数乘除法、双精度浮点、压缩指令,则该指令集称为 RV64IMADC。

@supperthomas
Copy link
Member Author

基本指令集
指令集名称 描述 版本 状态
RV32I 基本整数指令集, 32位元 2.1 已批准
RV32E 基本整数指令集(嵌入式系统), 32位元, 16 个暂存器 2.0 已批准
RV64I 基本整数指令集, 64位元 2.1 已批准
RV64E 基本整数指令集(嵌入式系统), 64位元, 16 个暂存器 2.0 已批准
RV128I 基本整数指令集, 128位元 1.7 开放

标准扩充指令集
指令集名称 描述 版本 状态
M 整数乘除法标准扩充 2.0 已批准
A 不可中断指令(Atomic)标准扩充 2.1 已批准
F 单精度浮点标准扩充 2.2 已批准
D 双精度浮点标准扩充 2.2 已批准
Zicsr 控制与状态寄存器 2.0 已批准
Zifencei 指令抓取屏障 2.0 已批准
G 所有以上的扩充指令集以及基本指令集的总和的简称 不适用 不适用
Q 四精度浮点标准扩充 2.2 已批准
L 十进位浮点标准扩充 0.0 开放
C 压缩指令标准扩充 2.0 已批准
B 位元运算标准扩充 1.0 已批准
J 动态指令翻译标准扩充 0.0 开放
T 顺序记忆体存取标准扩充 0.0 开放
P 单指令多资料流(SIMD)运算标准扩充 0.9.10 开放
V 向量运算标准扩充 1.0 冻结
Zk 标量加密标准扩充 1.0.1 已批准
H Hypervisor 标准扩充 1.0 已批准
S Supervisor 标准扩充 1.12 已批准
Zam 非对齐不可中断指令标准扩展 0.1 开放
Zihintpause 暂停提示 2.0 已批准
Zihintntl 非时间局部性提示 0.2 开放
Zfa 额外浮点运算指令标准扩展 0.1 开放
Zfh 半精度浮点标准扩展 1.0 已批准
Zfhmin 半精度浮点最小集标准扩展 1.0 已批准
Zfinx 整数寄存器单精度浮点标准扩展 1.0 已批准
Zdinx 整数寄存器双精度浮点标准扩展 1.0 已批准
Zhinx 整数寄存器半精度浮点标准扩展 1.0 已批准
Zhinxmin 整数寄存器半精度浮点最小集标准扩展 1.0 已批准
Zmmul 整数纯乘法标准扩展 1.0 已批准
Ztso 全存储排序标准扩展 1.0 已批准

https://riscv-rtthread-programming-manual.readthedocs.io/zh-cn/latest/zh_CN/1.html#id2

@supperthomas
Copy link
Member Author

https://toolchains.bootlin.com/

这个平台提供toolchain都是基于linux的

@supperthomas
Copy link
Member Author

@supperthomas
Copy link
Member Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants