//來自微信公眾號 「數字晶元實驗室」

提高驗證生產力的關鍵之一是提高驗證的抽象層次。

DUT的實際介面是信號級的,我們有必要在事務級管理大量的驗證任務,例如

產生激勵和收集覆蓋率數據。

UVM提供了一組可用於連接各個組件的事務級通信介面。 TLM介面的使用將驗證環境中的組件相互隔離開來。當RTL被修改時,UVM驗證環境只需要替換事務級介面和DUT信號級介面的轉換。

TLM(transaction-level modeling),事務級建模,是一種用於構建高度抽象組件和模型的建模風格。

在UVM中,事務是一個類對象,uvm_transaction(從uvm_object擴展),

包括建模兩個組件之間通信所需的任何信息。下面是一個簡單的匯流排協議事務級建模:

class simple_trans extends uvm_transaction;
rand data_t data;
rand addr_t addr;
rand enum {WRITE,READ} kind;
constraint c1 { addr < 16』h2000; }
...
endclass

事務對象包括變數,約束以及操作數據的方法。

事務級介面定義了一組使用事務對象的方法。

producer生成事務並將它們發送給consumer:

class producer extends uvm_component;
uvm_blocking_put_port #(simple_trans) put_port; // 1 parameter
function new( string name, uvm_component parent);
put_port = new(「put_port」, this);
...
endfunction
virtual task run();
simple_trans t;
for(int i = 0; i < N; i++) begin
// Generate t.
put_port.put(t);
end
endtask

consumerput調用put()。

class consumer extends uvm_component;
uvm_blocking_put_imp #(simple_trans, consumer) put_export; // 2 parameters
...
task put(simple_trans t);
case(t.kind)
READ: // Do read.
WRITE: // Do write.
endcase
endtask
endclass

在許多情況下,組件可能需要獨立運行,producer創建事務的同時,而consumer同時操作事務。UVM提供了uvm_tlm_fifo通道以促進不同進程間的此類通信。producer將事務放入

uvm_tlm_fifo,而consumer從uvm_tlm_fifo獲事務:

TLM介面的使用將驗證環境中的每個組件與其他組件隔離開來。

較小的組件可以分層次地形成更大的組件。 父級組件可以對子級組件進行訪問。


推薦閱讀:
相关文章