怎样辨别一个处理器的架构?

来源:互联网 发布:华为机顶盒 mac地址 编辑:程序博客网 时间:2024/04/30 02:43

http://blog.csdn.net/wzw71734/article/details/53425523

怎样辨别一个处理器的架构是哈佛结构还是冯·诺依曼结构结构呢?

先看定义。网上随便搜

传统计算机采用冯·诺依曼(Von Neumann)结构,也称普林斯顿结构,是一种将程序指令存储器和数据存储器并在一起的存储器结构。冯·诺依曼结构的计算机其程序和数据公用一个存储空间,程序指令存储地址和数据存储地址指向同一个存储器的不同物理位置;采用单一的地址及数据总线,程序指令和数据的宽度相同。处理器执行指令时,先从储存器中取出指令解码,再取操作数执行运算,即使单条指令也要耗费几个甚至几十个周期,在高速运算时,在传输通道上会出现瓶颈效应。 
目前使用冯·诺依曼结构的 CPU 和微控制器有很多。其中包括英特尔公司的8086及其他CPU ,ARM公司的ARM7、MIPS公司的MIPS处理器也采用了冯·诺依曼结构。 
这里写图片描述

哈佛(Harvard)结构是一种将程序指令存储和数据存储分开的存储器结构。哈佛结构是一种并行体系结构,它的主要特点是将程序和数据存储在不同的存储空间中,即程序存储器和数据存储器是两个相互独立的存储器,每个存储器独立编址、独立访问。与两个存储器相对应的是系统中的4套总线:程序的数据总线与地址总线,数据的数据总线与地址总线。这种分离的程序总线和数据总线可允许在一个机器周期内同时获取指令字(来自程序存储器)和操作数(来自数据存储器),从而提高了执行速度,是数据的吞吐率提高了1倍。又由于程序和数据存储器在两个分开的物理空间中,因此取指和执行能完全重叠。 
这里写图片描述




看完了,懂了?那我们来看个例子

这是Cortex-M0处理器的内部架构图。 
这里写图片描述 
这是是基于cortex-M0+内核的stm32L053的内部架构图。 
这里写图片描述

请问Cortex-M0是什么处理器架构?

系统起来后,指令是放在Flash中的,而全局变量 静态变量是在RAM中(系统初始化会将Flash中的变量RW搬到RAM中)。数据和指令放在不同的存储空间,明显的哈佛结构嘛。。。


随便搜一下,权威资料 网上博客都说是冯·诺依曼结构啊?怎么回事???



其实啊,能否同时得到指令和数据才是区别哈佛结构还是冯·诺依曼结构结构的关键

请问Cortex-M0中,你能同时读取到指令和数据吗???

显然不行啊,他们都挂在System Bus(AHB Lite)上,你怎么可能同时发送一个指令的地址和一个数据的地址,然后同时返回指令和数据呢!对吧?




好了,下面我们来看看Cortex-M3是啥架构

这是Cortex-M3权威指南里给出的总线连接示范图 
这里写图片描述

可以看到Cortex-M3有I-Code总线和D-Code总线,它们分别来获取指令和数据。(看图,它们都是双向的,发出地址接受指令数据或数据)

注: 
因为代码存储区既可以由指令指令总线(I‐Code)访问(当从此区取指时),也可以被数据总线(D‐Code)访问(当在此区访问数据时),需要在中间插入一个总线开关,称为“总线矩阵[注3]”;或者使用一个AHB 总线复用器。如果使用了总线矩阵,则闪存和附加的 SRAM(如果有的话)可以被both I‐Code 和D‐Code 访问。 
也就是有下面各个颜色的指令和数据读取组合: 
这里写图片描述

红色下,指令读取和数据读取并行不悖。符合哈佛的并行概念。(速度快) 
而,蓝色和绿色下,又符合冯·诺依曼的指令读取和数据读取异步的概念。

那Cortex是哈佛还是冯·诺依曼啊?

答案当然是哈佛,人家具备同时吞吐的能力。正常情况下,都是哈佛状态(指令读取和数据读取并行不悖)。

哈佛结构可以在某些情况下(RAM下debug程序)成为诺依曼架构;但诺依曼不能平滑过渡到哈佛上去。




看看经典的STM32F103(Cortex-M3)系列的架构

这里写图片描述

首先D-bus可以访问主SRAM(112K)和FLASH的D-code区 
I-bus可以访问主SRAM区的和FLASH的I-code区 
然后主SRAM可以被D-bus I-bus 和S-bus访问。

注: 
感觉上图是有问题的,I-Code总线应该是可以访问SRAM的。不然RAM中调试代码就没法实现了。

好啦,再看看Cortex-M4

这是STM32F405xx系列的系统存储和总线框图 
这里写图片描述 
一看四个圆圈,果断可以同时访问指令和数据,妥妥的哈佛架构。




总结

判断架构,是看CPU周边的总线架构,不是关于存储器本身。 
只要具备同时读取指令和数据的能力的处理器就是哈佛处理器,如果不是就是诺依曼。

疑问

这个I-code是双向总线吗?

原创粉丝点击