news 2026/10/27 1:16:53

[UVM笔记]UVM 保存mem

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
[UVM笔记]UVM 保存mem

在UVM 环境中,测试完成后从Mem中保存数据到文件:

tasksave_mem_data()string file_name="data.mem";bit[31:0]addr=32'h001;// addr width 32bit[31:0]addr_l;integer num_blocks=6;bit[511:0]data[];//salve data width is 512int file;bit[7:0]byte_d;string line_s="";string line_s_1="";int k=0;// use for data order formatdata=new[num_blocks];file=$fopen(filename,"w");if(file==0)begin `uvm_error("FILE_OPEN_ERR",$sformatf("body , Could not open file %s",filename))endfor(int i=0;i<num_blocks;i++)begin addr_l=addr+i*32'h40;data[i]=salve_agent.axi_slave_mem.read(addr_l);line_s="";// chage the addr order, from left to rightfor(int j=0;j<64;j++)begin byte_d=data[i][j*8+:8];line_s=$sformatf("%s%h",line_s,byte_d);end// two line to oneif(k==1)begin line_s_1=$sformatf("%s%s",line_s_1,line_s);$fdisplay(file,"%s",line_s_1);line_s_1="";k=0;endelsebegin k+=1;line_s_1=$sformatf("%s%s",line_s_1,line_s);end end $fclose(file);endtask

在上述接口中,使用到了salve_agent.axi_slave_mem的read接口,这里如果要获取salve_agent这个对象,可以按照下面方式进行:

uvm_pkg::uvm_root root=uvm_pkg::uvm_root::get();uvm_pkg::uvm_component comp=root.find("*env.axi_system_env.slave[0]");//根据dut接口中进行配置,这里0是获取slave0assert($cast(salve_agent,comp));

这里有几点需要注意:

1.地址位宽2.数据位宽3.输出数据的格式要求,可以根据需求进行调整4.salve_agent.axi_slave_mem的read,这里是关键,如何获取接口,在那个comp中获取。5.示例中有一个 two line to one的操作,这里可以根据需要调整,这里的调整需要根据data width来进行
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/27 1:16:50

课件---程序设计基础-第5章- 选择控制结构--if else

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/27 1:15:23

【GATT】规范精讲[6]: 写得进去还要写得靠谱——五种写过程、签名写、可靠写与写描述符

读过程解决的是把值拿回来,方向是服务器流向客户端;这一篇把方向倒过来:客户端把值写进服务器。表面看就是换个 PDU 的事,真写起来会发现写比读麻烦得多。读失败了大不了重试,数据还是对端那份;写一旦在半路上出岔子,配置可能改了一半、固件可能写花、设备可能变砖。所以…

作者头像 李华
网站建设 2026/10/27 1:14:38

Verilog基础:操作数的位选(bit-select)和域选(part select)

相关阅读 Verilog基础https://blog.csdn.net/weixin_45791458/category_12263729.html?spm1001.2014.3001.5482 位选 位选(bit-select)用于选择一个向量(vector)的某位&#xff0c;可以是线网大类(net)&#xff0c;也可以是变量大类(variable)中的reg、integer和time&#xf…

作者头像 李华
网站建设 2026/10/27 1:13:48

MySQL Innodb 引擎中预防 Update 操作上升为表锁

一、MySQL 如何预防 Update 上升为表锁 在 MySQL 中&#xff0c;进行任何数据的 修改 操作都会进行一定的锁操作&#xff0c;而锁的不同直接导致性能的差异。例如 MyISAM 引擎&#xff0c;更新时采用表锁&#xff0c;并发性较差。而 Innodb 引擎支持事务&#xff0c;更新时采用…

作者头像 李华
网站建设 2026/10/27 1:13:45

基于 YOLO V8 Fine-Tuning 训练自定义的目标检测模型

一、YOLO V8 YOLO V8 是由 2023 年 ultralytics 公司开源的发布&#xff0c;是结合了前几代 YOLO 的融合改进版。YOLO V8 支持全方位的视觉 AI 任务&#xff0c;包括检测、分割、姿态估计、跟踪和分类。并且在速度和准确性方面具有无与伦比的性能。能够应用在各种对速度和精度…

作者头像 李华
网站建设 2026/10/27 1:13:45

Verilog基础:在testbench中使用阻塞赋值和非阻塞赋值的区别

相关阅读 Verilog基础https://blog.csdn.net/weixin_45791458/category_12263729.html?spm1001.2014.3001.5482 本文详细阐述了在一个testbench中&#xff0c;应该如何使用阻塞赋值与非阻塞赋值。首先说结论&#xff0c;建议在testbench中&#xff0c;对时钟信号&#xff08;…

作者头像 李华