使用分析端口发送总线信号

时间:2016-03-22 09:44:43

标签: 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
         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酒店

1 个答案:

答案 0 :(得分:2)

在你的代码中你犯了一个简单的错误。就像......

  • 分析fifo的类型参数作为逻辑[7:0]向量的立场中的逻辑。
  • 同样适用于订阅者类参数以及写入实现函数参数。
  • 查看您需要更改的代码。

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