这都是纯学术的。而且非常过时。从学术类型的角度来看,哈佛体系结构可以同时执行数据事务和指令事务,而冯诺依曼一次只能执行一个或另一个。
真正的哈佛有一个问题是你不能真正使用它。你不能有一个引导加载程序,你不能有一个操作系统(加载程序),因为你不能使用数据事务将指令放入内存然后分支到这些指令并运行它们,这两个内存系统是分开的。一旦你穿过小路,它就不再是哈佛了,它是一个改良的哈佛或冯诺依曼。
看看维基百科是如何定义它的,你今天看到的现代总线是哈佛修改的,因为你不能用冯诺依曼同时做数据和指令的定义,但它们使用相同的总线。您将看到一条读地址总线、一条读数据总线、一条写地址总线和一条写数据总线,指令和数据都将通过读总线,数据通过写总线。许多事务可以同时发生,多总线宽度大小的指令提取可以发生在一个时钟周期上,该时钟周期从一个读取地址请求开始,下一个时钟周期数据读取地址请求可以在同一总线上开始,一些数量时钟后指令地址请求被确认,然后读取地址请求被确认,它们不一定必须以相同的顺序返回,具体取决于设计。然后读取数据总线将传递数据,然后处理器将确认。写总线也可以同时处理飞行中的多个数据事务。独立的读写总线可以同时做事,而不仅仅是每个总线同时有多个事务在运行。
这些都与指令集无关,您可以并且在它们后面有具有不同总线的指令集。根据指令集、获取和管道以及缓存的工作方式,您可以让纯教科书冯诺依曼接近满足纯教科书哈佛的性能。但是,如果您认为一次预缓存、预流水线一条指令类型的体系结构,那么您可以说 1)两者都不会获胜,因为指令获取必须等待数据事务以进行加载和存储(或其他具有内存访问权限的指令)在下一次取指发生之前完成,所以哈佛不能同时做数据和指令。
从纯粹的意义上说,虽然冯诺依曼一次一条指令不能比哈佛快,但它可以打平但不能赢。哈佛有两条可以并行运行的总线,并且所有其他因素保持不变,就性能而言,差异使哈佛略有优势。所有其他因素保持不变(指令集、管道设计、预取等)。
请注意,一次一条指令没有流水线意味着执行大多数指令需要多个时钟周期,正如您在预缓存、预流水线处理器中看到的那样,它们有需要多少时钟的表格,您无论如何都可以查看指令看看如何以及为什么需要这么多。即使有管道哈佛也有微弱的优势。但是如果你说冯诺依曼总线的宽度是哈佛的两倍,你可以一次获取两条指令,你可以一次在两个连续的数据位置上执行数据操作,现在你的带宽比哈佛更好,并且可以绑定或有时打败它。但这不是纯粹的比较。
同样,这些概念已经过时了。哈佛式处理器的数量非常少,但为了使它们有用,它们实际上是经过修改的哈佛,因为内存系统之间存在间隙。