一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

SystemVerilog里的regions以及events的調(diào)度

冬至子 ? 來源:CSDN ? 作者:谷公子 ? 2023-07-12 11:20 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1. 前言

本文講一下SystemVerilogtime slot里的regions以及events的調(diào)度。SystemVerilog語言是根據(jù)離散事件執(zhí)行模型定義的,由events驅(qū)動。SystemVerilog描述是由連接的執(zhí)行thread或processes組成。Process是可衡量的,也具有狀態(tài),并且可以響應(yīng)輸入的變化以產(chǎn)生輸出。Process是并發(fā)調(diào)度的元素,例如initial,process其實(shí)還包括了always, always_comb, always_latch, always_ff, contiguous assignment, asynchronous tasks和procedural assignment statement。

SystemVerilog是一種并行編程語言,我們需要重點(diǎn)了解哪些執(zhí)行順序?qū)τ脩羰怯斜WC的,哪些執(zhí)行順序是不確定的。這塊內(nèi)容比較晦澀難懂,但要是理解了regions和events的調(diào)度,對我們寫代碼和調(diào)試會有極大的幫助,而且也更了解EDA工具的執(zhí)行機(jī)制。

2. Event的定義

仿真系統(tǒng)中net或variable的狀態(tài)的任何更改,都被視為更新事件(update event)。Processes對upate event是敏感的。當(dāng)一個update event發(fā)生時,所有對該event敏感的processes都會被當(dāng)作以任意順序進(jìn)行評估。Process的評估也是一個event,稱作評估事件(evaluation event)。Evaluation events包括PLI callbacks,這些callbacks是執(zhí)行模型中的節(jié)點(diǎn),PLI應(yīng)用程序可以從仿真內(nèi)核調(diào)用。所以,這些events會在不同的regions中發(fā)生。

3. Region的定義

為了支持清晰和可預(yù)測的交互,將單個time slot劃分為多個region,events就被以確定的執(zhí)行順序安排到這些regions中,這就允許DUT代碼和驗(yàn)證代碼之間可預(yù)測的交互。在特定時間的所有scheduled events定義了1個time slot。在移動到下一個time slot之前,仿真按照時間順序進(jìn)行并刪除掉當(dāng)前仿真時間slot中的所有events,從而使得仿真前進(jìn)。這個過程保證了仿真器不會在時間上倒退。一個time slot可以被劃分為一組有序的regions,有:Preponed,Pre-Active,Active,Inactive,Pre-NBA,NBA,Post-NBA,Pre-Observed,Observed,Post-Observed,Reactive,Re-Inactive,Pre-Re-NBA,Re-NBA,Post-Re-NBA,Pre-Postponed,Postponed。如圖1。

image.png

圖1 time slot執(zhí)行流程圖

其中Active, Inactive, Pre-NBA, NBA和Post-NBA regions中scheduled events稱為active region set events。Reactive, Re-Inactive, Pre- Re-NBA, Re-NBA和Post-Re-NBA regions中scheduled events稱為reactive region set events。

Active, Inactive, Pre-NBA, NBA, Post-NBA, Pre-Observed, Observed, Post- Observed, Reactive, Re-Inactive, Pre-Re-NBA, Re-NBA, Post-Re-NBA和Pre-Postponed regions被稱為iterative regions。

除了active region set和reactive region set,每個time slot的event regions可以分為simulation regions和PLI regions。圖1中,圓角長方形的屬于simulation regions。橢圓形的屬于PLI regions。

4. Events調(diào)度參考算法

當(dāng)仿真開始時,先初始化所有nets和variables的初始值,并在0 time slot上開始調(diào)度初始化events。

當(dāng)發(fā)現(xiàn)有非空的time slot時,也就是time slot里有scheduled event。它會去執(zhí)行第一個非空的time slot,就開始按照圖1的流程圖順序執(zhí)行各個region。當(dāng)進(jìn)入1個region內(nèi)時,找到當(dāng)前region內(nèi)的scheduled event,判斷event類型,如果是update event類型,更新這個event對象,且為對該event對象敏感的任何process安排evaluation event;如果是evaluation event類型,評估與這event相關(guān)的process,并可能安排進(jìn)一步執(zhí)行的events。

Time slot里的這些region中,Prepone、Pre-Active和Postponed只會執(zhí)行一次。其它的region,具體要看event的情況,可能會執(zhí)行多次。不過總體遵循這個流程:

  1. 順序處理Prepone和Pre-Active region。
  2. 處理從Active到Post-Observed的region,會從里面找到第一個有非空event的region處理,直至全部event處理完且刪掉。需要注意的是,如果在NBA region的觸發(fā)了一個需要在Active region處理的event,那么會從NBA跳回Active region去處理,然后按順序繼續(xù)尋找第一個有非空event的region。
  3. 當(dāng)步驟2的regions全部處理好之后,會開始處理從Reactive到Post_Re-NBA region,也是類似的,會從里面找到第一個有非空event的region處理,直至全部處理完畢。
  4. 當(dāng)步驟3的region也全部處理完之后,會再重新判斷下從Active到Post Re-NBA region是否還有未處理的,如果有就又要從第一個非空event的region處理,如果沒有就執(zhí)行Pre-Postponed region。5. 當(dāng)步驟2-4里的都沒有非空event的region后,處理Postponed region。6. 步驟5處理完之后,就進(jìn)入到下一個time slot了。

5. Regions調(diào)度的events類別

Time slot的simulation regions包含了Preponed, Active, Inactive, NBA, Observed, Reactive, Re-Inactive, Re-NBA和Postponed regions。再根據(jù)active region set和reactive region set的劃分,我們可以將一個time slot的simulation regions分為五個主要region:Preponed、Active、Observed、Reactive和Postponed。Active和Reactive可以進(jìn)一步細(xì)分為小的regions。如圖2所示。

image.png

圖2 Simulation regions

這五大regions里調(diào)度的events有:

Prepone: 在一個time slot內(nèi),Prepone region只會執(zhí)行一次,當(dāng)仿真時間進(jìn)入當(dāng)前time slot時,它是第一個被執(zhí)行的region。驗(yàn)證環(huán)境采樣DUT的信號就發(fā)生在這個region。我們平時在采樣DUT信號時,會指定#1step采樣延遲,#1step采樣延遲提供了在進(jìn)入當(dāng)前time slot之前立即采樣信號的能力。#1step采樣相當(dāng)于在當(dāng)前time slot的Prepone中采樣信號。所以在Preponed region的采樣相當(dāng)于前一個time slot Postponed region的采樣。Preponed region PLI events也在這里調(diào)度。

Active: Active包含了幾個小的regions:active,inactive和NBA(nonblocking assignment update) regions。

  • Active region進(jìn)行當(dāng)前active region set events的評估求值,并且這些events會被任意處理。RTL代碼和行為代碼(behavioral code)被安排在active region。所有blocking assignments語句在Active region執(zhí)行。對于nonblocking assignments,RHS的評估求值發(fā)生在Active region,而賦值發(fā)生在NBA region。如果有任何#0延遲的assignment,那么這些assignment發(fā)生在Inactive region。(注意:#0延遲的RHS是在inactive region是算的)
  • Inactive region進(jìn)行處理完所有active events后要評估的events。顯式的#0延遲控制要求將這個event安排到當(dāng)前time slot的inactive region進(jìn)行,以便在下一個inactive到active迭代中恢復(fù)process。
  • NBA region進(jìn)行處理完所有inactive events后要評估的events。Nonblocking assignment會在當(dāng)前或以后仿真時間的NBA region中創(chuàng)建events。

Observed: Observed用于觸發(fā)property expressions(用于concurrent assertions)時對其求值。在property求值后,pass/fail的信息將在當(dāng)前time slot的Reactive region報(bào)告出來。

Reactive: Reactive包含了Re-active,Re-inactive和Re-NBA regions。

Re-active進(jìn)行當(dāng)前reactive region set的評估求值,并且可以以任何順序進(jìn)行處理。Program blocks的blocking assignments、#0 blocking assignments的RHS求值和nonblocking assignment的RHS求值發(fā)生在re-active region。另外,concurrent assertions的action blocks的代碼也是在re-active region調(diào)度的。Re-active region和active region其實(shí)是對偶關(guān)系的。只不過active處理design,re-active處理program。

Re-inactive進(jìn)行處理完所有re-active events后要評估的events。Program里顯示的#0延遲控制要求將這個event安排到當(dāng)前time slot的re-inactive region進(jìn)行,以便在下一個inactive到active迭代中恢復(fù)process。同樣的,它也是inactive region的對偶關(guān)系。
Re-NBA進(jìn)行處理完所有re-inactive events后要評估的events。Program里nonblocking assignment會在當(dāng)前或以后仿真時間的re-NBA region中創(chuàng)建events。

Postponed: postponed是當(dāng)前time slot的最后1個region。**monitor, **strobe和其它相似的events會安排在這個region執(zhí)行 (注意$display event是在active region和reactive region(如果在program里調(diào)用)執(zhí)行的)。一旦到達(dá)postponed region,就不允許在當(dāng)前time slot中發(fā)生新的值更改。在此region內(nèi),向任何net或variable進(jìn)行寫入值或在當(dāng)前region調(diào)度任何先前region的event都是非法的。Postponed region PLI events也在這里調(diào)度。

在一個time slot里,除了上述介紹的simulation regions,還有PLI regions,在PLI regions里會去調(diào)度PLI callback。PLI regions有Preponed, Pre-Active, Pre-NBA, Post-NBA, Pre-Observed, Post-Observed, Pre-Re-NBA, Post-Re-NBA 和Pre-Postponed regions。它是圖1中的橢圓型部分。本文重點(diǎn)講述simulation regions,這里就不介紹PLI regions了。

6. SystemVerilog里的確定和不確定調(diào)度順序

以下場景必須有確定的調(diào)度順序:

begin-end塊中的語句應(yīng)該按照它們在該begin-end塊中出現(xiàn)的順序執(zhí)行??梢詴和L囟╞egin-end塊中語句的執(zhí)行,以利于模型中的其它進(jìn)程;但是在任何情況下,begin-end塊中的語句都不得以它們在源代碼中出現(xiàn)的順序以外的任何順序執(zhí)行。
NBAs語句應(yīng)按照語句執(zhí)行的順序執(zhí)行。
舉個例子:

module test;
    logic a;
    initial begin
        a <= 0;
        a <= 1;
    end
endmodule

當(dāng)執(zhí)行initial塊時,將會有兩個event被添加到NBA region。前面的規(guī)則要求它們按照執(zhí)行順序進(jìn)入event region,在連續(xù)的begin-end塊中,這是初始順序。該規(guī)則要求它們?nèi)BA region也按照這個順序執(zhí)行。因此,在仿真時間0結(jié)束時,變量a將被賦值為0,然后賦值為1。

在以下場景時,執(zhí)行的順序是不確定的:

Active events可以從active或re-active event region中取出,并以任何順序進(jìn)行處理。

過程塊(procedural block)中沒有時間控制結(jié)構(gòu)的語句不必作為一個event執(zhí)行。時間控制語句是指#expression和@expression結(jié)構(gòu)。在評估過程語句時的任何時候,仿真器都可以暫停執(zhí)行并將部分完成的事件作為待處理事件放置在event region中。 這樣做的效果是允許進(jìn)程執(zhí)行的交錯,盡管交錯執(zhí)行的順序是不確定的并且不受用戶控制。

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

    關(guān)注

    4

    文章

    273

    瀏覽量

    32868
  • 仿真器
    +關(guān)注

    關(guān)注

    14

    文章

    1037

    瀏覽量

    85412
  • Verilog語言
    +關(guān)注

    關(guān)注

    0

    文章

    113

    瀏覽量

    8555
  • DUT
    DUT
    +關(guān)注

    關(guān)注

    0

    文章

    191

    瀏覽量

    12954
  • 調(diào)度器
    +關(guān)注

    關(guān)注

    0

    文章

    98

    瀏覽量

    5503
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

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

    [啟芯公開課] SystemVerilog for Verification

    學(xué)快速發(fā)展,這些趨勢你了解嗎?SystemVerilog + VM是目前的主流,在未來也將被大量采用,這些語言和方法學(xué),你熟練掌握了嗎?對SoC芯片設(shè)計(jì)驗(yàn)證感興趣的朋友,可以關(guān)注啟芯工作室推出的SoC芯片
    發(fā)表于 06-10 09:25

    systemverilog學(xué)習(xí)教程

    systemverilog的一些基本語法以及和verilog語言之間的區(qū)別。
    發(fā)表于 04-01 14:24

    round robin 的 systemverilog 代碼

    大家好,我對一個 round robin 的 systemverilog 代碼有疑惑。https://www.edaplayground.com/x/2TzD代碼第49和54行是怎么解析呢 ?
    發(fā)表于 03-14 19:16

    做FPGA工程師需要掌握SystemVerilog嗎?

    在某大型科技公司的招聘網(wǎng)站上看到招聘邏輯硬件工程師需要掌握SystemVerilog語言,感覺SystemVerilog語言是用于ASIC驗(yàn)證的,那么做FPGA工程師有沒有必要掌握SystemVerilog語言呢?
    發(fā)表于 08-02 20:30

    Linux的進(jìn)程、線程以及調(diào)度

    報(bào)名:《Linux的進(jìn)程、線程以及調(diào)度》4節(jié)系列微課(522-25)
    發(fā)表于 05-15 14:44

    SystemVerilog有哪些標(biāo)準(zhǔn)?

    SystemVerilog有哪些標(biāo)準(zhǔn)?
    發(fā)表于 06-21 08:09

    在BLE broadcaster基礎(chǔ)上測試TMOS調(diào)度,無法正常調(diào)度是為什么?

    在BLE broadcaster基礎(chǔ)上測試TMOS調(diào)度,發(fā)現(xiàn)在ProcessEvent第一行增加PRINT("LED_Process:%x ",events
    發(fā)表于 08-11 06:26

    SystemVerilog Assertion Handbo

    SystemVerilog Assertion Handbook1 ROLE OF SYSTEMVERILOG ASSERTIONSIN A VERIFICATION METHODOLOGY
    發(fā)表于 07-22 14:08 ?188次下載

    SystemVerilog的斷言手冊

    SystemVerilog Assertion Handbook1 ROLE OF SYSTEMVERILOG ASSERTIONSIN A VERIFICATION METHODOLOGY
    發(fā)表于 07-22 14:12 ?20次下載

    Meter Design for Power Failure Events

    and polyphase residential energy-metering SoCs that cope with sag and power-failure events. The sample code discussed in this application note was w
    發(fā)表于 02-06 10:42 ?23次下載

    基于SystemVerilog語言的驗(yàn)證方法學(xué)介紹

    文章主要介紹《VMM for SystemVerilog》一書描述的如何利用SystemVerilog語言,采用驗(yàn)證方法學(xué)以及驗(yàn)證庫開發(fā)出先進(jìn)驗(yàn)證環(huán)境。文章分為四部分,第一部分概述了用Syst
    發(fā)表于 05-09 15:22 ?52次下載
    基于<b class='flag-5'>SystemVerilog</b>語言的驗(yàn)證方法學(xué)介紹

    Polygon_Pours_&_Copper_Regions

    AP0101 Polygon Pours and Copper Regions,很好的學(xué)習(xí)資料
    發(fā)表于 01-14 15:35 ?0次下載

    SystemVerilog的正式驗(yàn)證和混合驗(yàn)證

    手冊的這一部分探討了使用SystemVerilog進(jìn)行驗(yàn)證,然后查看了使用SystemVerilog的優(yōu)點(diǎn)和缺點(diǎn)。
    發(fā)表于 03-29 10:32 ?24次下載

    SystemVerilog中的Shallow Copy

    SystemVerilog中的句柄賦值和對象復(fù)制的概念是有區(qū)別的。
    的頭像 發(fā)表于 11-21 10:32 ?1150次閱讀

    Wakeup events framework同步問題

    Wakeup events framework 系統(tǒng)處于 suspend 狀態(tài),可通過 wakeup events 喚醒。具體的 wakeup events 可以是按鍵按下,可以是充電器插入等。但是
    的頭像 發(fā)表于 09-11 16:17 ?736次閱讀