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

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

3天内不再提示

在UVM中更轻松地进行内存管理

星星科技指导员 来源:嵌入式计算设计 作者:Siddharth Nair 2022-11-29 17:11 次阅读

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

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

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

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

什么是 UVM 内存管理器?

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

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

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

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

uvm_mem_alloc_policy– 它还可用于控制管理器的开始和结束偏移量,并根据我们的要求约束这些变量。

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

现在我们已经简要了解了默认内存管理器的操作以及与 UVM 中的内存管理关联的类,让我们看看我们在内存管理器中的这个现有功能上添加了什么。

支持的功能

“简易内存管理器”支持以下一组功能,可以在各种项目中重用:

整个内存分为内存、主内存和分配的区域,支持这三个维度上的区域分配和释放。

将记忆划分为虚拟区域。

区域的运行时分配和释放。

多个主节点的非重叠分配。

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

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

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

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

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

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

建筑

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

poYBAGOFzMWADgzvAAB5PhuVPSs408.png

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

pYYBAGOFzM6AbuMWAABDvAtgHBs280.png

poYBAGOFzM-AbVBuAABIwbW8vdk807.png

图2使用 Easy 内存管理器分配和释放内存区域

pYYBAGOFzNaAJvQZAAE4Thk9Nh0750.png

表1管理器内的方法列表

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

5e14a851f2990-Picture4.png

图3预留/释放区域时主节点与管理器的交互

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

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

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

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

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

整合步骤

poYBAGOFzOmAFSxxAABVZsjRFL4426.png

图4 集成步骤

向XLS提供输入–以适当的格式将数据写入.xls文件以创建单个内存。

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

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

获取管理器的句柄 – 管理器的实例需要获取管理器的句柄,因为它是单例。管理器由返回单一实例句柄的方法组成。

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

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

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

审核编辑:郭婷

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

    关注

    40

    文章

    5358

    浏览量

    170903
  • 存储器
    +关注

    关注

    38

    文章

    7444

    浏览量

    163546
  • soc
    soc
    +关注

    关注

    38

    文章

    4112

    浏览量

    217828
收藏 人收藏

    评论

    相关推荐

    如何使用 ChatGPT 进行内容创作

    使用ChatGPT进行内容创作是一个高效且富有创意的过程。以下是一些关键步骤和建议,帮助您充分利用ChatGPT进行内容创作: 一、准备阶段 注册与登录 : 确保您已注册ChatGPT账号,并登录
    的头像 发表于 10-25 16:08 328次阅读

    Linux内存管理HVO的实现原理

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

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

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

    内存管理的硬件结构

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

    Jtti:新加坡云服务器运行内存和存储内存有何区别?

    。它是一种易失性存储,意味着断电后存储的数据会丢失。 存储内存:用于持久化存储数据,如操作系统、应用程序、数据库和用户数据。它是一种非易失性存储,即使断电后也能保持数据不丢失。 二、速度: 运
    的头像 发表于 06-25 14:26 413次阅读

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

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

    FreeRTOS如何在中断调用内存分配函数?

    最近在玩FreeRTOS,遇到一个问题,就是不知如何在中断调用内存分配函数。pvPortMalloc函数中会调用xTaskResumeAll,而这个函数不能再中断调用,所以请问中断中进行内
    发表于 05-08 08:25

    stm32h7想把sarm1作为运行内存,但上电会进入hard fault是哪里的问题?

    因项目需要,想把sarm1(0x30000000-0x3000ffff)作为运行内存,但上电会进入hard fault, 请问有哪大哥这样设置是成功的
    发表于 04-17 07:20

    STM32如何用HAL库进行内核复位?

    STM32如何用HAL库进行内核复位 普通的系统复位函数如下: / ** 简短的系统重置 详细信息发起系统重置请求以重置MCU。 * / __STATIC_INLINE void
    发表于 04-11 06:49

    fpga验证和uvm验证的区别

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

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

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

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

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

    系统内存和运行内存的区别

    系统内存和运行内存都是计算机重要的概念,它们计算机的存储和运行方面起着不可或缺的作用。虽然它们与计算机存储和运行息息相关,但是它们具有不同的功能和实现方式。接下来我将详细介绍系统
    的头像 发表于 01-15 16:32 3000次阅读

    行内存12g和16g的区别

    行内存12g和16g的区别  运行内存是计算机的一种硬件组件,用于存储正在运行的程序和数据。12GB和16GB是两种常见的内存容量,它们
    的头像 发表于 12-25 15:12 1.1w次阅读

    UVM环境如何控制打印数组或队列元素的数据量

    UVM验证环境的项目中,经常需要使用内置的print()函数或sprint()函数打印
    的头像 发表于 12-20 10:14 3645次阅读
    <b class='flag-5'>在</b><b class='flag-5'>UVM</b>环境<b class='flag-5'>中</b>如何控制打印数组或队列元素的数据量