2

假设您正在实现一个带有 cpu、ram、rom 和 mmu 的简单 SoC,以将 ram 和 rom 映射到 cpu 的地址空间。在实例化不同的组件时,这样做会更有意义:

ram 和 rom 在 mmu 中实例化

top
    cpu
    mmu
        ram
        rom

或者

所有组件都在顶层实例化并在那里连接在一起

top
    cpu
    mmu
    ram
    rom
4

2 回答 2

3

这实际上是一个设计问题,答案取决于您的要求。需要考虑的几点是:

重用

与许多 SoC 项目中的情况一样,您可能希望将模块或子系统从一个项目重用到下一个项目。将模块组合在一起是一个好主意,具体取决于它们在不同上下文中的重用方式。这样,除了设计 RTL(例如测试台、综合约束、断言等)之外的附属物也可以被重用。

依赖项

这与重用的考虑是一致的,但请考虑模块之间的依赖关系。在您的示例中,mmu 是否总是需要RAM 和 ROM?如果是,这是在 mmu 中实例化它们的论据。mmu 会与不同数量的内存一起工作吗?如果是,这是实例化 mmu 之外的内存的论据。

验证范围

在现代 SoC 设计中,验证比设计本身需要更多的时间和资源。因此,以一种有助于且不妨碍验证工作的方式构建层次结构。例如,如果您的示例中的 cpu 要自行验证,则 cpu 应实例化所有子组件,在内部将它们连接起来,并且只显示相关的 cpu 端口。这样,验证环境(也称为测试平台)不必复制 cpu、mmu 和内存之间的所有连接。

一般来说,我认为层次结构(你的两个例子中的第一个)最有意义,也是最常见的。

于 2012-09-18T03:39:42.473 回答
0

根据你的问题,没关系。在中等复杂的 ASIC 上,层次结构很重要,因为模块通常用于定义综合边界和电源域等。

于 2012-09-17T21:30:31.473 回答