博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
区分RISC,CISC,Harvard architecture,Von_Neumann_architecture
阅读量:2443 次
发布时间:2019-05-10

本文共 6171 字,大约阅读时间需要 20 分钟。

分类:

RISC(Riduced Instruction Set Computer)精简指令集计算机

CISC(Complex Instruction Set Computer)复杂指令集计算机

存储器结构分类:

冯·诺伊曼结构(von Neumann architecture)又称为普林斯顿结构这种体系结构采用程序代码存储器与数据存储器合并在同一存储器里,但程序代码存储器地址与数据存储器地址分别指向不同的物理地址。程序指令宽度与数据宽度一样。数据总线和地址总线共用。

 

      随着CPU设计的发 展,pipeline的增加,指令和数据的互斥读取很影响CPU指令执行的scale程度。后来,哈佛大学提出一种的新的结构

 

哈佛结构与冯·诺依曼结构的最大区别在于冯·诺依曼结构的计算机采用代码与数据的统一编址,而哈佛结构是独立编址的,代码空间与数据空间完全分开

目前使用哈佛结构的中央处理器和微控制器有很多,除了上面提到的Microchip公司的PIC系列芯片,还有摩托罗拉公司的MC68系列、Zilog公司的Z8系列、ATMEL公司的AVR系列和安谋公司的ARM9、ARM10和ARM11,51单片机也属于哈佛结构

哈弗结构需要CPU提供大量的数据线,因而很少使用哈佛结构作为CPU外部构架来使用。但是对于CPU内部,通过使用 不同的数据和指令cache,可以有效的提高指令执行的效率,因而目前大部分计算机体系都是CPU内部的哈弗结构+CPU外部的风诺伊曼的结构 

哈佛体系结构(Harvard architecture):

是一种将程序指令存储和数据存储分开的存储器结构。首先到程序指令存储器中读取程序指令内容,解码后得到数据地址,再到相应的数据存储器中读取数据,并进行下一步的操作(通常是执行)。程序指令存储和数据存储分开,数据和指令的存储可以同时进行,可以使指令和数据有不同的数据宽度。16芯片的程序指令是14位宽度,而数据是8位宽度。

哈佛结构的微处理器通常具有较高的执行效率。其程序指令和数据指令分开组织和存储的,执行时可以预先读取下一条指令

  目前使用哈佛结构的和有很多,除了上面提到的公司的系列芯片,还有的MC68系列、公司的Z8系列、公司的AVR系列和公司的ARM9、ARM10和ARM11

 

Harvard architecture

 

RISC是精简指令集计算机,现在很多嵌入式微处理器都是RISC,例如常用的ARM,MIPS, POWERPC等。它有一个特征就是指令是等长的。这就为提高执行指令的效率提供了方便

1.    采用高效的流水线操作:使指令在流水线中并行地操作,从而提高处理数据和指令的速度。

2.    指令格式的规格化和简单化:为与流水线结构相适应且提高流水线的效率,指令的格式必须趋于简单和固定的规式。比如指令采用16位或32位的固定的长度,并且指令中的操作码字段、操作数字段都尽可能具有统一的格式。此外,尽量减少寻址方式,从而使硬件逻辑部件简化且缩短译码时间,同时也提高了机器执行效率和可靠性。

3.    采用面向寄存器堆的指令:RISC结构采用大量的寄存器——寄存器操作指令,使指令系统更为精简,控制部件更为简化,指令执行速度大大提高。由于VLSl技术的迅速发展,使得在一个芯片上做大量的寄存器成为可能,这也促成了RISC结构的实现。

4. 采用load/str指令结构:在ClSC结构中,大量设置微处理器中存放数据和各种程序的装置"存储器——存储器操作指令,频繁地访问内存。将会使执行速度降低。RISC结构的指令系统中,只有装入存储指令可以访问内存,而其它指令均在寄存器之间对数据进行处理。用装入指令从内存中将数据取出,送到寄存器;在寄存器之间对数据进行快速处理,并将它暂存在那里,以便再有需要时,不必再次访问内存。在适当的时候,使用一条存储指令再将这个数据送回内存。采用这种方法可以提高指令执行的速度.

单片机中,MCS-51系列的单片机属于CISC的体系结构;AVR系列的单片机则属于RISC的体系结构.

 

CISC是复杂指令集计算机,TI的DSP系列,指令是不等长的。但是一条指令可以完成RISC的好几条指令能完成的任务

体系结构的差异更重要

  微控制器之间的各种差异要比RISC和CISC种类上的差异重要得多。冯.诺依曼体系结构(Von Neuman)与哈佛体系结构(Harvard)之争就是此类差异之一。另外一种就是基于寄存器体系结构和基于累加器体系结构的差异。在冯.诺依曼体系结构中,数据和程序存储器是共享数据总线的。数据总线共享有很多优点,比如减小总线的开销。另外一个优点在于能够把RAM映射到程序空间,这样设备也能访问EEPROM中的内存。

  而对于哈佛体系结构的计算机,程序和数据总线是分开的。这种方式的优势在于能够在一个时钟周期内同时读取程序和数据,这样就相应地减少了执行每一条指令所需的时钟周期。早期的哈佛架构的计算机是不能把查找表储存在程序存储器中的,而这个问题在现在的大多数设备中已经解决了。

  哈佛体系结构计算机中存在的另外一个问题就是,如果要和外部的程序和数据存储器进行交互,对于两部分存储器来说,由于地址总线和数据总线的相互独立性,就需要额外增加大量的芯片管脚。因此,只有当至少有一种存储器的类型是内部的情况下,微处理器才会采用哈佛体系结构。

  在基于累加器体系结构中,累加器既是数学运算单元(ALU)的数据源之一,又是ALU存放操作结果的地方。通常基于累加器体系结构的微处理器,能够在累加器与程序存储器中任何位置的存储单元或是RAM之间进行各种数学或逻辑操作。这种架构的优势就在于对于内存地址的访问更为方便快捷。

基于寄存器体系结构的微处理器中,会有一系列的寄存器直接与ALU相连。这种情况的好处在于不需要把所有的数据都压进一个累加器中,从而减少了许多在累加器架构中存在的“move”指令。因此,与把所有数据都要推进累加器中的情况相比,基于寄存器架构的微处理器大大提高了ALU的吞吐能力。

       冯.诺依曼结构,又称为普林斯顿结构。是一种经典的体系结构,有CPU,总线,外部存储器组成。这种体系结构采用程序代码存储器与数据存储器合并在同一存储器里,但程序代码存储器地址与数据存储器地址分别指向不同的物理地址。程序指令宽度与数据宽度一样。数据总线和地址总线共用。
       但是随着CPU设计的发 展,pipeline的增加,指令和数据的互斥读取很影响CPU指令执行的scale程度。后来,哈佛大学提出一种的新的结构,这种结构采用数据存储器与程序代码存储器分开,各自有自己的数据总线与地址总线。但这是需要CPU提供大量的数据线,因而很少使用哈佛结构作为CPU外部构架来使用。但是对于CPU内部,通过使用 不同的数据和指令cache,可以有效的提高指令执行的效率,因而目前大部分计算机体系都是CPU内部的哈弗结构+CPU外部的风诺伊曼的结构 
       arm7系列的CPU有很多款,其中部分CPU没有内部cache的,比如arm7TDMI,就是纯粹的风诺伊曼结构,其他有内部cache且数据和指令的cache分离的cpu则使用了哈弗结构

新技术使得差异在减小  

  CISC控制器在实现了管道技术之后,使得一条指令基本上在一个时钟周期之内就能够执行完,很大地改善了机器性能。但是,这种流水线操作有个很大的弊病在于每次的跳转或者执行分支指令,又或者是中断发生,都有可能导致管道内数据泛滥,反而导致更长的指令周期。虽然有一些方法能够降低这种不良效果,但是基本上都需要在软件中进行大量处理而最终会降低许多应用程序代码效率。

随着技术的进步,RISC和CISC机型之间的鸿沟已经越来越小,特别是对于市场的高端用户来说,这种差异已经逐渐变得难以区分了。

RISC是精简指令集计算机,现在很多嵌入式微处理器都是RISC,例如常用的ARM,MIPS, POWERPC等。它有一个特征就是指令是等长的。这就为提高执行指令的效率提供了方便,大部分处理器可以做到平均一个时种处理一条指令。CISC是复杂指令集计算机。如X86系列,TI的DSP系列,指令是不等长的。但是一条指令可以完成RISC的好几条指令能完成的任务。这两种处理器各有所唱,都在发展当中。

哈佛结构和冯.诺依曼结构主要是指存储器结构,而非指令系统结构,与指令系统没有严格的对应关系。

评论:哈佛结构和冯.诺依曼结构都是一种存储器结构。哈佛结构是将指令存储器和数据存储器分开的一种存储器结构;而冯.诺依曼结构将指令存储器和数据存储器合在一起的存储器结构。-----注

        所谓"体系结构",是指程序员在某CPU上进行程序设计时能够使用的处理器资源,其中最重要的是处理器所提供的指令系统和寄存器组。注意体系结构 (architecture)和组成(structure)的区别:前者是处理器的逻辑抽象,是程序员关注的部分。后者是具体实现,一般为计算机系统设计人员关注。一般来说,arachitecture,structure是不同层次的概念,但两者也有一定的联系。

        以指令系统的设计为例:相同的指令系统可以通过“硬连接”或“微程序”的方法来实现。前者通过CPU的硬件电路来实现,后者通过"微程序"来实现。如果指令集以硬连接实现,那么对于复杂指令来说,电路设计就非常困难;反之,若用微程序来实现指令集,可以实现复杂指令。现代CISC处理器一般都使用微码来实现。

        在使用微码技术的处理器中,实际存在着两套不同层次的指令:一套是面向程序员的,高层的指令;一套是面向硬件实现的,底层的微码。在指令与微码之间存在着一个“解释器”,它将指令翻译成对应的微码序列。由此可以想象,指令与微码之间的关系实际上时“子程序调用”思想的推广。

 

对于CISC和RISC的实现而言, 它们所侧重的复杂性不同: CISC处理器的实现复杂性更高, 而RISC编译器的复杂性更高.  

RISC的特点

 1,RISC指令系统较小:种类的数量较少,只提供简单指令。这些指令大多都能在4,5个时钟周期内完成。

 2,指令的操作数必须预存于寄存器中,这样取指操作的时间也统一了。

 3,指令长度,寻址方式,格式都整齐划一:这样可以充分利用流水线,基本上可实现一个时钟脉冲执行一条指令的目标。

 4,RISC的子程序调用与CISC的不同:在CISC中,程序调用、返回时需将上下文保存在堆栈中,需要内存操作。而RISC将它们存放在寄存器中,而且参数也使用 寄存器传递。(若存在嵌套的子程序调用,中间调用过程中的上下文还是要从寄存器"溅出"(spill)到堆栈中,而"叶"子程序不需要。)

 5,RISC中断可视为特殊的子程序链接:CISC中发生中断时,所有的寄存器内容都被压入堆栈,而RISC对中断进行区分对待,分为轻量级和重量级。对轻量级中断 只保存需要保存的寄存器内容;对重量级中断的处理如同常规中断。

 6,RISC都采用流水线、高速缓存、不使用微码。

        当然,RISC也有它的缺点:代码密度不高,可执行文件体积较大,汇编代码可读性较差。代码密度不高是个值得关注的问题:若不使用cache,会需要更大的指令存储空间,取指时也占用更大的存储器带宽。若采用cache,又会降低cache的命中率。

RISC vs ARM

        作为RISC的新秀,ARM有它自己的特点。下文介绍ARM与RISC的比较,并归纳一下人们对RISC概念理解的误区:

ARM的独特

1,ARM可提供压缩形式的指令集:Thumb,它将ARM指令集的一个子集编码为16位指令。处理器在执行时可以切换到执行Thumb指令模式。

2,在算术指令中,可以将第二操作数在运算之前移位(如:LDREQ R0,[R1,R2,LSR #16]!)。注意:移位通过组合电路完成,而不需时钟脉冲的作用,所以不影响指令执行时间。

3,ARM支持指令的条件执行。一般处理器都只支持指令的条件转移。条件转移会使已在流水线中的后续指令作废,使流水线"断流",而条件执行避免了此情况。(当一个条件执行部分的大小超过3条指令时,还是使用条件转移指令为好)。

4,指令的执行结果是否影响程序状态寄存器中的标志位由程序员决定:在操作码后加上s(如:add - adds)就可以使运算结果改变标志位。

        现代的通过计算机都是基于冯.诺依曼结构:可执行程序映象位于磁盘中,运行时,OS将它加载到内存中。

        但在用于I/O比较频繁,I/O数据量大的情况下(比如网络处理器),冯.诺依曼结构就引入了瓶颈:设想一下,当外设发起一个DMA请求并得到CPU的许可时,总线被外设所占用,CPU暂时放弃了对总线的控制,它无法访问内存来取指。早期未实现流水线的CPU采用"周期挪用"技术,利用CPU访问内存的空闲时钟周期进行DMA,解决了CPU与DMA在总线上相互排斥的问题。但随着流水线的采用,特别时在RISC处理器中,CPU在取指的同时也执行指令,内存访问已经没有空闲的时钟周期了。对于拥有较多寄存器的RISC处理器来说,数据往往就位于寄存器中,在进行DMA的时候,CPU可以执行指令。但当 CPU从内存中取指时,由于总线被外设占用,流水线被破坏。

 

        针对上述问题,哈佛结构也许是个解决办法:在嵌入式系统中,倾向于采用分别使用程序和数据两个存储器、两条总线的"哈佛结构"。在哈佛结构下,即使数据总线被占用,CPU也能进行取指(当CPU需要访问数据内存时,它不得不停下来)。        

        实际上,现代处理器都广泛采用了缓存技术,取指、取数据都通过cache来进行。对cache,也可分为哈佛结构和冯.诺依曼结构:是采用一个统一的 cache,还是分成数据和程序两个cache(这种情况被称为改进的哈佛结构)?在采用了流水线的CPU中,理想情况下CPU在每个时钟周期都需要取指,如果同时流水线中执行的指令需要访问内存,那两者就相互冲突了。要么让流水线暂停一拍,不取指;要么采用哈佛结构的cache,取指和访内井水不犯河水     

     哈佛结构是一种并行体系结构,它的主要特点是将程序和数据存储在不同的存储空间中,即程序存储器和数据存储器是两个独立的存储器,每个存储器独立编址、独立访问。与两个存储器相对应的是系统的4条总线:程序的数据总线与地址总线,数据的数据总线与地址总线。这种分离的程序总线和数据总线允许在一个机器周期内同时获得指令字(来自程序存储器)和操作数(来自数据存储器),从而提高了执行速度,使数据的吞吐率提高了1倍。又由于程序和数据存储器在两个分开的物理空间中,因此取指和执行能完全重叠。CPU首先到程序指令存储器中读取程序指令内容,解码后得到数据地址,再到相应的数据存储器中读取数据,并进行下一步的操作(通常是执行)。

 哈佛结构采用数据存储器与程序代码存储器分开,各自有自己的数据总线与地址总线。但这是需要CPU提供大量的数据线,因而很少使用哈佛结构作为CPU外部构架来使用。但是对于 CPU内部,通过使用不同的数据和指令cache,可以有效的提高指令执行的效率,

因而目前大部分计算机体系都是CPU内部的哈弗结构+CPU外部的冯·诺伊曼的结构

转载地址:http://ahnqb.baihongyu.com/

你可能感兴趣的文章
编程秘籍:使C语言高效的四大绝招(转)
查看>>
计算机加锁 把U盘变成打开电脑的钥匙(转)
查看>>
Fedora Core 4 基础教程 (上传完毕)(转)
查看>>
删除MSSQL危险存储过程的代码(转)
查看>>
红旗软件:树立国际的Linux品牌(转)
查看>>
Linux学习要点(转)
查看>>
影响mysqld安全的几个选项(转)
查看>>
最新版本Linux Flash 9 Beta开放发布(转)
查看>>
mysql事务处理(转)
查看>>
Fedora 显示设备配置工具介绍(转)
查看>>
FREEBSD 升级及优化全攻略(转)
查看>>
系统移民须知:Linux操作系统安装要点(转)
查看>>
在redhat系统中使用LVM(转)
查看>>
Gentoo 2005.1 完整的USE参数清单中文详解(转)
查看>>
如何在嵌入式Linux产品中做立体、覆盖产品生命期的调试 (5)
查看>>
手机最新触控技术
查看>>
Kubuntu 项目遭遇困难(转)
查看>>
kubuntu使用日记之 eva的配置使用(转)
查看>>
unix下几个有用的小shell脚本(转)
查看>>
QQ病毒的系列处理办法(转)
查看>>