LoongArch简介
从CISC与RISC谈起
•
中央处理器(
CPU
)分为
CISC
(
Complex Instruction Set Computer
,复杂指令集计算机)和
RISC
(
Reduced Instruction Set Computer
,精简指令集计算机)两大类
• CISC
的特征是指令集复杂而庞大、指令字不等长、寻址方式复杂、计算指令操作数可以是内存
等,典型代表有
X86
• RISC
的特征是指令集精简而高效、指令字等长、寻址方式简明、计算指令操作数必须是寄存器
等,典型代表有
ARM
、
MIPS
和
Power
• CISC
和
RISC
各有优劣,在发展过程中也并非井水不犯河水,而是互相吸收对方的优点。
X86
在
内部早已实现
RISC
化(所谓微指令),而
RISC
也引入了
SIMD
等功能比较强大而复杂的指令
(所谓向量化)
龙芯处理器(Loongson)与龙芯指令系统(LoongArch)
•
LoongISA:基于MIPS指令系统扩展(旧龙芯)
•
MIPS基础指令
•
龙芯扩展指令:LoongEXT
•
向量扩展指令:LoongSIMD
•
二进制翻译扩展指令:LoongBT
•
LoongArch:龙芯自主指令系统(新龙芯)
•
龙芯基础指令
•
128位向量扩展指令:LSX
•
256位向量扩展指令:LASX
•
虚拟化扩展指令:LVZ
•
二进制翻译扩展指令:LBT


龙芯处理器三大家族
•
龙芯
1
号
• 32
位单核
CPU
(小
CPU
)
• MIPS32
指令集或
LA32
指令集
•
主要面向工业控制、数据采集、消费电子等

•
龙芯
2
号
•
低端
64
位单核
/
双核
CPU
(中
CPU
)
• MIPS64
指令集或
LA64
指令集(龙芯
2K500/2K1000/2K2000
)
•
主要面向工业控制、移动终端、嵌入式计算机等

•
龙芯
3
号
•
高端
64
位多核
CPU
(大
CPU
)
• MIPS64
指令集(龙芯
3A1000/3B1500/3A2000/3A3000/3A4000
)或
LA64
指令集
(
龙芯
3A5000/3C5000/3D5000)
•
主要面向电脑(桌面计算机、服务器、高性能计算机)等

LoongArch的主要特征
•
典型的
RISC
:
32
位定长指令,
32
个通用寄存器,
32
个浮点
/
向量寄存器
• 4
个特权级:
PLV0~3
,其中
PLV0
最高(内核态),
PLV3
最低(用户态)
•
主要特权资源:控制状态寄存器(
CSR
)
•
地址空间:支持可配置的直接映射和页表映射
• TLB
:可变页大小的
MTLB+
固定页大小的
STLB
• Cache
:一级指令
Cache
(
ICache
)、一级数据
Cache
(
DCache
)、二级牺牲
Cache
(
VCache
)、三级混合
Cache
(
SCache
)

基本功能
•
重定位内核(
PIE
)、向量、虚拟化、二进制翻译
……
•
电源管理
•
动态调频(
CPUFreq
,
DVFS
)、温度调控
……
•
调测工具
•
Kprobe/Uprobe
、
WatchPoint
、
kgdb ……
•
更多处理器支持
•
目前仅支持大
CPU
:龙芯
3A5000/3C5000/3D5000
,使用
ACPI
•
未来要支持小
CPU
:龙芯
1X/2K500/2K1000/2K2000
,使用
FDT
LoongArch开源生态
UEFI
规范:
2.10
版本开始支持
LoongArch
•
ACPI
规范:
6.5
版本开始支持
LoongArch
•
Automake
:
1.18
版本开始支持
LoongArch
•
Cmake
:
3.20
开始支持
LoongArch
•
Meson
:
0.57
开始支持
LoongArch
•
Binutils
:
2.38
版本开始支持
LoongArch
•
GCC
:
12
版本开始支持
LoongArch
•
Linux
:
5.19
版本开始支持
LoongArch
•
Glibc
:
2.36
版本开始支持
LoongArch
•
Systemd
:
250
版本开始支持
LoongArch
•
FFmpeg
:
5.0
版本开始支持
LoongArch
•
QEMU
:
7.1
版本开始支持
LoongArch
•
GoLang
:
1.19
开始支持
LoongArch
•
LLVM
:
15
版本开始支持
LoongArch
•
.NET
:
7.0
版本将支持
LoongArch
•
OpenJDK/Rust/Musl……
:正在努力进行上游工作