Using copy method
範例大致跟uvm_object print差不多,這邊這個範例多新增一個Packet class,裡面有一個addr變數使用``uvm_field_int` macro註冊addr變數,並且Object這個class裡面有Packet的instance,如下:
1 | typedef enum {FALSE, TRUE} e_bool; |
接著在base_test裡面用產生兩個Object的instance,obj1和obj2,先把obj1和obj2的內容print出來之後,再使用copy function把obj1的內容copy到obj2,之後再把obj2的內容再print一次
1 | class base_test extends uvm_test; |
可以看到一開始obj1和obj2的內容不同,在copy之後,obj2所有變數的值都和obj1一樣
Output
1 | # start |
Using do_copy
uvm copy也是可以給使用者做客製化,如果想要客製化自己的copy的話,要自己實作do_copy這個virtual function,我就沒有詳細練習了。
Using clone method
clone和copy基本上做的事情一樣,不過clone會return一個跟copy過來內容一樣的object,所以可以省去create object的步驟,例如上面的例子原本要create object2的instance,如果使用clone的話就可以省略create步驟,範例如下:
1 | class base_test extends uvm_test; |
Output
1 | # start |