我正在使用UVM测试非常简单的界面,现在面临“角落案例”问题。 所以我需要从输出监视器向记分板发送逻辑[0:7]信号。 这是代码的一部分:
class outputMonitor extends uvm_monitor;
..
logic [7:0] lcdCmd;
uvm_analysis_port #(logic) sendPrt;
task run_phase (uvm_phase phase);
forever
begin
sendPrt.write(lcdCmd) ;
end
endtask
endclass
class scoreboard extends uvm_subscriber #(logic);
`uvm_component_utils(scoreboard)
function void write (logic t);
$display("%t: scoreboard: ########### calling write function-- data=%b", $time, t);
endfunction
endclass
在模拟过程中,我看到只有lcdCmd的最后一位被转移到了scorebaord。有没有办法使用端口传输整个总线数据?
当然我可以创建struct或transaction,将lcdCmd放在那里然后发送struct。但为什么我不能只发送公共汽车?
由于 Hayk酒店
答案 0 :(得分:2)
在你的代码中你犯了一个简单的错误。就像......
class outputMonitor extends uvm_monitor;
`uvm_component_utils(outputMonitor)
logic [7:0] lcdCmd;
uvm_analysis_port #(logic[7:0]) sendPrt;
task run_phase (uvm_phase phase);
forever
begin
sendPrt.write(lcdCmd);
end
endtask
endclass
class scoreboard extends uvm_subscriber #(logic[7:0]);
`uvm_component_utils(scoreboard)
function void write (logic [7:0] t);
$display("%t: scoreboard: ########### calling write function-- data=%b", $time, t);
endfunction
endclass