uvm中start_item的源码
时间: 2023-11-27 17:54:19 浏览: 127
`start_item`函数是UVM中序列化对象的一种机制,用于将序列化对象插入到序列执行队列中。以下是UVM中`start_item`的源代码:
```systemverilog
function bit uvm_sequence_base::start_item (uvm_sequence_item item,
uvm_sequencer_base sequencer,
bit set_priority = 0,
string source_file = "",
int source_line = 0);
uvm_sequence_item item_copy;
uvm_tlm_transaction_base t;
uvm_component comp = get_parent();
uvm_phase phase;
if (!item)
`uvm_fatal("NOITEM","Attempting to start a NULL sequence_item")
if (!sequencer)
`uvm_fatal("NOSEQ","Attempting to start a sequence_item with a NULL sequencer")
if (comp is uvm_root) begin
`uvm_warning("SEQROOT",{"Attempt to start sequence '",get_type_name(),
"' outside of a phase process. Ignored."})
return 0;
end
// Create a copy of the item
if(item.try_clone(item_copy) == 0) begin
`uvm_error("CLONE", {"Unable to clone sequence item '",item.get_type_name(),"'"})
return 0;
end
// Check for TLM analysis ports
if(item_copy.get_type_name() == "uvm_tlm_analysis_port_base") begin
t = item_copy;
t.set_source_info(source_file, source_line);
t.analysis_imp.connect(item_copy.analysis_export);
t.write(t);
return 1;
end
// Set the item's sequencer
item_copy.set_sequencer(sequencer);
// Set the item's source info
item_copy.set_source_info(source_file, source_line);
// Set the item's priority
if (set_priority)
item_copy.set_priority(m_priority);
// If in a run phase, start the item
phase = comp.get_phase();
if (phase != null && phase.get_name() == "run") begin
if (!sequencer.start_item(item_copy)) begin
`uvm_error("NOSEQITEM", {"Failed to start sequence item ",
item_copy.get_type_name()," with sequencer ",
sequencer.get_type_name()})
return 0;
end
end
else
m_req_q.push_back(item_copy);
return 1;
endfunction
```
此函数接收四个参数:
- `item`:要插入序列执行队列中的序列化对象。
- `sequencer`:将序列化对象插入到其执行队列中的UVM序列器。
- `set_priority`:指示是否应将`item`的优先级设置为该序列的优先级。
- `source_file`和`source_line`:指示从哪个源代码文件和行开始创建序列化对象。
该函数首先检查传递的参数是否有效。然后,它会复制序列化对象并将其设置在传递的`sequencer`中。如果序列化对象是一个TLM分析端口,则该函数会将其连接到分析导出,并通过`write`函数写入分析对象。如果在运行阶段,则该函数将使用传递的`sequencer`启动序列化对象。否则,它将序列化对象插入到要求队列中。函数返回1表示成功,返回0表示失败。
阅读全文
相关推荐
![-](https://img-home.csdnimg.cn/images/20241231044901.png)
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![gz](https://img-home.csdnimg.cn/images/20210720083447.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)