0%

哈佛结构和冯诺依曼(普林斯顿)结构

起因

我一直好奇,cpu是怎么工作,虽然我脑袋里面有一个雏形了,但是,这个终究是知道他是加工的,而不知道加工具体流程,虽然也确实不需要知道。然后,我无意间看到DSP芯片,他是哈佛结构的,我愣了一下。现在不应该都是哈佛结构的吗?然后我去看了一下,还真不是,现在pc端,那些大型竟然都是冯诺依曼结构,也就是普林斯顿结构,我蒙了啊,我一直以为这个结构应该淘汰了,因为不能同时取值和取指。看哈佛多好啊,指令数据分开,不同区域,可以同时获取。为什么会这样呢?我们就要先看看两个结构的区别了。

哈佛结构

这个结构就是数据和指令分来存放,这样就可以让cpu同时进行取值和取指操作,这样的效率非常高,非常适合用在MCU和DSP中,因为这中结构设计很复杂,但是效率高,而MCU和DSP本来就是简单的集成电路,所以,可以使用哈佛结构,这样可以在底层进行高效的处理。之前,我参加了rt-thread的线下会,他们的方案就是上层linux,下层rtos的mcu,这其实是一种非常有意义的设计。因为,上次的应用对于实时性和高效的要求其实是不高的。

冯诺依曼结构

这个结构是数据和指令放一起,通过不同的时期来区分数据和指令,cpu识别到是指令之后,就会去取数据,和取下一个指令,这个是一个顺序的结构,至于实现,这就是编译器和中间件的事情的,这些对于写代码是没有影响的。也不担心,指针取地址和跳转那些操作,这些都是有底层的配置和映射的。这个结构就非常简单了,光是思考这个地址就简单太多了,因为数据和指令是想要一对一的的,使用哈佛的话,这个映射就有点麻烦了,而普林斯顿可以直接写在一起,这就非常简单了。所以,冯诺依玛结构非但没有没落,反而是越高端越高级的计算机就越明显。因为得考虑成本和设计难度等诸多情况。

混合策略

现在,已经不是纯种得哈佛和普林斯顿结构了。很明显哈佛是可以选择独立编址也可以选择统一编制得,虽然普林斯顿也行,但是数据和指令分开来得普林斯顿明显更适合独立编址。举例子,比如stm32就是普林斯顿结构,但是cpu使用得哈佛的结构。这个现在太明显了,因为普林斯顿结构可以节约空间,方便设计,而哈佛结构可以增加效率同时进行。

总结

哈佛和普林斯顿现在基本上没有纯血的版本了,都是混合为主的策略。还有不用担心啥编址和地址的问题,这些都是厂商处理的,独立编址、统一编制啥的,使用独立io就可以随便调用外部的IO,也可以把我们作为开发者,只需要写好代码。

-------------下次的来访是什么时候呢[doge]-------------