5. UVM -- suquence机制
作者:互联网
UVM -- suquence机制
1.1. sequence 机制的原理
1.2. sequence机制的使用
1.3. sequence 的启动 (2种方法)
1.3.1. 方法一:设置default_sequence
1.3.2. 方法二:手动启动sequence (更常用)
task my_base_test::run_phase(uvm_phase phase);
my0_seq m_seq = my0_seq::type_id::create("m_seq");
super.run_phase(phase);
phase.raise_objection(this);
`uvm_info(get_type_name(), "< 005 > : run_phase ", UVM_DEBUG)
// seq start
m_seq.start(m_env.m0_agent.m0_seqr);
phase.get_objection().set_drain_time(this, 1000);
phase.drop_objection(this);
endtask: run_phase
1.4. sequence do_item 方法
1.4.1. 方法一:start_item(req);
repeat(100) begin
@(posedge MY0.clk);
req = my0_seq_item::type_id::create("req"); // 1. create item
start_item(req); // 2. start item to sequencer
assert(req.randomize() with {req.pwdata == 100;}); // 3. randomize()
finish_item(req); // 4. send item to driver
`uvm_info(get_type_name(), $sformatf("< SEQ-2-1 > : %h, %h", req.paddr, req.pwdata), UVM_DEBUG)
end
1.4.2. 方法二:uvm_do_with()
repeat(100) begin
@(posedge MY0.clk);
req = new("req"); // 1. create item
`uvm_do_with(req, {req.paddr < 32'h40000000; req.pwdata == 32'h4444FFFF;})
`uvm_info(get_type_name(), $sformatf("< SEQ-2-2 > : %h, %h", req.paddr, req.pwdata), UVM_DEBUG)
end
1.5. sequence 的嵌套
1.6. sequence 的仲裁
1.7. sequence获取响应
1.8. UVM sequence library
1.8.1. 什么是UVM sequence library
其 本质是一个sequence, 相对于普通的sequence, sequence library有以下功能:
- 其他sequence可以向sequence library注册
- 可根据配置产生并且执行已经在其内部注册过的sequence
- 具有多种内嵌的选择sequence的算法
- 支持用户自定义的sequence;选择算法
- 注册方式的多样化
1.8.2. 向UVM sequence library注册sequence
1.8.2.1. 永久注册
1.8.2.2. 临时注册
1.8.3. sequence_library中添加sequence
1.8.4. UVM sequence library相关变量及配置类
1.8.4.1. 相关变量
1.8.4.2. 配置类
1.9. Virtual sequence
1.9.1. 什么是Virtual sequence 及 Virtual sequencer
1.9.2. Virtual sequence 与 Virtual sequencer 的使用方法
标签:sequence,--,req,1.8,item,UVM,suquence,phase 来源: https://www.cnblogs.com/thisway2014/p/16503021.html