若使用uvm_anlaysis_imp_decl中的write方法收集数据,不收集master接受数据时发起的读请求,但读请求会通过driver驱动dut,怎么写代码呢
时间: 2024-05-12 20:19:44 浏览: 153
如何寫 一個driver
如果您想收集通过driver驱动dut发出的读请求,可以在driver中使用uvm_analysis_port将读请求发送到一个analysis端口,然后在analysis组件中使用uvm_analysis_imp_decl中的write方法收集数据。具体实现如下:
1. 在driver中声明一个analysis端口:
```
class my_driver extends uvm_driver #(my_transaction);
uvm_analysis_port #(my_transaction) analysis_port;
// ...
endclass
```
2. 在driver中发送读请求到analysis端口:
```
task run_phase(uvm_phase phase);
my_transaction tx;
// 发送读请求
analysis_port.write(tx);
// ...
endtask
```
3. 在analysis组件中声明一个analysis_imp:
```
class my_analysis extends uvm_analysis_port #(my_transaction);
uvm_analysis_imp_declare(my_analysis);
// ...
endclass
```
4. 在analysis组件中实现write方法:
```
task write(input my_transaction tx);
// 收集数据
endtask
```
5. 在顶层test中连接driver的analysis端口和analysis组件的analysis_imp:
```
module test_top;
my_driver driver;
my_analysis analysis;
// 连接分析端口和分析端口实现
initial begin
driver.analysis_port.connect(analysis.analysis_imp);
end
// ...
endmodule
```
这样就可以收集通过driver驱动dut发出的读请求了。
阅读全文