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 模拟器验证了这个组件。

审核编辑:郭婷

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

    关注

    40

    文章

    5443

    浏览量

    172089
  • 存储器
    +关注

    关注

    38

    文章

    7514

    浏览量

    164031
  • SPI
    SPI
    +关注

    关注

    17

    文章

    1711

    浏览量

    91797
收藏 人收藏

    评论

    相关推荐

    虚拟内存溢出该怎么处理 虚拟内存在服务器的应用

    在现代计算机系统,虚拟内存是一种重要的资源管理技术,它允许系统使用硬盘空间来扩展物理内存的容量。然而,当系统运行的程序和进程超出了物理内存
    的头像 发表于 12-04 09:49 207次阅读

    Linux下如何管理虚拟内存 使用虚拟内存时的常见问题

    在Linux系统,虚拟内存管理是操作系统内核的一个重要功能,负责管理物理内存和磁盘上的交换空间。以下是对Linux下如何
    的头像 发表于 12-04 09:19 513次阅读

    虚拟内存对计算机性能的影响

    在现代计算机系统内存管理是确保系统高效运行的关键因素之一。虚拟内存技术作为内存管理的核心组成
    的头像 发表于 12-04 09:17 921次阅读

    虚拟内存的作用和原理 如何调整虚拟内存设置

    虚拟内存,也称为虚拟内存管理或页面文件,是计算机操作系统的一种内存管理技术。它允许系统使用硬盘
    的头像 发表于 12-04 09:13 566次阅读

    Linux内存泄露案例分析和内存管理分享

    作者:京东科技 李遵举 一、问题 近期我们运维同事接到线上LB(负载均衡)服务内存报警,运维同事反馈说LB集群有部分机器的内存使用率超过80%,有的甚至超过90%,而且内存使用率还再不停的增长。接到
    的头像 发表于 10-24 16:14 751次阅读
    Linux<b class='flag-5'>内存</b>泄露案例分析和<b class='flag-5'>内存</b><b class='flag-5'>管理</b>分享

    Linux内存管理HVO的实现原理

    代码阅读工具:vim+ctags+cscope本文主要介绍内存管理的HVO(HugeTLB Vmemmap Optimization)特性,通过HVO可以节省管理HugeTLB 页面
    的头像 发表于 10-22 16:51 262次阅读
    Linux<b class='flag-5'>内存</b><b class='flag-5'>管理</b><b class='flag-5'>中</b>HVO的实现原理

    Windows管理内存的三种主要方式

    Windows操作系统提供了多种方式来管理内存,以确保系统资源的有效利用和性能的优化。以下是关于Windows管理内存的三种主要方式的详细阐述,包括堆
    的头像 发表于 10-12 17:09 1053次阅读

    内存管理的硬件结构

    常见的内存分配函数有malloc,mmap等,但大家有没有想过,这些函数在内核是怎么实现的?换句话说,Linux内核的内存管理是怎么实现的?
    的头像 发表于 09-04 14:28 343次阅读
    <b class='flag-5'>内存</b><b class='flag-5'>管理</b>的硬件结构

    ESP-IDF内核内存管理如何验证?

    请教一下,ESP-IDF 内核内存管理如何验证
    发表于 06-19 06:30

    深入理解Java 8内存管理机制及故障排查实战指南

    Java的自动内存管理机制是由 JVM 的垃圾收集器来实现的,垃圾收集器会定期扫描堆内存的对象,检测并清除不再使用的对象,以释放
    的头像 发表于 04-04 08:10 1023次阅读
    深入理解Java 8<b class='flag-5'>内存</b><b class='flag-5'>管理</b>机制及故障排查实战指南

    fpga验证和uvm验证的区别

    FPGA验证和UVM验证在芯片设计和验证过程中都扮演着重要的角色,但它们之间存在明显的区别。
    的头像 发表于 03-15 15:00 1688次阅读

    uvm1.1升级为uvm1.2 uvm_report_server报错是何原因?

    ISP算法仿真中,小编会用reference model调用DPI接口用C++ 算法实现pixel算法处理,然后和DUT算法处理输出的pixel值进行比较,比较时候发现报错,报错代码如下,原因是小编把uvm1.1升级为uvm1.2了。
    的头像 发表于 03-04 14:18 831次阅读
    <b class='flag-5'>uvm</b>1.1升级为<b class='flag-5'>uvm</b>1.2 <b class='flag-5'>uvm</b>_report_server报错是何原因?

    UVM手把手教程系列(二)Phase机制简单介绍

    UVM的phase,按照其是否消耗仿真时间($time打印出的时间)的特性,可以分成两大类
    的头像 发表于 02-29 09:26 1472次阅读
    <b class='flag-5'>UVM</b>手把手教程系列(二)Phase机制<b class='flag-5'>简单</b>介绍

    UVM手把手教程系列(一)UVM验证平台基础知识介绍

    先抛开UVM,回想一下我们在平时写完程序后,是不是肯定需要灌一个激励给DUT,然后再从DUT获取结果,并跟一个参考模块进行对比,检查结果是否正确。就像下面这个图:
    的头像 发表于 02-27 09:08 6170次阅读
    <b class='flag-5'>UVM</b>手把手教程系列(一)<b class='flag-5'>UVM</b>验证平台基础知识介绍

    C语言中的动态内存管理讲解

    本章将讲解 C 的动态内存管理。C 语言为内存的分配和管理提供了几个函数。这些函数可以在 头文件中找到。
    的头像 发表于 02-23 14:03 409次阅读
    C语言中的动态<b class='flag-5'>内存</b><b class='flag-5'>管理</b>讲解