关于uvm_mem model的使用

uvm_mem提供了mem write和read的方法,在write方法中,有offset形参,这个形参意指访问的location处于连续地址空间中的偏移。在通过uvm_reg_map转换成physical address时,会加上base_addr。

通常访问一段mem,我们会使用连续的地址进行访问,例如mem.write(0, data0) mem.write(1, data1)等,从0遍历到最大地址空间。

例如我例化一个128kb的ram

那么我能访问的地址空间是mem.write(0, data0) mem.write('h7fff, datax)。但是128kb的地址空间,如果按byte算的话是:0-'h1_ffff。这也是总线上能看到的地址范围。

那么如何将0-'h7fff的映射到物理地址0-'h1_ffff上呢?

那么uvm_reg_map中的configure函数,提供了byte_addressing形参。

按上图注释 byte_addressing的作用是将偏移地址乘以4(如果是32位总线)。

在uvm_cookbook中有如下解释:

For example,
if n_bytes=4 and byte_addressing=0, then an access to a register that is 64-bits wide and at offset 0 will result in two bus
accesses at addresses 0 and 1. With byte_addressing=1, that same access will result in two bus accesses at addresses 0 and 4.

那么我们在创建uvm_reg_map时,需要将byte_addressing设置为1(create_map()),这也是uvm1.1后各版本的默认值。但是在uvm1.0中,默认值是0。

注:在vcs仿真器中,如果使用synopsys vcs仿真器内置的uvm-1.2库的话,需要定义+define+如下的宏

  • 6
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
uvm_mem_mam是UVM(通用验证方法)中的一个类,用于在验证中管理和控制内存资源的分配和释放。它提供了一个专门的机制来分配、访问和删除内存块,以满足验证所需的动态内存分配需求。 uvm_mem_mam可以用于管理各种类型的内存资源,例如:邮件队列、数据缓冲区、控制寄存器等。它提供了一个灵活的分配机制,可以根据需求动态地分配不同大小的内存块,并且可以很容易地调整内存分配策略来满足各种验证场景的需求。 使用uvm_mem_mam时,首先需要创建一个uvm_mem_mam对象,并在验证环境中实例化它。然后,可以通过调用其方法来执行各种操作,如分配内存、释放内存、查询内存状态等。 在使用uvm_mem_mam分配内存时,可以指定要分配的内存块的大小,并可以选择分配成功时的行为(如等待分配成功或立即返回分配失败)。当内存块不再需要时,可以通过调用释放内存的方法将其返回给uvm_mem_mam,并在需要时重新分配。 此外,uvm_mem_mam还提供了一些其他有用的功能,如内存使用状况的查询和报告、内存块的重用、内存分配的优先级控制等,以便更好地管理和控制内存资源的使用。 总而言之,uvm_mem_mam是UVM中用于管理和控制内存资源的一个有用工具。它提供了灵活的内存分配机制,可以满足验证中动态内存分配的需求,并提供了其他功能来帮助有效管理内存资源的使用。通过使用uvm_mem_mam,我们可以更好地组织和控制内存资源,提高验证效率和可维护性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值