0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

UVM TLM的基本概念介紹

芯片驗證工程師 ? 來源:芯片驗證工程師 ? 2023-05-24 09:17 ? 次閱讀

Transactions

在UVM中,transaction是一個類對象,它包含了建模兩個驗證組件之間的通信所需的任何信息。一個用來傳輸信息的簡單總線協(xié)議transaction建模示例如下:

class simple_trans extends uvm_sequence_item;
rand data_t data;
rand addr_t addr;
rand enum {WRITE,READ} kind;
constraint c1 { addr < 16’h2000; }
...
endclass

transaction對象包含變量、約束以及生成和操作事務(wù)所需的其他字段和方法。封裝在transaction中的信息表明了建模的抽象級別。上面的simple_trans可以被擴展為包含更多的信息(例如要注入的等待狀態(tài)的數(shù)量、傳輸?shù)拇笮』蚱渌麑傩裕?,還可以對此transaction擴展以增加更多定向約束。

Transaction-Level 通信

Transaction-level接口定義了一組使用transaction作為參數(shù)的方法。TLM port定義了一組方法,與之相連的TLMexport提供了這些方法的實現(xiàn)(implementation)。

基本TLM通信

最基本的transaction-level操作就是一個組件將一個transactionput給另一個組件上。

c8eecb2e-f983-11ed-90ce-dac502259ad0.png

producer 上的方框表示一個port,consumer上的圓圈表示export。

producer生成transactions并將其發(fā)送出去:

class producer extends uvm_component;
uvm_blocking_put_port #(simple_trans) put_port; // 1 parameter
function new( string name, uvm_component parent);
  put_port = new(“put_port”, this);
  ...
endfunction
virtual task run();
  simple_trans t;
for(int i = 0; i < N; i++) begin
// Generate t.
  put_port.put(t);
  end
endtask

uvm_*_port參數(shù)化為將要通信的transaction類型。put()調(diào)用的實際實現(xiàn)由consumer提供。

class consumer extends uvm_component;
uvm_blocking_put_imp #(simple_trans, consumer) put_export; // 2 parameters
...
task put(simple_trans t);
case(t.kind)
    READ: // Do read.
    WRITE: // Do write.
  endcase
endtask
endclass

uvm_*_imp接受兩個參數(shù):transaction的類型和聲明方法實現(xiàn)的對象類型。producer中的put()調(diào)用將阻塞,直到consumer的put實現(xiàn)完成。除此之外,producer的操作完全獨立于put的實現(xiàn)(uvm_put_imp)。事實上,consumer可以被另一個也實現(xiàn)了put方法的組件所取代,producer可以繼續(xù)以完全相同的方式工作。

所以說,TLM促進了驗證環(huán)境開發(fā)的模塊化,因為一個清晰的接口定義,所以組件很容易復(fù)用。

相反的操作是get。

c904faf2-f983-11ed-90ce-dac502259ad0.png

在這種情況下,consumer通過其get端口向producer請求transactions:

class get_consumer extends uvm_component;
uvm_blocking_get_port #(simple_trans) get_port;
function new( string name, uvm_component parent);
  get_port = new(“get_port”, this);
  ...
endfunction
virtual task run();
  simple_trans t;
for(int i = 0; i < N; i++) begin
// Generate t.
    get_port.get(t);
  end
endtask

get()實現(xiàn)由producer提供。

class get_producer extends uvm_component;
  uvm_blocking_get_imp #(simple_trans, get_producer) get_export;
  ...
task get(output simple_trans t);
    simple_trans tmp = new();
// Assign values to tmp.
    t = tmp;
  endtask
endclass

與上面put()一樣,get_consumer的get()將阻塞,直到get_producer的方法完成。在TLM術(shù)語中,put()和get()是阻塞方法(blocking)。

在這兩個示例中,都有一個進程在運行,控制流都是從port傳遞到export,而數(shù)據(jù)流都是從producer到consumer。

進程間通信

在上?的put ?例中,consumer只有在其 put() ?法被調(diào)?時才會處于活動狀態(tài)。在許多情況下,組件可能需要獨?運?,其中producer在?個進程中創(chuàng)建transactions,?consumer需要在另?個進程中對這些transactions進?操作。

UVM 提供了 uvm_tlm_fifo來促進這種進程間通信。uvm_tlm_fifo實現(xiàn)了所有的TLM接??法,因此producer將transaction放?uvm_tlm_fifo,?consumer則獨?從fifo中獲取transaction,如下圖所?。

c91b3894-f983-11ed-90ce-dac502259ad0.png

當producer向fifo中put一個transaction時,如果fifo已滿則阻塞,否則成功將transaction放入fifo并立即返回。如果fifo中存在transaction,get操作將立即返回這個transaction,并且從fifo中刪除這個transaction,否則它將阻塞直到能夠獲取一個transaction。

因此,兩次連續(xù)的get()將向consumer產(chǎn)生不同的transaction。而 peek()方法返回transaction的副本而不刪除它,所以兩次連續(xù)的peek()將返回同一transaction的副本。

阻塞(Blocking)和非阻塞(Nonblocking)

到目前為止我們看到的接口都是阻塞的(blocking),阻塞任務(wù)不允許失敗,阻塞執(zhí)行直到它們完成。阻塞期間,仿真時間會繼續(xù)向后走。相反,非阻塞任務(wù)調(diào)用會立即(同一個delta cycle,不消耗仿真時間)返回。所以,在 UVM 中,非阻塞任務(wù)調(diào)用就是一個functions。

class consumer extends uvm_component;
uvm_get_port #(simple_trans) get_port;
task run;
  ...
for(int i=0; i<10; i++)
if(get_port.try_get(t))
//Do something with t.
      ...
endtask
endclass

如果存在transaction,它將在參數(shù)中返回,函數(shù)調(diào)?本?將返回TRUE。如果不存在transaction,函數(shù)將返回FALSE。類似地,還有try_peek()和try_put()?法 。

連接Transaction-Level組件

在為transaction-level組件定義了ports和exports之后,它們之間的連接是通過上一級驗證組件中的connect()方法完成的。在驗證環(huán)境中,ports和exports之間的 connect() 調(diào)用建立peer-to-peer連接或者層次化的連接,最終連接都終止于put()或者get()方法的實現(xiàn)。當組件調(diào)用

put_port.put(t);
意味著它實際上調(diào)用
target.put_export.put(t);
其中target是port連接到的組件。

Port/Export 兼容性

UVM中TLM 通信的另一個優(yōu)點是在運行用例前檢查所有TLM 連接的兼容性。為了使連接有效,export必須提供對應(yīng)的方法并且數(shù)據(jù)參數(shù)類型相同。

blocking_put_port可以連接到 blocking_put_export 或 put_export,blocking_put_export需要實現(xiàn)put()方法的實現(xiàn),put_export 還提供 try_put() 和 can_put()的實現(xiàn)。

???




審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • UVM
    UVM
    +關(guān)注

    關(guān)注

    0

    文章

    182

    瀏覽量

    19171
  • TLM
    TLM
    +關(guān)注

    關(guān)注

    1

    文章

    32

    瀏覽量

    24750
  • FIFO存儲
    +關(guān)注

    關(guān)注

    0

    文章

    103

    瀏覽量

    5979

原文標題:UVM TLM 的基本概念

文章出處:【微信號:芯片驗證工程師,微信公眾號:芯片驗證工程師】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    C語言基本概念

    C語言基本概念
    發(fā)表于 08-01 02:00

    EMI的基本概念

    摘 要: 介紹了電磁干擾(EMI)的基本概念、危害及抑制技術(shù),指出了強化管理,發(fā)展EMI抑制技術(shù)的重要意義。關(guān)鍵詞:電磁干擾;抑制技術(shù);EMC標準;管理1 電磁干擾基本概念在復(fù)雜的電磁環(huán)境中,任何
    發(fā)表于 05-30 06:28

    天線分集技術(shù)的基本概念介紹

    基本概念往往有助于理解多變的無線電通信鏈接品質(zhì),一旦理解了這些基本概念,其中許多問題可以通過一種低成本、易實現(xiàn)的被稱作天線分集(antenna diversity)的技術(shù)來實現(xiàn)。
    發(fā)表于 07-02 06:04

    RAM技術(shù)的基本概念

    目前的鐵路和電力及航空航天等多個行業(yè)已紛紛推行系統(tǒng)可靠性分析RAM技術(shù),研發(fā)最佳的設(shè)備運行維護方案,從而消除設(shè)備隱患,避免設(shè)備事故發(fā)生,降低裝置非計劃停工次數(shù)和設(shè)備運行維護費用,促進裝置安全長周期運行,具有重要的現(xiàn)實意義。本文主要概括介紹RAM技術(shù)的基本概念
    發(fā)表于 12-16 07:04

    阻抗控制相關(guān)的基本概念

    阻抗控制部分包括兩部分內(nèi)容:基本概念及阻抗匹配。本篇主要介紹阻抗控制相關(guān)的一些基本概念。
    發(fā)表于 02-25 08:11

    USB基本概念及從機編程方法介紹

    慕課蘇州大學(xué).嵌入式開發(fā)及應(yīng)用.第四章.較復(fù)雜通信模塊.USB基本概念及從機編程方法0 目錄4 較復(fù)雜通信模塊4.4 USB基本概念及從機編程方法4.4.1 課堂重點4.4.2 測試與作業(yè)5 下一
    發(fā)表于 11-08 09:14

    Uart協(xié)議(即串口)的基本概念及相關(guān)知識介紹

    一一介紹,今天要來了解的是Uart協(xié)議,即我們通常所說的串口通信。一、Uart協(xié)議(即串口)的基本概念UART全稱為Universal Asynchronous Receiver
    發(fā)表于 01-17 08:55

    基于RF射頻知識基本概念及DTD無線產(chǎn)品介紹

    基于RF射頻知識基本概念及DTD無線產(chǎn)品介紹
    發(fā)表于 10-25 08:38 ?8次下載
    基于RF射頻知識<b class='flag-5'>基本概念</b>及DTD無線產(chǎn)品<b class='flag-5'>介紹</b>

    詳細介紹時序基本概念Timing arc

    時序分析基本概念介紹——Timing Arc
    的頭像 發(fā)表于 01-02 09:29 ?2.4w次閱讀
    詳細<b class='flag-5'>介紹</b>時序<b class='flag-5'>基本概念</b>Timing arc

    眼圖基本概念介紹.ppt

    眼圖基本概念介紹.ppt
    發(fā)表于 11-08 15:05 ?3次下載

    典型的UVM Testbench架構(gòu)

    UVM類庫提供了通用的代碼功能,如component hierarchy、transaction level model(TLM),configuration database等等,使用戶能夠創(chuàng)建任何類型的Testbench架構(gòu)。
    的頭像 發(fā)表于 05-22 10:14 ?2131次閱讀
    典型的<b class='flag-5'>UVM</b> Testbench架構(gòu)

    UVM中基于SOCKET通信的TLM2.0介紹

    TLM2.0在2009年成為OSCI標準,主要用于構(gòu)造總線系統(tǒng)的SystemC模型。
    的頭像 發(fā)表于 06-25 09:58 ?2576次閱讀
    <b class='flag-5'>UVM</b>中基于SOCKET通信的<b class='flag-5'>TLM</b>2.0<b class='flag-5'>介紹</b>

    介紹時序分析的基本概念lookup table

    今天要介紹的時序分析基本概念是lookup table。中文全稱時序查找表。
    的頭像 發(fā)表于 07-03 14:30 ?1539次閱讀
    <b class='flag-5'>介紹</b>時序分析的<b class='flag-5'>基本概念</b>lookup table

    時序分析Slew/Transition基本概念介紹

    今天要介紹的時序分析基本概念是Slew,信號轉(zhuǎn)換時間,也被稱為transition time。
    的頭像 發(fā)表于 07-05 14:50 ?3273次閱讀
    時序分析Slew/Transition<b class='flag-5'>基本概念</b><b class='flag-5'>介紹</b>

    時序分析基本概念介紹—Timing Arc

    今天我們要介紹的時序基本概念是Timing arc,中文名時序弧。這是timing計算最基本的組成元素,在昨天的lib庫介紹中,大部分時序信息都以Timing arc呈現(xiàn)。
    的頭像 發(fā)表于 07-06 15:00 ?3523次閱讀
    時序分析<b class='flag-5'>基本概念</b><b class='flag-5'>介紹</b>—Timing Arc