<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Deepseek解析的回調(diào)繼承關(guān)系

      整個(gè)實(shí)現(xiàn)可以分解為三個(gè)關(guān)鍵部分:

      1. 宏本身: 發(fā)起注冊(cè)請(qǐng)求。

      2. 注冊(cè)函數(shù) (register_super_type): 記錄類(lèi)型關(guān)系。

      3. 回調(diào)執(zhí)行引擎 (uvm_do_callbacks): 查詢(xún)并使用記錄的關(guān)系。

      下圖清晰地展示了這三個(gè)部分如何協(xié)同工作,實(shí)現(xiàn)回調(diào)繼承:

      圖表
       
      代碼
       
       
      flowchart TD
          A[派生類(lèi)中的宏<br>uvm_set_super_type(B, A)]
          --> B["調(diào)用 register_super_type()<br>在內(nèi)部映射表添加條目: B -> A"]
          
          C["uvm_do_callbacks(A, ...)<br>在類(lèi)型B的對(duì)象中執(zhí)行"]
          --> D{"查詢(xún)映射表:<br>B是否有超類(lèi)型?"}
          
          D -- --> E["獲取超類(lèi)型A<br>合并A和B的回調(diào)列表"]
          D -- --> F[僅使用類(lèi)型B的回調(diào)列表]
          
          E --> G[執(zhí)行合并后列表中的所有回調(diào)]
          F --> G

      第1部分:宏 - 注冊(cè)請(qǐng)求的發(fā)起者

      宏的定義非常簡(jiǎn)單:

      systemverilog
       
      `define uvm_set_super_type(T,ST) \
        static local bit m_register_``T``ST = uvm_derived_callbacks#(T,ST)::register_super_type(`"T`",`"ST`");
      • 作用: 在派生類(lèi) T 的代碼中,在編譯時(shí)插入一行靜態(tài)變量的初始化語(yǔ)句。

      • 執(zhí)行時(shí)機(jī): 在仿真開(kāi)始前的** elaboration **階段,當(dāng)類(lèi)被加載時(shí),這個(gè)靜態(tài)變量會(huì)被初始化,從而觸發(fā) register_super_type 函數(shù)的執(zhí)行。

      • 結(jié)果: 函數(shù)調(diào)用后,UVM系統(tǒng)內(nèi)部就知道了一個(gè)新的類(lèi)型關(guān)系:“T 是 ST 的派生類(lèi),在執(zhí)行 T 的回調(diào)時(shí),也需要檢查 ST 的回調(diào)?!?/p>


      第2部分:注冊(cè)函數(shù) - 關(guān)系記錄員

      這是實(shí)現(xiàn)的核心。我們需要想象在UVM內(nèi)部有一個(gè)全局的“類(lèi)型關(guān)系映射表”(通常是一個(gè)關(guān)聯(lián)數(shù)組或隊(duì)列)。

      uvm_derived_callbacks#(T, ST)::register_super_type(“T”, “ST”) 這個(gè)函數(shù)的大致偽代碼如下:

      systemverilog
       
      class uvm_derived_callbacks #(type T, ST);
        static function bit register_super_type(string T_name, ST_name);
          // 1. 獲取全局唯一的“類(lèi)型關(guān)系映射表”
          //    假設(shè)它叫 `super_type_map` (類(lèi)型: uvm_derived_callbacks_info associative array)
      
          // 2. 創(chuàng)建一個(gè)關(guān)系記錄項(xiàng)
          uvm_derived_callbacks_info info = new();
          info.super_type = ST; // 記錄超類(lèi)型
      
          // 3. 將關(guān)系記錄到映射表中,鍵是派生類(lèi)型 T
          super_type_map[T] = info; // super_type_map[T] = ST
      
          return 1;
        endfunction
      endclass

      這個(gè)函數(shù)的作用就是在上圖所示的“內(nèi)部映射表”中填了一條記錄,將類(lèi)型 T 映射到它的超類(lèi)型 ST。


      第3部分:回調(diào)執(zhí)行 - 關(guān)系查詢(xún)與使用者

      真正的功能體現(xiàn)在 uvm_do_callbacks 宏(或其背后的 uvm_callback_iter 類(lèi))執(zhí)行時(shí)。

      當(dāng)你在代碼中寫(xiě)下:

      systemverilog
       
      `uvm_do_callbacks(my_comp, mycb, doit())

      UVM會(huì)展開(kāi)這個(gè)宏,其底層會(huì)執(zhí)行類(lèi)似以下的邏輯:

      1. 獲取當(dāng)前對(duì)象的類(lèi)型 (obj_type)。

      2. 查找該類(lèi)型對(duì)應(yīng)的回調(diào)鏈表。

      3. 關(guān)鍵的一步:遞歸查找超類(lèi)型的回調(diào)!

        systemverilog
         
        // 偽代碼: 如何構(gòu)建最終的回調(diào)執(zhí)行列表
        function uvm_callback::get_tw_cbs(...);
          uvm_queue #(uvm_callback) callback_queue = new();
        
          // 首先,加入當(dāng)前類(lèi)型 (T) 的所有回調(diào)
          callback_queue = {current_type_callback_list};
        
          // 然后,開(kāi)始遞歸查找超類(lèi)型
          uvm_derived_callbacks_info info;
          type current = obj_type;
        
          // 循環(huán)檢查:當(dāng)前類(lèi)型是否在“類(lèi)型關(guān)系映射表”中注冊(cè)了超類(lèi)型?
          while (super_type_map.exists(current)) begin
            // 如果有,就獲取它的超類(lèi)型 (ST)
            info = super_type_map[current];
            current = info.super_type;
        
            // 將這個(gè)超類(lèi)型 (ST) 的所有回調(diào)加入到執(zhí)行隊(duì)列中
            callback_queue = {callback_queue, get_callback_list_for_type(current)};
          end
        
          return callback_queue; // 返回合并后的隊(duì)列
        endfunction
      4. 按順序執(zhí)行這個(gè)合并后隊(duì)列中的所有回調(diào)函數(shù)。


      總結(jié):整個(gè)工作流程

      讓我們用之前的例子 my_derived_comp 和 my_comp 來(lái)串聯(lián)整個(gè)流程:

      1. 注冊(cè)(Elaboration階段):

        • 編譯器看到 uvm_set_super_type(my_derived_comp, my_comp)

        • 宏展開(kāi),調(diào)用 register_super_type(“my_derived_comp”, “my_comp”)。

        • 函數(shù)執(zhí)行,在內(nèi)部映射表中寫(xiě)入:my_derived_comp -> my_comp

      2. 執(zhí)行(Simulation階段):

        • 用戶(hù)為 my_comp 添加了一個(gè)全局回調(diào) cb_obj

        • my_derived_comp 的實(shí)例在 run_phase 中執(zhí)行 uvm_do_callbacks(my_comp, mycb, doit())。

        • UVM回調(diào)系統(tǒng):
          a. 發(fā)現(xiàn)當(dāng)前對(duì)象類(lèi)型是 my_derived_comp。
          b. 查找 my_derived_comp 類(lèi)型的回調(diào)鏈表(假設(shè)為空)。
          c. 查詢(xún)映射表:”my_derived_comp 有超類(lèi)型嗎?“ -> 有,是 my_comp
          d. 查找 my_comp 類(lèi)型的回調(diào)鏈表 -> 找到了用戶(hù)添加的 cb_obj。
          e. 將 my_comp 的回調(diào)鏈表合并到最終的執(zhí)行列表中。
          f. 執(zhí)行 cb_obj.doit()

      因此,這個(gè)宏的實(shí)現(xiàn)精髓在于:它通過(guò)在UVM內(nèi)部建立一個(gè)“類(lèi)型關(guān)系地圖”,讓回調(diào)執(zhí)行引擎在執(zhí)行時(shí)能夠“順藤摸瓜”,找到所有相關(guān)基類(lèi)上注冊(cè)的回調(diào),從而實(shí)現(xiàn)繼承。 這是一種經(jīng)典的注冊(cè)-查詢(xún)(Registration-Lookup) 設(shè)計(jì)模式。

       
       
       
      posted @ 2025-08-21 15:33  NoNounknow  閱讀(12)  評(píng)論(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 老司机午夜福利视频| 日韩欧美亚洲综合久久| 九九热精彩视频在线免费| 国产精品揄拍100视频| 亚洲无人区码一二三四区| 平安县| 一色桃子中出欲求不满人妻| 亚洲精品香蕉一区二区| 黄色三级亚洲男人的天堂| 免费无码AV一区二区波多野结衣| 黄色亚洲一区二区在线观看| 亚洲成av人片天堂网无码| 一区二区三区精品偷拍| 白玉县| 无码专区 人妻系列 在线| 国产精品久久国产精麻豆99网站| 久久精品囯产精品亚洲| 国产精品久久久久久久久鸭| 中文字幕少妇人妻精品| 精品人妻一区二区三区四区在线| 国产真实交换配乱婬95视频| 色一情一乱一伦麻豆| 类乌齐县| 人妻内射一区二区在线视频| 色噜噜一区二区三区| 裸身美女无遮挡永久免费视频| 久久精品无码av| 国产91小视频在线观看| 忘忧草影视| 无码h黄肉动漫在线观看| 久久国产精品第一区二区| 又色又爽又黄的视频网站| 亚洲免费成人av一区| 欧美人与动牲交a免费| 道孚县| 成人网站网址导航| 国产麻豆精品手机在线观看| 啊┅┅快┅┅用力啊岳网站| 国产av熟女一区二区三区| 久久久精品午夜免费不卡| 国产偷国产偷亚洲高清午夜|