System verilog 利用分析端口发送总线信号

System verilog 利用分析端口发送总线信号,system-verilog,uvm,System Verilog,Uvm,我正在使用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 sendPr

我正在使用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。是否有一种使用端口传输整个总线数据的方法

当然,我可以创建结构或事务,将lcdCmd放在那里,然后发送结构。但是为什么我不能直接送车

谢谢
Hayk

在代码中,您犯了一个简单的错误。例如

  • 分析fifo的Pass类型参数作为逻辑[7:0]向量中的唯一逻辑
  • 同样的情况也适用于subscriber类参数和write实现函数参数
  • 查看需要更改的代码


在你的代码中,你犯了一个简单的错误,比如

  • 分析fifo的Pass类型参数作为逻辑[7:0]向量中的唯一逻辑
  • 同样的情况也适用于subscriber类参数和write实现函数参数
  • 查看需要更改的代码

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