【Synopsys】CHI SN_Agent memory模型使用

Synopsys VIP中向用户提供了内存模型,项目初期或block级验证cpu时时,用户可以使用memory模型代替真实内存用于存储软件代码,加快仿真速度和迭代。

CHI SN Agent中包含了svt_chi_mem类型的memory模型。

svt_chi_mem扩展自svt_mem类,该类用于模拟单个memory region,在使用时需要为其分配可以访问的地址范围,内部实现了许多task可以实现用于对memory的访问。

active_mode,可以通过SN response sequence更新memory;

passive_mode,可以通过成功完成的write transaction更新内存,在该模式下,如下要为read transaction更新内存,需要配置svt_chi_node_configuration::memory_updata_for_read_xact_enable = 1

上述两种更新内存的方式都是前门访问的方式,还可以使用后门访问的方法直接对memory进行访问

svt_chi_mem的后门访问方法:

read()
write()
save_mem() //用于将memory内存dump到文件中
load_mem() //将$readmemh格式的文件加载到memory模型中
clear()    //清除memory的内容

当使用read()和write()方法对内存进行后门访问时,必须保证地址对齐。比如,如果data_width为32-bit(4Bytes),那么使用read()和write()时地址应该为0,4,8,12这种对齐的地址,如果使用了非对齐的地址,在该方法内部会做对齐处理后再对内存进行访问。

同时,slave VIP还提供了svt_axi_slave_agent::write_byte()和svt_axi_slave_agent::read_byte()方法以支持对单字节访问

在进行软件仿真时,可以将编译后的软件程序通过后门加载的方式加载到memory模型中。出于后门操作的需要seq需要获取到验证平台中的chi sn_agent并对其中的memory模型进行操作:
1.首先通过uvm_root的find()方法和chi sn_agent的例化名,获取到验证平台中sn_agent的句柄

uvm_pkg::uvm_root   **root** = uvm_pkg::uvm_root::get();
uvm_pkg::uvm_component   **comp_inst**;

svt_chi_sn_agent  **sn_agent**;
svt_mem **memory**;

initial begin 
#1ns;
comp_inst = root.find("uvm_test_top.top_env.sub_env.amba_env.chi_system[0].sn[0]");
assert($cast(sn_agent,comp_inst ));

memory = sn_agent.chi_sn_mem;

end

然后就可以直接调用memory模型中的方法进行后门加载操作

memory.read();
memory.write();
memory.clear();

为了操作方便,用户可以根据需求对上述读写操作进行封装

function void write_mem8(bit[`ADDR_WIDTH-1:0] addr,logic [7:0] data);

	//add your code
	void'(memory.write(mem_addr,mem_data,mem_strb));
endfunction::write_mem8

补充:uvm_root.find/find_all的介绍
在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值