SystemVerilog学习笔记(六):控制流

条件语句

条件语句用于检查块中的语句是否被执行。条件语句创建语句块。如果给出的表达式是 true,执行块中的语句集,如果表达式为 false,则 else 块语句将最后执行。

序号 条件语句
1. if
2. if-else
3. if-else ladder
4. unique if
5. unique0 if
6. priority if

不同条件表达式之间的差异

条件 if elseif unique if unique0 if priority if
只有一个条件表达式为真 执行 true 条件块内的语句集 执行 true 条件块内的语句集 执行 true 条件块内的语句集 执行 true 条件块内的语句集
多个条件表达式为真 执行第一个 true 条件块语句,不显示警告 执行第一个为真的条件块语句,显示警告 执行第一个为真的条件块语句,显示警告 执行第一个 true 条件块语句,不显示警告
没有 else,条件表达式都不为真 不执行 true 条件块内的语句, 不显示警告 不执行 true 条件块内的语句, 显示警告 不执行 true 条件块内的语句, 不显示警告 不执行 true 条件块内的语句, 显示警告

unique if、unique0 if 和priority if 是 SystemVerilog 中 if-else 条件语句的更新版本。这些条件语句显示警告,有助于检测死代码或未使用的条件语句。

死代码(Dead code)是对模拟或综合没有任何影响的代码。死代码的示例是从未使用的信号或从未触发的条件。

死代码不会打扰模拟器或综合工具。然而,它会消耗任何阅读代码的人的精神能量。人们会尝试找出给定语句的目的,可能需要一段时间才能意识到他们正在处理死代码。这使得审查代码和重用代码的成本更高。一般来说,死代码是一种应该避免的技术债务。

case 语句

case 语句允许我们执行特定 case 表达式的代码。这将为长代码提供正确的结构,并降低代码的复杂性。

case 语句计算给定的表达式,并根据计算值(匹配特定条件)执行与其关联的语句。基本上,它用于根据不同的条件执行不同的操作。

systemVerilog case 语句以 case 关键字开始,以 endcase 关键字结束。多个语句的块必须分组在开始和结束语句中。

在 case 语句中,使用 default 语句。 default语句是可选的,一个case语句中只能有一个default语句。

如果给定的 case 条件都不成立,则执行 default 语句中的语句。

如果没有任何项目与条件匹配并且未给出默认语句,则执行将退出 case 块而不执行任何操作。

如果我们想在 case 语句中给出范围值,这将在 inside 语句的帮助下完成。

语法: case(condition) inside

condition_1_a:b: Statements ;

condition_2:_c:d Statements ;

...........

conditon_N_y:z: Statements;

endcase
在 case 语句中使用 break 时,会发生错误。

使用 disable 关键字禁用任务内的嵌套循环

unique case

在 unique case 语句中,如果所有的 case 条件都为假,它将显示一个警告(没有找到匹配的 case 语句),但不会有错误。 如果所有的条件都为真或有多个条件为真,它将读取第一个正确或匹配的 case 条件,并显示输出,同时伴随一个警告,但不会有错误。

语法:

unique case(condition)

condition_1: Statements ;

condition_2: Statements ;

............

conditon_N: Statements;

endcase

unique case 语句带 default 语句

在这里,我们将在 unique case 语句中使用 default 语句。 如果 unique case 语句中的所有条件都不为真,那么将执行 default 语句。

语法:unique case(condition)

condition_1: Statements ;

condition_2: Statements ;

............

conditon_N: Statements;

default : Statements;

endcase

uniuqe0 case

在 uniuqe0 case 中,如果所有的 case 条件都为假,它将不会显示警告,也不会有错误。 如果所有的条件都为真或有多个条件为真,它将读取第一个正确或匹配的 case 条件,并显示输出,同时伴随一个警告,但不会有错误。

语法:unique0 case(condition)

condition_1: Statements ;

condition_2: Statements ;

...........

conditon_N: Statements;

endcase

priority case

在这种类型的 case 语句中,如果有多个 case 条件为真,它将在不提供任何错误或警告的情况下显示输出。

语法: priority case(condition)

condition_1: Statements ;

condition_2: Statements ;

...........

conditon_N: Statements;

endcase

break

break 语句用于立即终止循环。当在循环内部遇到 break 语句时,循环迭代立即停止。通常情况下,我们在使用 if 语句在代码中给出条件后使用 break。

我们可以在任何循环(for、foreach、forever、do-while、while、do-while)中使用 break 语句来终止循环的执行。它总是在循环内部使用。当遇到 break 语句时,它立即结束循环。

流程图:

语法:

break;

continue

continue 语句用于跳过循环的当前迭代。我们可以在任何类型的循环中使用 continue 语句,比如 for、while 和 do-while 循环。基本上,continue 语句用于在我们想要继续循环但不想执行循环中特定迭代的情况下使用。

使用 continue,我们可以跳过循环的当前迭代,并立即跳转到循环的下一迭代。

流程图:

语法:

continue;

相关推荐
m4Rk_1 分钟前
【论文阅读】Agent 记忆机制(61):CFGM——用粗到细的记忆落地贯通经验采集、知识蒸馏与在线纠错
论文阅读·人工智能·学习·开源·github
边境悍匪5 分钟前
蜗牛学苑 Java 智能体学习 Day33|AOP 面向切面编程、日志技术思维导图复盘
学习
我是你的开心果77816 分钟前
ai全栈软件开发day21(第四阶段喽)
人工智能·学习
江湖人称菠萝包33 分钟前
【Windows】《深入浅出Windows API程序设计:编程基础篇》笔记-Chapter2-Windows窗口程序
windows·笔记
网络工程小王39 分钟前
【LLM开发实验】FastAPI 学习笔记
数据库·笔记·学习·mysql·fastapi
摇滚侠43 分钟前
《SpringBoot 3:入门与应用实战》第 14 章 打包与部署 制作 Docker 镜像 阅读笔记 43
spring boot·笔记·docker
噜~噜~噜~1 小时前
操作系统笔记-2.4.1 死锁的概念
笔记·操作系统
血小板要健康1 小时前
队列 + 宽搜(BFS):二叉树层序遍历 算法总结
java·数据结构·笔记·算法·leetcode·宽度优先
醉舞经阁半卷书11 小时前
量化交易基础之python库学习
学习
youm20032 小时前
【学习笔记】认识NoSQL——非关系型数据库
笔记·学习·nosql