平头哥 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月前
|
人工智能 并行计算 openCL
魔搭+Xinference 平台:CPU,GPU,Mac-M1多端大模型部署
随着 Llama2 的开源,以及通义千问、百川、智谱等国内大模型的问世,很多用户有了本地部署去尝试大模型的需求,然而硬件的需求阻碍了很多人的尝试,并不是所有人都拥有一块英伟达显卡的,所以 Llama2 问世不久,大神 Andrej Karpathy 的一个 weekend project 爆火——llama2.c。
魔搭+Xinference 平台:CPU,GPU,Mac-M1多端大模型部署
|
6月前
|
Docker Windows 容器
cpu不支持avx指令集怎么办
如果CPU不支持AVX指令集,可以考虑以下两种解决方案: 更新BIOS版本:在某些情况下,更新BIOS版本可能会支持AVX指令集。可以联系电脑厂商或者查阅相关教程进行BIOS更新。 更换支持AVX指令集的CPU:如果更新BIOS版本后仍不支持AVX指令集,那么可以考虑更换支持AVX指令集的CPU。可以根据自己的需求和预算选择适合的CPU。 另外,如果在tf1.6以后的官方的tf包都是用AVX编译的,而电脑的CPU不支持AVX指令集,那么可以考虑使用Docker来配置运行环境。但需要注意,Docker在Windows上配置稍显繁琐,并需要配置虚拟机等其他东西。 总的来说,如果不支持AVX指令
1420 0
|
2月前
|
安全 机器人
ABB PLC自动化可编程逻辑控制器PLC AC500型 CPU
ABB PLC自动化可编程逻辑控制器PLC AC500型 CPU
|
3月前
|
存储 Java 程序员
cpu与指令集
cpu与指令集
30 0
|
4月前
|
XML Java API
Android App开发之创建JNI接口获取CPU指令集讲解及实战(附源码 简单易懂)
Android App开发之创建JNI接口获取CPU指令集讲解及实战(附源码 简单易懂)
42 0
|
4月前
|
缓存 Java 知识图谱
1.什么是CPU多级缓存模型?
1.什么是CPU多级缓存模型?
55 0
1.什么是CPU多级缓存模型?
|
4月前
|
存储 人工智能 缓存
探索AIGC未来:CPU源码优化、多GPU编程与中国算力瓶颈与发展
近年来,AIGC的技术取得了长足的进步,其中最为重要的技术之一是基于源代码的CPU调优,可以有效地提高人工智能模型的训练速度和效率,从而加快了人工智能的应用进程。同时,多GPU编程技术也在不断发展,大大提高人工智能模型的计算能力,更好地满足实际应用的需求。 本文将分析AIGC的最新进展,深入探讨以上话题,以及中国算力产业的瓶颈和趋势。
|
4月前
|
存储 编译器 数据处理
CPU架构和指令集
不同的CPU架构通常使用不同的指令集。每种CPU架构都有其自己的一组特定的机器指令,这些指令用于执行计算机程序。不同的CPU架构之间的指令集是不兼容的,这意味着编写的程序通常需要根据目标CPU的架构进行编译或汇编,以确保它们能够在该CPU上正确运行。 一些常见的CPU架构包括:
|
8月前
|
消息中间件 存储 缓存
计算机操作系统学习笔记(3)——CPU缓存一致性
计算机操作系统学习笔记(3)——CPU缓存一致性
155 0
|
8月前
|
人工智能 弹性计算 Cloud Native
平头哥杨平超:倚天CPU架构以及产品特性介绍
2023年8月8日,【倚天实例迁移课程】首节课程《倚天CPU架构以及产品特性介绍》正式上线,由平头哥倚天解决方案架构师杨平超主讲,内容涵盖:倚天710芯片概述;倚天710的主要特点;倚天710应用落地介绍,本期节目也在阿里云官网、阿里云微信视频号、阿里云钉钉视频号、InfoQ官网、阿里云开发者微信视频号、阿里云创新中心直播平台&微信视频号同步播出。
平头哥杨平超:倚天CPU架构以及产品特性介绍