18lickc新利
的意见

内存映射从何而来?

确保软件能够准确地解决硬件问题。

受欢迎程度

内存映射是片上系统(SoC)与在其上执行的固件和软件之间的桥梁。工程师们可能认为地图会自动出现,但实际情况要复杂得多。硬件(HW)和软件(SW)的结合需要规划和妥协。这一合并的结果将不会完全实现,直到神奇的一天,当系统开始生活。

内存映射定义了软件应该如何处理硬件,以及它如何触发控制和监控芯片功能所需的基本操作。为了确保内存映射是正确的,软件和硬件设计团队必须协调他们的开发工作。鼓励团队朝着一个固定的目标发展,利用符号地址和宏将每个团队与地图上的微小变化隔离开来。然而,考虑到现代soc的复杂性,很难预测随着设计演变而来的所有变化顺序。

内存映射是如何构造的

系统内存映射的构建分为两个步骤。许多功能块都带有一个内置的寄存器映射,表示它们的本地地址结构。这个本地映射本质上是一个从零基址引用定义的地址列表。它指出在哪里可以找到本地控制和状态寄存器(csr),并提供了关于它们的各种位字段的用途的详细信息。此外,它还定义了如何读取、写入和清除这些位字段的规则。有些csr总是在开发周期的后期引入。它们可能对应于演进块中添加的逻辑,或者对于没有内置csr的遗留函数,对应于整个本地地址映射。此外,一些附加的逻辑,如中断控制和电源管理,只能在全芯片集成中定义。当然,对地址空间的所有相关更改都需要从HW传播到SW世界。

当块集成到SoC中并通过互连结构连接时,第二步开始。每个函数都被分配了自己的内存地址偏移,以确保它可以被唯一地寻址。例如,如果一个功能块中的寄存器的本地地址为0xA3,并且该块的内存偏移量为0x2000,那么运行在嵌入式处理器上的软件可以在0x20A3寻址该寄存器。

会出什么问题

随着硬件设计的发展,内存映射的基础也在不断变化。可配置的函数可以定期向上拨、向下拨或复制,以优化片上带宽和延迟。可以改进时钟方案以满足关键性能和功耗目标。后期营销需求可以作为变更请求引入。或者,软件团队可能决定需要更好地了解或控制关键功能。同样,即使团队通常做英勇的工作来保持所有这些变化的顶端,也不难看出错误是如何溜走的。例如,它可能是因为最后一分钟的“琐碎”错误修复,没有人记得触发内存映射的重建,或者因为原始设计中忘记了一个假设,破坏了派生设计中微妙但必要的行为。当这些发生时,后果可能相当严重。

我们需要什么

有些错误可以在软件中快速调试和修补,而另一些错误可能更加微妙和难以发现。想象一下这样一个难以捉摸的场景:一个电源域在应该关闭的时候保持打开。解决方案是尽可能自动化从本地功能到全局系统的SoC内存映射的生成,并进一步自动化这些复杂结构的验证。在不断紧缩的上市时间紧缩中,再生必须是维持生产力的关键。当一个新的SoC进入世界时,不可预见的事情发生了。但是,最好的方法是使用包含这种宝贵功能的IP和工具集来降低这种风险。

如需更多信息,请联系Arteris IP



留下回复


(注:此名称将公开显示)

Baidu