天天看點

篇4-factory機制重載的前提,方式,複雜重載,常用重載

1. factory機制重載的前提

(1) 無論是重載的類(extended class)還是被重載的類(base class),都要在定義時注冊到factory機制中.

(2) 被重載的類(base class)在執行個體化時,需要使用factory機制式的執行個體化方式,而不是傳統的new方式.

(3) 重載的類與被重載的類有派生關系. 重載的類必須派生自被重載的類,被重載的類必須是重載類的父類.

(4) component與object之間互相不能重載(二者new函數的參數也不同).

2. factory機制重載的方式

2.1. 代碼中重載

系統中存在uvm_factory類型的全局變量factory,可以在initial語句中使用如下方式調用:

2.1.1 使用uvm_component内的重載函數

(1) set_type_override_by_type

set_type_override_by_type(uvm_object_wrapper orignial_type, uvm_object_wrapper override_type, bit replace=1)

篇4-factory機制重載的前提,方式,複雜重載,常用重載

(2) set_type_override

set_type_override (string original_type_name, string override_type_name, bit replace=1)

(3) set_inst_override_by_type

set_inst_override_by_type(string relative_inst_path, uvm_object_wrapper original_type, uvm_object_wrapper override_type)

(4) set_inst_override

set_inst_override(string relative_inst_path, string original_type_name, string override_type_name)

2.1.2 使用uvm_factory類的重載函數

(1) set_type_override_by_type(uvm_object_wrapper orignial_type, uvm_object_wrapper override_type, bit replace=1)

(2) set_type_override_by_name (string original_type_name, string override_type_name, bit replace=1)

(3) set_inst_override_by_type(uvm_object_wrapper original_type, uvm_object_wrapper override_type, string full_inst_path)

(4) set_inst_override_by_name(string original_type_name, string override_type_name, string full_inst_path)

注:系統中存在uvm_factory類型的全局變量factory,可以在initial語句中使用如下方式調用:

篇4-factory機制重載的前提,方式,複雜重載,常用重載

2.2. 指令行中重載

篇4-factory機制重載的前提,方式,複雜重載,常用重載

3.factory機制之複雜重載

3.1 連續重載

篇4-factory機制重載的前提,方式,複雜重載,常用重載

3.2 替換重載

在有多個重載時,最終重載的類要與最初被重載的類有派生關系. 最終重載的類必須派生自最初被重載的類, 最初被重載的類必須是最終重載類的父類.

篇4-factory機制重載的前提,方式,複雜重載,常用重載

4.factory機制之常用重載

4.1. 重載transaction

篇4-factory機制重載的前提,方式,複雜重載,常用重載

4.2. 重載sequence

篇4-factory機制重載的前提,方式,複雜重載,常用重載

4.3. 重載component

scoreboard與參考模型等都可以重載;尤其對于參考模型而言,處理異常的激勵源是比較耗時的事情; 可能對于一個DUT來說,其80%的代碼都是用于處理異常情況,作為模拟DUT的參考模型來說,更是如此;