【蜂鸟E203内核解析】Chap.1 RISC-V指令集架构与硬件结构
- 1. 指令集架构
-
- 1.1 RISC-V指令集架构
- 1.2 指令类型与编码
- 2. 硬件结构
-
- 2.1基础寄存器
- 2.2 流水线技术
- 2.3 片内存储器
- 2.4 片内总线
- 2.5 总线接口
- 后记
1. 指令集架构
?? 处理器(Central Processing Uni,简称CPU)作为计算机系统的运算和控制核心,是信息处理、程序运行的最终执行单元。其组成分为软件、指令集、硬件这三个层面,如图2-1所示。其中,软件层面包括了运行于处理器上的操作系统、各种软件应用还有可以把高级语言的代码转换成底层硬件所认识的低级语言的程序编译器等。
?? 指令集层面作为运行于底层硬件与软件之间的桥梁和规范的出入口,指令集架构(Instruction Set Architecture,简称ISA)的指令决定了处理器的主要功能。处理器的具体底层硬件实现策略被称为处理器的微架构(Micro-Architecture),是通过底层硬件电路的设计来实现指令在处理器内部的执行过程。
?? RV32I包括了4种基本指令格式,分别是:R型指令、I型指令、S型指令、U型指令。R型指令用于两个寄存器间的操作;I型指令和S型指令都操作内存空间,I型指令用于加载内存提取的操作,S型指令用于访问内存后的存储操作,除此之外,I型指令还包括对短立即数的操作;U型指令用于长立即数的操作[10]。
?? 每一种类型的指令所操作的通用寄存器的索引都被放在固定的指令段位置,操作码opcode也放置在固定的[6:0]位置有利于译码处理[6]。因此译码器可以非常便捷地译码。
2. 硬件结构
2.1基础寄存器
??RV32I 基本寄存器里规定每一个基本整数寄存器都占用32位的空间,RV32I 共有32个基础寄存器[10],由32个用于保存整数值的通用寄存器x1-x31和1个固定的寄存器x0组成,如图2-3所示。
??在嵌入式低功耗处理器领域,随着现代低功耗处理器需求的发展,为了微处理器的应用能够追求更高能效比,会适当将流水线的设计变浅,以追求更高的能效比。其中具有代表性的是ARM的Cortex M0+采用了两级流水线结构。无独有偶芯来科技的蜂鸟E203也采用了两级流水线[7],第一阶段包括取值和一个简单译码模块,第二阶段包括译码、执行。需要回写的时候会加上写回阶段,写回结果需要通过写回模块回到指定的通用寄存器组,故称E203内核是2级变长流水线,如图2-5所示。
??ICB总线具备以下特点:
- 地址由命令通道单独传输,所写数据由命令通道跟着写请求一齐传输到从设备,所读数据由返回通道传输。
- 为了实现多个主从设备都可以挂载到ICB总线上,使用地址自定义区间寻址。
- 命令通道传输字节掩码来防止符 扩展,用于实现自定义控制的写操作。
- 不但支持自然对齐地址的访问,也支持地址非对齐的访问。
- 不支持乱序的形式,只支持顺序从返回通道返回结果。
??ICB总线上两个通道的信 如表2-3所示:
RISC-V指令集 | 指令集名称 | 指令数 | 寻址空间(位) | 寄存器组(位) |
---|---|---|---|---|
基本指令集 (均为整数指令集) |
RV32I | 47 | 32 | 32 |
RV32E | 47 | 32 | 16 | |
RV64I | 59 | 64 | 32 | |
RV128I | 71 | 128 | 32 | |
扩展指令集 | 指令集名称 | 指令数 | 指令集描述 | |
M | 8 | 乘法、除法运算 | ||
A | 11 | 原子与加载、存储 | ||
F | 26 | 单精度浮点运算 | ||
D | 26 | 双精度浮点运算 | ||
Q | 26 | 四精度浮点运算 | ||
C | 46 | 压缩 | ||
B | 自定义完成 | 位操作 | ||
P | 自定义完成 | Packed-SIMD | ||
V | 自定义完成 | 向量操作 |
??ICB的读写控制遵循valid-ready握手原则,准备好再进行下一步传输,没准备好就停下来等待,可以有效地实现读写时序控制,ICB总线上的读写时序如图2-7所示。
??通过ICB总线写数据时,主设备将数据准备好后,将读写请求信 icb_cmd_valid拉高,同时,如果从设备不忙,则标志信 icb_cmd_ready一直拉高。在时钟沿同时出现valid和ready拉高,则从设备发送写地址、写数据、写的字节掩码。
??通过ICB总线读数据时,主设备将读写请求信 icb_cmd_valid拉高,同时,如果从设备不忙,则将标志信 icb_cmd_ready一直拉高,此时读标志icb_cmd_read拉高。在时钟沿同时出现valid和ready拉高,则通过反馈通道实现读取数据。
2.5 总线接口
??总线接口由BIU实现,其连接如图2-8所示。用于实现流水线中各个单元模块的存储器访问请求,遵循ICB总线协议。取指令单元IFU需要提取ITCM内存中的指令,内存访问单元LSU需要访问内存,这两个单元模块需要遵循ICB总线协议分别输入到BIU进行优先级仲裁选择,规定了LSU单元有更高的优先权。
??因为IFU是流水线的第一级,往往代表着下一个周期,为了保证流水线按序工作,需要先执行上一个周期还没执行完的操作,故LSU单元相比于IFU单元拥有更高的优先权。LSU还有可能会接收到协处理器的访存请求,所以需要与主处理器的访存请求做进行一步的选择。之后LSU提取到指令后需要进行数据对齐,需要返回的指令数据会通过WB单元写回到通用寄存器组。

??BIU内部采取了乒乓缓存(Ping-Pong Buffer,简称PPB)用于替换掉一般的一层流水,可以使得此级流水线向上一级流水线的握手接收信 仅关注乒乓缓存中是否有一个以上有空的表项即可,而无需将下级的握手接收信 串扰至上一级。在判断其访问的地址区间后,通过不同的接口访问外部的模块单元,包括私有外设、CLINT、快速IO、系统存储、PLIC。
后记
- markdown语法转成表格,很好用
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!