平头哥 CPU 编程模型、指令集|学习笔记

简介: 快速学习平头哥 CPU 编程模型、指令集

开发者学堂课程【高校精品课-南京航空航天大学-数字集成电路设计技术:平头哥 CPU 编程模型、指令集】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/14/detail/15883


平头哥 CPU 编程模型、指令集

 

内容介绍

一、 玄铁内核家族

二、 阿里玄铁内核

三、 玄铁内核家族

四、 玄铁802/803内核

五、 玄铁802/803指令集

 

一、 玄铁内核家族

1. 平头哥迄今发展了三个版本的处理器架构

(1) 玄铁510和玄铁610采用第一代处理器架构 CSKY_V1,它沿用了摩托罗拉公司 C310的指令系统和编程模型,并在此基础上扩展了“增强数字信号处理(DSP)指令子集”、“协处理器扩展指令子集”以及“浮点运算指令子集”。

(2) 玄铁802、玄铁803、玄铁807等均是基于第二代处理器架构 CSKY_V2,采用了32位/16位混合的变长指令集技术,又陆续扩展了面向不同领域的特色指令子集,包括“浮点运算指令子集”、“轻量级数字信号处理指令子集”、“矢量数字信号处理指令子集”“安全扩展指令子集”等等。。

(3) 2018年平头哥推出第三代架构的处理器,RISC-V 架构处理器。

 

二、 阿里玄铁内核

玄铁 CSKY_V2处理器架构

image.png

指令子集

功能介绍

浮点指令子集

用于浮点运算领域,包括了单精度浮点、双精度浮点以及单精度的单指令多数据(SIMD)运算。

轻量级数字信号处理指令子集

用于对成本敏感、同时具有数字信号处理增强需求的领域,32位运算宽度,支持字操作,支持半字/字节的单指令多数据(SIMD)操作

矢量数字信号处理指令子集

用于对数字信号处理增强需求较高的领域,128位运算宽度,支持字/半字/字节的单指令多数据(SIMD)操作

安全指令子集

用于支持可信执行技术的实施

 

三、玄铁内核家族

1. 玄铁 V2微控制器架构系列 CPU 的关键指标

指标

玄铁801

玄铁802

玄铁803

指令集

16位指令为主,个别32位指令

16位指令为主,部分32位指令

16位指令为主,大部分32位指令

数据宽度

32位

32位

32位

流水线

2级

2级

2级

通用寄存器

8

16

16

总线

系统总线

指令总线+数据总线

指令总线+系统总线 +系统总线

中断响应性能

(处理器时钟周期)

14个

13个

13个

矢量中断控制器

计时器

可选的DSP计算引擎

可选的浮点计算引擎

2. 玄铁 V2应用处理器架构系列 CPU 的关键指标

指标

玄铁807

玄铁810

玄铁860

指令集

16位/32位指令

16位/32位指令

16位/32位指令

数据宽度

32位

32位

32位

流水线

8级

8级

12级

通用寄存器

32

32

32

乱序机制

超标量双发射

超标量双发射

超标量三发射

内存子系统

单发射按序

单发射按序

双发射乱序

总线

单总线

单总线

单总线

多核

不支持

不支持

支持,1-4核可扩展

矢量DSP引擎

浮点计算引擎

 

四、 玄铁802/803内核

1. 803CPU 架构

image.png

黄色部分是基础配置,蓝色部分是可配置。

分支处理单元、整型单元、乘除法单元,浮点处理单元、音频加速单元和控制寄存器单元分别和指令退休单元和指令译码单元进行数据交换,其中硬件调试单元控制了指令退休单元的工作。在右边总线矩阵单元和指令总线、系统总线、数据总线进行数据交换,在左边与取指单元和内存访问单元进行数据交换,其中取指单元和内存访问单元又控制到内存保护单元和高速缓存。

2. 玄铁803 CPU 内部模块

(1) 取指单元:负责指令的访问与提取,每个时钟周期可取得32位数据,即每个周期可以提取1条32位指令或者2条16位指令。此外,此单元对分支指令进行预测并对复杂指令进行分拆。

(2) 指令译码单元:对指令进行译码,并访问通用寄存器以及完成指令的发射。

(3) 分支处理单元:对分支指令进行检查并对寄存器跳转指令进行处理。整型单元负责 ALU 指令的执行。控制寄存器单元主要对控制寄存器相关的指令(MTCR/MFCR)进行处理。分支指令、ALU 指令与控制寄存器指令的执行延时均为1个周期。

(4) 乘除法单元:负责乘、乘累加以及除法指令的运算。乘法实现上,用户可配置慢速乘法与快速乘法两种方式。其中,慢速乘法的成本开销小,但是需要1-34个周期产生乘法结果;快速乘法支持一个周期产生乘法结果,但成本开销大。除法需要3-35个周期产生运算结果。

(5) 内存访问单元:负责加载(Load)/存储指令(Store)的顺序执行支持有符号/无符号的字节/半字/字访问。加载存储指令可连续执行,实现性能的最优化。

(6) 指令退体单元:收集指令的执行结果并进行处理,完成结果的回写以及中断与异常的处理。此外,退休单元也负责与硬件调试单元的交互。

(7) 可配置的高速缓存单元(Cache):支持2KB-32KB可配置。高速缓存采用四路组关联的结构,支持写回、写通过两种写工作模式。

(8) 支持指令总线、数据总线和系统总线3种总线接口。

3. 紧耦合 IP

(1) 玄铁803的紧耦合IP包括系统计时器CoreTim、矢量中断控制器VIC、片内高速缓存控制寄存器单元CRU。

1) 系统计时器完成系统的计时功能,可以在低功耗时唤醒CPU;

2) 矢量中断控制器完成中断的收集、仲裁、硬件嵌套以及与处理器的交互;

3) 片内高速缓存控制器单元用于设置玄铁803的片上高速缓存,比如开关 Cache,配置可缓存区域等。

(2) 与传统 IP 不同,紧耦合 IP 通过专用的紧耦合 IP 总线接口与处理器相连,无需通过系统总线访问。

1) 紧耦合 IP 总线接口直接与玄铁803的总线互联单元(BMU)相连。

2) 紧耦合 IP 与其它系统IP共享统一的内存地址空间,通过传输指令(Load)和存储指令(Store)进行寄存器访问和功能控制。

4. 玄铁803CPU 的流水线

流水线名称

缩写

流水线作用

 

取指

 

IF

1. 发起取指令请求,处理返回的指令数据,

2. 指令预译码;

3. 静态分支预测,

4. 复杂指令拆分。

 

译码

 

ID

1. 指令译码;

2. 指令相关性分析;

3. 指令发射,

4. 执行分支跳转指令;

5. 计算加载存储指令的地址并发起访问请求。

 

执行

 

EX

1. 执行并完成整型类指令;

2. 执行浮点类指令,

3. 执行DSP加速类指令;

4. 完成加载存储指令;

5. 指令执行结果回写

6. 指令退休;

7. 异常和中断处理。

示意图:

 image.png

5. 玄铁803 CPU 的工作模式

玄铁803定义了两种处理器工作模式: 普通用户模式和超级用户模式。两种工作模式对应不同的操作权限,主要体现在:

(1) 对控制寄存器的访问:工作在超级用户模式下的系统软件则可以访问所有的寄存器,并使用控制寄存器进行超级用户操作。

(2) 特权指令的使用:一些对系统产生重大影响的特权指令只能工作在超级用户模式下。特权指令包括STOP,DOZE,WAIT,MFCR,MTCR,PSRSET,PSRCLR,RTE。

(3) 对内存空间的访问,普通用户程序只能访问那些对其开放的内存空间。对于未被授权空间的访问则将触发错误异常。

图示:普通用户模式与超级用户模式的转换

image.png

6. 玄铁803CPU 的寄存器组

(1) 通用寄存器 

R28

数据基地址寄存器

R15(LR)

链接寄存器

R14(User SP)/R14(Super SP)

堆栈指针寄存器

R13

通用目的寄存器

R12

通用目的寄存器

R11

通用目的寄存器

R10

通用目的寄存器

R9

通用目的寄存器

R8

通用目的寄存器

R7

通用目的寄存器

R6

通用目的寄存器

R5

通用目的寄存器

R4

通用目的寄存器

R3

通用目的寄存器

R2

通用目的寄存器

R1

通用目的寄存器

R0

通用目的寄存器

(2) 控制寄存器(超级用户编程模型下可见)

名称

类型

控制寄存器

<组内编号,组号>

描述

PSR

读/写

CR<0,0>

处理器状态寄存器

VBR

读/写

CR<1,0>

异常入口基址寄存器

EPSR

读/写

CR<2,0>

异常保留处理器状态寄存器

EPC

读/写

CR<4,0>

异常保留程序计数器

CPUID

CR<13,0>

产品序号寄存器

CHR

读/写

CR<31,0>

隐式操作寄存器。CK-CPU中把一些单元的开关功能放在了CR31上。

R14(User SP)

读/写

CR<14,1>

用户模式下的堆栈指针寄存器。可以通过控制寄存器组1中的14号寄存器进行访问

7. 存储器保护单元(MPU)

MPU 通过以下方面提高嵌入式系统的健壮性:

(1) 防止用户程序破坏操作系统的数据;

(2) 分离任务间的数据,防止任务间的数据相互访问;

(3) 允许存储器区域被定义为只读的,以保护重要数据;

(4) 检测不可预期的存储器访问(例如,栈被破坏);

(5) 另外还可以用于定义存储器访问特征,如不同区域的缓冲和缓存行为等。

存储器保护单元寄存器

名称

类型

控制寄存器编号/地址

描述

CCR

读/写

CR<18,0>

高速缓存配置寄存器

CAPR

读/写

CR<19,0>

可高缓和访问权限配置寄存器

PACR

读/写

CR<20,0>

保护区控制寄存器

PRSR

读/写

CR<21,0>

保护区控制寄存器

8. 矢量中断控制器(VIC)的系统结构

image.png

(1) 每个中断源拥有独立软件可编程的中断优先级。矢量中断控制器收集来自不同中断源的中断请求,依据中断优先级对中断请求进行仲裁。

(2) 最高优先级的中断将获得中断控制权并向处理器发出中断请求。

(3) 当处理器响应了中断请求,处理器返回中断请求响应信号给 VIC;当处理器退出中断服务程序(ISR),处埋器返回中断退出信号给 VIC

 

五、 玄铁802/803指令集

1. 玄铁803 CPU 的指令集

(1) 32/16位变长指令

玄铁803采用了 CSKY_V2的指令系统,支持16位和32位两种长度的指令,其中32位指令采用32个通用寄存器和三操作数寻址模式,16位指令采用16个通用寄存器和两操作数等多种寻址模式。32位/16位指令通过指令编码中的最高两位区分,其中最高两位为11时代表32位指令,其余代表16位指令。具体的指令混编方式如下图所示:

image.png

(2) 玄铁803的指令集在编码上可以分为3大类,分别为:

1) 跳转类型(J型)

image.png

2) 立即数类型(I型)

image.png

3) 寄存器类型(R型)

 image.png

(3) 32位指令列表(P61)

数据运算指令、分支跳转指令、内存存取指令、特权指令、特殊功能指令

(4) 16位指令列表(P69)

数据运算指令、分支跳转指令、内存存取指令

相关文章
|
6月前
|
缓存 Linux Go
一次性构建出多CPU指令集的 Docker 镜像
本文介绍了使用 Docker Buildx 构建跨平台 Docker 镜像的流程。首先确保系统为 Ubuntu 22.04,安装 Docker 和相关依赖。然后配置 Docker Buildx,编写 Go 程序和 Dockerfile。接着,创建构建脚本 `build.sh` 自动化构建并推送镜像到 Docker Hub。运行此脚本将为不同平台(如 amd64, arm64)构建并推送镜像。最后,在 Docker Hub 可查看构建结果,并可在其他系统上测试镜像。
109 3
|
6月前
|
存储 Ruby 内存技术
【机组期末速成】CPU的结构与功能|CPU结构|指令周期概述|指令流水线|中断系统
【机组期末速成】CPU的结构与功能|CPU结构|指令周期概述|指令流水线|中断系统
245 1
|
1月前
CPU的工作原理基于其内部结构,通过执行指令来完成各种任务
CPU的工作原理基于其内部结构,通过执行指令来完成各种任务
54 2
|
1月前
|
监控 异构计算
Jetson 学习笔记(八):htop查看CPU占用情况和jtop监控CPU和GPU
在NVIDIA Jetson平台上使用htop和jtop工具来监控CPU、GPU和内存的使用情况,并提供了安装和使用这些工具的具体命令。
111 0
|
5月前
汇编语言(第四版) 实验一 查看CPU和内存,用机器指令和汇编指令编程
汇编语言(第四版) 实验一 查看CPU和内存,用机器指令和汇编指令编程
|
6月前
|
测试技术 PyTorch 算法框架/工具
魔搭开源推理引擎 DashInfer,助力CPU服务器解锁大模型超强推理
ModelScope推出了预训练大语言模型(LLM)推理引擎DashInfer,采用C++ Runtime编写,提供C++和Python语言接口,具有生产级别的高性能表现,适用于多种CPU架构,包括x86和ARMv9。DashInfer支持连续批处理(Continuous Batching)和多NUMA推理(NUMA-Aware),能够充分利用服务器级CPU的算力,为推理14B及以下的LLM模型提供更多的硬件选择。该项工作已开源。
|
5月前
|
芯片
芯片设计 | 一文读懂,CPU、精简指令集、复杂指令集该如何理解
芯片设计 | 一文读懂,CPU、精简指令集、复杂指令集该如何理解
334 0
|
6月前
|
机器学习/深度学习 人工智能 PyTorch
不止于大模型 英特尔CPU引领智算新高度
ChatGPT的横空出世拉开了AI大模型的新时代,而近期的文生视频模型SORA又让业界为之激动不已。据了解,Sora所需token(文本处理最小单位)数量相较于文本及图片模型的推理呈数量级增长。经中信证券简单估算,对于一个60帧的视频(约6至8秒),Sora要生成至少约120万个token,这是相当大的计算量。
|
6月前
|
缓存 编译器 调度
【C/C++ 性能优化】了解cpu 从而进行C++ 高效编程
【C/C++ 性能优化】了解cpu 从而进行C++ 高效编程
357 0
|
6月前
|
安全 机器人
ABB PLC自动化可编程逻辑控制器PLC AC500型 CPU
ABB PLC自动化可编程逻辑控制器PLC AC500型 CPU

热门文章

最新文章