色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

    文章

    1351

    瀏覽量

    110139
  • UVM
    UVM
    +關注

    關注

    0

    文章

    182

    瀏覽量

    19185

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

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

收藏 人收藏

    評論

    相關推薦

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

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

    initial和always兩者的關系分析

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

    Verilog的兩種塊語句解析

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

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

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

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

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

    仿真的自定義

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

    verilog中initial和always的區別

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

    verilog中repeat必須用beginend

    在Verilog中,repeat語句不需要使用beginend塊。repeat語句是一種循環控制語句,允許重復執行一個代碼塊指定的次數。它的一般語法如下: repeat (n) statement
    的頭像 發表于 02-23 10:14 ?1252次閱讀
    主站蜘蛛池模板: 在线欧美 精品 第1页| 果冻传媒完整免费网站在线观看| seba51久久精品| 国产精品免费大片| 久久99热在线观看7| 欧美成人一区二免费视频| 污文啊好棒棒啊好了| 一边亲着一面膜下奶韩剧免费| 99久久久无码国产精品不卡按摩| 成人特级毛片| 久久re这里视频精品15| 强奷乱码中文字幕熟女免费 | 久草青青在线| 披黑人猛躁10次高潮| 亚洲AV午夜福利精品香蕉麻豆| 2020美女视频黄频大全视频| 国产爱豆果冻传媒在线观看| 久久足恋网| 窝窝色资源站| 99久久国产综合精品网成人影院| 国产毛多水多高潮高清| 男总裁憋尿PLAY灌尿BL| 亚洲国产AV精品卡一卡二| 99热最新在线| 久久se精品一区二区国产| 色婷婷我要去我去也| 在线亚洲色拍偷拍在线视频| 国产国产成年在线视频区| 免费看美女的网站| 亚洲国语在线视频手机在线| xxxx18动漫| 久久香蕉国产免费天天| 无码人妻精品一区二区蜜桃在线看| 99re这里只有精品国产| 好吊射视频988gaocom| 色婷婷综合激情中文在线| 999www成人免费视频| 精品国产乱码久久久久久乱码| 三级黄色在线免费观看| 97色伦在色在线播放| 精品麻豆一卡2卡三卡4卡乱码|