跳转语句允许程序代码跳过一个或多个编程语句,systemverilog的jump语句是continue、break和disable。
continue 和 break跳转语句
continue和break-跳转语句在循环中用于控制循环中语句的执行。这些跳转语句只能用于for循环、while循环和foreach循环。它们不能在循环之外使用。
continue语句跳转到循环的结尾,并计算循环的结束表达式(end expression),以确定循环是否应继续进行另一次迭代。
下面的代码段使用for循环遍历一个小查找表的地址,该表被建模为16-bit的一维数组。使用continue语句跳过表中值为0的位置。对于非零位置,调用函数对该值进行某种操作(函数未显示)。
break语句立即终止循环的执行。循环退出,任何循环控制语句(如for循环步骤分配)都不会执行。
示例6-10说明了如何使用continue和break来查找在一个位范围内设置为1的第一位。图6-10显示了该示例的综合结果。
示例6-10:使用continue和break控制循环执行
//`begin_keywords 1800-2012 // use systemverilog-2012 keywordsmodule find_bit_in_range#(parameter n = 4) // bus size(input logic [n-1:0] data,input logic [$clog2(n)-1:0] start_range, end_range,output logic [$clog2(n)-1:0] low_bit); timeunit 1ns; timeprecision 1ns; always_comb begin low_bit = '0; for (int i=0; i
disable跳转语句
systemverilog 的disable语句类似于其他编程语言中的go-to语句。disable跳转到一组命名语句的末尾或任务的末尾。disable跳转语句的一般用法是:
在这个代码片段中,begin-end语句组被命名为search_loop。disable语句指示仿真立即跳到名为begin-end 语句组的末尾。
最初的verilog语言没有continue和break-跳转语句。相反,disable语句与通用go-to行为一样用于跳转到循环的末尾,但会继续执行循环的下一个过程。
disable语句通过跳过循环的末端,过早地跳出循环。要跳过循环中的语句,继续执行循环时,命名的begin-end语句组必须包含在循环中。要跳出循环,命名的begin-end语句组必须包含整个循环。
下面的示例显示了与示例6-10相同的功能,除了使用disable 跳转语句而不是continue和break语句,
最佳实践指南6-6
使用continue和break-跳转语句控制循环迭代。不要使用disable跳转语句.
disable 跳转语句提供与break和continue 跳转语句相同的功能,如上所示。然而,disable 跳转语句使代码更难读懂和维护,使用continue和break是一种更简单、更直观的编码方式。
disable跳转语句是一个通用的go-to语句,可以在验证中使用。综合编译器通常不支持使用disable的其他方法。
no-op声明
systemverilog编程语句以分号;(分号本身被视为完整的编程语句)表示没有要执行的功能。单独的分号执行空操作,通常被称为无操作语句(no-op语句)。
下面的代码片段表示存储数据变量的寄存器(使用触发器)。由case语句表示的多路输入确定要存储在数据寄存器中的值。
此代码段中的case语句不会对mode的2’b11值进行解码。虽然在本例中功能上是正确的,但不完整的case语句不是完美的,并且可能会在代码验证期间引发问题,或者其他工程师在维护或重用代码时引入歧义(解码模式值2’b11是不是故意的?还是模型中的疏忽(错误))。
在这个例子中,没有任何东西可以说明这种或那种方式。添加关于未使用的2’b11值的注释可能会很有帮助,但不是所有人都会用心的注释代码。
使用无操作语句有助于使rtl模型更加自我记录和可读。下面的代码片段在功能上与前面的示例相同,但是,即使没有注释,很明显,也很方便人们理解代码。
时序逻辑中的无操作语句将被综合编译器忽略。没有要实现的功能,因此寄存器将保留其初始值。然而,综合编译器不能忽略组合逻辑中的no-op语句。
当没有为变量赋值时,它将保留以前的值。综合时可能会添加一个锁存器,以便逻辑可以保存以前的值。
最佳实践指南6-7
不要将no-op语句用于rtl建模,
尽管综合编译器支持no-op,但它在rtl功能中没有任何用途,并且可能导致组合逻辑中出现意外的锁存器。为了完整性,我们讨论了no-op语句,但不建议在rtl代码中使用。
场效应晶体管栅极电流是多大
Microchip基于ATTINY1616的触摸感应设计方案
开关背面L、L1、L2各代表什么意思
深圳市荣盛源参展2023年深圳国际薄膜与胶带展
罗姆旗下LAPIS开发出符合Wireless M-bus标准无线通信LSI
continue和break跳转语句介绍
工业防腐:解决储罐腐蚀渗漏问题,选择更好的修复方法至关重要
赛微电子获调研:北京FAB3产线工艺能力、瑞典产线情况、营收等关键问题!
三款空心轴减速电机,哪款性价比最高?
开发移动app有什么好处
关于FPGA芯片结构,工作原理以及开发流程知识详解
国内手机市场竞争异常惨烈 联想Z5之后再无爆款
海康小间距LED冷屏系列带来更舒适的观看体验
超声波焊接机常见问题及解决方法
PIC单片机程序设计基础格式
DC电源模块的优秀品质体现在哪些重要的关键参数
存储芯片价格触底?明年有望全面复苏
蛋鸡养殖智能环控系统方案
为什么工业互联网更需要更资深的技术工程师?
开关电源EMC设计中电容特性