VMM學習-vmm_log

功能相似verilog裏的$display函數,在vmm裏作了強化,能夠在仿真過程當中看到整個平臺的運行信息,用來調試仿真平臺。函數

函數原型在vmm.sv裏(class vmm_log;),其構造函數爲extern function new(string name,string inst,vmm_log under=null),name表示包含vmm_log的類的名稱,inst是包含vmm_log的類的例化名字,vmm的驗證組件(test/generator/driver,etc)都包含vmm_log的隱式例化,在編寫驗證組件時不須要再次例化,對於transaction則不一樣,由於在驗證期間,transcation每每會被例化不少次,這時的vmm_log每每須要在編寫驗證組件時單獨例化,例化爲靜態函數,能夠讓transactions一直使用,好比:this

class wb_spi_trans extends vmm_data;
    static vmm_log log = new("wb_spi_trans","WB_SPI_TRANS");
    ...
  function new();
    super.new(this.log);
    'vmm_note(this,log,"Create an object");
  endfunction: new endclass : wb_spi_trans

這樣在例化wb_spi_trans時就會輸出信息「Normal[NOTE] on wb_spi_trans(WB_SPI_TRANS) at 0spa

Create an object」,參數name的做用在於告訴你是哪一個組件輸出的信息,參數inst的做用在於告訴你這個組件在整個驗證環境中的層次(例化名稱)。VMM經過參數化的宏定義輸出信息,好比上面的'vmm_note,展開後:調試

do
    if(log.start_msg(vmm_log::NOTE_TYP)) begin
        'void(log.text("Create an object"));
    log.end_msg();
    end
while(0)

log.start_msg函數輸出」Normal[NOTE] on wb_spi_trans(WB_SPI_TRANS) at 0",log.test輸出"Create an object",log.end_msg結束輸出。vmm_log關鍵的屬性有信息種類types_e(枚舉類型:FAILURE_TYP/NOTE_TYP/DEBUG_TYP/REPORT_TYP/NOTIFY_TYP...),信息等級(枚舉類型:FATAL_SEV/ERROR_SEV/WARNING_SEV/NORMAL_SEV/TRACE_SEV/DEBUG_SEV...),函數根據這兩個變量來決定是否將信息輸出,start_msg根據這兩個變量決定是否輸出信息,根據name和inst決定是哪一個組件在輸出信息。code

相關文章
相關標籤/搜索