几个基础材料 (源:http://jwc./zq/signal/new/importent/zhang5_6/feng.htm http://jwc./zq/signal/new/importent/zhang5_6/harvard.htm http:///dingjun/html/14/84FB43402106C575.html)
冯.诺曼结构
1945年,冯.诺曼首先提出了“存储程序”的概念和二进制原理,后来,人们把利用这种概念和原理设计的电子计算机系统统称为“冯.诺曼型结构”计算机。冯.诺曼结构的处理器使用同一个存储器,经由同一个总线传输,如下图所示: 图 冯.诺曼结构 冯.诺曼结构处理器具有以下几个特点:
冯.诺曼的主要贡献就是提出并实现了“存储程序”的概念。由于指令和数据都是二进制码,指令和操作数的地址又密切相关,因此,当初选择这种结构是自然的。但是,这种指令和数据共享同一总线的结构,使得信息流的传输成为限制计算机性能的瓶颈,影响了数据处理速度的提高。 在典型情况下,完成一条指令需要3个步骤,即:取指令、指令译码和执行指令。从指令流的定时关系也可看出冯.诺曼结构与哈佛结构处理方式的差别。举一个最简单的对存储器进行读写操作的指令,如下图所示,指令1至指令3均为存、取数指令,对冯.诺曼结构处理器,由于取指令和存取数据要从同一个存储空间存取,经由同一总线传输,因而它们无法重叠执行,只有一个完成后再进行下一个。 图 冯.诺曼结构处理器指令流的定时关系示意图
哈佛结构 数字信号处理一般需要较大的运算量和较高的运算速度,为了提高数据吞吐量,在数字信号处理器中大多采用哈佛结构,如下图所示 图 哈佛结构 与冯.诺曼结构处理器比较,哈佛结构处理器有两个明显的特点:
后来,又提出了改进的哈佛结构,如下图所示 图 改进型哈佛结构 其结构特点为:
在典型情况下,完成一条指令需要3个步骤,即:取指令、指令译码和执行指令。从指令流的定时关系也可看出冯.诺曼结构与哈佛结构处理方式的差别。举一个最简单的对存储器进行读写操作的指令,如下图所示,指令1至指令3均为存、取数指令,对冯.诺曼结构处理器,由于取指令和存取数据要从同一个存储空间存取,经由同一总线传输,因而它们无法重叠执行,只有一个完成后再进行下一个。 图 冯.诺曼结构处理器指令流的定时关系示意图 如果采用哈佛结构处理以上同样的3条存取数指令,如下图所示,由于取指令和存取数据分别经由不同的存储空间和不同的总线,使得各条指令可以重叠执行,这样,也就克服了数据流传输的瓶颈,提高了运算速度。 哈佛结构强调了总的系统速度以及通讯和处理器配置方面的灵活性。 图 哈佛结构处理器指令流的定时关系示意图
------------------------------------------------------- arm7系列的CPU有很多款,其中部分CPU没有内部cache的,比如arm7TDMI,就是纯粹的冯·诺依曼结构,其他有内部cache、且数据和指令的cache分离的cpu则使用了哈弗结构。
哈佛结构是一种将程序指令存储和数据存储分开的存储器结构。中央处理器首先到程序指令存储器中读取程序指令内容,解码后得到数据地址,再到相应的数据存储器中读取数据,并进行下一步的操作(通常是执行)。“程序指令存储和数据存储分开,可以使指令和数据有不同的数据宽度”,如Microchip公司的PIC16芯片的程序指令是14位宽度,而数据是8位宽度。
冯·诺依曼体系和哈佛总线体系的区别
-------------------------------------------------------- http://blog.sina.com.cn/s/blog_4c60c6360100f9bs.html 是什么结构要看总线结构的。51单片机虽然数据指令存储区是分开的,但总线是分时复用得,所以顶多算改进型的哈佛结构。ARM9虽然是哈佛结构,但是之前的版本也还是冯·诺依曼结构。早期的X86能迅速占有市场,一条很重要的原因,正是靠了冯·诺依曼这种实现简单,成本低的总线结构。现在的处理器虽然外部总线上看是诺依曼结构的,但是由于内部CACHE的存在,因此实际上内部来看已经算是改进型哈佛结构的了。至于优缺点,哈佛结构就是复杂,对外围设备的连接与处理要求高,十分不适合外围存储器的扩展。所以早期通用CPU难以采用这种结构。而单片机,由于内部集成了所需的存储器,所以采用哈佛结构也未尝不可。现在的处理器,依托CACHE的存在,已经很好的将二者统一起来了。
冯诺依曼结构中执行取指令后在执行译码时,还可以再取啊,就像流水线,没必要等一条完了再去取指令啊。只不过哈佛能同时取数据和指令罢了。
-------------------------------------------------------- http://bbs./bbsdetail-271991-18.html PIC系列单片机与MCS-51系列单片机的区别MCS-51单片机有着嵌入式处理器经典的体系结构,这种体系结构在当前嵌入式处理器的高端ARM系列上仍然在延续,这就是哈佛结构。相对于大名鼎鼎的冯·诺依曼结构,哈佛结构的知名度显然逊色许多,但在嵌入式应用领域,哈佛结构却拥有着绝对的优势。哈佛结构与冯·诺依曼结构的最大区别在于冯·诺依曼结构的计算机采用代码与数据的统一编址,而哈佛结构是独立编址的,代码空间与数据空间完全分开。 在通用计算机系统中,应用软件的多样性使得计算机要不断地变化所执行的代码的内容,并且频繁地对数据与代码占有的存储器进行重新分配,这种情况下,冯·诺依曼结构占有绝对优势,因为统一编址可以最大限度地利用资源,而哈佛结构的计算机若应用于这种情形下则会对存储器资源产生理论上最大可达50%的浪费,这显然是不合理的。 但是在嵌入式应用中,系统要执行的任务相对单一,程序一般是固化在硬件里。当然这时使用冯·诺依曼结构也完全可以,代码区和数据区在编译时一次性分配好了而已,但是其灵活性得不到体现,所以现在大量的单片机也还在沿用冯·诺依曼结构,如TI的MSP430系列、Freescale的HCS08系列等。 那是为什么说哈佛结构有优势呢?嵌入式计算机在工作时与通用计算机有着一些区别:嵌入式计算机在工作期间的绝大部分时间是无人值守的,而通用计算机工作期间一般是有人操作的;嵌入式计算机的故障可能会导致灾难性的后果,而通用计算机一般就是死死机,重新启动即可。这两点决定了对嵌入式计算机的一个基本要求:可靠性。 使用冯·诺依曼结构的计算机,程序空间不封闭,其程序空间的数据在运行期理论上可以被修改,此外程序一旦跑飞也有可能运行到数据区。虽然都是一些不常见的特殊情况下,但是看看哈佛结构的计算机在这些情况下是怎样的:基于哈佛结构的处理器如MCS-51,不需要可以对代码段进行写操作的指令,所以不会有代码区被改写的问题;程序只能在封闭的代码区中运行,不可能跑到数据区,这也是跑飞的几率减少并且跑飞后的行为有规律(数据区的数据是不断变化的而代码区是不变的)。 所以,相对于冯·诺依曼结构,哈佛结构更加适合于那些程序固化、任务相对简单的控制系统。
说MCS-51是冯-诺依曼型是不正确的,绝大多数51单片机都是哈佛结构,PIC从12-33都是哈佛结构。
补充一下:【哈佛结构】是不允许同时访问RAM和FLASH/ROM的。只有【改进的哈佛结构】才可以同时访问RAM和FLASH/ROM。51系列部分单片机已经在低端产品上使用了流水线技术(但没有锁相环),而PIC 16位机都没有流水线(有锁相环)。 在执行速度上算是平分秋色吧。
-------------------------------------------------------- 哈佛结构冯诺依曼结构与地址是否复用没有关系 (源:http://modayu838.blog.163.com/blog/static/6443111920096631450970/) 关于这个问题,有人说51地址线复用,就是冯诺依曼结构。 很多入门的书上基本上都说:由运算器、控制器、存储器、输入设备、输出设备组成的系统都叫冯氏结构。也有的说:“程序存储器的数据线地址线”与“数据存储器的数据线地址线”共用的话,就是冯氏结构,所以51是该结构。(我认为说得太绝对了)
哈佛结构的微处理器通常具有较高的执行效率。其程序指令和数据指令分开组织和存储的,执行时可以预先读取下一条指令。目前使用哈佛结构的中央处理器和微控制器有很多,除了上面提到的Microchip公司的PIC系列芯片,还有摩托罗拉公司的MC68系列、Zilog公司的Z8系列、ATMEL公司的AVR系列和ARM公司的ARM9、ARM10和ARM11,51单片机也属于哈佛结构
评论:哈佛结构和冯.诺依曼结构都是一种存储器结构。哈佛结构是将指令存储器和数据存储器分开的一种存储器结构;而冯.诺依曼结构将指令存储器和数据存储器合在一起的存储器结构。 图2 Harvard architecture 哈佛结构采用数据存储器与程序代码存储器分开,各自有自己的数据总线与地址总线。但这是需要CPU提供大量的数据线,因而很少使用哈佛结构作为CPU外部构架来使用。但是对于 CPU内部,通过使用不同的数据和指令cache,可以有效的提高指令执行的效率,因而目前大部分计算机体系都是CPU内部的哈弗结构+CPU外部的冯·诺伊曼的结构。
---------------------------------------------------------- http://www./blog/Archive_Thread.asp?SID=18056
RISC vs CISC vs ARM【经典】这里介绍两种主流的计算机体系结构: 所谓"体系结构",是指程序员在某CPU上进行程序设计时能够使用的“处理器资源”,其中最重要的是处理器所提供的指令系统和寄存器组。注意体系结构 (architecture)和组成(structure)的区别:前者是处理器的逻辑抽象,是程序员关注的部分。后者是具体实现,一般为计算机系统设计人员关注。一般来说,arachitecture,structure是不同层次的概念,但两者也有一定的联系。 以指令系统的设计为例:相同的指令系统可以通过“硬连接”或“微程序”的方法来实现。前者通过CPU的硬件电路来实现,后者通过"微程序"来实现。如果指令集以硬连接实现,那么对于复杂指令来说,电路设计就非常困难;反之,若用微程序来实现指令集,可以实现复杂指令。现代CISC处理器一般都使用微码来实现。 在使用微码技术的处理器中,实际存在着两套不同层次的指令:一套是面向程序员的,高层的指令;一套是面向硬件实现的,底层的微码。在指令与微码之间存在着一个“解释器”,它将指令翻译成对应的微码序列。由此可以想象,指令与微码之间的关系实际上时“子程序调用”思想的推广。
微码相对于指令的特点: 1,微码代表的都是非常简单的基本操作,而指令可能非常复杂。 从处理器架构来看,可以将使用微码技术的现代CISC的基本单元视为一个快速的RISC内核。这样问题就出来了:如果不引入“解释器”,而直接使用 RISC微码作为指令,那会怎样呢?——这正是RISC的思想。 下面我们来看看使用微码实现的CISC指令集的优缺点:
这方便于复制数据结构。对于其他的复杂操作,也可以通过一条指令就实现。CISC复杂指令的寻址方式也种类繁多,操作数可以直接来自内存。但复杂指令为现代处理器技术中广泛使用的流水线技术引入了问题:在微处理器中指令的执行一般分为“预指”,“取操作数”,“运算”,“存放”等操作。对于CISC 复杂指令,他们的执行时间各不相同[note_2](有的可在4,5个时钟周期内完成,有的却需要几十个,即便对于简单指令,也会由于寻址方式的不同造成不同的执行时间)。更糟糕的是,指令长度也不一致,同一指令的长度也会因不同的寻址方式而变化。针对这些指令,如何设计流水线长度呢?若按最短指令设计流水线,当碰到复杂指令时流水线就会发生中断;若按最长指令设计流水线,执行较短指令时就会跳过某些工位,使流水线不能完全充满。 针对上述情况,以及20-80定律(80%的情况下执行的是占指令集20%的常用指令)。多数复杂指令很少用到。当使用高级语言进行程序设计时,编译器为了兼容早期的CPU,一般不会生成特殊的复杂指令。如果舍弃这些不常用的复杂指令,就能简化CPU的设计。这正是RISC的出发点。 RISC的特点 2,指令的操作数必须预存于寄存器中,这样取指操作的时间也统一了。 3,指令长度,寻址方式,格式都整齐划一:这样可以充分利用流水线,基本上可实现一个时钟脉冲执行一条指令的目标。 4,RISC的子程序调用与CISC的不同:在CISC中,程序调用、返回时需将上下文保存在堆栈中,需要内存操作。而RISC将它们存放在寄存器中,而且参数也使用寄存器传递。(若存在嵌套的子程序调用,中间调用过程中的上下文还是要从寄存器"溅出"(spill)到堆栈中,而"叶"子程序不需要。) 5,RISC中断可视为特殊的子程序链接:CISC中发生中断时,所有的寄存器内容都被压入堆栈,而RISC对中断进行区分对待,分为轻量级和重量级。对轻量级中断只保存需要保存的寄存器内容;对重量级中断的处理如同常规中断。 6,RISC都采用流水线、高速缓存、不使用微码。 当然,RISC也有它的缺点:代码密度不高,可执行文件体积较大,汇编代码可读性较差。代码密度不高是个值得关注的问题:若不使用cache,会需要更大的指令存储空间,取指时也占用更大的存储器带宽。若采用cache,又会降低cache的命中率。 RISC vs ARM ARM的独特 1,ARM可提供压缩形式的指令集:Thumb,它将ARM指令集的一个子集编码为16位指令。处理器在执行时可以切换到执行Thumb指令模式。 对RISC,CISC看法的”误区“ 1,RISC指令都是简单指令。 2,CISC的复杂指令速度慢、执行效率很低。 3,RISC处理器比CISC处理器需要更多的寄存器. 4,RISC都有流水线。 总之,RISC处理器设计的简单性使得RISC处理器在体积、功耗、散热、造价上都有优势。 [note_1] 哈佛结构,冯.诺依曼结构介绍: [note_2] 关于周期的概念: 时钟脉冲的重复周期称为时钟周期,时钟周期是CPU的基本时间计量单位,它由计算机主频决定。 一个CPU同外部设备和内存储器之间进行信息交换过程所需要的时间称为总线周期。 关于RISC,CISC,看这里!
----------------------------------------------------------------- http://blog./jerryer/12929/message.aspx
RISC与CISC
看RISC CPU的设计,才发现自己本科真的什么也没有学过,呵呵,感谢King,正是由于跟她针锋相对的讨论,自己才会不断查找资料下去,自己也才总算有了一点点概念,现整理一下。 传统意义上的精简指令集计算机(RISC)和复杂指令集计算机(CISC)在基本原理上就存在着差异。但是,现代的微控制器技术正在不断缩小着RISC架构和CISC架构之间的差异。 差异由来已久 RISC机型拥有一个有限的指令集合,并且能够极快地执行每一条指令。但是由于缺乏复杂指令,因此需要在软件方面进行大量的工作。RISC方案的另一个优势在于有限的指令数量能够产生一个很小的核心。但由于使用精简指令所编写出来的代码会更长,所以执行任务所需的内存也就更大。因此,对于复杂的程序来说,由于要考虑到各种可能的情况,最终的程序代码可能非常大。 RISC指令集有许多特征,其中最重要的有: 指令种类少,指令格式规范:RISC指令集通常只使用一种或少数几种格式。指令长度单一(一般4个字节),并且在字边界上对齐,字段位置、特别是操作码的位置是固定的。 寻址方式简化:几乎所有指令都使用寄存器寻址方式,寻址方式总数一般不超过5个。其他更为复杂的寻址方式,如间接寻址等则由软件利用简单的寻址方式来合成。 大量利用寄存器间操作:RISC指令集中大多数操作都是寄存器到寄存器操作,只以简单的Load和Store操作访问内存。因此,每条指令中访问的内存地址不会超过1个,访问内存的操作不会与算术操作混在一起。 简化处理器结构:使用RISC指令集,可以大大简化处理器的控制器和其他功能单元的设计,不必使用大量专用寄存器,特别是允许以硬件线路来实现指令操作,而不必像CISC处理器那样使用微程序来实现指令操作。因此RISC处理器不必像CISC处理器那样设置微程序控制存储器,就能够快速地直接执行指令。 另一方面,CISC机型有着丰富的指令集合,使计算机能够利用一两条指令就能执行非常复杂的操作,原因在于它通过运行一条内部微代码而把汇编指令分解成若干条内部微代码指令。这样做,设备的负担就不是很高,而且代码的分布密度也恰到好处。虽然CISC机型下的内核代码要比相应的RISC机型大许多,但由于代码密度分布合理,而且考虑到内存的因素,最终所产生的代码长度就没有RISC产生的那么大。 体系结构的差异更重要 微控制器之间的各种差异要比RISC和CISC种类上的差异重要得多。冯.诺依曼体系结构(Von Neuman)与哈佛体系结构(Harvard)之争就是此类差异之一。另外一种就是基于寄存器体系结构和基于累加器体系结构的差异。在冯.诺依曼体系结构中,数据和程序存储器是共享数据总线的。数据总线共享有很多优点,比如减小总线的开销。另外一个优点在于能够把RAM映射到程序空间,这样设备也能访问EEPROM中的内存。 而对于哈佛体系结构的计算机,程序和数据总线是分开的。这种方式的优势在于能够在一个时钟周期内同时读取程序和数据,这样就相应地减少了执行每一条指令所需的时钟周期。早期的哈佛架构的计算机是不能把查找表储存在程序存储器中的,而这个问题在现在的大多数设备中已经解决了。 哈佛体系结构计算机中存在的另外一个问题就是,如果要和外部的程序和数据存储器进行交互,对于两部分存储器来说,由于地址总线和数据总线的相互独立性,就需要额外增加大量的芯片管脚。因此,只有当至少有一种存储器的类型是内部的情况下,微处理器才会采用哈佛体系结构。 在基于累加器体系结构中,累加器既是数学运算单元(ALU)的数据源之一,又是ALU存放操作结果的地方。通常基于累加器体系结构的微处理器,能够在累加器与程序存储器中任何位置的存储单元或是RAM之间进行各种数学或逻辑操作。这种架构的优势就在于对于内存地址的访问更为方便快捷。 基于寄存器体系结构的微处理器中,会有一系列的寄存器直接与ALU相连。这种情况的好处在于不需要把所有的数据都压进一个累加器中,从而减少了许多在累加器架构中存在的“move”指令。因此,与把所有数据都要推进累加器中的情况相比,基于寄存器架构的微处理器大大提高了ALU的吞吐能力。 陈旧的体系差异明显 对于8位微处理器来说,能够很容易地区分RISC和CISC之间的不同。最主要的原因就是这些体系结构,除了少数例外,要比相应的32位微处理器陈旧得多。CISC体系结构的一个经典例子就是摩托罗拉开发的HC11系列。HC11核心处理器诞生于1984年。这种系列的微处理器拥有300多条指令,代码密度分布非常合理。HC11使用的是带有两个累加器的冯?诺依曼体系结构。由于所有的复杂指令都是在核心中完成的,所以执行每条指令的时间就很长。指令周期从8个时钟周期到164个时钟周期。核心过大导致处理器的最高主频不超过12MHz,这样的性能要远远低于某些RISC机型。 传统的8位RISC微处理器的一个例子就是由Microchip开发的PIC16C54。Microchip在1990年的时候把它推向市场。它采用的是一个基于单累加器的哈佛体系结构设备,使用有限指令集合。这样微处理器在执行每一条单个指令所需时间就很小。但是33条指令加上一页内存,生成的代码长度几乎是同种情况下HC11所得代码的两倍多。 新技术使得差异在减小 CISC控制器在实现了管道技术之后,使得一条指令基本上在一个时钟周期之内就能够执行完,很大地改善了机器性能。但是,这种流水线操作有个很大的弊病在于每次的跳转或者执行分支指令,又或者是中断发生,都有可能导致管道内数据泛滥,反而导致更长的指令周期。虽然有一些方法能够降低这种不良效果,但是基本上都需要在软件中进行大量处理而最终会降低许多应用程序代码效率。 随着技术的进步,RISC和CISC机型之间的鸿沟已经越来越小,特别是对于市场的高端用户来说,这种差异已经逐渐变得难以区分了。 RISC是精简指令集计算机,现在很多嵌入式微处理器都是RISC,例如常用的ARM,MIPS, POWERPC等。它有一个特征就是指令是等长的。这就为提高执行指令的效率提供了方便,大部分处理器可以做到平均一个时种处理一条指令。CISC是复杂指令集计算机。如X86系列,TI的DSP系列,指令是不等长的。但是一条指令可以完成RISC的好几条指令能完成的任务。这两种处理器各有所唱,都在发展当中。 哈佛结构和冯.诺依曼结构主要是指存储器结构,而非指令系统结构,与指令系统没有严格的对应关系。 冯.诺曼的主要贡献就是提出并实现了“存储程序”的概念。由于指令和数据都是二进制码,指令和操作数的地址又密切相关,因此,当初选择这种结构是自然的。但是,这种指令和数据共享同一总线的结构,使得信息流的传输成为限制计算机性能的瓶颈,影响了数据处理速度的提高。 哈佛结构 与冯.诺曼结构处理器比较,哈佛结构处理器有两个明显的特点: 使用两个独立的存储器模块,分别存储指令和数据,每个存储模块都不允许指令和数据并存; 使用独立的两条总线,分别作为CPU与每个存储器之间的专用通信路径,而这两条总线之间毫无关联
|
|