[CU]reg model使用篇-reg model使用示例之uvc/seq内使用reg model

参考资料:

(1) 《Practical UVM step by step with IEEE》

(2) 《UVM实战-张强》

1. uvc内使用regmodel

复制代码
 1 //示例1:reference model中使用reg model;
 2 class my_model extends uvm_component;
 3     ...
 4     reg_model p_rm;
 5     ...
 6 endclass
 7 
 8 task my_model::main_phase(uvm_phase phase);
 9     my_transaction tr;
10     my_transaction new_tr;
11     
12     uvm_status_e   status;
13     uvm_reg_data_t value; 
14     super.main_phase(phase);
15     p_rm.invert.read(status,value,UVM_FRONTDOOR);
16     
17     while(1) begin
18         port.get(tr);
19         new_tr=new("new_tr");
20         new_tr.copy(tr);
21         if(value) invert_tr(new_tr);
22         ap.write(new_tr);
23     end
24     
25 endtask
26 
27 function void my_env::connect_phase(uvm_phase phase);
28     ...
29     mdl.p_rm=this.p_rm;
30     ...
31 endfunction
复制代码
复制代码
 1 //示例2:test中使用reg_model;
 2 class vga_lcd_reg_single_access_test_frontdoor extends vga_lcd_env_base_test;
 3     `uvm_component_utils(vga_lcd_reg_single_access_test_frontdoor)
 4     
 5     ral_block_vga_lcd ral_regmodel;
 6     uvm_status_e      status;
 7     uvm_reg_data_t    value_w;
 8     uvm_reg_data_t    value_r;
 9     uvm_reg           rg;
10 
11     function new(string name, uvm_component parent);
12         super.new(name,parent);
13     endfunction    
14     
15     task main_phase(uvm_phase phase);
16         uvm_objection phase_done=phase.get_objection();
17         phase_done.raise_objection(this);
18         value_w=32'h0000_1111;
19 
20         rg=env.ral_regmodel.HTIM;
21         `uvm_info(get_full_name(),"Starting Backdoor write access to HTIM", UVM_LOW)
22         rg.write(status,value_w,.path(UVM_BACKDOOR));
23         `uvm_info(get_full_name(),"Ending Backdoor write access to HTIM", UVM_LOW)
24         
25         `uvm_info(get_full_name(),"Starting Backdoor read access to HTIM", UVM_LOW)
26         rg.read(status,value_r,.path(UVM_BACKDOOR));    
27         `uvm_info(get_full_name(),"Ending Backdoor read access to HTIM", UVM_LOW)
28 
29         env.ral_regmodel.HTIM.write(status,value_w,.path(UVM_BACKDOOR));
30         env.ral_regmodel.HTIM.read(status,value_r,.path(UVM_BACKDOOR));
31 
32         phase_done.set_drain_time(this,200);
33         phase_done.drop_objection(this);
34     endtask
35 
36 endclass
复制代码

1.1 uvc内使用reg model具体操作过程(初级版本-注意resp的处理)

1.2 uvc内使用reg model具体操作过程(通用版本-注意resp的处理)

2. sequence内使用寄存器模型

(1) 先在对应的sequencer中定义一个顶层reg_block指针,并指向base_test的reg_block对象;

(2) 在sequence中调用p_sequencer进行访问;

复制代码
1 class case0_cfg_vseq extends uvm_sequence;
2     ...
3     virtual task body();
4         uvm_status_e   status
5         uvm_reg_data_t value;
6         p_sequencer.p_rm.invert.write(status,1,UVM_FRONTDOOR);
7     endtask
8     ...
9 endclass
复制代码

 

posted on   知北游。。  阅读(449)  评论(0编辑  收藏  举报

编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示