开发者学堂课程【高校精品课-南京航空航天大学-数字集成电路设计技术:平头哥 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处理器架构
指令子集 |
功能介绍 |
浮点指令子集 |
用于浮点运算领域,包括了单精度浮点、双精度浮点以及单精度的单指令多数据(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 架构
黄色部分是基础配置,蓝色部分是可配置。
分支处理单元、整型单元、乘除法单元,浮点处理单元、音频加速单元和控制寄存器单元分别和指令退休单元和指令译码单元进行数据交换,其中硬件调试单元控制了指令退休单元的工作。在右边总线矩阵单元和指令总线、系统总线、数据总线进行数据交换,在左边与取指单元和内存访问单元进行数据交换,其中取指单元和内存访问单元又控制到内存保护单元和高速缓存。
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. 异常和中断处理。 |
示意图:
5. 玄铁803 CPU 的工作模式
玄铁803定义了两种处理器工作模式: 普通用户模式和超级用户模式。两种工作模式对应不同的操作权限,主要体现在:
(1) 对控制寄存器的访问:工作在超级用户模式下的系统软件则可以访问所有的寄存器,并使用控制寄存器进行超级用户操作。
(2) 特权指令的使用:一些对系统产生重大影响的特权指令只能工作在超级用户模式下。特权指令包括STOP,DOZE,WAIT,MFCR,MTCR,PSRSET,PSRCLR,RTE。
(3) 对内存空间的访问,普通用户程序只能访问那些对其开放的内存空间。对于未被授权空间的访问则将触发错误异常。
图示:普通用户模式与超级用户模式的转换
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)的系统结构
(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位指令。具体的指令混编方式如下图所示:
(2) 玄铁803的指令集在编码上可以分为3大类,分别为:
1) 跳转类型(J型)
2) 立即数类型(I型)
3) 寄存器类型(R型)
(3) 32位指令列表(P61)
数据运算指令、分支跳转指令、内存存取指令、特权指令、特殊功能指令
(4) 16位指令列表(P69)
数据运算指令、分支跳转指令、内存存取指令