Architecture SoC的首选HDL实例化层次结构

Architecture SoC的首选HDL实例化层次结构,architecture,vhdl,verilog,fpga,system-on-chip,Architecture,Vhdl,Verilog,Fpga,System On Chip,假设您正在使用cpu、ram、rom和mmu实现一个简单的SoC,以将ram和rom映射到cpu的地址空间。实例化不同组件时,执行以下操作是否更有意义: ram和rom在mmu内实例化 top cpu mmu ram rom 或 所有组件都在顶层实例化并连接在一起 top cpu mmu ram rom 根据你的问题,没关系。在中等复杂的ASIC上,层次结构很重要,因为模块通常用于定义合成边界和功率域等。这实际上

假设您正在使用cpu、ram、rom和mmu实现一个简单的SoC,以将ram和rom映射到cpu的地址空间。实例化不同组件时,执行以下操作是否更有意义:

ram和rom在mmu内实例化

top
    cpu
    mmu
        ram
        rom

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

top
    cpu
    mmu
    ram
    rom

根据你的问题,没关系。在中等复杂的ASIC上,层次结构很重要,因为模块通常用于定义合成边界和功率域等。这实际上是一个设计问题,答案取决于您的需求。需要考虑的几个方面是:

重用

与许多SoC项目一样,您可能希望在一个项目与下一个项目之间重用块或子系统。根据模块在不同上下文中的重用方式将模块分组是一个好主意。这样,除了设计RTL之外的辅助工具(例如测试台、合成约束、断言等)也可以重用

依赖关系

这与重用的注意事项是一致的,但请考虑模块之间的依赖关系。在您的示例中,mmu是否总是需要RAM和ROM?如果是,这是在mmu中实例化它们的参数。mmu会使用不同数量的内存吗?如果是,这是一个用于实例化mmu外部内存的参数

验证范围

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


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

这真的没有什么区别,取决于你想如何组织你的项目。我知道它在功能上没有区别。我只是想知道是否有一种更可取的方法,以及每种方法的优缺点。