典型的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文件中提供的数据创建的。各个内存类配置可根据项目要求完全定制。以类似的方式,我们可以通过脚本的命令行选项配置顶部内存。经理是单身人士,因此不会有数据重复。
图1使用 Easy 内存管理器的环境
图2使用 Easy memory manager 分配和释放内存区域
表1管理器内的方法列表
在这里,我们展示了如何在多主机场景中使用“简易内存管理器”的场景。存储器被两个主机访问,一个是 SPI,另一个是以太网,它们正在执行自己的测试序列。在该示例中,您可以观察到 master 在访问内存时提供的唯一编号如何使用户对测试用例中区域的处理更加可控。此外,用户无需了解 RAL 模型中的内存结构。他可以简单地提供物理地址,并且经理足够聪明,可以根据地址保留区域。
图3预留/释放区域时 master 与 manager 的交互
最初,整个内存范围都可用,SPI 主机请求两个区域,以便它可以在这些区域上启动其序列。
同样,以太网主控也请求了三个区域。以太网主设备和 SPI 主设备的区域将通过主设备编号进行区分,主设备编号在分配时作为参数传递给主设备。
SPI 主控已完成其序列并通过在调用释放函数时指定其唯一主控编号来释放其分配的两个区域。
以太网主机现在希望访问之前分配给 SPI 主机的区域。因此它将通过指定物理地址来请求这些区域。
以太网的序列已经完成,它将释放它所请求的区域。
整合步骤
图 4 集成步骤
向 XLS 提供输入——在 .xls 文件中以适当的格式写入数据以创建单独的内存。
通过脚本生成内存和 reg_block – 使用适当的命令行选项运行脚本。如果未提供命令行选项,则使用默认选项。
以管理器在环境中的实例——内存和管理器将根据 .xls 文件中提供的数据和命令行选项创建。在要访问管理器的组件中创建管理器的对象实例。
获取管理器的句柄——管理器的实例需要获取管理器的句柄,因为它是一个单例。管理器包含一个返回单例句柄的方法。
通过句柄访问方法– 可以使用管理器的句柄访问管理器的方法。
“ Easy memory manager”本质上是通用的,可用于任何现有的基于 UVM 的验证环境。管理器包易于配置,并且可以扩展到任何项目特定的环境,而无需更改内部代码。
在eInfochips,我们已经在系统、子系统和 IP 级环境中使用了这个内存管理器,并取得了预期的效果。我们已经使用 QuestaSim 和 NCSim 模拟器验证了这个组件。
审核编辑:郭婷
全部0条评论
快来发表一下你的评论吧 !