0

    我们一起学RISC-V——01-了解处理器和寄存器

    2023.05.20 | admin | 223次围观

    本期内容如下:

    形象认识处理器RISC-V处理器面貌处理器都能做什么RISC-V核对外接口

    一、形象认识处理器

    1.1 指令集分类

    处理器指令集分为两类,CISC(Complex Instruction Set Computers,复杂指令集计算机)和RISC(Reduced Instruction Set Computers,精简指令集计算机)。

    CISC处理器,当以为美国Intel ,AMD的X86处理器为代表,当然中国兆芯近年来也推出了多款基于X86的处理器。RISC处理器,种类就很多了,如基于ARM指令集的A/M/R系列的嵌入式处理,基于MIPS指令集的龙芯,基于RISC-V的多款开源处理器。

    1.2 指令集作用

    在计算机中,指示计算机硬件执行某种运算、处理功能的命令称为指令。指令是计算机运行的最小的功能单位,而硬件的作用是完成每条指令规定的功能。一台计算机上全部指令的集合,就是这台计算机的指令系统。指令系统也称指令集,是这台计算机全部功能的体现。而人们设计计算机首要考虑的是它拥有的功能,也就是首先要按功能档次设计指令集,然后按指令集的要求在硬件上实现。指令系统不仅仅是指令的集合,还包括全部指令的指令格式、寻址方式和数据形式。所以,各计算机执行的指令系统不仅决定了机器所要求的能力,而且也决定了指令的格式和机器的结构。反过来说,不同结构的机器和不同的指令格式应该具有与之相匹配的指令系统。为此,设计指令系统时,要对指令格式、类型及操作功能给予应有的重视。软件是为了使用计算机而编写的各种系统和用户的程序,程序由一个序列的计算机指令组成。从这个角度上说,指令是用于设计程序的一种计算机语言单位

    1.3处理器的结构

    所有通用处理器的设计,有一目的就是最大限度的保证指令集的完备性,通过这些指令的组合处理器可以完成任何复杂的工作。处理器硬件层面通常包含如下内容:

    处理器状态寄存器——处理器特殊功能标记和运算时的一些状态标记信息被放到状态寄存器处理器通用寄存器——可以直接或间接存取数据处理器数据缓冲 ——用来缓存来自低速存储的数据处理器指令缓冲 ——用来缓存来自低速存储的指令指令控制单元 ——依照指令缓冲中指令序列完成各寄存器,内存间的数据交互处理器总线接口 ——处理器与其他外设进行数据交互的桥梁

    二、RISC-V处理器面貌

    2.1 RISC-V处理器结构

    图1 RISC-V处理器结构框图

    不管是基于什么指令集的处理器,为了实现数据的运算,数据搬运,它都得借助于一些临时容器,这些临时用的容器就被称为处理器的寄存器。本文仅介绍基于RISC-V指令集的处理器结构,如图1所示,其他处理器还请参见相关资料自行学习。

    2.2 RISC-V处理器基本寄存器

    RISC-V处理器的寄存器描述参见图2,所有基于RISC-V的处理器都包含33个基本寄存器(PC,X0~X31),根据编程规范又赋予每个寄存器一个专用功能(当然如果你不愿意遵循这一标准也可以,但是结果会导致你的处理器不能够被RISC-V的标准代码兼容),这其中有1个PC寄存器,1个只读零值寄存器,1个返回地址寄存器,1个堆栈指针寄存器,1个全局指针寄存器,1个线程指针寄存器,7个临时寄存器,12个存保(saved)寄存器(其中S0也被用作帧指针寄存器),8个函数参数寄存器。

    图2 RISC-V 基本寄存器列表

    2.3 RISC-V控制状态寄存器CSR

    RISC-V指令架构定义了一些控制和状态寄存器(CSR),用于配置或记录一些运行的状态。CSR寄存器是处理器内核内部的寄存器,使用专有的12位地址编码空间,对一个 RISC-V 硬件线程(hart),其可以配置4k的CSR寄存器,我们以E203核为例微处理器与外设大学教程,其CSR详细列表参见图3。鉴于每个CSR功能相对来说比较多,在此就不做详细展开了,之后我会针对于CSR做一个专题介绍,我们只需要知道,CSR可以完成很多辅助功能,并不是每款RISC-V处理器都实现了完备的CSR功能就可以了。

    图3 RISC-V标准CSR计算器列表(E203 处理器内核)

    标准 RISC-V指令集架构(ISA) 设置了一个 12 位的编码空间(csr[11:0])可用于 4096 个 CSR。根据约定, CSR 地址的高 4 位(csr[11:8])用于编码 CSR 根据特权级读写的可访问性。最高 2 位(csr[11:10])指示这个寄存器是否是可以读/写(如只读是11)。后面 2 位(csr[9:8])指示了能够访问这个 CSR 所需要的最低特权级(如管理员级是 01)。

    2.3.1 用户级别ISA

    用户级别CSR地址

    2.3.2 supervisor 级别ISA

    supervisor 级别

    2.3.3 Hypervisor 级别ISA

    Hypervisor 级别 CSR地址

    2.3.4 Machine级别ISA

    Machine 级别CSR地址

    2.4 RISC-V浮点寄存器

    为了硬件层面支持浮点运算,有些处理器,也会引入如图4所示的32个浮点寄存器(F0~F31),这其中有分为12个临时浮点寄存器、12个存保寄存器、8个函数参数寄存器。

    图4 RISC-V浮点寄存器

    至此,我们对RISC-V处理器的内部结构及具体寄存器已有了一个基本的认知,在实际使用汇编进行开发过程中我们也主要与这些寄存器打交道,具体指令的操作对象也就是这些寄存器。

    三、处理器能做什么

    以上学习的内容仅是RISC-V寄存器(这是每个基于RISC-V指令集的处理要实现的)的知识,那么包含这些寄存器的处理器又能做哪些事情呢?

    我在此做一些简单的介绍,RISC-V处理器结构上可以分为内核部分和外设部分。这里以GD32VF103处理器结构进行介绍,参见图5,从图中可知除RISC-V内核外,处理器还包含有并行外设,Flash控制器,SRAM控制器和PLL驱动电路。

    图5 GD32VF103功能框图

    RISC-V处理器可以实现数据运算,存储器访问,硬件外设配置和数据的读写操作,其实所有的处理器都一样,不是操作数据微处理器与外设大学教程,就是操作外设,就这么简单,处理器能做的事情。

    完成除了处理器指令集支持的基本运算;读写所支持的硬件外设;访问RAM和读写FLASH;配置处理器运行环境,如设置总线速率,处理器主频等。

    插几句,有时候初学者感觉学习一款处理器比较困难,我这里想说一下自己的观点。

    学好一款处理器,就是在学好处理器内核指令架构基础上,学好这款处理器的外设工作原理。很多时候,感觉学习困难,是因为很多外设协议(USB,SDIO,PCIe,eMMC)太过复杂,让很多初学者望而生畏罢了,深入学好一款处理器,你只需要多写耐心和信心就可以了,技术层面没有难理解的东西。

    总之,学习一款处理器就是学习如何操作外设和如何管理处理器的时钟系统。

    四、RISC-V核对外接口

    在上一部分中我们了解到,RISC-V核会与一些外设,flash,SRAM进行数据交互,它们的接口是什么呢?都有哪些?

    处理器内核与外设沟通是通过总线实现的,通常总线类型为AHB总线,当然也有其他总线类型,AHB总线通常不直接挂载外设,而是通过AHB转APB桥转接APB总线来实现。处理器内核与Flash沟通,则是通过IBus和DBus这两条总线,RISC-V核通过这两条总线可以完成指令的读写和数据的双向传递。当外设有一些实时信号需要主动通知RISC-V内核的时候,中断通知信号线就显示了其存在的价值。

    以上接口对于处理器程序开发者来说是完全透明的,我们仅仅需要了解即可,这些将帮助我们在代码调试的时候,了解指令运行过程中的数据在硬件间的传递原理,所有对并行外设寄存器的指令操作,都将通过这些接口来完成的。

    版权声明

    本文仅代表作者观点。
    本文系作者授权发表,未经许可,不得转载。

    发表评论