在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

initial begin-end真的是仿真最早執行的嗎?

sanyue7758 ? 來源:驗證芯發現 ? 2023-05-22 10:41 ? 次閱讀

SystemVerilog中,initial begin-end是仿真開始就會執行的代碼塊。比如UVM的test入口函數run_test,一般就是在initial begin-end中調用。還有一些tb會在initial begin-end中使用fork join_none,用于創建一些仿真中的后臺進程,如時鐘產生,后門驅動等。

那么initial begin-end真的是仿真最早執行的嗎?

如果是消耗仿真時間的,那initial begin-end中的代碼是仿真開始最早執行的。如果不消耗仿真時間,那還有一種代碼會早于initial begin-end執行。

static property/function !!!

static類型變量,無論是全局變量,還是class內部參數,會在仿真開始前確定其初始值。如果該初始值是一個由static類型的function返回值決定,則該function的代碼會在initial begin-end前執行完畢。

可以參考如下的測試:

importuvm_pkg::*;
`include"uvm_macros.svh"
classstatic_wrapper;
staticbitfst_flag=cls_func_before_initial("static_wrapper:fst_flag");
staticbitsnd_dlag=cls_func_before_initial("static_wrapper:snd_flag");

staticfunctionbitcls_func_before_initial(stringx);
intcnt;
cnt++;
$display("cls_func_before_initial:",x,"@",$time);
return1;
endfunction
endclass

staticfunctionbitglb_func_before_initial(stringx);
intcnt;
cnt++;
$display("glb_func_before_initial:",x,"@",$time);
return1;
endfunction

classtestextendsuvm_test;
`uvm_component_utils(test)
functionnew(stringname="test",uvm_componentparent=null);
super.new(name,parent);
endfunction

virtualtaskmain_phase(uvm_phasephase);
super.main_phase(phase);
phase.raise_objection(this);
uvm_top.print();
phase.drop_objection(this);
endtask
endclass
programtb_top;
staticbitthd_flag=glb_func_before_initial("thd_flag");
initialbegin
$display("initialbegin...@",$time);
run_test("test");
$display("initialend...@",$time);
end
endprogram

仿真結果如下:

cls_func_before_initial:static_wrapper:fst_flag@0
cls_func_before_initial:static_wrapper:snd_flag@0
glb_func_before_initial:thd_flag@0
initialbegin...@0
UVM_INFO@0:reporter[RNTST]Runningtesttest...
-------------------------------------
NameTypeSizeValue
-------------------------------------
uvm_root-@172
uvm_test_toptest-@336
-------------------------------------
UVM_INFO/apps/vcsmx/vcs/S-2021.09//etc/uvm-1.2/src/base/uvm_report_server.svh(904)@0:reporter[UVM/REPORT/SERVER]
---UVMReportSummary---

**Reportcountsbyseverity
UVM_INFO:2
UVM_WARNING:0
UVM_ERROR:0
UVM_FATAL:0
**Reportcountsbyid
[RNTST]1
[UVM/RELNOTES]1
$finishcalledfromfile"/apps/vcsmx/vcs/S-2021.09//etc/uvm-1.2/src/base/uvm_root.svh",line527.
$finishatsimulationtime0

可以看到cls_func_before_initial和glb_func_before_initial兩個function都會在initial begin-end前執行。

上面的例子也可以看到,在run_test之后的代碼塊并不會執行,這是因為run_test執行結束后,UVM機制會直接調用$finish函數結束仿真。

其實在UVM中,已經利用了static變量的初始化這一特性。UVM的工廠模式中,使用uvm_component_utils/uvm_object_utils向工廠中注冊組件時,就利用了這一特性。逐層展開uvm_component_utils宏時,可以看到如下的代碼:

classuvm_component_registry#(typeT=uvm_component,stringTname="")extendsuvm_object_wrapper;
//....
localstaticthis_typeme=get();
staticfunctionthis_typeget();
if(me==null)begin
uvm_coreservice_tcs=uvm_coreservice_t::get();
uvm_factoryfactory=cs.get_factory();
me=new;
factory.register(me);
end
returnme;
endfunction
//....

思路打開,利用static變量初始化這一特性,可以嘗試更多的應用。






審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Verilog
    +關注

    關注

    28

    文章

    1364

    瀏覽量

    111454
  • UVM
    UVM
    +關注

    關注

    0

    文章

    182

    瀏覽量

    19365

原文標題:initial begin-end真的是SystemVerilog 仿真最早執行的嗎?

文章出處:【微信號:處芯積律,微信公眾號:處芯積律】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    重點介紹所有綜合編譯器都支持的for和repeat循環

    循環語句允許多次執行編程語句或begin-end語句組。SystemVerilog中的循環語句有:for、repeat、while、do..while、foreach和forever。
    的頭像 發表于 11-03 09:10 ?2521次閱讀
    重點介紹所有綜合編譯器都支持的for和repeat循環

    GPIO Init函數結尾沒有begin end用戶編輯區域,為什么?

    MX_GPIO_Init初始換函數結尾沒有begin end用戶編輯區域,但是在其他初始化函數后有編輯區域,并且在main.c文件每個初始化后方也沒有用戶編輯界面,如果想要在初始化結尾做一些事情,在
    發表于 09-26 06:08

    pxa255開發板原理圖及源代碼

    $finish ;endendmodule【例5.5】用begin-end 串行塊產生信號波形`timescale 10ns/1nsmodule wave1;reg wave;parameter
    發表于 06-27 10:01

    為什么msp430g2553在仿真的時候程序能執行,脫機無法執行

    為什么msp430g2553在仿真的時候程序能執行,但是脫機工作之后就執行不了啊?????
    發表于 07-28 19:10

    begin ...... end 與 fork ...... join 語句的 區別 ------ 轉載

    按照界定不同分為兩種:(1)begin……end,用來組合需要順序執行的語句,被稱為串行塊。例如:parameter d = 50; reg[7:0] r; begin //由一系列延
    發表于 06-02 21:31

    ModleSim仿真的時候有一個信號不能被賦值

    1ns/1psmodule uart_tb();reg clk_50M;reg rst;reg rs232_rx; initial begin clk_50M = 0; forever #10
    發表于 03-05 21:30

    怎樣把pad designer軟件里Bgn層的BEGIN LAYER改為END LAYER?

    怎樣把pad designer軟件里Bgn層的BEGIN LAYER改為END LAYER
    發表于 05-04 15:47

    SIMULINK仿真的運行

    SIMULINK仿真的運行構建好一個系統的模型之后,接下來的事情就是運行模型,得出仿真結果。運行一個仿真的完整過程分成三個步驟:設置仿真參數,啟動仿
    發表于 06-19 12:53 ?4286次閱讀

    initial和always兩者的關系分析

    兩者的關系 一個程序塊可以有多個initial和always過程塊。每個initial和always說明語句在仿真的一開始同時立即開始執行init
    的頭像 發表于 11-24 14:48 ?5976次閱讀

    Verilog的兩種塊語句解析

    1. 塊語句有兩種,一種是 begin-end 語句, 通常用來標志()執行的語句;一種是 fork-join 語句,通常用來標志()執行的語句。 答案:順序,并行 解析: (1)begin_
    的頭像 發表于 06-18 15:16 ?3196次閱讀

    Verilog的塊語句fork...join 和 begin...end

    begin_end順序塊,用于將多條語句組成順序塊,語句按順序一條一條執行(除了帶有內嵌延遲控制的非阻塞賦值語句),每條語句的延遲時間是相對于由上一條語句的仿真時間而言;
    的頭像 發表于 06-09 10:30 ?3485次閱讀

    淺析標準的Verilog對語句有兩種分組方式

    標準的Verilog對語句有兩種分組方式——使用beginend或fork…join,beginend中的語句以順序方式執行,而fork
    的頭像 發表于 09-14 11:02 ?992次閱讀
    淺析標準的Verilog對語句有兩種分組方式

    仿真的自定義

    本文將介紹通過更改所提供的仿真電路的元器件、常數和條件等來執行仿真的方法。
    的頭像 發表于 02-14 09:26 ?1017次閱讀
    <b class='flag-5'>仿真的</b>自定義

    verilog中initial和always的區別

    執行行為。雖然它們都可以用于設計和模擬電路行為,但它們在語義和用途上有一些重要的區別。 initial語句: initial語句通常用于初始化內部變量和寄存器的值,并執行
    的頭像 發表于 02-22 16:09 ?3574次閱讀

    verilog中repeat必須用beginend

    在Verilog中,repeat語句不需要使用beginend塊。repeat語句是一種循環控制語句,允許重復執行一個代碼塊指定的次數。它的一般語法如下: repeat (n) statement
    的頭像 發表于 02-23 10:14 ?1549次閱讀
    主站蜘蛛池模板: 久久aa毛片免费播放嗯啊 | 在线 色| 国产精品国产三级国产普通话对白 | 日本免费一级视频 | 午夜想想爱午夜剧场 | 国产三级跑 | 久草在线资源网 | 亚洲黄视频 | 特一级毛片| 午夜爱爱毛片xxxx视频免费看 | 国产成人亚洲精品77 | 国产福利精品视频 | 性欧美视频在线观看 | 新版天堂8在线天堂 | 欧美日韩色图 | 国产婷婷色一区二区三区深爱网 | www在线视频观看 | 日本不卡专区 | 久久99热精品免费观看无卡顿 | 好男人www社区影视在线 | 天天弄 | 亚洲高清不卡视频 | 午夜看片网 | 久久国产精品99久久久久久牛牛 | 国内久久久久高清影视 | 114毛片免费观看网站 | 久久天天躁狠狠躁夜夜2020一 | 四虎影永久地址www 四虎影永久在线观看精品 四虎影永久在线观看网址 四虎影院.com | 国产精品嫩草影院一二三区 | 亚洲亚洲人成网站在线观看 | 丁香激情小说 | 校园激情综合网 | 青草国内精品视频在线观看 | 欧美一区二区三区不卡免费观看 | 免费网站成人亚洲 | 538porm在线看国产亚洲 | 婷婷综合在线观看丁香 | 免费在线公开视频 | 国产精品美女一级在线观看 | 天堂成人在线观看 | 九九久久国产精品大片 |