0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

continue和break跳转语句介绍

OpenFPGA 来源:OpenFPGA 作者:碎碎思 2022-11-09 09:23 次阅读

跳转语句允许程序代码跳过一个或多个编程语句,SystemVerilog的jump语句是continue、break和disable。

continue 和 break跳转语句

continue和break-跳转语句在循环中用于控制循环中语句的执行。这些跳转语句只能用于for循环、while循环和foreach循环。它们不能在循环之外使用。

continue语句跳转到循环的结尾,并计算循环的结束表达式(end expression),以确定循环是否应继续进行另一次迭代。

下面的代码段使用for循环遍历一个小查找表的地址,该表被建模为16-bit的一维数组。使用continue语句跳过表中值为0的位置。对于非零位置,调用函数对该值进行某种操作(函数未显示)。

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

break语句立即终止循环的执行。循环退出,任何循环控制语句(如for循环步骤分配)都不会执行。

示例6-10说明了如何使用continue和break来查找在一个位范围内设置为1的第一位。图6-10显示了该示例的综合结果。

示例6-10:使用continue和break控制循环执行

//`begin_keywords"1800-2012"//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的综合结果

disable跳转语句

SystemVerilog 的disable语句类似于其他编程语言中的go-to语句。disable跳转到一组命名语句的末尾或任务的末尾。disable跳转语句的一般用法是:

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

在这个代码片段中,begin-end语句组被命名为search_loop。disable语句指示仿真立即跳到名为begin-end 语句组的末尾。

最初的Verilog语言没有continue和break-跳转语句。相反,disable语句与通用go-to行为一样用于跳转到循环的末尾,但会继续执行循环的下一个过程。

disable语句通过跳过循环的末端,过早地跳出循环。要跳过循环中的语句,继续执行循环时,命名的begin-end语句组必须包含在循环中。要跳出循环,命名的begin-end语句组必须包含整个循环。

下面的示例显示了与示例6-10相同的功能,除了使用disable 跳转语句而不是continue和break语句,

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

最佳实践指南6-6
使用continue和break-跳转语句控制循环迭代。不要使用disable跳转语句.

disable 跳转语句提供与break和continue 跳转语句相同的功能,如上所示。然而,disable 跳转语句使代码更难读懂和维护,使用continue和break是一种更简单、更直观的编码方式。

disable跳转语句是一个通用的go-to语句,可以在验证中使用。综合编译器通常不支持使用disable的其他方法。

No-op声明

SystemVerilog编程语句以分号;(分号本身被视为完整的编程语句)表示没有要执行的功能。单独的分号执行空操作,通常被称为无操作语句(no-op语句)。

下面的代码片段表示存储数据变量的寄存器(使用触发器)。由case语句表示的多路输入确定要存储在数据寄存器中的值。

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

此代码段中的case语句不会对mode的2’b11值进行解码。虽然在本例中功能上是正确的,但不完整的case语句不是完美的,并且可能会在代码验证期间引发问题,或者其他工程师在维护或重用代码时引入歧义(解码模式值2’b11是不是故意的?还是模型中的疏忽(错误))。

在这个例子中,没有任何东西可以说明这种或那种方式。添加关于未使用的2’b11值的注释可能会很有帮助,但不是所有人都会用心的注释代码。

使用无操作语句有助于使RTL模型更加自我记录和可读。下面的代码片段在功能上与前面的示例相同,但是,即使没有注释,很明显,也很方便人们理解代码。

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

时序逻辑中的无操作语句将被综合编译器忽略。没有要实现的功能,因此寄存器将保留其初始值。然而,综合编译器不能忽略组合逻辑中的no-op语句。

当没有为变量赋值时,它将保留以前的值。综合时可能会添加一个锁存器,以便逻辑可以保存以前的值。

最佳实践指南6-7
不要将no-op语句用于RTL建模,

尽管综合编译器支持no-op,但它在RTL功能中没有任何用途,并且可能导致组合逻辑中出现意外的锁存器。为了完整性,我们讨论了no-op语句,但不建议在RTL代码中使用。





审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 锁存器
    +关注

    关注

    8

    文章

    744

    浏览量

    41035
  • 编程语言
    +关注

    关注

    9

    文章

    1878

    浏览量

    33079
  • Verilog语言
    +关注

    关注

    0

    文章

    113

    浏览量

    8159

原文标题:SystemVerilog-跳转语句

文章出处:【微信号:Open_FPGA,微信公众号:OpenFPGA】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    嵌入式C语言中的goto语句详解

    goto语句被称为C语言中的跳转语句。用于无条件跳转到其他标签。它将控制权转移到程序的其他部分。
    发表于 07-19 16:08 1613次阅读
    嵌入式C语言中的goto<b class='flag-5'>语句</b>详解

    C语言中break语句的语法和基本应用

    在C语言中,break语句是一种控制流语句,它用于终止当前所在的循环结构(for、while、do-while)或者switch语句,从而跳出循环或者结束switch
    发表于 08-17 15:35 1007次阅读

    C语言的break转移语句讲解

    C语言的break转移语句是一种用于跳出循环或者switch语句的控制结构。它的作用是提前结束循环或者switch语句,从而避免不必要的计算或者执行。
    的头像 发表于 11-22 15:34 334次阅读
    C语言的<b class='flag-5'>break</b>转移<b class='flag-5'>语句</b>讲解

    breakcontinue语句#硬声创作季

    Conbreak
    学习电子
    发布于 :2022年10月27日 07:32:40

    在C语言中什么是goto语句

    什么是goto语句goto语句被称为C语言中的跳转语句,用于无条件跳转到其他标签,它将控制权转移到程序的其他部分。goto语句一般很少使用,
    发表于 07-14 08:17

    continuebreak和return的区别

    嵌入式工程师综合笔试题之C语言基础(含部分答案)continuebreak和return的区别?continue:跳过本次循环.Break:只能在循环体内部或者switch开关
    发表于 12-15 06:08

    KEIL环境下华大芯片执行跳转语句会进入硬件中断,关闭全部中断后,为什么跳转后会停下来而不是自动继续跑下去?

    我在APP工程中使用attribute语句在0x8008的位置放置了一个入口函数,用于跳转到0x8200的APP工程。在BOOT工程下增加了跳转语句跳转到0x8008这个入口函数( (
    发表于 11-08 08:48

    breakcontinue和return

      breakcontinue和return这三个语句的用法新手们经常弄混淆,至少在我学习C语言的时候经常把它们的用法给搞错。不过现在好了,我已彻底搞清楚它们之间的用法!
    发表于 09-15 16:59 5次下载
    <b class='flag-5'>break</b>,<b class='flag-5'>continue</b>和return

    第十二课 C51开关分支语句

    的目的,又能使程序结构清晰。它的语法为下: switch (表达式) { case 常量表达式 1: 语句 1; break; case 常量表达式 2: 语句 2; break; c
    发表于 11-22 12:43 529次阅读

    C语言程序设计教程之如何设计循环结构

    本文档的主要内容详细介绍的是C语言程序设计教程之如何设计循环结构主要内容包括了:1 while语句2 do-while语句3 for 语句4 bre
    发表于 10-26 16:48 0次下载
    C语言程序设计教程之如何设计循环结构

    C语言程序设计教程之循环结构程序设计资料概述

    本文档的主要内容详细介绍的是C语言程序设计教程之循环结构程序设计资料概述主要内容包括了:1.循环语句,2.breakcontinue 语句
    发表于 12-29 17:17 16次下载
    C语言程序设计教程之循环结构程序设计资料概述

    决策语句允许程序块的执行流程

    SystemVerilog case语句与C switch语句类似,但有重要区别。SystemVerilog不能使用break语句(C使用break
    的头像 发表于 10-27 08:57 659次阅读

    SCL用GOTO语句执行程序跳转

    用GOTO语句能够执行程序跳转。此引起立即跳转到指定标号,为此而到同块中不同的语句
    的头像 发表于 02-01 09:22 1955次阅读

    什么是python break语句-终止循环

    在循环的过程中如果要退出循环,我们可以用break语句continue语句
    的头像 发表于 02-23 11:17 1954次阅读

    深入探讨嵌入式C编程的goto语句

    什么是goto语句? goto 语句被称为 C 语言中的跳转语句。 用于无条件跳转到其他标签。它将控制权转移到程序的其他部分。 goto
    发表于 01-21 10:41 314次阅读
    深入探讨嵌入式C编程的goto<b class='flag-5'>语句</b>