2016-03-22 3 views
0

Я использую 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

ответ

2

В своем коде вы сделали простой mistake.Like ...

  • Pass типа аргумент анализ ФИФО, как только логика в дежурной логике [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 
+0

Благодаря много он работал – haykp

Смежные вопросы