2016-03-22 14 views
0

Ich verwende UVM, um die sehr einfache Schnittstelle zu testen und nun mit dem Problem "Eckfall" konfrontiert zu werden. Also muss ich Logik [0: 7] Signal vom Ausgabemonitor an die Anzeigetafel senden. Dieser Teil des Codes ist:Senden des Bussignals über den Analyse-Port

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 

Während der Simulation Ich sehe, dass nur das letzte Bit lcdCmd übertragen wird scorebaord. Gibt es eine Möglichkeit, die gesamten Busdaten über Ports zu übertragen?

Natürlich kann ich Struktur oder Transaktion erstellen, legen Sie die lcdCmd dort und senden Sie die Struktur. Aber warum kann ich nicht einfach den Bus schicken?

Dank Hayk

Antwort

2

In Ihrem Code Sie ein einfaches mistake.Like ... Argument

  • Pass Typ

    tat Analyse Fifo als nur Logik im Stand der Logik [7: 0] Vektor.
  • Dasselbe gilt für Teilnehmerklassenparameter und auch bei Schreibimplementierungsfunktionsargument.
  • Siehe den Code, den Sie ändern müssen.

 

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

Dank viel arbeitete er – haykp