从零开始的RISCV架构CPU设计(2)-CISC与RISC

系列文章目录

上一节:从零开始的RISCV架构CPU设计(1)-CPU开源资料说明



前言

  从指令集架构的角度来看,现在流行的两种指令集架构为复杂指令集(Complex Instruction Set Computer)即CISC以及精简指令集(Reduced Instruction Set Computer,)即RISC。
  在CPU发展早期,CISC作为主流,凭借其灵活、指令集易拓展等优点,占据了CPU领域的半边江山,但随着其不断发展,指令集不断壮大,CISC的缺点也越来越多。针对其缺点,在20世纪80年代,无病一身轻的CPU界新星RISC架构便诞生了。


一、什么是CISC

  CISC(Complex Instruction Set Computer)指令集是由Intel公司推出的,Intel 8086处理器为最典型的代表;
  CISC的指令系统十分庞大,一般CISC架构CPU包含的指令可达300条以上,其中除了处理器常用的指令外,还包含了许多的不常用指令,一方面这使得CPU在进行相关的软件设计时更加简单灵活,功能也可更加强大,比如我们如今所熟悉的Windows系统就是在以CISC架构的CPU上运行的;但另一方面来看,实际上在CPU运行程序时,仅使用了指令集中的20%,其余80%的指令集虽已设计,但却很少用到。
  一方面,这会导致硬件利用效率不高,计算机的高性能往往通过增加硬件复杂度,压榨硬件性能所得到的,如今设计了这么多的指令,但真正常用的指令仅20%,这些很少用到的指令,增加了CPU设计的难度和开发时间,也大大增加了硬件设计的面积。
  另一方面,这也对开发者造成困扰。经过几十年的发展,CISC架构的CPU文档篇幅可以多大几千页,难以想象这么多的文档打印出来可以垒到一个桌子这么高。


二、什么是RISC

  RISC(Reduced Instruction Set Computer)架构是由Berkeley大学的David Patterson教授提出的。
  RISC架构指令集处处体现着大道至简的思想,在指令集上采用了等长指令集的设计,且仅保留了常用指令。这使得有关RISC的指令集文档在篇幅上大大减少,相较于CISC的1000多页指令集文档,RISC仅100多页;其次,在摒弃了冗长的指令后,RISC在芯片的面积上也大大降低,第一款搭载了RISC架构指令集的CPU RISC-I仅由44420个晶体管组成,而同年代的CISC设计消耗的晶体管平均在100000个左右。
  除此之外,RISC还具有一个最大的优势即开源,其相当于电脑操作系统界的Linux、手机操作系统界的Android,这一巨大优势必然能使得RISC蓬勃发展。
  但RISC是无法取代CISC的,就目前来说,RISC的发展还是不如CISC,其面临无数的挑战,如市场等,目前RISC主打的市场领域为微处理器(MCU)。


三、CISC与RISC

3.1 指令集实现架构

  · CISC
  CISC在实现指令的过程中依靠存于只读存贮器(ROM)中的微程序实现,其核心的部件为微程序控制器。一条指令会由多条微程序来实现。
· 微指令表(部分)
在这里插入图片描述

·微程序流程在这里插入图片描述
  
·
RISC
  RISC采用了硬布线逻辑,其将程序控制部件专门做成由固定时序信号控制的逻辑电路,所以不存在CISC中类似的微指令控制器部件。

3.2 指令长度

  · CISC
  CISC的指令长度不等长,如:
  IN R0,SW-DATA的机器码是001xxxxx;
  ADD R0,[n]的机器码长为010xxxxx_n;

  · RISC
  RISC指令的长度往往是相同的;各指令间指令码格式也大同小异;

3.3 访存与寻址

  · CISC
  具有的访存指令,访存方式较多,搭配较多;
  寻址方式也较多,有寄存器寻址、立即寻址、直接寻址、间接寻址、变址寻址、基址寻址、基址+变址寻址;
  · RISC
  访存指令仅有Load/Store(加载/存储)指令;

3.4 指令周期

  · CISC
  不同指令执行需要的时钟周期相差很大,指令的执行往往需要多个时钟周期;
  · RISC
  大部分指令的执行所需时钟周期相同,在采用流水线技术的前提下,大部分指令可以在一个时钟周期内完成;

3.5 编译器

  · CISC
  编译器优化实现高效代码困难;
  · RISC
  优化编译实现容易;

本节总结

  相对规整的指令形式使得RISC指令集更容易通过硬件实现,且能够在使用更少资源的情况下,达到较高的性能;
  但这种实现方式基于硬布线逻辑,这就意味着指令集架构一旦实现就不再好修改了,因为若要增删改查指令,需要对硬件重新实现;而CISC的微指令控制器相对灵活,只需要烧写存储微指令表的ROM即可实现指令的修改和拓展;


四、RISC-V架构指令集

  RISC-V是在RISC的思想上,通过若干次迭代更新后,实现的产物,自此,大量基于RISC-V指令集架构的CPU、SOC等设计涌现出来。
  目前已有许多RISC-V架构CPU:
  1)Rocket Core
  2) BOOM Core
  3)Freedom Soc
  4)蜂鸟E200系列
  大多数CPU也秉承了RISC的开源理念,在各平台上开源。详细的RISC-V指令集将在后续介绍。


五、RISC-V的大道至简

  或许通过上面的描述,大家对两种指令集架构CPU的优缺点有了一定的了解,但对RISC-V大道至简的思想还很模糊。这边我通过几个例子来给大家体现一下:
  在RISC-V中,仅设计了sub指令,并没有设计立即数减;
  立即数减通过立即数加addi来实现,如addi x2,x1,imm,该指令表示x2 = x1 + imm,imm为立即数若为负数则完成了立即数减法,因为1-2等于1+(-2),RISC-V以这样的方式用一个addi完成了两条指令的功能;addi指令还可以用于加载立即数,如addi x1,x0,imm表示x1 = x0 + imm。由于x0寄存器永远为0,所以x1 = imm;
  这样的思想在很多地方都有体现,再如条件分支跳转指令,在CISC上,我们是通过判断状态寄存器来实现的,而在RISC中不存在状态寄存器,直接通过分支跳转指令实现,且RISC-V 架构特地定义了所有的带条件跳转指令跳转目标的偏移量(相对于当前指令的地址〉都是有符号数,并且其符号位被编码在固定的位置,这使得静态预测很容易实现

  同样在产生异常时(上溢、下溢、除法除0等),RISC-V均不会产生异常,而是将当前的运算结果或目的寄存器置数为某个特定值,推荐通过软件的方法来发现这些错误。


总结

  总之,无论从架构上来看还是从指令实现上来看,RISC都透露着简单即是美的思想,这也是笔者为什么选择RISC作为本次设计的CPU架构。由于篇幅限制,本篇也仅总结了两种架构CPU的特点,每种CPU涉及的知识也仅仅是冰山一角,若对此想深入研究,也可以阅读下RISC的指令集文档。
  在下一篇系列文章,将对CPU的两种实现方式单周期(状态机)、多周期(流水线)进行介绍。

《手把手教你设计CPU——RISC-V处理器篇》

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PPRAM

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值