在修改后的哈佛架构中,数据和指令是否在数据总线中分离?

Are data and instructions segregated in the data bus in modified Harvard architectures?

在修改后的哈佛架构中,数据和指令(代码)一起存储在 DRAM 和 L2 缓存中,而在 L1 级别是分开的。它们也都通过数据总线从 DRAM 传输到缓存。我读到 data/instructions 可以有单独的内存控制器。但是有没有把总线细分为数据和指令?

如果它们是分开的,那么分离总线与统一线路的权衡是什么?它们的物理实现方式不同还是可替代的?

外部公交线路,没有。那将是完整的哈佛,而不仅仅是拆分 L1。

“修改后的哈佛”只是冯·诺依曼架构的一种速度破解,唯一可见的效果是您需要 运行 用于自修改代码/JIT 代码生成的缓存同步指令可靠地工作。

(除非你有像 x86 这样的 ISA 需要 L1i + 管道与数据缓存保持一致,in which case stores have to snoop in-flight code addresses...)

参见:

  • Why is the size of L1 cache smaller than that of the L2 cache in most of the processors? - 回复:具有统一 L2 的多级缓存。

有些芯片的指令和数据总线是分开的。

您通常会在无缓存微控制器中发现真正的哈佛设置,其中指令从 ROM(或 NOR 闪存或其他东西)中获取,而数据 load/store 使用 SRAM 或 DRAM。

有些,如 AVR,具有加载程序存储器 (LPM) 指令,因此您可以在 EEROM / 闪存中拥有只读常量数据(如查找表)。不同的外部总线可以连接到不同类型的存储器。如果支持,SPM(存储程序内存)甚至可以写入该内存,以在电源周期内保持持久性,尽管此类内存的耐写性有限意味着您不希望将其作为正常操作的一部分。有一个 LPM 指令意味着它有点不纯粹哈佛,但它显然不是在所有 AVR 设备上都可用。但如果你确实拥有它,它更像是闪存和 RAM 的独立总线,能够 load/store 数据到任一个。但是你只能从程序内存中执行,所以它不是完整的冯诺依曼除非也支持 SPM。

两个独立的地址空间也意味着您可以解决例如64k 代码 64k 数据,而不是总共 64k,具有 16 位地址。