哈佛结构是一种将程序指令存储和
数据存储分开的存储器结构。哈佛结构是
一种并行
体系结构,它的主要特点是将程序和
数据存储在不同的
存储空间中,即
程序存储器和
数据存储器是两个独立的存储器,每个存储器
独立编址、独立访问。
冯·诺依曼结构也称
普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构。程序指令存储地址和数据存储地址指向同一个存储器的不同物理位置,因此程序指令和数据的宽度相同,如英特尔公司的8086
中央处理器的程序指令和数据都是16
位宽,还有ARM7。
为什么Cortex-M3是哈佛结构,却采用的是统一编址方式呢?
统一编址并不代表就是但总线结构,ARM9是哈佛结构也是统一
STM32中程序存储器、IO接口和数据存储器都是在32位的4GB线性空间上,下图就是这个线性空间的分配图,可以看出程序存储器和数据存储器处于不同的地址区域,不像8051那样程序存储器和数据存储器分别有两套不同的地址区域。统一编址并不代表就是单总线结构,STM32中不同的总线使用了不同的地址空间。
这里所说的哈佛或者冯诺依曼结构,指的是cpu的核心的结构,也就是说从kernel的角度来看,它的指令和普通数据总线是独立的,kernel自己有两套接口。而在大多数应用中,因为软件习惯问题以及从复杂度考虑,都是把I和D两个总线接到同一个外部总线上,这样就是大家使用统一编址了。
哈佛结构是有关CPU周边的总线架构,不是关于存储器本身的
下图为STM32内部的总线结构图,你可以清楚地看到Flash和SRAM分别使用了不同的通道与Cortex-M3核心交换数据,这正是典型的哈佛结构;你可以再比较一下ARM7的总线结构图,应该可以看出不同之处。
哈佛结构采用数据存储器与程序代码存储器分开,各自有自己的数据总线与地址总线。但这是需要CPU提供大量的数据线,因而很少使用哈佛结构作为CPU外部构架来使用。但是对于 CPU内部,通过使用不同的数据和指令cache,可以有效的提高指令执行的效率,因而
目前大部分计算机体系都是CPU内部的哈弗结构+CPU外部的冯·诺伊曼的结构