第一段 uvm field巨集的分析

2021-10-10 22:23:51 字數 2563 閱讀 7599

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之產業生死簿 西遊記 第三回寫到無法無天的美猴王孫悟空酒醉入夢,...