1.冯·诺依曼结构
冯·诺依曼机:将数据和指令都存储在存储器中的计算机。
计算系统由一个中央处理单元(CPU)和一个存储器组成。存储器拥有数据和指令,并且可以根据所给的地址对它进行读或写。因此程序指令和数据的宽度相同;
目前使用冯·诺依曼结构的 CPU 和微控制器有很多。其中包括英特尔公司的8086及其他CPU,TI的MSP430处理器,ARM公司的ARM7、MIPS公司的MIPS处理器也采用了冯·诺依曼结构。
2.哈佛体系结构
哈佛机:为数据和程序提供了各自独立的存储器。
程序计数器只指向程序存储器而不指向数据存储器,这样做的后果是很难在哈佛机上编写出一个自修改的程序,独立的程序存储器和数据存储器为数字信号处理提供了较高的性能。
指令和数据可以有不同的数据宽度,哈佛结构的CPU 通常具有较高的执行效率。
目前使用哈佛结构的 CPU 和微处理器有很多,除了所有的DSP 处理器,还有摩托罗拉公司的MC68系列、Zilog 公司的Z8系列、Microchip(微芯)公司的PIC处理器(MCU+MPU)、公司ATMEL公司的AVR系列和ARM公司的ARM9、ARM10和ARM11(特别说明:ARM 7使用冯·诺依曼体系结构)等。
3.冯诺依曼结构与哈弗结构的对比
冯诺依曼结构可能有以下的特点:
(1) 程序存储和数据存储统一编址。
(2) CPU使用统一的总线来访问程序和数据。
(3) CPU采用相同的指令来访问程序和数据
哈佛结构可能有以下的特点:
(1)程序存储和数据存储物理独立。
(2)CPU采用独立的总线来访问程序和数据。
(3)CPU采用不同的指令来访问程序和数据。
4.改进的哈佛结构
如Figure2-1所示,INTEL的8051系列单片机ROM和RAM有不同的地址总线,但是共享着数据总线。有着相同的数据总线也就意味着ROM的数据不仅可以被指令译码器译码,还可以被特定的指令读取到RAM中,所以说是一种改进的哈佛结构。但是共享着数据总线也就意味着指令和数据的读写只能分时复用,无法同时进行,因此没有哈佛结构提升速度的特点。
如图Figure6-1所示,AVR的单片机指令和数据采用了不同的地址总线和数据总线,同时在Instruction Register中加了一条到General Purpose Registers或SRAM的通路,也就使得指令也可以被读到RAM中,所以也属于改进的哈佛结构。
首先8051的结构是一种哈佛结构(虽然是改进的)没错,但是8051单片机相对以上的另外几款单片机还有一个区别,8051可以外接程序存储器和/或者数据存储器。的确对于内核数据器和内部程序器8051的ALU会采用不同的地址总线来访问。但是对于外接的数据存储器和程序存储器,却采用同样的地址总线(P0,P2)和数据总线(P0),区分是访问数据存储器和程序存储器是通过控制总线(PESN,RD,WR)来区分的。而这个外部的总线的接法是我们硬件设计者自己设计的。如果我们把PESN和RD通过与门连接到外接RAM的RD引脚。那么无论51采用读程序的指令还是采用读数据的指令,只要地址一样,都会被定位到外部RAM的同一位置,也就相当于存储结构变成了冯诺依曼结构。
综上所述,芯片文档上的冯诺依曼和哈佛结构指的是与CPU直接相连的存储器之间的结构关系,这包括ARM9,ARM9的哈佛结构表现在与ARM9TDMI内核直接相连的ICACHE和DCACHE之间的结构关系。而区别它们更多的在于它们是不是具有独立的地址空间,如果有的话,就是哈佛结构,如果没有就是冯诺依曼结构。而具有独立的地址空间也就意味着在地址总线和控制总线上至少要有一种总线必须是独立的,这样才能保证地址空间的独立性。
而对于一些程序手册上的冯诺依曼存储则是对于单片机进行寻址的地址值是否对应于唯一的存储器的唯一位置。而不在乎单片机内部是否采用同样的指令,单片机内部是否通过同样的总线来访问。因此51单片机也可以被设计成冯诺依曼存储,ARM9与主存的关系也是一种冯诺依曼存储。
参考资料:
【1】 http://hi.baidu.com/%CD%DB%5F%B9%FE%B9%FE%B9%FE/blog/item/8b92b1c8b2eff81a7f3e6faa.html.
【2】 http://hi.baidu.com/bluencochange/blog/item/c735f91f85631006314e152e.html.