注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

易拉罐的博客

心静自然凉

 
 
 

日志

 
 

转 CISC与RISC  

2011-01-26 19:33:30|  分类: 嵌入式系统 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

CISC,Complex Instruction Set Computer,复杂指令系统计算机。

RISC,Reduced Instruction Set Computer,精简指令系统计算机。虽然这两个名词是针对计算机的,但下文我们仍然只对指令集进行研究。

 

(1)CISC的产生、发展和现状

  一开始,计算机的指令系统只有很少一些基本指令,而其他的复杂指令全靠软件编译时通过简单指令的组合来实现。举个最简单的例子,一个a乘以b的操作就可以转换为a个b相加来做,这样就用不着乘法指令了。当然,最早的指令系统就已经有乘法指令了,这是为什么呢?因为用硬件实现乘法比加法组合来得快得多。

  由于那时的计算机部件相当昂贵,而且速度很慢,为了提高速度,越来越多的复杂指令被加入了指令系统中。但是,很快又有一个问题:一个指令系统的指令数是受指令操作码的位数所限制的,如果操作码为8位,那么指令数最多为256条(2的8次方)。

  那么怎么办呢?指令的宽度是很难增加的,聪明的设计师们又想出了一种方案:操作码扩展。前面说过,操作码的后面跟的是地址码,而有些指令是用不着地址码或只用少量的地址码的。那么,就可以把操作码扩展到这些位置。

  举个简单的例子,如果一个指令系统的操作码为2位,那么可以有00、01、10、11四条不同的指令。现在把11作为保留,把操作码扩展到4位,那么就可以有00、01、10、1100、1101、1110、1111七条指令。其中1100、1101、1110、1111这四条指令的地址码必须少两位。

  然后,为了达到操作码扩展的先决条件:减少地址码,设计师们又动足了脑筋,发明了各种各样的寻址方式,如基址寻址、相对寻址等,用以最大限度的压缩地址码长度,为操作码留出空间。

  就这样,慢慢地,CISC指令系统就形成了,大量的复杂指令、可变的指令长度、多种的寻址方式是CISC的特点,也是CISC的缺点:因为这些都大大增加了解码的难度,而在现在的高速硬件发展下,复杂指令所带来的速度提升早已不及在解码上浪费点的时间。除了个人PC市场还在用x86指令集外,服务器以及更大的系统都早已不用CISC了。x86仍然存在的唯一理由就是为了兼容大量的x86平台上的软件。

  (2)RISC的产生、发展和现状

  1975年,IBM的设计师John Cocke研究了当时的IBM370CISC系统,发现其中占总指令数仅20%的简单指令却在程序调用中占了80%,而占指令数80%的复杂指令却只有20%的机会用到。由此,他提出了RISC的概念。
事实证明,RISC是成功的。80年代末,各公司的RISC CPU如雨后春笋般大量出现,占据了大量的市场。到了90年代,x86的CPU如pentium和k5也开始使用先进的RISC核心。

  RISC的最大特点是指令长度固定,指令格式种类少,寻址方式种类少,大多数是简单指令且都能在一个时钟周期内完成,易于设计超标量与流水线,寄存器数量多,大量操作在寄存器之间进行。由于下文所讲的CPU核心大部分是讲RISC核心,所以这里就不多介绍了,对于RISC核心的设计下面会详细谈到。

  RISC目前正如日中天,Intel的Itanium也将最终抛弃x86而转向RISC结构。

 51系列单片机就是CISC的,而AVR、PIC、ARM等就是RISC

http://i-math.zsu.edu.cn/ICS/01/index1.htm

 

RISC的设计重点在于降低由硬件执行指令的复杂度,因为软件比硬件容易提供更大的灵活性和更高的智能,因此RISC设计对编译器有更高的要求;CISC的设计则更侧重于硬件执行指令的功能,使CISC的指令变得很复杂。总之RISC对编译器的要求高,CISC强调硬件的复杂性,CPU的实现更复杂

RISC设计思想准则:

1. 指令集----RISC处理器减少指令集的种类,通常一个周期一条指令,也就是说指令的周期是固定的,编译器或程序员通过几条指令完成一个复杂的操作;CISC的指令长度通常不固定。

2. 流水线----流水线的本质就是CPU并行运行,只是并行运行不像FPGA中的那么直接,它只是把一条指令分成几个更小的执行单元;CISC指令的执行需要调用一个微程序,明显没有RISC的指令吞吐量大。

3. 寄存器----RISC的寄存器拥有更多的通用寄存器,寄存器操作较多,例如ARM具有27个寄存器,CISC的寄存器都是用于特定目的的。

4. Load-store结构----处理器只处理寄存器中的数据,这是因为访问存储器很耗时,同时对外部存储器的读写会影响其寿命;CISC能够在存储器中直接运行

5. 寻址方式简化,不像CISC那样的复杂众多的寻址方式

 

ARM对RISC的改进

      ARM虽然宣称自己是RISC指令集,但是并没有完全依照RISC来设计,可以说是在RISC和CISC的融合之后,又做了适合自己的改进。
      由于ARM是以RISC为基础来设计的,所以ARM很难避免指令代码密度不高以及指令功能简单的问题。为了避免这些问题,ARM在大多数指令上加上了条件执行域和桶形移位的预处理功能,则样可以减少移位指令和条件指令的数量。有些指令因为功能特殊,也被设计成了多周期执行的指令,比如多寄存器的装载和存储。这些已经可以在32位指令长度下尽可能的避免RISC的缺陷了。也许是为了更好的解决这个问题,异或是为了符合一些16位数据宽度的外围设计,ARM设计了一套16位指令宽度的Thumb指令。Thumb指令减少了很多指令的条件执行域和一些必要的寻址方式,所以即使它采用了一半的指令宽度,也只能缩减30%的代码空间。不过设计这套指令也许不是因为缩减代码空间,因为Thumb指令在16位外围位宽的情况下,会获得更好的性能。
      除了上述的改进外,ARM也增加了很多原先只有DSP才有的指令来满足自身的需求,并且针对硬件特性的做了些修改,这让ARM处理器在处理实际应用时更加高效。这些正说明一个道理,RISC和CISC并不能说谁好谁坏,具体的应用还要看芯片自身的需要。


一、背景知识:

指令的强弱是CPU的重要指标,指令集是提高微处理器效率的最有效工具之一。从现阶段的主流体系结构讲,指令集可分为复杂指令集(CISC)精简指令集(RISC)两部分。相应的,微处理随着微指令的复杂度也可分为CISCRISC这两类。

CISC是一种为了便于编程和提高记忆体访问效率的晶片设计体系。在20世纪90年代中期之前,大多数的微处理器都采用CISC体系——包括Intel80x86Motorola68K系列等。 即通常所说的X86架构就是属于CISC体系的 RISC是为了提高处理器运行的速度而设计的晶片体系。它的关键技术在于流水线操作(Pipelining:在一个时钟周期里完成多条指令。而超流水线以及超标量技术已普遍在晶片设计中使用。RISC体系多用于非x86阵营高性能微处理器CPU。像HOLTEK MCU系列等。 ARM Advanced RISC Machines ),既可以认为是一个公司的名字,也可以认为是对一类微处理器的通称,还可以认为是一种技术的名字。而ARM体系结构目前被公认为是业界领先的32 位嵌入式RISC 微处理器结构。 所有ARM处理器共享这一体系结构。 因此我们可以从其所属体系比较入手,来进行X86指令集与ARM指令集的比较。

二、CISCRISC的比较

(一)CISC

1CISC体系的指令特征 使用微代码。指令集可以直接在微代码记忆体(比主记忆体的速度快很多)里执行,新设计的处理器,只需增加较少的电晶体就可以执行同样的指令集,也可以很快地编写新的指令集程式。 庞大的指令集。可以减少编程所需要的代码行数,减轻程式师的负担。高阶语言对应的指令集:包括双运算元格式、寄存器到寄存器、寄存器到记忆体以及记忆体到寄存器的指令。

2CISC体系的优缺点 优点:能够有效缩短新指令的微代码设计时间,允许设计师实现CISC体系机器的向上相容。新的系统可以使用一个包含早期系统的指令超集合,也就可以使用较早电脑上使用的相同软体。另外微程式指令的格式与高阶语言相匹配,因而编译器并不一定要重新编写。 缺点:指令集以及晶片的设计比上一代产品更复杂,不同的指令,需要不同的时钟周期来完成,执行较慢的指令,将影响整台机器的执行效率。

(二)RISC

1RISC体系的指令特征 精简指令集:包含了简单、基本的指令,透过这些简单、基本的指令,就可以组合成复杂指令。 同样长度的指令:每条指令的长度都是相同的,可以在一个单独操作里完成。 单机器周期指令:大多数的指令都可以在一个机器周期里完成,并且允许处理器在同一时间内执行一系列的指令。

2RISC体系的优缺点 优点:在使用相同的晶片技术和相同运行时钟下,RISC系统的运行速度将是CISC24倍。由于RISC处理器的指令集是精简的,它的记忆体管理单元、浮点单元等都能设计在同一块晶片上。RISC处理器比相对应的CISC处理器设计更简单,所需要的时间将变得更短,并可以比CISC处理器应用更多先进的技术,开发更快的下一代处理器。 缺点:多指令的操作使得程式开发者必须小心地选用合适的编译器,而且编写的代码量会变得非常大。另外就是RISC体系的处理器需要更快记忆体,这通常都集成于处理器内部,就是L1 Cache(一级缓存)。 综合上面所述,若要再进一步比较CISCRISC之差异,可以由以下几点来进行分析:

 

1指令的形成 CISC因指令复杂,故采微指令码控制单元的设计,而RISC的指令90%是由硬体直接完成,只有10%的指令是由软体以组合的方式完成,因此指令执行时间上RISC较短,但RISC所须ROM空间相对的比较大,至于RAM使用大小应该与程序的应用比较有关系。

2定址模式 CISC的需要较多的定址模式,而RISC只有少数的定址模式,因此CPU在计算记忆体有效位址时,CISC占用的汇流排周期较多。

3指令周期 CISC指令的格式长短不一,执行时的周期次数也不统一,而RISC结构刚好相反,故适合采用管线处理架构的设计,进而可以达到平均一周期完成一指令的方向努力。显然的,在设计上RISCCISC简单,同时因为CISC的执行步骤过多,闲置的单元电路等待时间增长,不利于平行处理的设计,所以就效能而言RISCCISC还是站了上风,但RISC因指令精简化后造成应用程式码变大,需要较大的程式记忆体空间,且存在指令种类较多等等的缺点。

4大量使用寄存器

 

(三)X86指令集和ARM指令集:

(1) X86指令集: X86指令集是Intel为其第一块16CPU(i8086)专门开发的,后来的电脑中为提高浮点数据处理能力而增加的X87芯片系列数学协处理器另外使用X87指令,以后就将X86指令集和X87指令集统称为X86指令集。虽然随着CPU技术的不断发展,Intel陆续研制出更新型的i80386i80486,但为了保证电脑能继续运行以往开发的各类应用程序以保护和继承丰富的软件资源,所以Intel公司所生产的所有CPU仍然继续使用X86指令集,所以它的CPU仍属于X86系列。由于Intel X86系列及其兼容CPU都使用X86指令集,所以就形成了今天庞大的X86系列及兼容CPU阵容。 除了具备上述CISC的诸多特性外,X86指令集有以下几个突出的缺点:

l 通用寄存器组————CPU内核结构的影响 X86指令集只有8个通用寄存器。所以,CISCCPU执行是大多数时间是在访问存储器中的数据,而不是寄存器中的。这就拖慢了整个系统的速度。 RISC系统往往具有非常多的通用寄存器,并采用了重叠寄存器窗口和寄存器堆等技术使寄存器资源得到充分的利用。

l 解码————CPU的外核的影响 解码器(Decode Unit),这是x86CPU才有的东西。其作用是把长度不定的x86指令转换为长度固定的类似于RISC的指令,并交给RISC内核。解码分为硬件解码和微解码,对于简单的x86指令只要硬件解码即可,速度较快,而遇到复杂的x86指令则需要进行微解码,并把它分成若干条简单指令,速度较慢且很复杂。Athlon也好,PIII也好,老式的CISCX86指令集严重制约了他们的性能表现。

l 寻址范围小——约束了用户需要 即使AMD研发出X86-64架构时,虽然也解决了传统X86固有的一些缺点,比如寻址范围的扩大,但这种改善并不能直接带来性能上的提升。

 

 (2) ARM指令集: 相比而言,以RISC为架构体系的ARM指令集的指令格式统一,种类比较少,寻址方式也比复杂指令集少。当然处理速度就提高很多。ARM处理器都是所谓的精简指令集处理机(RISC)。其所有指令都是利用一些简单的指令组成的,简单的指令意味着相应硬件线路可以尽量做到最佳化,而提高执行速率,相对的使得一个指令所需的时间减到最短。 而因为指令集的精简,所以许多工作都必须组合简单的指令,而针对较复杂组合的工作便需要由『编译程式』(compiler) 来执行,而 CISC 体系的X86指令集因为硬体所提供的指令集较多,所以许多工作都能够以一个或是数个指令来代替,compiler 的工作因而减少许多。 除了具备上述RISC的诸多特性之外,可以总结ARM指令集架构的其它一些特点如下:

l ARM的特点

1 体积小,低功耗,低成本,高性能

2 支持 Thumb 16 位) /ARM 32 位)双指令集,能很好的兼容 8 /16 位器件;

3 大量使用寄存器,指令执行速度更快;

4 大多数数据操作都在寄存器中完成;

5 寻址方式灵活简单,执行效率高;

6 指令长度固定;

7 流水线处理方式

8 Load_store结构 l ARM的一些非RISC思想的指令架构: 1 允许一些特定指令的执行周期数字可变,以降低功耗,减小面积和代码尺寸。 2 增加了桶形移位器来扩展某些指令的功能。 3 使用了16位的Thumb指令集来提高代码密度。 4 使用条件执行指令来提高代码密度和性能。 5 使用增强指令来实现数据信号处理的功能。

 

(四)小结: 因此,大量的复杂指令、可变的指令长度、多种的寻址方式这些CISC的特点,也是CISC的缺点,因为这些都大大增加了解码的难度,而在现在的高速硬件发展下,复杂指令所带来的速度提升早已不及在解码上浪费点的时间。除了个人PC市场还在用X86指令集外,服务器以及更大的系统都早已不用CISC了。x86仍然存在的理由就是为了兼容大量的x86平台上的软件,同时,它的体系结构组成的实现不太困难。 RISC体系的ARM指令最大特点是指令长度固定,指令格式种类少,寻址方式种类少,大多数是简单指令且都能在一个时钟周期内完成,易于设计超标量与流水线,寄存器数量多,大量操作在寄存器之间进行。优点是不言而喻的,因此,ARM处理器才成为是当前最流行的处理器系列,是几种主流的嵌入式处理体系结构之一。 RISC目前正如日中天,Intel似乎也将最终抛弃x86而转向RISC结构。 而实际上,随着RISC处理器在嵌入式领域中大放异彩,传统的X86系列CISC处理器在Intel公司的积极改进下也克服了功耗过高的问题,成为一些高性能嵌入式设备的最佳选择,发展到今天,CISCRISC之间的界限已经不再是那么泾渭分明,RISC自身的设计正在变得越来越复杂(当然并不是完全依着CISC的思路变复杂),因为所有实际使用的CPU都需要不断提高性能,所以在体系结构中加入新特点就在所难免。另一方面,原来被认为是CISC体系结构的处理器也吸收了许多RISC的优点,比如Pentium处理器在内部的实现中也是采用的RISC的架构,复杂的指令在内部由微码分解为多条精简指令来运行,但是对于处理器外部来说,为了保持兼容性还是以CISC风格的指令集展示出来。

 

http://blog.csdn.net/do2jiang/archive/2009/09/12/4545729.aspx

  评论这张
 
阅读(364)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017