选择什么环境架构来验证多接口模块
What environment architecture to choose to verify multi-interface module
我要测试以 axi4-stream 和 apb 接口作为输入,以 axi4 接口作为输出的复杂模块。
按照我的理解,应该搭建这样的环境:
|-----------------------------------------------
| |
_________|_________ _______________ ______v______
| | | | | |
| APB-monitor | | AXI4-monitor |--->| |
|___________________| |_______________| | |
| | | |
____________ ______________ | _________ | | |
| | | | | | | | | |
| APB-seqr |----->| APB-master |---*--->| | | | |
|____________| |______________| | | | | |
| DUT | | | |
____________ ______________ | |-----------*----------->| Scoreboard |
| | | | | | | |
|AXI4-S-seqr |----->|AXI4-S-master |---*--->| | | |
|____________| |______________| | |_________| | |
| | |
| | |
-------------------- | |
| | | |
| AXI4-S-monitor |---------------------------->| |
|____________________| |____________|
是否正确?如果是这样,我应该如何将事务从监视器发送到记分板?我想我应该使用 analysis_port/imp 对,但我不能在记分板 class 中重载 write
方法,所以据我所知,我不能在一个 class 中使用三个分析端口].
谁能给我指出这种复杂设计的 uvm 示例?
目前我在尝试使用分析端口时遇到这种类型的错误:
# Time: 0 ps Iteration: 0 Region: /uvm_pkg::uvm_analysis_imp #(axi4_s_pkg::axi4_s_seq_item, ecaa_pkg::ecaa_scoreboard) File: D:/questasim64_10.4c/win64/../verilog_src/uvm-1.1d/src/uvm_pkg.sv
# ** Error: (vsim-8754) D:/questasim64_10.4c/win64/../verilog_src/uvm-1.1d/src/tlm1/uvm_analysis_port.svh(114): Actual input arg. of type 'class work.axi4_s_pkg::axi4_s_seq_item' for formal 'trans' of 'write' is not compatible with the formal's type 'class work.apb_pkg::apb_seq_item #(3, 2, 32, 32, 4)'.```
这里有两种方法可以解决您的问题。
1.简单的方法(使用 `uvm_analysis_imp_decl 宏)
只需在组件外部为每个输入调用宏 class。该宏声明了一种特殊风格的分析 imp。传递给宏的参数用作 imp 类型名称和 write 方法名称中的后缀。然后,您为每个输入实例化一个 imp 并为每个输入定义一个方法。例如:
`uvm_analysis_imp_decl(_AXI4_S)
`uvm_analysis_imp_decl(_AXI4)
`uvm_analysis_imp_decl(_APB)
class scoreboard extends uvm_scoreboard;
uvm_analysis_imp_AXI4_S #(AXI4_S_xact, scoreboard) AXI4_S_export;
uvm_analysis_imp_AXI4 #(AXI4_xact, scoreboard) AXI4_S_export;
uvm_analysis_imp_APB #(APB_xact, scoreboard) APB_export;
...
function void build_phase(uvm_phase phase);
AXI4_S_export = new("AXI4_S_export", this);
AXI4_export = new("AXI4_export", this);
APB_export = new("APB_export", this);
endfunction
...
function void write_AXI4_S(AXI4_S_xact t);
...
endfunction
function void write_AXI4(AXI4_xact t);
...
endfunction
function void write_APB(APB_xact t);
...
endfunction
...
2。困难之路(嵌入式订阅者)
在记分牌中实例化三个订阅者。每个都是一个单独的范围,因此每个都可以有自己的 write
方法。
我要测试以 axi4-stream 和 apb 接口作为输入,以 axi4 接口作为输出的复杂模块。
按照我的理解,应该搭建这样的环境:
|-----------------------------------------------
| |
_________|_________ _______________ ______v______
| | | | | |
| APB-monitor | | AXI4-monitor |--->| |
|___________________| |_______________| | |
| | | |
____________ ______________ | _________ | | |
| | | | | | | | | |
| APB-seqr |----->| APB-master |---*--->| | | | |
|____________| |______________| | | | | |
| DUT | | | |
____________ ______________ | |-----------*----------->| Scoreboard |
| | | | | | | |
|AXI4-S-seqr |----->|AXI4-S-master |---*--->| | | |
|____________| |______________| | |_________| | |
| | |
| | |
-------------------- | |
| | | |
| AXI4-S-monitor |---------------------------->| |
|____________________| |____________|
是否正确?如果是这样,我应该如何将事务从监视器发送到记分板?我想我应该使用 analysis_port/imp 对,但我不能在记分板 class 中重载 write
方法,所以据我所知,我不能在一个 class 中使用三个分析端口].
谁能给我指出这种复杂设计的 uvm 示例?
目前我在尝试使用分析端口时遇到这种类型的错误:
# Time: 0 ps Iteration: 0 Region: /uvm_pkg::uvm_analysis_imp #(axi4_s_pkg::axi4_s_seq_item, ecaa_pkg::ecaa_scoreboard) File: D:/questasim64_10.4c/win64/../verilog_src/uvm-1.1d/src/uvm_pkg.sv
# ** Error: (vsim-8754) D:/questasim64_10.4c/win64/../verilog_src/uvm-1.1d/src/tlm1/uvm_analysis_port.svh(114): Actual input arg. of type 'class work.axi4_s_pkg::axi4_s_seq_item' for formal 'trans' of 'write' is not compatible with the formal's type 'class work.apb_pkg::apb_seq_item #(3, 2, 32, 32, 4)'.```
这里有两种方法可以解决您的问题。
1.简单的方法(使用 `uvm_analysis_imp_decl 宏)
只需在组件外部为每个输入调用宏 class。该宏声明了一种特殊风格的分析 imp。传递给宏的参数用作 imp 类型名称和 write 方法名称中的后缀。然后,您为每个输入实例化一个 imp 并为每个输入定义一个方法。例如:
`uvm_analysis_imp_decl(_AXI4_S)
`uvm_analysis_imp_decl(_AXI4)
`uvm_analysis_imp_decl(_APB)
class scoreboard extends uvm_scoreboard;
uvm_analysis_imp_AXI4_S #(AXI4_S_xact, scoreboard) AXI4_S_export;
uvm_analysis_imp_AXI4 #(AXI4_xact, scoreboard) AXI4_S_export;
uvm_analysis_imp_APB #(APB_xact, scoreboard) APB_export;
...
function void build_phase(uvm_phase phase);
AXI4_S_export = new("AXI4_S_export", this);
AXI4_export = new("AXI4_export", this);
APB_export = new("APB_export", this);
endfunction
...
function void write_AXI4_S(AXI4_S_xact t);
...
endfunction
function void write_AXI4(AXI4_xact t);
...
endfunction
function void write_APB(APB_xact t);
...
endfunction
...
2。困难之路(嵌入式订阅者)
在记分牌中实例化三个订阅者。每个都是一个单独的范围,因此每个都可以有自己的 write
方法。