RM新时代网站-首页

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

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

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

Static變量和Local變量的區(qū)別

芯片驗(yàn)證工程師 ? 來(lái)源:芯片驗(yàn)證工程師 ? 作者:芯片驗(yàn)證工程師 ? 2022-10-12 09:35 ? 次閱讀

變量可以分為3類,即Static、Automatic、和Local。如下表所示。
ec224162-497e-11ed-a3b6-dac502259ad0.png

Static vs. Local Variables

下面的這個(gè)例子可以看出Static變量和Local變量的區(qū)別:

static int n; // Static variable – outside ‘module’ – 
// globally declared
//visible to all modules/scopes that follow.
module vars;
int n; 
//Local variable - Module level - visible to all 
scopes below
initial begin 
   n = 2;
   $display("module level ‘n’ = %0d",n);
end
initial begin : init2
   int n; //Local - Block level 
   n = 3;
   $display("block level ‘n’ = %0d",n); 
   $unit::n = 4; //Static Global
   $display("Statically declared ‘n’ = %0d",$unit::n); 
end 
initial begin //hierarchical reference to local variable
   $display("init2.n = %0d", init2.n);
end
endmodule

module next; 
//Static variable 'n' is visible in the module 'next'
initial begin
   $display("Statically declared 'n' in module 'next' = 
%0d",$unit::n); 
end
endmodule

Simulation log:

module level ‘n’ = 2
block level ‘n’ = 3
Statically declared ‘n’ = 4
init2.n = 3
Statically declared 'n' in module 'next' = 4
 V C S S i m u l a t i o n R e p o r t

首先,我們?cè)趍odule ' vars '外面聲明一個(gè)靜態(tài)變量" int n "。使得這個(gè)靜態(tài)變量n對(duì)后面的所有模塊都可見(jiàn)。

或者說(shuō)這個(gè)靜態(tài)變量的作用域不在某個(gè)module內(nèi),而在整個(gè)編譯域$unit內(nèi)。

然后,在module“vars”中聲明另一個(gè)變量“int n”并賦值2,所以這個(gè)n是一個(gè)module-level的變量,僅對(duì)module vars可見(jiàn)。

然后在過(guò)程塊init2中聲明另一個(gè)變量int n
,并賦值為3,使得n只對(duì)指定的語(yǔ)句塊init2可見(jiàn)。

為了給靜態(tài)聲明的變量“n”賦值,我們需要使用

$unit::n = 4;

block-level “init2.n”可以從其他過(guò)程塊中訪問(wèn)。

initial begin //hierarchical reference to local variable
    $display("init2.n = %0d", init2.n);
end

Automatic變量 vs. Static 變量

Automatic變量在每次進(jìn)入語(yǔ)句塊時(shí)被重新分配內(nèi)存空間和初始化。相比之下,靜態(tài)變量只被分配內(nèi)存空間和初始化一次。
下面是Automatic變量和Static 變量比較的一個(gè)示例:

module autovars;
 initial begin
    for (int i=0; i<2; i++) begin
        automatic int loop3 = 0; // executes every loop
        for (int j=0; j<2; j++) begin
            loop3++;
            $display("loop3=%0d",loop3);
        end
    end // loop3 = 1 2 1 2
    for (int i=0; i<2; i++) begin
        static int loop2 = 0; // executes once at time zero
        for (int j=0; j<2; j++) begin
            loop2++;
            $display("loop2=%0d",loop2);
        end
    end // loop2 = 1 2 3 4 
 end
endmodule : autovars

在本例中,有兩個(gè)for循環(huán)。第一個(gè)for循環(huán)聲明了一個(gè)名為“l(fā)oop3”的“automatic”變量,初始值為0。

第二個(gè)for循環(huán)聲明了一個(gè)名為loop2的靜態(tài)變量,初始化為0。
simulation log:

loop3=1
loop3=2
loop3=1
loop3=2
loop2=1
loop2=2
loop2=3
loop2=4

在第一個(gè)for循環(huán)中,automatic變量每次循環(huán)時(shí)重新初始化。

simulation log:

loop3=1
loop3=2
loop3=1
loop3=2

相比之下,第二個(gè)for循環(huán)的靜態(tài)變量只會(huì)初始化一次。
simulation log:

loop2=1
loop2=2
loop2=3
loop2=4

審核編輯:湯梓紅

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

    關(guān)注

    0

    文章

    613

    瀏覽量

    28360
  • static
    +關(guān)注

    關(guān)注

    0

    文章

    33

    瀏覽量

    10366
  • locale
    +關(guān)注

    關(guān)注

    0

    文章

    11

    瀏覽量

    1173

原文標(biāo)題:SystemVerilog中的Static變量, Automatic變量和Local變量

文章出處:【微信號(hào):芯片驗(yàn)證工程師,微信公眾號(hào):芯片驗(yàn)證工程師】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    變量的聲明和定義有什么區(qū)別和聯(lián)系

    變量的聲明和定義是編程中的兩個(gè)重要概念,它們?cè)谡Z(yǔ)法和語(yǔ)義上有一些區(qū)別和聯(lián)系。在本文中,我將詳細(xì)介紹變量的聲明和定義之間的區(qū)別和聯(lián)系。 首先,讓我們從
    的頭像 發(fā)表于 12-07 16:14 ?1118次閱讀

    static的全局變量與局部變量的使用,看完你就懂了

    不能被其它文件所用;其它文件中可以定義相同名字的變量,不會(huì)發(fā)生沖突。 (1)全局變量和全局靜態(tài)變量區(qū)別 1)全局變量是不顯式用
    發(fā)表于 06-27 08:54

    static作用(修飾函數(shù)、局部變量、全局變量

    詳細(xì)介紹了static作用(修飾函數(shù)、局部變量、全局變量)的用法
    發(fā)表于 11-17 10:30 ?4次下載

    C語(yǔ)言register變量和extern及static等知識(shí)總結(jié)

    register變量必須是一個(gè)單個(gè)的值,并且其長(zhǎng)度應(yīng)小于或等于整型的長(zhǎng)度。但是,有些機(jī)器的寄存器也能存放浮點(diǎn)數(shù)。 register變量可能不存放在內(nèi)存中,所以不能用取址符運(yùn)算符 。 只有局部變量和形參可以作為register
    發(fā)表于 11-21 10:20 ?5次下載

    全局變量和局部變量有什么區(qū)別

    全局變量是編程術(shù)語(yǔ)中的一種,源自于變量之分。變量分為局部與全局,局部變量又可稱之為內(nèi)部變量。局部變量
    發(fā)表于 12-11 11:58 ?3.3w次閱讀
    全局<b class='flag-5'>變量</b>和局部<b class='flag-5'>變量</b>有什么<b class='flag-5'>區(qū)別</b>

    全局變量和成員變量區(qū)別分析

    成員變量是指定維度的成員變量,用于標(biāo)識(shí)某個(gè)維度成員。簡(jiǎn)介由 Analysis Services 內(nèi)部使用的值,以標(biāo)識(shí)某個(gè)維度成員。MemberKeyColumn 屬性指定維度的成員變量。例如,1到12之間的某個(gè)數(shù)字可以是相應(yīng)于年
    發(fā)表于 12-11 13:50 ?6910次閱讀
    全局<b class='flag-5'>變量</b>和成員<b class='flag-5'>變量</b>的<b class='flag-5'>區(qū)別</b>分析

    基于static變量來(lái)實(shí)現(xiàn)一個(gè)模塊的封裝

    static變量的一個(gè)顯著的作用就是可以實(shí)現(xiàn)一個(gè)模塊的封裝。 static存儲(chǔ)類別的特性決定了static聲明的全局變量只能被本源文件
    的頭像 發(fā)表于 01-05 10:54 ?5546次閱讀
    基于<b class='flag-5'>static</b><b class='flag-5'>變量</b>來(lái)實(shí)現(xiàn)一個(gè)模塊的封裝

    寄存器變量的存儲(chǔ)類別

    對(duì)于局部變量來(lái)說(shuō),static變量和auto變量是相對(duì)而言的。在語(yǔ)句塊執(zhí)行期間,static變量
    發(fā)表于 06-03 11:07 ?2111次閱讀
    寄存器<b class='flag-5'>變量</b>的存儲(chǔ)類別

    什么是PLC變量

    都通過(guò)變量來(lái)操作。 為指令分配變量后,即會(huì)使用指定變量的值來(lái)執(zhí)行該指令。 變量在 TIA Portal 中集中管理。 在程序編輯器中創(chuàng)建 PLC
    的頭像 發(fā)表于 10-11 11:53 ?1.8w次閱讀
    什么是PLC<b class='flag-5'>變量</b>

    西門子PLC變量表中定義變量

    。 程序中多數(shù)指令都通過(guò)變量來(lái)操作。? 為指令分配變量后,即會(huì)使用指定變量的值來(lái)執(zhí)行該指令。 變量在 TIA Portal 中集中管理。? 在程序編輯器中創(chuàng)建 PLC ?
    的頭像 發(fā)表于 12-23 16:25 ?2w次閱讀
    西門子PLC<b class='flag-5'>變量</b>表中定義<b class='flag-5'>變量</b>

    linux內(nèi)核中percpu變量的實(shí)現(xiàn)

    我們?cè)谑褂酶鞣N編程語(yǔ)言進(jìn)行多線程編程時(shí),經(jīng)常會(huì)用到thread local變量。 所謂thread local變量,就是對(duì)于同一個(gè)變量,每個(gè)
    的頭像 發(fā)表于 01-04 13:39 ?1958次閱讀

    C語(yǔ)言中變量的作用域

    作用域局部變量--local variable全局變量--global variable修飾符--storage description局部變量l
    發(fā)表于 01-13 14:58 ?0次下載
    C語(yǔ)言中<b class='flag-5'>變量</b>的作用域

    為什么C++單例模式不能直接全部使用static變量static函數(shù)呢?

    通過(guò)getInstance()函數(shù)獲取單例對(duì)象,這種模式的關(guān)鍵之處不是在于強(qiáng)迫你用函數(shù)來(lái)獲取對(duì)象。關(guān)鍵之處是讓static對(duì)象定義在函數(shù)內(nèi)部,變成局部static變量??聪逻@種實(shí)現(xiàn)方式的經(jīng)典demo:
    的頭像 發(fā)表于 06-05 14:14 ?1565次閱讀

    Java中對(duì)static關(guān)鍵詞的介紹

    可以說(shuō)是該關(guān)鍵字最常用的一個(gè)功能,通常將用 static 修飾的成員變量稱為類成員或者靜態(tài)成員,那么靜態(tài)成員和不用 static 修飾的非靜態(tài)成員有什么區(qū)別呢? 我們先看看不用
    的頭像 發(fā)表于 10-11 15:26 ?476次閱讀
    Java中對(duì)<b class='flag-5'>static</b>關(guān)鍵詞的介紹

    什么是變量?PLC變量哪些部分組成?

    變量在 TIA Portal 中集中管理。 在程序編輯器中創(chuàng)建 PLC 變量與在 PLC 變量表中創(chuàng)建 PLC 變量沒(méi)什么區(qū)別。 如
    發(fā)表于 10-15 11:31 ?4960次閱讀
    什么是<b class='flag-5'>變量</b>?PLC<b class='flag-5'>變量</b>哪些部分組成?
    RM新时代网站-首页