
不同的是:
哈佛结构是一种将程序指令的存储与数据的存储分开的存储器结构。
冯诺依曼结构(Von Neumann structure)又称普林斯顿结构,是一种结合了程序指令存储器和数据存储器的计算机设计概念结构。
差异:
哈佛架构是一种将程序指令的存储与数据的存储分开的内存结构。首先CPU读取程序指令存储器中程序指令的内容,解码得到数据地址,然后读取相应数据存储器中的数据,进行下一步操作(通常是执行)。程序指令和数据的存储是分开的,数据和指令的存储可以同时进行,可以使指令和数据具有不同的数据宽度。比如微芯片公司的PIC16芯片的程序指令是14位宽,而数据是8位宽。
哈佛结构的微处理器通常具有较高的执行效率。如果将程序指令和数据指令分开组织和存储,则下一条指令在执行时可以提前读取。
目前有很多中央处理器和微控制器采用哈佛架构。除了上面提到的Microchip的PIC系列芯片,还有摩托罗拉的MC68系列,Zilog的Z8系列,ATMEL的AVR系列和安谋的ARM9、ARM10和ARM11。大多数DSP都是哈佛结构的。
冯诺依曼架构(Von Neumann architecture)又称普林斯顿结构,是一种结合了程序指令存储器和数据存储器的计算机设计概念结构。这种结构模糊地指导了将存储设备与中央处理器分离的概念,因此根据这种结构设计的计算机也被称为存储程序计算机。
最早的计算机只包含固定用途的程序。一些现代计算机仍然保持这种设计方法,通常是为了简化或教育目的。比如计算器,它只有固定的数学计算程序,连文字处理软件都不能用,更别说玩游戏了。如果你想改变这台机器的程序,你必须改变电路,改变结构,甚至重新设计这台机器。当然,最早的计算机并不像设计的那样可编程。当时所谓的“重写程序”,大概是指用纸笔设计程序,然后制定工程细节,再改变机器的电路接线或结构等步骤。
而存储编程计算机的概念改变了这一切。这种机器通过创建一套指令集结构,将所谓的操作转化为一系列程序指令的执行细节,更加灵活。通过把指令当作一种特殊类型的静态数据,存储程序计算机可以很容易地改变它的程序,并在程序控制下改变它的操作内容。冯诺依曼结构和存储程序计算机是常用术语,它们的用法将在下面描述。哈佛结构是一种将程序数据和普通数据分开存储的设计理念,但并没有完全突破冯诺依曼结构。
保存编程的概念,还可以让程序在执行时自己修改操作内容。这个概念的设计动机之一是允许程序添加内容或改变程序指令的存储位置,因为早期的设计需要用户手动修改。然而,随着变址寄存器和间接位置访问成为硬件结构的必要机制,这一功能就没有以前那么重要了。程序自修改的特性也被现代编程所抛弃,因为它会使理解和调试变得困难,而现代中央处理器的流水线和缓存机制会降低这一功能的效率。
总的来说,将指令视为数据的概念使汇编语言、编译器和其他自动编程工具得以实现;这些“自动编程程序”可以用来以人类更容易理解的方式编写程序;从局部的角度来看,面向I/O的机器,比如Bitblt,想要修改屏幕上的图案,这在过去被认为是没有定制硬件无法实现的。但是后来,它表明这些功能可以通过“执行中编译”技术有效地实现。
当然,这种结构也有一些缺陷。除了下面描述的冯诺依曼瓶颈,修改程序可能是非常有害的,不管是无意的还是设计错误。在一个简单的存储程序计算机上,一个设计糟糕的程序可能会伤害它自己、其他程序甚至操作系统,导致崩溃。缓冲区溢出就是一个典型的例子。创建或更改其他程序的能力也会导致恶意软件的出现。利用缓冲区溢出,恶意程序可以覆盖调用堆栈和代码,并修改其他程序文件,从而导致链损坏。内存保护机制和其他形式的访问控制可以保护意外或恶意的代码更改。大部分CPU和GPU都是冯诺依曼。










