当先锋百科网

首页 1 2 3 4 5 6 7

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的内容

在进行软件仿真时,可以将编译后的软件程序通过后门加载的方式加载到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的介绍
在这里插入图片描述