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

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創作中心

完善資料讓更多小伙伴認識你,還能領取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
    +關注

    關注

    29

    文章

    1367

    瀏覽量

    112350
  • UVM
    UVM
    +關注

    關注

    0

    文章

    182

    瀏覽量

    19564

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

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

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

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

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

    initial和always兩者的關系分析

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

    Verilog的兩種塊語句解析

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

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

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

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

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

    仿真的自定義

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

    verilog中initial和always的區別

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

    verilog中repeat必須用beginend

    在Verilog中,repeat語句不需要使用beginend塊。repeat語句是一種循環控制語句,允許重復執行一個代碼塊指定的次數。它的一般語法如下: repeat (n) statement
    的頭像 發表于 02-23 10:14 ?1766次閱讀
    主站蜘蛛池模板: 古代又黄又肉到湿的爽文 | 人与畜禽CROPROATION免费 人淫阁 | 伊人精品视频直播 | 免费看欧美一级特黄a大片 免费看欧美xxx片 | 老师你奶真大下面水真多 | 成人免费在线视频 | 亚州三级久久电影 | 在线观看亚洲免费人成网址 | 超碰97人在线视频 | 91av影院| 国产成人在线播放 | 中文无码第3页不卡av | 天天爽夜夜爽夜夜爽 | 久久婷婷国产五月综合色啪最新 | 丰满老熟好大bbbxxx | 男男腐文污高干嗯啊快点1V1 | 国产成人拍精品免费视频爱情岛 | 久久久久国产一级毛片高清片 | 日本不卡不码高清免费 | 97人妻丰满熟妇AV无码 | 琪琪热热色原日韩在线 | 欧美怡红院视频一区二区三区 | 草民电影网午夜伦理电影网 | 日本久久中文字幕精品 | 国产婷婷色一区二区三区在线 | 欧美激情精品久久久久 | 边摸边吃奶玩乳尖视频 | 欧美高清 videos sexo | 欧美亚洲另类丝袜自拍动漫 | 国产精品视频免费观看 | 久久蜜视频 | 美女大BXXXXN内射 | 亚洲精品线在线观看 | 女人张开腿让男人桶爽免 | 野花日本大全免费观看3中文版 | 色一情一乱一伦一区二区三区 | 乌克兰成人性色生活片 | 中文字幕在线播放视频 | 九九热精品免费观看 | 24小时日本免费看 | 妖精视频在线观看高清 |

    電子發燒友

    中國電子工程師最喜歡的網站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術信息
    • 參加活動獲取豐厚的禮品