女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

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

UVM設(shè)計中的sequence啟動方式有哪幾種呢?

rfdqdzdg ? 來源:IC Verification Club ? 2023-08-17 10:07 ? 次閱讀

本篇介紹UVM中的sequence,這是UVM中最基礎(chǔ)的部分。對于前面介紹的uvm_callback, uvm_visitor等,很少被使用到或者也只有搭建平臺的人會使用。不能認為平臺的搭建更富有“技術(shù)含量”,用例的構(gòu)建有時候更重要。UVM提供了多種方式,常常讓使用者混淆,本篇將會 “捋” 一下sequence_item,sequence,sequencer,driver的協(xié)作關(guān)系,結(jié)合設(shè)計模式中的命令模式,中介模式,橋接模式進行介紹。

啟動與掛載

基本理解:UVM中各個組件的相互“交流”是基于實際業(yè)務(wù)提取出的transaction(uvm_sequence_item);uvm_sequence中的body()函數(shù)負責(zé)產(chǎn)生發(fā)送這些transaction,生命周期是body()函數(shù)的執(zhí)行期;uvm_sequencer負責(zé)調(diào)度從uvm_sequence中拿到的transaction,然后發(fā)送給driver;uvm_sequcence和transaction一樣,也是繼承于uvm_sequence_item,uvm_sequcne是transaction的有機結(jié)合,代表一種具體的業(yè)務(wù)行為,描述一種scenario 這樣更有利于在創(chuàng)建用例時的復(fù)用。同時在transaction,uvm_sequence中加入SV特有的語法特點,constrain約束,方便擴展使用到不同的場景。

啟動:這里的啟動就是通過哪種方式調(diào)用uvm_sequence中的body()函數(shù)的意思。(body()函數(shù)被sequence的 start()函數(shù)調(diào)用,也可以理解成 start()函數(shù)的執(zhí)行)

sequence的掛載:uvm_sequence不屬于component,沒有phase概念,需要掛載在一個sequencer上,在這個sequencer的phase中被調(diào)用(default_sequence的情形),同時uvm_sequence可以操作所掛載的sequencer的成員變量( *比如在sequence中使用sequencer中的寄存器模型句柄;在virtual sequence中調(diào)用 virtual sequcner中的其他 sequcner 句柄 * )。

transaction的掛載:對于transaction,掛載的意思就是將transaction發(fā)送給所掛載的sequencer,sequencer再發(fā)送給連接的driver。(無論sequence還是transaction,掛載的本質(zhì)就是給uvm_sequence_item中的成員變量 m_sequencer賦值,sequence/transaction都繼承于uvm_sequence_item)

( *啟動,掛載在UVM英文文檔中沒有對應(yīng)關(guān)鍵詞,僅是根據(jù)實際使用總結(jié)出來的詞匯 * )

繼承關(guān)系:

wKgaomTdgZCAGq9kAAAnwfSCLs4862.jpg

三種sequence的啟動方式:

1. start()函數(shù)顯示調(diào)用

使用形式:

wKgZomTdgZCALtvNAAC1v_RKRA8496.jpg

在sequence中顯示調(diào)用strat()函數(shù),第一個參數(shù)是需要掛載的sequencer;第二個是parent_sequence,一般傳入this或者不傳入;第三個是優(yōu)先級;第四個call_pre_post默認為1,則自動執(zhí)行pre_body/ post_body()函數(shù)

執(zhí)行pre_start,body等函數(shù)。此時就完成了sequence的啟動過程。

在start()函數(shù)中,首先調(diào)用了函數(shù)set_item_context()函數(shù),這個函數(shù)位于sequence的父類uvm_sequence_item中,負責(zé)給成員變量m_sequencer, m_parent_sequence賦值。

如果沒有指定掛載的sequencer,則掛載到parent_sequence的sequencer上。

此處seq0顯示傳入了需要掛載的p_sqr0,則調(diào)用set_sequencer()函數(shù)完成掛載,給m_sequencer賦值。

set_sequencer()函數(shù)會調(diào)用m_set_p_sequencer(),這個函數(shù)是一個空的虛函數(shù)。如果在sequence中調(diào)用了宏uvm_declare_p_sequencer則會重寫這個函數(shù),將成員變量p_sequencer指向sequence所掛載的sequencer上。所以使用者要保證start()函數(shù)傳入的sequencer應(yīng)該和宏 uvm_declare_p_sequencer聲明的類型一致。否則$cast轉(zhuǎn)換的時候會報錯。

使用uvm_declare_p_sequencer后,就可以在sequence中調(diào)用掛載sequencer的成員函數(shù)和成員變量了。

wKgaomTdgZCAb_9EAATG8ufD8Zc397.jpg

2. `uvm_do()宏

**使用形式: **

wKgaomTdgZCATC10AABPfsyZa64535.jpg

UVM中提供了多個宏,uvm_do,uvm_do_with,`uvm_do_on_with等,但最終都是調(diào)用了uvm_do_on_pri_with宏。uvm_do_on_pri_with宏第一個參數(shù)可以傳入sequence,也可以傳入transaction。

uvm_do_on宏第一參數(shù)是sequence。uvm_do_on_pri_with宏中調(diào)用宏uvm_create_on。

create_item通過工廠模式創(chuàng)建sequence實例

調(diào)用set_item_context()函數(shù),給成員變量m_sequencer, m_parent_sequence賦值,參考上節(jié)分析。此處parent_sequence默認是this。

調(diào)用sequence的start函數(shù),流程和上節(jié)一樣,最后調(diào)用body()函數(shù)。

通過宏的形式相比于直接調(diào)用start函數(shù),節(jié)省了sequence的實例化和隨機化的步驟,但是對于不熟悉宏的人來說,宏封裝的內(nèi)容可能與其使用意圖偏差。

wKgaomTdgZCABkKGAAPMSNnEIDE492.jpg

3. default_sequence方式

使用形式:

第一種:

wKgZomTdgZCAXT0BAABL9pUPoLc970.jpg

第二種:

wKgZomTdgZCASW25AABVVl9CIog497.jpg

使用default_sequence的方式也是通過工廠模式創(chuàng)建sequence,再隱式的調(diào)用seq.start(this) 函數(shù)

【拓展】

對于sequence中的資源訪問,可以參考 UVM設(shè)計模式 (三) 靜態(tài)類、資源管理、uvm_event、uvm_*_pool、uvm_config_db、UVM_REGEX_NO_DPI 中的"sequence中的資源訪問"小節(jié),總結(jié)了5種使用方式。

命令模式

Comand Pattern:將一個請求(命令)封裝成一個對象,從而可以用不同的請求對接收者進行參數(shù)化,實現(xiàn)請求的發(fā)送者和接收者解耦;還可以對請求排隊,或者記錄請求日志,以及支持撤銷操作。

命令模式和前面提到的策略模式很相似,也是通過“組合 + 多態(tài)”實現(xiàn)的。設(shè)計模式更關(guān)注于設(shè)計意圖,也就是應(yīng)用場景,單純地從代碼實現(xiàn)上看,有些模式確實很相似,比如命令模式和策略模式。但策略模式是不同策略具有相同的目的,不同的實現(xiàn),相互之間可以替換,在命令模式中,是不同的命令具有不同的目的,對應(yīng)不同的邏輯處理,相互之間不可替換。

一個簡單的示例:captain是命令的發(fā)起者,soldier是命令的接收者。

wKgZomTdgZCAIhpOAAZNAwweQSg612.jpg

start_item finish_item

上節(jié)提到使用uvm_do宏啟動sequence,如果宏傳入的第一個參數(shù)不是uvm_sequence_base類型,就是我們的transaction, 則調(diào)用start_item, finish_item函數(shù)。

wKgaomTdgZCAK2krAAFhjzpkuJ4296.jpg

start_item()三個參數(shù),第一個是傳入的transaction, 第二個是優(yōu)先級,第三個是指定該transaction發(fā)送給哪一個sequencer, transaction掛載在哪一個sequencer上。

如果之前沒有給transaction的m_sequencer賦值,此處sequcner仍未null

調(diào)用get_sequencer()函數(shù),將transaction掛載到sequence啟動的sequencer上。

transaction必須指定掛載的sequencer, 否者transaction無法通過sequencer發(fā)送給driver。而sequence卻不一定需要掛載到sequencer上,因為sequence的主要目的是執(zhí)行body函數(shù),直接在tc中調(diào)用seq.start()不指定sequencer,也可以。但是default_sequence的形式必須掛載到sequencer上。

set_item_context()函數(shù)上節(jié)已提到。wait_for_grant()等待sequencer仲裁。pre_do() hook函數(shù)。

在finish_item中,調(diào)用transaction掛載sequencer的函數(shù)send_request(), 這個函數(shù)定義在uvm_sequencer_param_base中。將transaction放入m_req_fifo容器中。

當driver中調(diào)用**seq_item_port.get_next_item(req)**時,實際調(diào)用的是uvm_sequencer中的get_next_item函數(shù)。從m_req_fifo容器中拿到之前sequence放入的transaction。

driver中的seq_item_port.item_done(),實際調(diào)用的是uvm_sequencer中的item_done函數(shù)。sequence通過wait_for_item_done和sequencer的item_done握手,通過成員變量m_wait_for_item_sequence/transaction_id判斷。每個sequence, sequence中的每個transaction其ID都是唯一的。

如果item_done()傳入rsp,調(diào)用put_response函數(shù),與sequence中的get_response配合使用。

wKgZomTdgZCANzbiAAS_fVSQ-Vo438.jpg

wKgZomTdgZCAW3kBAAA2FD9IgxQ510.jpg

start_item/finish_item封裝函數(shù)以及sequence,sequencer,driver的握手關(guān)系如下圖:

wKgaomTdgZCAGlH2AAHYqg3Xs38561.jpg

結(jié)合命令模式,sequence作為命令的發(fā)起者,sequencer作為接收者。sequence負責(zé)發(fā)送各種transaction, 至于是哪一個sequencer接收,由transaction中的成員變量m_sequencer決定。

實現(xiàn)發(fā)送者與接收者的解耦。設(shè)計模式側(cè)重應(yīng)用場景,transaction僅僅是事務(wù),不具備命令的實現(xiàn)行為,所以UVM的實現(xiàn)并不完全符合命令模式。

UVM中的sequencer更像一個仲裁者,一邊是driver不斷請求transaction,一邊根據(jù)priority給sequcence授權(quán),接收sequence發(fā)送的transaction,支持lock,grab操作。同時driver,sequence之間也有聯(lián)系,driver可以response transaction給sequence。

在實際使用中,建議不要使用宏,而是通過start()函數(shù)顯示啟動sequence, 通過start_item finish_item發(fā)送transaction。

中介者模式

Mediator Pattern:定義一個單獨的(中介)對象,來封裝一組對象之間的交互。將這組對象之間的交互委派給與中介對象操作,來避免對象之間的直接交互,使耦合松散。

如果不使用中介者模式,各個系統(tǒng)模塊,或者說各個類之間,互相依賴,就會形成一個復(fù)雜的網(wǎng)裝結(jié)構(gòu);使用了中介者模式,系統(tǒng)就變成了結(jié)構(gòu)清晰的星形結(jié)構(gòu)。

wKgaomTdgZCAN45XAABq1QwviUo122.jpg

UVM中virtual sequence就是一個典型的中介者模式的使用案列。在virtual sequence中可以統(tǒng)一調(diào)度各個sequence,負責(zé)每個sequence的同步,成員變量賦值,隨機約束等。中介者模式實現(xiàn)簡單,具體示例不在演示。






審核編輯:劉清

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

    關(guān)注

    27

    文章

    8952

    瀏覽量

    150731
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5421

    瀏覽量

    123323
  • 耦合器
    +關(guān)注

    關(guān)注

    8

    文章

    734

    瀏覽量

    60606
  • UVM
    UVM
    +關(guān)注

    關(guān)注

    0

    文章

    182

    瀏覽量

    19430
  • sequence
    +關(guān)注

    關(guān)注

    0

    文章

    23

    瀏覽量

    2965

原文標題:UVM設(shè)計模式 (七)命令模式、三種sequence啟動方式、start_item/finish_item、中介模式

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

收藏 人收藏

    評論

    相關(guān)推薦
    熱點推薦

    STM32F407可以哪幾種方式進行啟動

    STM32F407的啟動模式是什么?STM32F407可以哪幾種方式進行啟動
    發(fā)表于 10-21 08:02

    STM32哪幾種啟動模式

    STM32哪幾種啟動模式?STM32燒錄程序的方式是什么?
    發(fā)表于 10-25 06:40

    SYSCLK的BOOT引腳哪幾種不同的啟動模式

    SYSCLK的BOOT引腳哪幾種不同的啟動模式
    發(fā)表于 10-29 07:20

    實現(xiàn)手機快充哪幾種方式

    充電器實現(xiàn)快充的原理是什么?實現(xiàn)手機快充哪幾種方式
    發(fā)表于 11-03 07:06

    SPI協(xié)議的工作方式哪幾種

    SPI是什么?SPI協(xié)議的工作方式哪幾種
    發(fā)表于 11-04 08:01

    I.MX6U啟動方式哪幾種?如何去選擇

    I.MX6U啟動方式哪幾種?如何去選擇?如何利用匯編語言來初始化一下C語言環(huán)境
    發(fā)表于 11-30 07:11

    TokenServer哪幾種開發(fā)方式

    TokenServer哪幾種開發(fā)方式?TokenClient和TokenServer端開發(fā)的流程哪些
    發(fā)表于 12-27 06:12

    System復(fù)位哪幾種方式

    System復(fù)位哪幾種方式?系統(tǒng)時鐘的結(jié)構(gòu)是怎樣構(gòu)成的?求解答
    發(fā)表于 01-14 06:13

    芯片的啟動方式哪幾種

    芯片的啟動方式哪幾種?如何去實現(xiàn)?
    發(fā)表于 01-18 06:16

    HTTP協(xié)議哪幾種加密方式

    HTTP協(xié)議哪幾種加密方式?其加密方式何優(yōu)缺點
    發(fā)表于 01-20 06:13

    什么是流控?流控的方式哪幾種

    什么是流控?流控的方式哪幾種?流控的串口是怎樣去定義的?
    發(fā)表于 01-26 08:16

    SDK配網(wǎng)的方式哪幾種

    SDK配網(wǎng)的方式哪幾種?微信配網(wǎng)與app配網(wǎng)的原理是什么
    發(fā)表于 02-22 08:25

    UVM sequence分層哪幾種方式

    驗證環(huán)境需要對數(shù)據(jù)進行分層。例如,將32比特的寄存器讀寫封裝成數(shù)據(jù)讀寫和狀態(tài)讀寫等實際業(yè)務(wù)操作等或者對底層sequence進行一些隨機控制等。實現(xiàn)這種分層可以兩種方式:1、Sequence
    發(fā)表于 04-11 16:37

    軸承跑內(nèi)圓哪幾種修復(fù)方式

    軸承跑內(nèi)圓哪幾種修復(fù)方式
    發(fā)表于 01-23 11:07 ?7次下載

    電容器的補償方式哪幾種

    電容器在電子領(lǐng)域中使用十分普遍,而在它的使用過程,為了保證電路可靠性和性能穩(wěn)定,電容器的補償就變得尤為重要。那么,電容器的補償方式哪幾種
    的頭像 發(fā)表于 11-16 15:12 ?4803次閱讀