1)基礎用法:
uvm_object macro:
a. 在transaction使用
uvm_object_utils_begin:它用於把乙個直接或間接派生自uvm_object的類註冊到factory。
uvm_object_param_utils_begin:它用於把乙個直接或間接派生自uvm_object的引數化類註冊到factory。
b. 在uvm_sequence使用:
uvm_object_utils(sequence 類名)
可能還需要`uvm_declare_p_sequencer(sequencer類名)的宣告
uvm_component macro
在uvm_component中使用
uvm_component_utils(類名)
transaction要派生自uvm_sequence_item,sequence要派生自uvm_sequence或者uvm_sequence的派生類。agent要派生自uvm_agent. uvm_agent裡多了乙個is_active的成員。一般根據這個active來決定是否例項化driver和sequencer. is_active變數的數值需要在env的build_phase裡設定完成,可以直接設定,也可以用uvm_config_db#(int)::set。
uvm_passive:agent以這種形式執行時,只監測匯流排而不驅動匯流排;
uvm_active:agent以這種形式執行時,既可以監測匯流排,也可以驅動匯流排;
pack的使用:
a. 定義乙個簡單的xaction,將類成員註冊到uvm_field_int等巨集定義中,在類中定義do_pack函式,繼承原來的do_pack。
b.呼叫pack_bytes
c. 從log中可以看出,呼叫pack_bytes之後將類成員都打包成byte的形式,預設是按照大端的形式處理的
uvm_object中定義get_bits、get_bytes、get_ints函式用來獲取對應位寬的資料。
3)底層原理分析:
首先從type_id分析,它**於uvm_sequence_item中uvm_object_utils_begin這個巨集拓展的**,那麼在begin與end之間做了下圖的事情:
第一句(註冊):獲取我們通過`uvm_object_utils_begin(jelly_bean_transaction)傳進來的jelly_bean_transaction這個類,然後宣告了乙個該型別的uvm_object_registry類,同時把這個uvm_object_registry起個別名叫type_id。宣告了兩個函式,最終效果是呼叫了type_id,也就是uvm_object_registry這個型別中的get函式。
第二句:等效於new;
第三句:返回型別名。
uvm_field結構:
常用函式需要注意pack unpack pack_bytes unpack_bytes pack_ints unpack_ints 返回值都是bit個數。
uvm_all_on:『b000000101010101
uvm_all_on|uvm_no_pack:這樣就會忽略掉pack bit
對於uvm_component派生類來說,field_automation機制最重要的是可以在build_phase中自動獲取uvm_config_db#()::set()的數值(必須加super.build_phase(phase))---- 也就是不用寫 uvm_config_db#()::get()
然後分析uvm樹:
uvm_void是乙個空的虛類。在src/base/uvm_misc.svh中定義。
層次結構函式:
get_parent() get_child(string name) 這兩個分別獲取parent指標和指定名字的child指標。
get_children(ref uvm_component children[$]) 獲取所有的child指標
get_num_children() 獲取child個數
get_first_child(ref string name) get_next_child(ref string name) 獲取child的名字(反映到string name上),返回值是0/1兩種情況。
uvm列印資訊控制:
get_report_verbosity_level()
set_report_verbosity_level(uvm_high) 只對當前呼叫的component起作用
set_report_verbosity_level_hier(uvm_high) 對當前及下面所有的component起作用(專案中使用);
simv +uvm_verbosity=uvm_high 命令列方式 ------ 我覺得用這個就可以了。
一段分析資料的總結
業務背景 有乙個表中存在1億的資料,存著個人資訊 城市 單位 學校等內容 而這些內容在字段中儲存的是json,需要將這些資料分析後,算出這些內容的離散模型,取出top100。最先的實現方案是批量查出來1w資料,分析後一條條更新,發現更新太慢。隨後做了如下改進,也是總結 1 先查詢後更新的操作,用my...
一段分析資料的總結
業務背景 有乙個表中存在1億的資料,存著個人資訊 城市 單位 學校等內容 而這些內容在字段中儲存的是json,需要將這些資料分析後,算出這些內容的離散模型,取出top100。最先的實現方案是批量查出來1w資料,分析後一條條更新,發現更新太慢。隨後做了如下改進,也是總結 1 先查詢後更新的操作,用my...
氣!還是只有第一段。
以後再也不輕易做這種要整個編輯部的同事都來配合的專題了,根本不靠譜,誰都有一堆做不完的事兒,誰高興替你寫這些東西,誰在乎你星期幾發版啊?又等了乙個晚上,我也要拖版,我也要拖版!把第一段寫好了,題圖也想好了,剩下的,由不得我。盤點2005之產業生死簿 西遊記 第三回寫到無法無天的美猴王孫悟空酒醉入夢,...