SDK 芯片架构配置
概述
本文档详细介绍 V861 芯片支持的三种 RISC-V 架构模式,以及如何通过 quick_config 工具进行架构切换配置。
V861 基于 RISC-V 指令集架构,支持以下三种架构模式:
| 架构 | 内核指令集 | 内核内存模型 | 用户空间位数 | 指针大小 | Rootfs | 工具链 Quick Config |
|---|---|---|---|---|---|---|
| rv32 | 32位 | 32 位 SV32 | 32位 | 4字节 | 32位 | musl_toolchain / glibc_toolchain |
| rv64 | 64位 | 64 位 SV39 | 64位 | 8字节 | 64位 | musl_lp64d_toolchain / glibc_lp64d_toolchain |
| rv64ilp32 | 64位 | 32 位 SV32XT | 32位 | 4字节 | 32位 | musl_toolchain / glibc_toolchain |
RISC-V 架构基础
RISC-V 指令集简介
RISC-V 是一个开放标准的指令集架构(ISA),具有以下特点:
- 开源免费:任何人都可以设计、制造和销售 RISC-V 芯片
- 模块化设计:基础指令集 + 可选扩展
- 可扩展性强:支持自定义扩展
基础整数指令集:
| 指令集 | 描述 | 寄存器宽度 |
|---|---|---|
| RV32I | 32位基础整数指令集 | 32位 |
| RV64I | 64位基础整数指令集 | 64位 |
常用扩展:
| 扩展 | 名称 | 描述 |
|---|---|---|
| M | 乘除法扩展 | 提供整数乘法和除法指令 |
| A | 原子操作扩展 | 提供原子内存操作指令 |
| F | 单精度浮点扩展 | 提供单精度浮点运算指令 |
| D | 双精度浮点扩展 | 提供双精度浮点运算指令 |
| C | 压缩指令扩展 | 提供 16位压缩指令,减少代码体积 |
| V | 向量扩展 | 提供向量运算指令 |
V861 支持 RV32IMAFDCV 或 RV64IMAFDCV 指令集。支持 SV32,SV39,SV32XT 三种 mmu 模式。
ABI 概念
ABI(Application Binary Interface,应用程序二进制接口)定义了程序与系统之间的低级接口规范,包括:
- 数据类型大小:int、long、pointer 等类型的位宽
- 对齐要求:数据在内存中的对齐方式
- 调用约定:函数参数如何传递、返回值如何处理
- 寄存器使用:哪些寄存器用于特定目的
不同的 ABI 会影响程序的内存占用和性能表现。
数据模型
RISC-V 支持多种数据模型(ABI),主要区别在于 long 和 pointer 类型的大小:
| 数据类型 | ILP32 | LP64 | LP64D |
|---|---|---|---|
| int | 32位 | 32位 | 32位 |
| long | 32位 | 64位 | 64位 |
| pointer | 32位 | 64位 | 64位 |
| long long | 64位 | 64位 | 64位 |
| float | 32位 | 32位 | 32位 |
| double | 64位 | 64位 | 64位 |
ABI 命名规则:
- ILP32:Int、Long、Pointer 都是 32位
- LP64:Long、Pointer 是 64位,Int 是 32位
- LP64D:在 LP64 基础上,double 参数通过浮点寄存器传递(性能更优)