冯纳-伊曼结构是什么?

冯诺依曼结构(Von Neumann structure)又称普林斯顿结构,是一种结合了程序指令存储器和数据存储器的存储器结构。程序指令的存储地址和数据的存储地址指向同一个内存中不同的物理位置,所以程序指令和数据的宽度是相同的。比如Intel的8086中央处理器的程序指令和数据都是16位宽。

结构介绍:

说到计算机的发展,就不能不提到美国科学家冯·诺依曼。自20世纪初以来,物理和电子领域的科学家一直在争论应该用什么样的结构来制造可以进行数值计算的机器。人们被十进制所困扰,十进制是人类常用的计数方法。因此,在当时,发展模拟计算机的呼声更为响亮和有力。20世纪30年代中期,美国科学家冯·诺依曼大胆提出要抛弃十进制,用二进制作为数字计算机的基础。同时他还表示,计算程序是事先编制好的,然后计算机会按照事先制定的计算顺序进行数值计算工作。

人们把这种冯·诺依曼的理论称为冯·诺依曼架构。从EDVAC到目前最先进的计算机都采用冯诺依曼架构。所以冯·诺依曼是数字计算机之父。

人们把利用这一概念和原理设计的电子计算机系统称为“冯·诺曼型结构”计算机。von Norman架构的处理器使用相同的内存,并通过相同的总线进行传输。

内容

特性

冯·诺依曼架构处理器具有以下特点:

1:一定有内存;

2:必须有控制者;

3.必须有一个算术单元来完成算术和逻辑运算;

4.人机交流必须有输入设备和输出设备。

另外,程序和数据统一存储,在程序的控制下自动工作。

功能

基于冯·诺依曼架构的计算机必须具备以下功能:

向计算机发送所需的程序和数据。

必须具备长时间记忆程序、数据、中间结果和最终运算结果的能力。

能够完成算术、逻辑运算、数据传输等各种数据处理。

处理结果可以根据需要输出给用户。

为了完成上述功能,计算机必须有五个基本部件。

?包括:

用于输入数据和程序的输入设备;

用于存储程序和数据的存储器;

用于完成数据处理的运算单元;

用于控制程序执行的控制器;

输出装置,输出处理结果。

瓶颈

?将CPU和内存分开并不完美,但会导致所谓的冯诺依曼瓶颈:CPU和内存之间的流量(数据传输速率)与内存的容量相比是相当小的。在现代计算机中,流量与CPU的工作效率相比是非常小的。在某些情况下(当CPU需要对庞大的数据执行一些简单的指令时),数据流量成为了对整体效率非常严重的制约。当数据输入或输出到内存中时,CPU将处于空闲状态。因为CPU速度和内存容量的增长速度远远快于双方的流量,瓶颈问题越来越严重。冯·诺依曼瓶颈最早出现在1977年约翰·巴克斯获得ACM图灵奖的演讲中。根据Bacos的说法:

"...确实有改变存储设备的方法,比通过冯诺依曼瓶颈循环大量数据更先进。瓶颈这个词不仅仅是对问题本身数据流的描述,更重要的是,它还是一个智能瓶颈,将我们的思维方式限制在‘一个字符一个字符’的模式。这让我们害怕思考更广泛的概念。所以编程就变成了一种规划和细化冯诺依曼瓶颈的字符数据流,而大部分问题不是数据的特性,而是如何找到数据。”

CPU和内存之间的缓存解决了冯诺依曼瓶颈的效率问题。此外,分支预测器算法的建立也有助于缓解这一问题。Bacos在1977中讨论的“智能瓶颈”有了很大的改变。而Bacos对这个问题的解决没有明显的影响。现代的函数式编程和面向对象编程已经很少像早期的Fortran那样执行“将大量值移入和移出内存”的操作了,但是平心而论,这些操作确实占用了计算机的大部分执行时间。

CPU的架构可以分为冯诺依曼架构和哈佛架构。

结构

有许多中央处理器和微控制器采用冯诺依曼结构。除了上面提到的Intel的8086,Intel的其他CPU,ARM的ARM7,MIPS的MIPS处理器也都采用冯诺依曼结构。

1945年,冯·诺依曼首先提出了“存储程序”的概念和二进制原理。后来,人们把用这种概念和原理设计的电子计算机系统称为“冯·诺依曼型结构”计算机。冯诺依曼架构的处理器使用相同的内存,通过相同的总线传输。

冯·诺曼架构处理器有以下特点:必须有存储器;必须有一个控制器;必须有一个运算符来完成算术和逻辑运算;人机交流必须有输入输出设备。

哈佛结构

?哈佛结构是一种将程序指令存储和数据存储分开的存储器结构。首先CPU读取程序指令存储器中程序指令的内容,解码得到数据地址,然后读取相应数据存储器中的数据,进行下一步操作(通常是执行)。程序指令存储和数据存储的分离可以使指令和数据具有不同的数据宽度。比如微芯片公司的PIC16芯片的程序指令是14位宽,而数据是8位宽。

哈佛结构的微处理器通常具有较高的执行效率。如果将程序指令和数据指令分开组织和存储,则下一条指令在执行时可以提前读取。采用哈佛架构的中央处理器和微控制器有很多,除了上面提到的Microchip的PIC系列芯片,还有摩托罗拉的MC68系列,Zilog的Z8系列,ATMEL的AVR系列和ARM的ARM9,ARM10和ARM11。

哈佛结构是指程序和数据空间的独立架构,目的是减少程序运行时访问内存的瓶颈。

例如,在最常见的卷积运算中,一条指令同时取两个操作数,在流水线处理中,还有一个取操作。如果通过一条总线访问程序和数据,取和取之间会产生冲突,这对计算量大的循环的执行效率非常不利。哈佛结构基本可以解决取索引和取数的冲突。对另一个操作数的访问只能采用增强的哈佛结构,比如像TI一样,再次拆分数据区,增加一组总线。或者像AD一样,采用指令缓存,可以在指令区存储部分数据。

在DSP算法中,最大的任务之一就是与存储器交换信息,包括采样数据、滤波器系数和程序指令作为输入信号。举个例子,如果你把内存中存储的两个数相乘,你需要从内存中取出三个二进制数,也就是两个要相乘的数和1个描述如何做的程序指令。DSP内部结构一般是哈佛结构,片上至少有四组总线:程序数据总线、程序地址总线、数据数据总线、数据地址总线。程序总线和数据总线的这种分离允许同时获取指令字(来自程序存储器)和操作数(来自数据存储器)而没有相互干扰。这意味着指令和操作数可以在一个机器周期内同时准备。有些DSP芯片还包含其他总线,比如DMA总线,可以在单个周期内完成更多的工作。这种多总线结构就像是在DSP内部架起了一条四通八达的高速公路,保证了运算单元能够及时得到所需的数据,提高了运算速度。所以对于DSP来说,内部总线就是一种资源。总线越多,功能就越复杂。SuperHarvard架构(缩写为SHARC)是在Harvard架构的基础上增加了指令缓存和特殊的I/O控制器。

哈佛架构处理器有两个明显的特点:使用两个独立的内存模块分别存储指令和数据,每个内存模块不允许指令和数据共存;两条独立的总线被用作CPU和每个存储器之间的专用通信路径,并且两条总线之间没有相关性。

?改进的哈佛结构具有以下结构特点:为了实现并行处理;它有独立的地址总线和独立的数据总线。公共地址总线用于访问两个存储模块(程序存储模块和数据存储模块),公共数据总线用于完成程序存储模块或数据存储模块与CPU之间的数据传输。