当前位置: 代码迷 >> 单片机 >> 哈佛结构和冯诺依曼结构提问,该如何解决
  详细解决方案

哈佛结构和冯诺依曼结构提问,该如何解决

热度:74   发布时间:2016-04-28 16:07:18.0
哈佛结构和冯诺依曼结构提问
资料上看到对于哈佛结果和冯诺依曼结构,不应该是从地址线和数据线是否分时复用去区分(不是地址线和数据线分时复用就一定是冯诺依曼结构),也不应该从RISC和CISC去区分(不是RISC就一定是哈佛结构),而应该看程序代码空间和数据空间是否分开,分开的是哈佛结构,反之是冯诺依曼结构。比如MCS-51是属于冯诺依曼结构的,它地址线和数据线是分时复用的,它是CISC指令集,但是它的程序代码空间不是和数据空间分开的吗?

------解决方案--------------------
主要区别是数据总线和地址总线是否分开,冯诺依曼数据总线和地址总线是统一的,哈佛是分开的。这跟地址空间没有必然联系,比如ARM的Cortex-M3处理器就是哈佛结构,但是它的数据空间和地址空间是统一编址的。
------解决方案--------------------
你们这帮人啊 误人子弟
体系结构:是指程序员在某CPU上进行程序设计时能够使用的“处理器资源”,其中最重要的是处理器所提供的指令系统和寄存器组,即指CISC和RISC

冯?诺依曼结构,又称作普林斯顿体系结构(Princetionarchitecture)种将程序指令存储器和数据存储器合并在一起的存储器结构。程序指令存储地址和数据存储地址指向同一个存储器的不同物理位置,因此程序指令和数据的宽度相同.
 哈佛结构是一种并行体系结构,将程序指令存储和数据存储分开的存储器结构,程序和数据存储在不同的存储空间中,即程序存储器和数据存储器是两个独立的存储器,每个存储器独立编址、独立访问两个存储器相对应的是系统的4条总线:程序的数据总线与地址总线,数据的数据总线与地址总线。这种分离的程序总线和数据总线允许在一个机器周期内同时获得指令字(来自程序存储器)和操作数(来自数据存储器),从而提高了执行速度,使数据的吞吐率提高了1倍。又由于程序和数据存储器在两个分开的物理空间中,因此取指和执行能完全重叠。CPU首先到程序指令存储器中读取程序指令内容,解码后得到数据地址,再到相应的数据存储器中读取数据,并进行下一 步的操作(通常是执行)。
------解决方案--------------------
xmxqiyan正解。

冯?诺依曼架构:数据存储器和代码存储器共用地址总线和数据总线
哈佛架构:数据存储器和代码存储器有各自独立的地址总线和数据总线
这是从CPU核心的物理布线上来区分的,理论上来说和存储器编址没有绝对关系。

以楼主所说51为例,经典51使用P2/p0口作为外部存储器的地址总线,同时p0也复用为外部存储器的数据总线。
数据存储器和代码存储器(或者简单理解为ROM和RAM)都使用P2和P0口作为地址总线,并且也都使用P0口作为数据总线。
但是——
51的数据存储器和代码存储器是分开编址的。
再以ARM为例,早期的arm核心数据存储和代码存储也是复用总线(因此是冯?诺依曼架构),但却是统一编址。

总结来说,
51的代码存储器和数据存储器复用总线(因此是冯?诺依曼架构)、独立编址(编址和哪种架构没绝对关系)。
早期的arm数据存储和代码存储也是复用总线(因此是冯?诺依曼架构),但却是统一编址。
新的ARM,数据存储和代码存储是独立总线(因此是哈佛架构),统一编址。

提醒:很多教科书在这点上都是不甚了了,甚至是自相矛盾或者错误的,所以这个问题最好不要完全相信教科书。

另外要说的是,不能从CPU外部总线判断其为哈佛或诺伊曼。有的哈佛机外部只有一套总线,但内部是两套。
51除了有外部数据存储器,还有内部数据存储器,所以有人说51是变种诺伊曼。
  相关解决方案