0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

UVM中更简单的内存管理

星星科技指导员 来源:嵌入式计算设计 作者: Siddharth Nair 2022-06-10 16:37 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

典型的SOC由多个接口组成,这些接口可以访问设计中的存储器。我们在验证这样的设计时,需要保证各个接口的内存访问不重叠,导致数据完整性丢失。

在使用涉及多个接口的基于 System Verilog 的验证环境进行验证时,我们需要对激励提供简洁的约束,以确保这些访问不会重叠并导致数据完整性丢失。

验证工程师通常不得不花费大量时间来调试应用的约束,而这种形式的约束会导致刺激的约束不足,这是一条非常冒险的道路。

随着基于 UVM 的单例内存管理器的引入,由于 UVM 提供的内存管理类的可用性,这项任务变得更加易于实现。但是这些新的验证组件仍然不是专门为开发涉及多个主机的环境而设计的。我们在这里开发的“ Easy memory manager ”最大限度地利用了现有的 UVM 方法,并且还提供了多个主控器之间更容易的内存访问。

什么是 UVM 内存管理器?

关于uvm_mem_mam类的可用资源非常稀缺,因此如果读者对其功能没有太多了解,这将是可以理解的。在继续讨论内存管理器提供的功能之前,我们想简要介绍一下默认 UVM 内存管理器的功能。

UVM 中有四个与内存管理相关的类。它们在下面提到 -

uvm_mem_mam_cfg – 它允许我们选择要由管理器管理的字节数以及开始和结束偏移量。

uvm_mem_mgr – 由希望分配内存的静态/动态实体发起。

uvm_mem_alloc_policy - 它也可以用来控制管理器的开始和结束偏移量,也可以根据我们的要求约束这些变量。

uvm_mem_region - 这些代表将由内存管理器分配的区域。这些区域包含开始偏移量和要由管理器分配的字节数。

现在我们对默认内存管理器的操作以及与 UVM 中的内存管理相关的类有了一个简要的了解,让我们看看我们在内存管理器中添加了哪些现有功能。

支持的功能

“ Easy memory manager ”支持以下一组功能,可以在各种项目中重用:

整个内存分为memory、master、region分配三个维度,支持这三个维度上region的分配和释放。

将内存划分为虚拟区域。

运行时分配和区域释放。

多个主控的非重叠分配。

通过提供要分配的区域的物理地址和字节数来分配区域。

可以保留内存块,以便任何主机都无法访问它。

提供有关已分配区域的详细信息的调试机制。

根据 .xls 文件的输入创建记忆。

顶部寄存器块和管理器可通过脚本进行配置。

即插即用,因此可以直接在任何现有的 UVM 环境中使用。

建筑学

本节描述了内存管理器的结构和将要介绍“简易内存管理器”的环境。管理器由顶部的uvm_reg_block组成,其中包含各个存储器(例如,闪存、JTAG、SRAM 等)。各个内存是根据.xls文件中提供的数据创建的。各个内存类配置可根据项目要求完全定制。以类似的方式,我们可以通过脚本的命令行选项配置顶部内存。经理是单身人士,因此不会有数据重复。

pYYBAGKdv3KAHu26AAC-pUOZz2c514.png

图1使用 Easy 内存管理器的环境

图2使用 Easy memory manager 分配和释放内存区域

poYBAGKdv4qALunBAAKLJGd4PXw489.png

表1管理器内的方法列表

在这里,我们展示了如何在多主机场景中使用“简易内存管理器”的场景。存储器被两个主机访问,一个是 SPI,另一个是以太网,它们正在执行自己的测试序列。在该示例中,您可以观察到 master 在访问内存时提供的唯一编号如何使用户对测试用例中区域的处理更加可控。此外,用户无需了解 RAL 模型中的内存结构。他可以简单地提供物理地址,并且经理足够聪明,可以根据地址保留区域。

pYYBAGKdv5WAVdZ7AAKSz4g_low617.png

图3预留/释放区域时 master 与 manager 的交互

最初,整个内存范围都可用,SPI 主机请求两个区域,以便它可以在这些区域上启动其序列。

同样,以太网主控也请求了三个区域。以太网主设备和 SPI 主设备的区域将通过主设备编号进行区分,主设备编号在分配时作为参数传递给主设备。

SPI 主控已完成其序列并通过在调用释放函数时指定其唯一主控编号来释放其分配的两个区域。

以太网主机现在希望访问之前分配给 SPI 主机的区域。因此它将通过指定物理地址来请求这些区域。

以太网的序列已经完成,它将释放它所请求的区域。

整合步骤

pYYBAGKdv52AHS8PAAFNAoENk5U067.png

图 4 集成步骤

向 XLS 提供输入——在 .xls 文件中以适当的格式写入数据以创建单独的内存。

通过脚本生成内存和 reg_block – 使用适当的命令行选项运行脚本。如果未提供命令行选项,则使用默认选项。

以管理器在环境中的实例——内存和管理器将根据 .xls 文件中提供的数据和命令行选项创建。在要访问管理器的组件中创建管理器的对象实例。

获取管理器的句柄——管理器的实例需要获取管理器的句柄,因为它是一个单例。管理器包含一个返回单例句柄的方法。

通过句柄访问方法– 可以使用管理器的句柄访问管理器的方法。

“ Easy memory manager”本质上是通用的,可用于任何现有的基于 UVM 的验证环境。管理器包易于配置,并且可以扩展到任何项目特定的环境,而无需更改内部代码。

在eInfochips,我们已经在系统、子系统和 IP 级环境中使用了这个内存管理器,并取得了预期的效果。我们已经使用 QuestaSim 和 NCSim 模拟器验证了这个组件。

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 以太网
    +关注

    关注

    41

    文章

    5929

    浏览量

    179643
  • 存储器
    +关注

    关注

    39

    文章

    7715

    浏览量

    170916
  • SPI
    SPI
    +关注

    关注

    17

    文章

    1867

    浏览量

    99923
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    TQKIT开发板工具让系统功能调用简单

    TQKIT开发板工具,将复杂的系统控制能力以接口形式开放给开发者,让系统功能调用简单
    的头像 发表于 12-08 09:27 160次阅读
    TQKIT开发板工具让系统功能调用<b class='flag-5'>更</b><b class='flag-5'>简单</b>

    为什么单片机很少使用malloc,而PC程序频繁使用呢?

    ,无法有效地进行内存回收和碎片整理。碎片问题可能导致可用内存不断减少,最终无法进行有效分配,造成系统稳定性问题。因此,嵌入式开发通常避免使用 malloc,而选择
    发表于 11-20 06:55

    WebGL/Canvas 内存泄露分析

    在构建高性能、长周期运行的 WebGL/Canvas 应用(如 3D 编辑器、数据可视化平台)时,内存管理是一个至关重要且极具挑战性的课题。 开发者通常面临的内存泄漏问题,其根源远比简单
    的头像 发表于 10-21 11:40 191次阅读
    WebGL/Canvas <b class='flag-5'>内存</b>泄露分析

    NVMe高速传输之摆脱XDMA设计24: UVM 验证包设计

    UVM 验证包的主要功能是对 DUT 提供激励, 仿真验证对应的功能, 并对测试结果进行自动对比分析与统计。 验证包包含一个NoPHAE_env 验证环境, 验证环境下包含
    的头像 发表于 09-14 11:29 4525次阅读
    NVMe高速传输之摆脱XDMA设计24: <b class='flag-5'>UVM</b> 验证包设计

    NVMe高速传输之摆脱XDMA设计24: UVM 验证包设计

    UVM 验证包设计结构如图 1 所示。 UVM 验证包的主要功能是对 DUT 提供激励, 仿真验证对应的功能, 并对测试结果进行自动对比分析与统计。 验证包包含一个NoPHAE_env 验证环境
    发表于 08-29 14:33

    NVMe高速传输之摆脱XDMA设计23:UVM验证平台

    验证的硬核 IP,因此在验证过程可以只使用其接口进行模拟,这将极大减小验证平台复杂度和构建难度,同时对验证的完备性影响较小.验证平台由 UVM 验证包、DUT、AXI BRAM IP 和 NVMe
    发表于 08-26 09:49

    灵活高效ZBUFF — C内存数据操作库:优化内存管理的利器

    在C语言开发,高效的内存管理是提升程序性能的关键。ZBUFF作为一款灵活高效的内存数据操作库,通过优化内存分配与释放机制,为开发者提供了
    的头像 发表于 08-14 18:01 527次阅读
    灵活高效ZBUFF — C<b class='flag-5'>内存</b>数据操作库:优化<b class='flag-5'>内存</b><b class='flag-5'>管理</b>的利器

    NVMe高速传输之摆脱XDMA设计18:UVM验证平台

    验证的硬核 IP,因此在验证过程可以只使用其接口进行模拟,这将极大减小验证平台复杂度和构建难度,同时对验证的完备性影响较小.验证平台由 UVM 验证包、DUT、AXI BRAM IP 和 NVMe
    发表于 07-31 16:39

    NVMe高速传输之摆脱XDMA设计九:队列管理模块设计(上)

    设计,结合UVM验证加快设计速度。队列管理模块采用队列的存储与控制分离的设计结构,如图1所示为队列管理模块的结构框图。 图1队列管理模块结构图对于提交队列,设置一块完整的BRAM存储空
    发表于 07-27 17:41

    HarmonyOS优化应用内存占用问题性能优化一

    使用的数据替换为新数据。 生命周期管理:在生命周期管理,可以释放不再使用的系统资源,包括应用内存、监听事件、网络句柄等。 Purgeable Memory
    发表于 05-21 11:27

    安科瑞医疗建筑能效解决方案,让能源管理简单!# 能源管理

    能源管理
    jf_55902079
    发布于 :2025年05月19日 16:52:11

    IEC61508系统的动态内存使用

    IEC 61508标准强烈推荐使用静态内存管理方式。在安全应用设计,我们都在遵循这个建议。
    的头像 发表于 04-11 15:17 1212次阅读
    IEC61508系统<b class='flag-5'>中</b>的动态<b class='flag-5'>内存</b>使用

    光伏电站智能分析管理系统让电站管理简单

    光伏电站智能分析管理系统让电站管理简单 光伏电站建好后,管理才是真正的考研。过去靠人工巡检,设备坏了要等好几天才能发现,发电损失让人心疼。
    的头像 发表于 03-14 15:20 807次阅读
    光伏电站智能分析<b class='flag-5'>管理</b>系统让电站<b class='flag-5'>管理</b><b class='flag-5'>更</b><b class='flag-5'>简单</b>

    爱立信如何让网络运维简单

    在爱立信“可编程网络”这一创新概念里,差异化连接、AI赋能和意图驱动、网络能力开放作为三大基石,各司其职,让网络智能、更灵活、开放。本期《信观察》,爱立信专家将从AI赋能和意图驱动的概念和功能入手,与您分享爱立信如何“让网络运维
    的头像 发表于 03-03 09:27 1w次阅读

    hyper 内存,Hyper内存:如何监控与优化hyper-v虚拟机的内存使用

    在日常工作,我们常常需要处理大量的文件和数据,这些重复性任务不仅耗时耗力,还容易因疲劳而导致错误。幸运的是,批量管理工具的出现为这一问题提供了高效的解决方案。今天就为大家介绍Hyper内存
    的头像 发表于 01-24 14:15 1698次阅读
    hyper <b class='flag-5'>内存</b>,Hyper<b class='flag-5'>内存</b>:如何监控与优化hyper-v虚拟机的<b class='flag-5'>内存</b>使用