RISC-V学习笔记

1.概述以及RISC-V的历史

国产处理器芯片起步较晚,从2013年至今,集成电路每年的进口额均超过了 2000 亿美元。RISC-V和AI(人工智能)芯片是我国最有希望突破的领域之一。RISC-V使用的领域还是对于生态依赖比较小的嵌入式系统或者新兴的IoT(物联网)、边缘计算、人工智能领域,但RISC-V得到了产业界和社区的广泛支持,同时,现在很多企业开始对 RISC-V 重视,所以说RISC-V 应用前景会非常乐观。

CPU 支持的所有指令和指令的字节级编码就是这个 CPU 的指令集架构(Instruction Set Architecture,ISA),指令集在计算机软件和硬件之间搭起了一座桥梁。不同的 CPU 家族,例如 86、PowerPC 和 ARM,都有不同的 ISA。RISC-VISA 开源,更确切地讲是它的指令集规范和标准开源。

RISC-V 起源于加州大学伯克利分校。在 2010 年夏季,Krste Asanovic 教授带领他的两个学生 Andrew Waterman 和 Yunsup Lee 启动了一个3个月的项目,目标是针对 x86 和ARM 指令集架构复杂和需要IP 授权的问题,开发一个简化和开放的指令集架构。RISC-V基金会创建于2015 年,是一家非营利组织。基金会董事会最早由 Bluespec、Google、Microsemi、NVIDIA、NXP、UC Berkeley、Western Digital 七家单位组成,目前的主席是 Krste Asanovi 教授。

成员单位现在已经比较多了:

基金会为核心芯片架构制定标准和建立生态,标准公开免费下载。基金会旗下有超过 1 000 家成员,包括高通、NXP、阿里巴巴和华为等。RISC-V 基金会成员可以使用 RISC-V 商标。RISC-V 指令集架构采用开源BSD 授权,任何企业、高校和个人都可以遵循RISC-V 架构指南设计自己的 CPU.秉承开放、中立的宗旨,RISC-V 基金会总部从美国迁往瑞士,并于 2020年3月完成在瑞士的注册,更名为 RISC-V 国际基金会(RISC-V International Association)。近日,基金会 CEO Calista Redmond 撰文 RISC-V Catalyst for ChangRISC-V,文章指出,RISC-V 标准是免费和开放的,没有任何一个实体可以控制RISC-V 技术。企业、学术界和机构都可以自由地在 RISC-V 指令集架构上进行创新,共同推动计算前沿技术的迅速发展。

自RISC-V 架构诞生以来,市场上已有数十个版本的 RISC-V 内核和SoC芯片它们中的一部分是开源免费的,而商业公司开发的 RISC-V 处理器内核和平台是需要商业授权的。某些商业公司开发用于内部使用的 RISC-V 内核,但也可以开源运作。西部数据的 SweRV架构(RV32IMC)是 RISC-V内核处理器的典型代表,它是一个32 bit 顺序执行指令架构,具有双向超标量设计和9 级流水线,采用 28 nm 工艺技术实现,运行频率高达 1.8 GHz,可提供 4.9 CoreMark/MHz 的性能,略高于ARM的 Cortex A15,已经在西部数据的 SSD和 HDD 控制器上使用,SweRV项目是一个开源项目(Chip Alliance)典型的开源 RISC-V 内核有 Rocket Core,它是加州大学伯克利分校开发的一个经典的 RV64 设计。伯克利分校还开发了一个 BOOM Core,它与 Rocket Core不同的是面向更高的性能。苏黎世理工大学(ETH Zurich)开发的 Zero-riscy,是经典的RV32 设计。苏黎世理工大学还开发了另外一款 RISC-V R15CY Core,可配置成RV32E,面向的是超低功耗、超小芯片面积的应用场景。由 Clifford Wolf 开发的RISC-V Core-Pico RV32,其内核重点在于追求面积和 CPU频率的优化。

开源的 RISC-V 内核非常适用于研究和教学,但用于商业芯片设计还有许多工作要做。SiFive(美国赛防科技)由 Yunsup Lee 创立,他也是 RISC-V 的创始人之一。2017 年 SiFive公司发布首个 RISC-V 内核SOC平台家族,以及相关支持软件和开发板。在这些芯片中,包括采用 28 nm 制造技术,支持 Linux 操作系统的64位多核CPUU500,以及采用 180 nm 制造技术的多外设低成本IOT 处理器内核 E300。

2.RISC-V指令集特点

RISC-V指令集是基于精简指令集计算原理建立的开放指令集架构(ISA),RISC-V是在指令集不断发展和成熟的基础上建立的全新指令。RISC-V ISA可以免费使用,允许任何人设计、制造和销售 RISC-V 芯片和软件。

RISC-V(读音“risk-five”)是一个新的指令集体系结构(ISA),它最初用于支持计算机 体系结构研究和教学,但现在我们希望它也成为一个对于工业实现来说标准、免费、开放的 体系结构。RISC-V官方定义 RISC-V 的目的包括:

3.关于RISC-V的V

RISC-V 这个名字,代表了 UC Berkeley 大学设计的第五代主要的 RISC ISA(前 四个是 RISC-I[18]、RISC-II[11]、SOAR[27]和 SPUR[14])。罗马数字“V”也暗示 了“变种(Variations)”和“向量(Vectors)”,以支持各种体系结构研究,包括各种数据并行加速器,也是这个 ISA 设计的明确目标。

4、发明者为什么要开发一个新的ISA

关于为什么要有RISC-V,发明者这么说:

硬件上实现一些研究思想特别感兴趣(自从这个规范的第一个版本发布之后, 我们已经完成了 11 块不同的 RISC-V 硅片的制造),在课堂上提供给学生真实 的实现(在 Berkeley,RISC-V 处理器的 RTL 设计代码已经用于多个本科生、研 究生的课程)。在我们当前的研究中,由于传统晶体管不断变小带来的能耗约 束,我们对特殊、异构的加速器特别感兴趣。我们需要一个高度灵活、高度可 扩展的基本 ISA,在此基础上可以构建我们自己的研究。

我们总被问及这样一个问题“为什么要开发一个新的 ISA?”。使用一个已 有的商业化的 ISA,其显而易见最大的优势在于其已经具备了丰富和广泛支持。

的软件生态系统,包括开发工具和可移植的应用程序,而在研究和教学中,这 些都是可以利用的。其他的好处包括拥有大量的文档和教程示例。然而,我们 的经验证明,在科研和教学中使用商业的指令集,在实际中获得的好处很小, 而且掩盖不了它的缺点:

l 商业 ISA 都是私有的。除了 SPARC V8(它是一个开放的IEEE 标准[1]), 绝大多数 ISA 的拥有者非常小心地保护他们的知识产权,并且并不欢 迎自由实现的竞争实现。对于仅仅使用软件模拟器来进行学术研究和 教学来说,这并不是一个问题,但是对于那些希望分享真实硬件实现 的科研小组来说,这就是一个大问题。对于那些被强迫信任仅有的几 个商业 ISA 实现,而不允许创建自己的全新实现(clean room implementation)的企业来说,这也是一个大问题。我们并不能确保 所有的 RISC-V 实现没有侵犯第三方专利,但是我们确保我们绝不会 起诉一个 RISC-V 的实现者。

一个修改过的商业 ISA 实际上是一个新的 ISA。我们的一个主要目标 是支持体系结构研究,包括主要的 ISA 扩展。即使是很小的扩展,也 减弱了使用标准 ISA 而带来的好处,因为必须修改编译器,而应用程 序必须从源代码进行重新编译,以利用这些扩展。引入了新的体系结 构状态的大一些的扩展,也需要对操作系统进行修改。最终使得一个 修改的商业 ISA 变成一个新的 ISA,但是不得不肩负着所有基本 ISA 遗留下来的包袱。我们坚信 ISA 是整个计算系统中最重要的接口,没有理由把这么重要的接 口变成私有的。占统治地位的商业 ISA 都是基于超过 30 年历史的指令集。软 件开发者应当能够定位到一个开放标准的硬件目标机,商业处理器设计者应当 在实现质量上进行竞争。我们并不是第一个为了适合硬件实现而提出开放 ISA 设计的。我们也考虑 了其他现有的开放 ISA 设计,其中 OpenRISC 体系结构[17]与我们的目标最为 接近。

我们由于几个技术原因,并不采用 OpenRISC ISA:

在我们开始的时候,64 位 OpenRISC 设计并没有完成。从零开始,我们可以设计一个符合我们所有需求的 ISA,当然,这花了比 我们在开始时预期多得多的努力。现在我们在构建 RISC-V ISA 基础设施上投入 了大量的精力,包括文档、编译器工具链、操作系统移植、参考 ISA 模拟器、 FPGA 实现、高效的 ASIC 实现、体系结构测试套件、教学材料等。自本文档的 上一个版本以来,在学术界和工业界对此 RISC-V ISA 都有大量的吸收(uptake), 我们也创建了非盈利的 RISC-V 基金会来保护和推进这个标准。RISC-V 基金会的 网址在 http://riscv.org,包含了基金会成员最新的信息和各种各样使用 RISC-V 的开源项目。

5.RISC-V指令集的优势

(1)完全开源。对于 RISC-V 指令集的使用,RISC-V基金会不收取高额的授权费。开源采用宽松的BSD 协议,企业可以完全自由免费使用,同时也允许企业添加自有指令集,而不必开放共享,实现差异化发展。

(2)架构简单。RISC-V设。处理器领域,流的架构为x8与ARM架构。x86与ARM架构的发展过程也伴随了现代处理器架构技术的不断发展成熟,但作为商用的架构,为了能够保持架构的向后兼容性,不得不保留许多过时的定义,导致其指令数目多,指令冗余严重,文档数量庞大,所以要在这些架构上开发新的操作系统或者直接开发应用门槛很高。而RISC-V 架构则完全抛弃包袱,借助计算机体系结构经过多年的发展已经成为比较成熟的技术的优势,从轻上路。RISC-V基础指令集只有40多条,加上其他的模块化扩展指令总共也就几十条指令。RISC-V的规范文档仅有145页,而特权架构文档的篇幅也仅为 91页。

(3)易于移植操作系统。现代操作系统都做了特权级指令和用户级指令的分离,特权指今只能由操作系统调用,而用户级指令才能在用户模式调用,保障操作系统的稳定。RISC-V提供了特权级指令和用户级指令,同时提供了详细的 RISC-V 特权级指令规范和 RISC-V 用户级指令规范的详细信息,使开发者能非常方便地移植 Linux 和 UNIX 系统到RISC-V平台上。

(4)模块化设计。RISC-V 架构不仅短小精悍,其不同的部分还能以模块化的方式组纱在一起,从而试图通过一套统一的架构满足各种不同的应用场景。用户能够灵活选择不同的模块组合,来实现自己定制化设备的需要,比如针对小面积低功耗嵌入式场景,用户可以选择RV32IC 组合的指令集,仅使用Machine Mode(机器模式);而高性能应用操作系统场景则可以选择RV32IMFDC 指令集,使用 Machine Mode(机器模式)与User Mode户模式)两种模式。

(5)完整的工具链。对于设计CPU 来说,工具链是软件开发人员和 CPU 交互的窗口,若没有工具链,则对软件开发人员开发软件要求很高,甚至软件开发者无法让CPU 工作起来在CPU 设计中,工具链的开发是一个巨大的工作。如果用RISC-V来设计芯片,芯片设计公司则不用再担心工具链问题,只需专注于芯片设计,RISC-V社区已经提供了完整的工具链 RISC-V 基金会持续维护该工具链。当前RISC-V的支持已经合并到主要的工具中,比如编评工具链 GCC、仿真工具 QEMU 等。

6、RISC-V的特点

1).没有立即数减法

只有立即数加法指令(addi),没有立即数减法指令(subi),那么减法怎么办?无论是数学上还是程序上,x-y都等价于x+(-y),也就是说可以把减法变成加法,把被减数转化成负数然后再加上减数就实现了和减法一样的功能。正是基于这个原理,RISC-V只提供立即数加法,没有提供立即数减法,如果需要立即数减法,那么就要麻烦编译器把这个立即数转化成负数,然后继续使用加法。这也是 RISC-V将立即数作为有符号数处理的原因。

2). x0 寄存器简化指令集

引入x0 寄存器后,很多特殊指令只需用普通的指令加上 x0 做操作数就能解决,指令的数量大大减少,处理器的解码电路也大大简化。

3). 32 位常量

之前使用的ARM 处理器是将立即数表示不下的常量存到常量池,然后用PC相关的LDR指令加载到寄存器。RISC-V 的常量完全是用指令拼接,不需要 Load 指令,使用 Load 指令需要额外的访问周期。RISC-V 单条指令可以表示 12 位的有符号常量,超过 12 位需要两条指令来合成。其中一条指令是 lui,lui 指令加载常量的高 20 位,低 12 位可以用addi指令上去,这个过程需要编译器算出立即数到底是什么,因为 addi 指令执行的是有符号加法,其中的 12 位立即数会先被符号扩展成 32 位的有符号数再参与计算。ARM 的常量加载需要8个字节,一条指令加一个常量;RISC-V的常量加载也是需要8个字节,两条指令,两者占用的程序空间一样。

4).只有小于和大于等于

RISC-V 的比较跳转指令只有 blt 和 bge,即只有小于和大于等于。但大于和小于等于也是需要的,RISC-V用了一个很巧妙的办法用两条指令实现了四条指令的工作,将 blt 的两个参与比较的操作数位置换一下就有了 bgt(大于跳转),将bge 的两个参与比较的操作数位置换一下就有了 ble(小于或等于跳转)。

5).让编译器做更多工作

对 RISC 的理解是处理器尽量少做、编译器尽量多做,这是非常有道理的,毕竟编译的次数远少于执行的次数。上面几点就提到不少要让编译器多做的工作,又例如 B-type 是比较跳转指令的格式,J-type 是长跳转或函数调用指令格式,注意它们的立即数排列次序,把填充这里的立即数交给了链接器的工作。这样排放偏移地址立即数是为了简化处理器的设计,但明显给编译器增加了工作。

6).其他省掉的指令

很多常用的指令都被省掉了,比如nop、move、not、neg 等,但所有这些功能都还有只不过都是用其他的指令来等价实现,比如not 指令是用xorird,rs,-1实现。

7、RISC-V的x0寄存器

Linux 有两个特殊的设备:/dev/zero 和/dev/。从/dev/zero 可以源源不断地读到0,往dev/ 写的任何内容都被丢弃。如果要创建一个需要填0的文件,就从dev/zero 拷贝,如

果要丢弃一些输出,就把输出重定向到/dev/。RISC-V的x0寄存器就相当于是硬件版的/dev/zero 和/dev/的组合体。从0读出来的总是0,往x0 写进去的总是被丢弃。所以 x0 提供两种功能:一是提供常量0,在软件编程中0可以说是最常用的常量:二是提供一个可以丢弃结果的场所。有了 x0 寄存器,很多本来需要单独指令的操作只要在普通的指令前加上x0 就可以实现。

(1)nop 空指令,RISC-V没有提供nop 指令,而是用addi x0,x0,0来实现空指令,这条addi 使用x0作为目标存器,会丢弃结果,所以这条指令不会对程序状态产生任何影响,和空指令是完全等价的,这就不需要单独的空指令了。

(2)neg 取负数指令,RISC-V用 sub rd,x0,rs 来实现,x0-rs 等价于0-rs,等价于-rs,有了x0,就可以用更普通的减法指令来实现取负数指令。

(3)j跳转指令,RISC-V 没有单独的跳转指令,只有jal跳转链接指令,跳转之前总是要把下一条指令的地址拷贝到寄存器,但是如果用 x0 作为jal 的操作寄存器,即把下-条指令的地址拷贝到 x0,那么效果就等价于j跳转指令了,因为写入 x0 的任何值都会被丢弃。

(4)beqz等于零跳转指令等一系列和0比较的跳转指令,程序中和0比较是相当常见的操作,RISC-V 中和0比较的指令是普通的比较跳转指令,是用 x0 寄存器做指令的操作数。还有很多其他这样的指令,用普通的指令加上 x0 做操作数,就实现了那些没有x0 寄存器的处理器需要单独指令或者需要组合两条指令才能实现的操作。

参考资料:

1、risc-v.org

2、《基于risc-v的人工智能应用开发》

3、《深入理解RISC-V程序开发》

4、《计算机体系结构与SoC设计》

处理器基础知识合集

RISC-V学习笔记【1】RISC-V概述

【1】8位、16位、32位、64位

除了 CISC与 RISC 之分,处理器指令集架构的位数也是一个重要的概念。通俗来讲处理器架构的位数是指通用寄存器的宽度,其决定了寻址范围的大小、数据运算能力的强弱譬如32位架构的处理器,其通用寄存器的宽度为 32位,能够寻址的范围为 232Byte,即4GB的寻址空间,运算指令可以操作的操作数为 32 位。

注意:处理器指令集架构的宽度和指令的编码长度无任何关系。并不是说 64 位架构的指令长度为 64位(这是一个常见的误区)。从理论上来讲,指令本身的编码长度越短越好因为可以节省代码的存储空间。因此即便在64 位的架构中,也大量存在16位编码的指

且基本上很少出现过 64 位长的指令编码。

综上所述,在不考虑任何实际成本和实现技术的前提下,理论上来讲:。通用寄存器的宽度,即指令集架构的位数越多越好,因为这样可以带来更大的寻址范围和更强的运算能力。

指令编码的长度越短越好,因为这样可以更加节省代码的存储空间常见的架构位数分为8位、16位、32位和64位。早期的单片机以8位和 16 位为主,知名的 8051 单片机是使用广泛的8位架构。

目前主流的嵌入式微处理器均在向 32 位架构转移。

目前主流的移动手持、个人计算机和服务器领域,均使用 64 位架构。

【2】CISC、RISC

常见的指令集架构大体上可以分为两大类:复杂指令集体系(CISC)和精简指令集体系(RISC)。

RISC全称Reduced Instruction Set Compute,精简指令集计算机。

CISC全称Complex Instruction Set Computers,复杂指令集计算机。

CISC既有简单指令也有复杂指令,后来人们发现典型程序中80%的语句都是使用计算机中20%的指令,而这20%的指令都属于简单指令;因此花再多时间去研究复杂指令,也仅仅只有20%的使用概率,并且复杂指令会影响计算机的执行速度。既然典型程序的80%都是使用简单指令完成,那剩下的20%语句用简单语句来重新组合一下模拟这些复杂指令就行了,而不需要使用这些复杂指令,于是RISC就出现了。

RISC的主要特点:

1)选取使用频率较高的一些简单指令以及一些很有用但不复杂的指令,让复杂指令的功能由使用频率高的简单指令的组合来实现。

2)指令长度固定,指令格式种类少,寻址方式种类少。

3)只有取数/存数指令访问存储器,其余指令的操作都在寄存器内完成。

4)CPU中有多个通用寄存器(比CISC的多)

5)采用流水线技术(RISC一定采用流水线),大部分指令在一个时钟周期内完成。采用超标量超流水线技术,可使每条指令的平均时间小于一个时钟周期。

6)控制器采用组合逻辑控制,不用微程序控制。

7)采用优化的编译程序

CICS的主要特点:

1)指令系统复杂庞大,指令数目一般多达200~300条。

2)指令长度不固定,指令格式种类多,寻址方式种类多。

3)可以访存的指令不受限制(RISC只有取数/存数指令访问存储器)

4)各种指令执行时间相差很大,大多数指令需多个时钟周期才能完成。

5)控制器大多数采用微程序控制。

6)难以用优化编译生成高效的目标代码程序

RISC与CISC的比较

1.RISC比CISC更能提高计算机运算速度;RISC寄存器多,就可以减少访存次数,指令数和寻址方式少,因此指令译码较快。

2.RISC比CISC更便于设计,可降低成本,提高可靠性。

3.RISC能有效支持高级语言程序。

4.CISC的指令系统比较丰富,有专用指令来完成特定的功能,因此处理特殊任务效率高。

复杂指令集最常见的例子是现在绝大多数家用计算机和网络服务器所使用的 AMD64 指令集(也叫 x86-64、x86_64、Intel 64、EM64T 等等,本文以发明人为基准称为 AMD64。)除此以外有一定使用量,和有历史意义的复杂指令集还有 IA-32、MC68000、MOS6502、Intel 8051、Intel 8080 等等。复杂指令集其复杂在于指令种类数量巨大,非常多次常用到不常用的功能都会被整合进处理器指令集中。同时复杂指令集系统每条指令的操作数寻址方式复杂,几乎所有指令都可以直接访问内存;相应的指令的机器码编码方式复杂,普遍使用不定长指令等。同时,复杂指令集系统一般没有独立的专用内存访问指令,处理器内所设置的通用寄存器数量也偏少。(例如 IA-32 没有严格意义上的通用整数寄存器,到了 AMD64 也才勉强设置了八个通用整数寄存器。)

精简指令集最常见的例子则是常见于智能设备和嵌入式平台的 ARM 指令集家族。除此以外除此以外有一定使用量,和有历史意义的精简指令集还有龙芯 LoongArch、MIPS、RISC-V、PowerPC、AVR 等等。精简指令集其精简在于指保留最基本最必要的指令,将复杂功能完全交给上层的软件算法和下层的专用外设去解决。同时精简指令集系统指令寻址方式往往非常单一,除了专门的访存指令以外所有指令都只能在寄存器范围内操作,相应的精简指令集系统普遍使用固定长度指令,也会配备相对比较多的通用寄存器。(例如上个世纪的 ARMv4T、MIPS32 就都已经有 29~31 个通用寄存器了,相比于同时期 IA-32 的 0 个。)

实际到了应用层面上,对于高级语言程序来说,对于处理器设计来说,两种指令集架构分类的实际差异已经不大了。Intel 和 AMD 的 AMD64 实现都使用了微代码,而从复杂指令翻译出来的微代码普遍都用了类 RISC 设计。本世纪初的时候还普遍认为复杂指令集处理器速度更快,到了现在精简指令集已经很强大了,完全比CISC更快。有些CISC最终也是转化为RISC进行执行了。

【3】8位的CISC——8051

8位和CISC两个似乎是矛盾的,但是8051活生生的辉煌了40年。

说起 8051 内核,几乎无人不知无人不晓。8051 作为一款生了数十年之久的微处理器内核,在8位入式微处理器内核领域,它是当之无愧的传“前辈”

自从Inlel于1980年为入式系统开发Intel MCS-51(通常简称 8051)单芯片微控制(单片机)至今,8051 内核架构已经走过将近 40个年头。Intel 还以专利转让的形式8051内核转让给了许多其他半导体公司,这些公司进一步发展出不同型号基于 8051内核微控制器芯片,因此形成了一个庞大的 8051 家族。

几十年发展下来的庞大的用户群和生态环境,以及多年来众多备受肯定的成功产品,可以说 8051内核几乎成为8 位微处理器内核的业界标杆。8051 内核架构在 1998 年失去专利保护,久经沙场的它再次进发出强大的二次生命力,各种形式的 8051 架构 MCU(微控制器Microcontroller Unit)进一步涌入市场,各种基于 8051内核的芯片产品层出不穷,各种免费版本的 8051 内核IP 也可以从各种渠道获取。

当然由于 8051 内核并没有一个统一的组织和标准进行管理,所以也存在着体系结构浪乱,各种增强型复杂多样的问题。虽然时常也都自称为 8051 内核,但是其实各有差别,琅满目让人难以分辨。但是这丝毫不影响 8051 内核的经典地位,时至今日,虽然目前微处理器内核正在经历着向32位架构迁移的大趋势,但是 8051内核仍然有着举足轻重的地位在大量的MCU、数模混合信号芯片、SoC 芯片中仍能看到 8051 内核的身影,并且在相当长的时间内,在适合8位架构处理器内核的应用领域中都将继续使用 8051 内核,可以说是“廉颇虽老,尚能饭也”。

8051 内核能在嵌入式领域取得如此成功的地位,可以归功于如下几个方面的原因。

——你似乎感受到RISC-V从其一诞生就符合以上几条的气质。

尽管如此,8051作为一款诞生了接近 40 年的8位CISC(复杂指令集)架构内核,虽然是“老骥伏析,壮心不已”,但是由于其性能低下,寻址范围受限,已经难以适应更多的新兴应用领域。随着IoT的发展和崛起,虽然嵌入式领域对于处理器内核的需求更加井喷,但是更多的是开始采用 32 位架构,且很多传统的 8 位应用领域也在开始向着32位架构迁移。这样ARM的Cortex-M系列有了成长的机会。

然而在20世纪80年代该单片机刚刚问世时,半导体的制造工艺还只能达到um 级,处理器所能达到的时钟频率偏低。而且当时硬件设计语言还处于起步阶段也缺乏自动设计的工具,软件多以手工汇编编程为主。这就导致流水线设计的优势无法得到发挥,并且每条指令需要多个时钟周期才能完成。由于上述原因,当时的指令集设计往往具有以下特点:

(1)尽量在每条指令中实现更多的功能。例如 8051的CJNE 指令,就需要在一条指令中依次实现:

①与累加器做减法

②修改进位标示

③将结果做相等比较

④根据比较结果决定是否跳转

(2)指令集庞大,以实现更多的复杂功能。例如 8051 虽然是 8 位单片机其指令集却包含高达 255 种不同的指令和格式

(3)由于以上两点,导致变长指令的出现,以提高内存利用率。8051的指令就有单字节、双字节与三字节三种不同的种类,而且除了对指令解码以外,没有其他的手段帮助判定指令长度。

(4)寻址方式众多。例如在 8051 指令集中,对数值的操作包括如下方式

①立即数寻址。将常数包含在指令中。

② 直接寻址。将内存地址包含在指令中。

③间接寻址。将内存地址放入寄存器中,然后将寄存器地址包含在指令中.

④寄存器寻址。将操作数放入寄存器中,然后将寄存器地址包含在指令中

【4】8051具备CISC的所有缺点

1)尽量在每条指今中实现更多的功能

为了在实现这些复杂功能的同时保持高吞吐率,流水线的设计者不得不花更多的时间规划流水线的各级。即便如此,有些指令依然无法实现单周期吞吐,例如上文提到的CJNE 指令,就需要两个时钟周期。

另外,现代的8051 处理器开发,早已经采用C语言代替了早期的汇编语言而高级语言的编译器往往很难把这类复杂、多功能机器指令的威力全部发挥出来有违当初指令集的设计初衷。

当然,指令集复杂这个特点也并非一无是处。由于 CISC 指令集的指令复杂也使得其代码密度(Code Density)一般要优于同等字宽的RISC处理器

2)庞大的指令集浪费逻辑资源

庞大的指令集必然导致指令的解码阶段变得更为复杂,需要耗费更多的逻辑资源。指令集被分为两部分对它们各自的解码分别占用了流水线的一级。这样设计的原因之一就是为了在庞大指令集下实现高吞吐率、高时钟频率,而不得不做出的妥协。同样时钟频率的RISC-V处理器,由于指今集比较精简,就无须做这样的妥协,从而大大节省了逻辑资源,简化了流水线设计。

3)变长指令的出现,以提高内存利用率

8051的指令有单字节、双字节和三字节三种不同的种类,除解码(Decode)外没有其他的手段帮助判定指令长度。这种变长的指令结构,导致指令之间的边界很难判定,甚至有可能导致内存的非对齐读取(Unaligned Memory Access),从而对流水线的取指器(Instruction Fetch)设计带来挑战。

8051的内存架构是哈佛架构,其代码与数据在不同的地址空间中分开存放。这就使得代码存储部分可以单独做一些优化设计。

由于8051指令集没有其他辅助手段来帮助判定指令长度,为了确定指令的边界,8051的取指器不得不为此花费比 RISC-V 更多的逻辑资源

4)众多的寻址方式

由于8051存在众多的寻址方式,使得指令集中的许多指令都可以访间内存这导致流水线的数据冲突(Data Hazard)很难判断,有时不得不通过硬件自动插入空操作( Operation,NOP)来保持数据的正确和完整。这样既消耗了逻辑资源,又降低了流水线的效率,从而对功耗和性能造成双重打击。

参考资料及书目:

《基于FPGA与RISC-V的嵌入式系统设计》作者:顾长怡

《RISC-V嵌入式开发快速入门》作者:胡振波

《第六篇:CISC vs. RISC 引发的思考》知乎:Serena Wang

《(计算机组成原理)RISC与CISC的区别》CSDN:我真不聪明

展开阅读全文

页面更新:2024-03-21

标签:寄存器   常量   体系结构   内核   指令   架构   处理器   芯片   操作   商业

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top