【发布时间】:2020-07-14 18:09:33
【问题描述】:
在修改后的哈佛架构中,数据和指令(代码)一起存储在 DRAM 和 L2 缓存中,而在 L1 级别是分开的。它们也都通过数据总线从 DRAM 传输到缓存。我读到数据/指令可以有单独的内存控制器。但是有没有将总线细分为数据和指令?
如果它们是分开的,那么拆分总线与统一线路的权衡是什么?它们的物理实现方式是不同的还是可替代的?
【问题讨论】:
标签: memory cpu-architecture instructions bus
在修改后的哈佛架构中,数据和指令(代码)一起存储在 DRAM 和 L2 缓存中,而在 L1 级别是分开的。它们也都通过数据总线从 DRAM 传输到缓存。我读到数据/指令可以有单独的内存控制器。但是有没有将总线细分为数据和指令?
如果它们是分开的,那么拆分总线与统一线路的权衡是什么?它们的物理实现方式是不同的还是可替代的?
【问题讨论】:
标签: memory cpu-architecture instructions bus
外部总线线路,没有。那将是完整的哈佛,而不仅仅是拆分 L1。
“修改哈佛”只是冯诺依曼架构的速度破解,唯一可见的效果是您需要运行缓存同步指令以使自修改代码/JIT 代码生成可靠地工作。
(除非您有像 x86 这样的 ISA,它需要 L1i + 管道与数据缓存保持一致,in which case stores have to snoop in-flight code addresses...)
见:
有些芯片有独立的指令和数据总线。
您通常会在无缓存微控制器中发现真正的哈佛设置,其中指令从 ROM(或 NOR 闪存或其他东西)获取,而数据加载/存储使用 SRAM 或 DRAM。
有些,如 AVR,有一个加载程序内存 (LPM) 指令,因此您可以在 EEROM / 闪存中拥有只读常量数据(如查找表)。不同的外部总线可以连接到不同类型的存储器。如果支持,SPM(存储程序内存)甚至可以写入该内存,以便在电源周期内保持持久性,尽管此类内存的有限写入持久性意味着您不希望将其作为正常操作的一部分。拥有 LPM 指令意味着它有点不那么纯粹的哈佛,但它显然不是在所有 AVR 设备上都可用。但是,如果您确实拥有它,它更像是用于闪存和 RAM 的单独总线,能够将数据加载/存储到任何一个。但是你只能从程序内存中执行,所以它不是完整的冯诺依曼,除非也支持 SPM。
两个独立的地址空间也意味着您可以寻址,例如64k 代码和 64k 数据,而不是总共 64k,具有 16 位地址。
【讨论】: