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

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

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

continue和break跳轉(zhuǎn)語句介紹

OpenFPGA ? 來源:OpenFPGA ? 作者:碎碎思 ? 2022-11-09 09:23 ? 次閱讀

跳轉(zhuǎn)語句允許程序代碼跳過一個(gè)或多個(gè)編程語句,SystemVerilog的jump語句是continue、break和disable。

continue 和 break跳轉(zhuǎn)語句

continue和break-跳轉(zhuǎn)語句在循環(huán)中用于控制循環(huán)中語句的執(zhí)行。這些跳轉(zhuǎn)語句只能用于for循環(huán)、while循環(huán)和foreach循環(huán)。它們不能在循環(huán)之外使用。

continue語句跳轉(zhuǎn)到循環(huán)的結(jié)尾,并計(jì)算循環(huán)的結(jié)束表達(dá)式(end expression),以確定循環(huán)是否應(yīng)繼續(xù)進(jìn)行另一次迭代。

下面的代碼段使用for循環(huán)遍歷一個(gè)小查找表的地址,該表被建模為16-bit的一維數(shù)組。使用continue語句跳過表中值為0的位置。對于非零位置,調(diào)用函數(shù)對該值進(jìn)行某種操作(函數(shù)未顯示)。

f8758ab0-5fc6-11ed-8abf-dac502259ad0.png

break語句立即終止循環(huán)的執(zhí)行。循環(huán)退出,任何循環(huán)控制語句(如for循環(huán)步驟分配)都不會(huì)執(zhí)行。

示例6-10說明了如何使用continue和break來查找在一個(gè)位范圍內(nèi)設(shè)置為1的第一位。圖6-10顯示了該示例的綜合結(jié)果。

示例6-10:使用continue和break控制循環(huán)執(zhí)行

//`begin_keywords"1800-2012"http://useSystemVerilog-2012keywords
modulefind_bit_in_range
#(parameterN=4)//bussize
(inputlogic[N-1:0]data,
inputlogic[$clog2(N)-1:0]start_range,end_range,
outputlogic[$clog2(N)-1:0]low_bit
);
timeunit1ns;timeprecision1ns;

always_combbegin
low_bit='0;
for(inti=0;iend_range)break;//exitloop
if(data[i])begin
low_bit=i;
break;//exitloop
end
end//endoftheloop
//...//processdatabasedonlowestbitset
end

endmodule:find_bit_in_range
//`end_keywords

f899e748-5fc6-11ed-8abf-dac502259ad0.png 圖6-10:示例6-10的綜合結(jié)果

disable跳轉(zhuǎn)語句

SystemVerilog 的disable語句類似于其他編程語言中的go-to語句。disable跳轉(zhuǎn)到一組命名語句的末尾或任務(wù)的末尾。disable跳轉(zhuǎn)語句的一般用法是:

f9cb2f00-5fc6-11ed-8abf-dac502259ad0.png

在這個(gè)代碼片段中,begin-end語句組被命名為search_loop。disable語句指示仿真立即跳到名為begin-end 語句組的末尾。

最初的Verilog語言沒有continue和break-跳轉(zhuǎn)語句。相反,disable語句與通用go-to行為一樣用于跳轉(zhuǎn)到循環(huán)的末尾,但會(huì)繼續(xù)執(zhí)行循環(huán)的下一個(gè)過程。

disable語句通過跳過循環(huán)的末端,過早地跳出循環(huán)。要跳過循環(huán)中的語句,繼續(xù)執(zhí)行循環(huán)時(shí),命名的begin-end語句組必須包含在循環(huán)中。要跳出循環(huán),命名的begin-end語句組必須包含整個(gè)循環(huán)。

下面的示例顯示了與示例6-10相同的功能,除了使用disable 跳轉(zhuǎn)語句而不是continue和break語句,

f9ec9b22-5fc6-11ed-8abf-dac502259ad0.png

最佳實(shí)踐指南6-6
使用continue和break-跳轉(zhuǎn)語句控制循環(huán)迭代。不要使用disable跳轉(zhuǎn)語句.

disable 跳轉(zhuǎn)語句提供與break和continue 跳轉(zhuǎn)語句相同的功能,如上所示。然而,disable 跳轉(zhuǎn)語句使代碼更難讀懂和維護(hù),使用continue和break是一種更簡單、更直觀的編碼方式。

disable跳轉(zhuǎn)語句是一個(gè)通用的go-to語句,可以在驗(yàn)證中使用。綜合編譯器通常不支持使用disable的其他方法。

No-op聲明

SystemVerilog編程語句以分號;(分號本身被視為完整的編程語句)表示沒有要執(zhí)行的功能。單獨(dú)的分號執(zhí)行空操作,通常被稱為無操作語句(no-op語句)。

下面的代碼片段表示存儲(chǔ)數(shù)據(jù)變量的寄存器(使用觸發(fā)器)。由case語句表示的多路輸入確定要存儲(chǔ)在數(shù)據(jù)寄存器中的值。

fa1f0b7a-5fc6-11ed-8abf-dac502259ad0.png

此代碼段中的case語句不會(huì)對mode的2’b11值進(jìn)行解碼。雖然在本例中功能上是正確的,但不完整的case語句不是完美的,并且可能會(huì)在代碼驗(yàn)證期間引發(fā)問題,或者其他工程師在維護(hù)或重用代碼時(shí)引入歧義(解碼模式值2’b11是不是故意的?還是模型中的疏忽(錯(cuò)誤))。

在這個(gè)例子中,沒有任何東西可以說明這種或那種方式。添加關(guān)于未使用的2’b11值的注釋可能會(huì)很有幫助,但不是所有人都會(huì)用心的注釋代碼。

使用無操作語句有助于使RTL模型更加自我記錄和可讀。下面的代碼片段在功能上與前面的示例相同,但是,即使沒有注釋,很明顯,也很方便人們理解代碼。

fa5abd96-5fc6-11ed-8abf-dac502259ad0.png

時(shí)序邏輯中的無操作語句將被綜合編譯器忽略。沒有要實(shí)現(xiàn)的功能,因此寄存器將保留其初始值。然而,綜合編譯器不能忽略組合邏輯中的no-op語句。

當(dāng)沒有為變量賦值時(shí),它將保留以前的值。綜合時(shí)可能會(huì)添加一個(gè)鎖存器,以便邏輯可以保存以前的值。

最佳實(shí)踐指南6-7
不要將no-op語句用于RTL建模,

盡管綜合編譯器支持no-op,但它在RTL功能中沒有任何用途,并且可能導(dǎo)致組合邏輯中出現(xiàn)意外的鎖存器。為了完整性,我們討論了no-op語句,但不建議在RTL代碼中使用。





審核編輯:劉清

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

    關(guān)注

    8

    文章

    904

    瀏覽量

    41420
  • 編程語言
    +關(guān)注

    關(guān)注

    10

    文章

    1929

    瀏覽量

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

    關(guān)注

    0

    文章

    113

    瀏覽量

    8204

原文標(biāo)題:SystemVerilog-跳轉(zhuǎn)語句

文章出處:【微信號:Open_FPGA,微信公眾號:OpenFPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    嵌入式C語言中的goto語句詳解

    goto語句被稱為C語言中的跳轉(zhuǎn)語句。用于無條件跳轉(zhuǎn)到其他標(biāo)簽。它將控制權(quán)轉(zhuǎn)移到程序的其他部分。
    發(fā)表于 07-19 16:08 ?3243次閱讀
    嵌入式C語言中的goto<b class='flag-5'>語句</b>詳解

    C語言中break語句的語法和基本應(yīng)用

    在C語言中,break語句是一種控制流語句,它用于終止當(dāng)前所在的循環(huán)結(jié)構(gòu)(for、while、do-while)或者switch語句,從而跳出循環(huán)或者結(jié)束switch
    發(fā)表于 08-17 15:35 ?1536次閱讀

    C語言的break轉(zhuǎn)移語句講解

    C語言的break轉(zhuǎn)移語句是一種用于跳出循環(huán)或者switch語句的控制結(jié)構(gòu)。它的作用是提前結(jié)束循環(huán)或者switch語句,從而避免不必要的計(jì)算或者執(zhí)行。
    的頭像 發(fā)表于 11-22 15:34 ?613次閱讀
    C語言的<b class='flag-5'>break</b>轉(zhuǎn)移<b class='flag-5'>語句</b>講解

    breakcontinue語句#硬聲創(chuàng)作季

    Conbreak
    學(xué)習(xí)電子
    發(fā)布于 :2022年10月27日 07:32:40

    在C語言中什么是goto語句

    什么是goto語句goto語句被稱為C語言中的跳轉(zhuǎn)語句,用于無條件跳轉(zhuǎn)到其他標(biāo)簽,它將控制權(quán)轉(zhuǎn)移到程序的其他部分。goto語句一般很少使用,
    發(fā)表于 07-14 08:17

    continue、break和return的區(qū)別

    嵌入式工程師綜合筆試題之C語言基礎(chǔ)(含部分答案)continuebreak和return的區(qū)別?continue:跳過本次循環(huán).Break:只能在循環(huán)體內(nèi)部或者switch開關(guān)
    發(fā)表于 12-15 06:08

    KEIL環(huán)境下華大芯片執(zhí)行跳轉(zhuǎn)語句會(huì)進(jìn)入硬件中斷,關(guān)閉全部中斷后,為什么跳轉(zhuǎn)后會(huì)停下來而不是自動(dòng)繼續(xù)跑下去?

    我在APP工程中使用attribute語句在0x8008的位置放置了一個(gè)入口函數(shù),用于跳轉(zhuǎn)到0x8200的APP工程。在BOOT工程下增加了跳轉(zhuǎn)語句跳轉(zhuǎn)到0x8008這個(gè)入口函數(shù)( (
    發(fā)表于 11-08 08:48

    芯靈思SinlinxA33開發(fā)板安卓開發(fā)-java語言基礎(chǔ)(五)

    )。?(3)結(jié)束while語句的執(zhí)行.breakcontinue語句breakcontinue
    發(fā)表于 12-24 10:45 ?237次閱讀

    C語言程序設(shè)計(jì)教程之循環(huán)結(jié)構(gòu)程序設(shè)計(jì)資料概述

    本文檔的主要內(nèi)容詳細(xì)介紹的是C語言程序設(shè)計(jì)教程之循環(huán)結(jié)構(gòu)程序設(shè)計(jì)資料概述主要內(nèi)容包括了:1.循環(huán)語句,2.breakcontinue 語句
    發(fā)表于 12-29 17:17 ?16次下載
    C語言程序設(shè)計(jì)教程之循環(huán)結(jié)構(gòu)程序設(shè)計(jì)資料概述

    C51語言的基礎(chǔ)知識資料說明

    :for語句、while語句和do…while語句。 轉(zhuǎn)移控制語句break語句
    發(fā)表于 06-06 17:49 ?1次下載
    C51語言的基礎(chǔ)知識資料說明

    c語言中的SCL-CONTIUNE語句

    CONTIUNE語句 CONTIUNE語句用來終止循環(huán)語句(FOR, WHILE或REPEAT)的當(dāng)前重復(fù)的執(zhí)行。 語法(Syntax) CONTINUE
    的頭像 發(fā)表于 04-16 11:19 ?2320次閱讀
    c語言中的SCL-CONTIUNE<b class='flag-5'>語句</b>

    決策語句允許程序塊的執(zhí)行流程

    SystemVerilog case語句與C switch語句類似,但有重要區(qū)別。SystemVerilog不能使用break語句(C使用break
    的頭像 發(fā)表于 10-27 08:57 ?874次閱讀

    SCL用GOTO語句執(zhí)行程序跳轉(zhuǎn)

    用GOTO語句能夠執(zhí)行程序跳轉(zhuǎn)。此引起立即跳轉(zhuǎn)到指定標(biāo)號,為此而到同塊中不同的語句。
    的頭像 發(fā)表于 02-01 09:22 ?2527次閱讀

    什么是python break語句-終止循環(huán)

    在循環(huán)的過程中如果要退出循環(huán),我們可以用break語句continue語句。
    的頭像 發(fā)表于 02-23 11:17 ?2383次閱讀

    深入探討嵌入式C編程的goto語句

    什么是goto語句? goto 語句被稱為 C 語言中的跳轉(zhuǎn)語句。 用于無條件跳轉(zhuǎn)到其他標(biāo)簽。它將控制權(quán)轉(zhuǎn)移到程序的其他部分。 goto
    發(fā)表于 01-21 10:41 ?541次閱讀
    深入探討嵌入式C編程的goto<b class='flag-5'>語句</b>