底部检测的do…while循环

1、while循环可能从未执行
while循环有可能根本没有执行过。当执行流首次执行到循环的开头,控制值就为假的时候就会发生这种情况。
为了保证循环的每个输出都与循环的输入变量保持一致,使用这种在开头检测的while循环需要在循环之前增加代码。

always_comb
beginif(addr < 128 || addr >255)begindone = 0;outofBound = 1;out = mem[128];endelse while(addr >= 128 && addr <= 255)beginif(addr == 128)begindone = 1;outofBound=0;endelsebegindone = 0;outofBound =0;endout=mem[addr];addr -=1;end
end

2、do…while循环至少执行一次

do...while循环的基本语法如下:
do<语句或语句块>
while(<条件>);
always_comb
begin
do beigndone = 0;outofBound =0;out=mem[addr];if(addr < 128 || addr >255)beginoutofBound = 1;out = mem[128];endelse   if(addr == 128)begindone = 1;addr -=1;endwhile(addr >= 128 && addr <= 255);
end

3、foreach数组循环结构
SystemVerilog增加了foreach循环,它可用来对一维和多维数组的元素进行迭代,而不必指定数组每个维度的尺寸。
新的跳转语句–break、continue、return
4、disable语句即可用作继续执行也可用于使执行过程停止。

//在一定范围的位中找到第一个值为1的
always@*
beginbegin:loopinteger i;first_bit =0;for(i=0;i<=63;i=i+1)begin:passif(i < start_range)disable pass;//继续循环if(i>end_range)disable loop;//跳出循环if(data[i])beginfirst_bit = i;disable loop;//跳出循环endend//一次循环结束
end//整个循环结束
...//根据第一个1的位置左数据处理
end

disable语句还可以用作返回语句
disable语句还可以使任务的所有语句全部执行完之前提前从任务中返回。

task add_uo_to_max(input [5:0] max,output[63:0] result
);
integer i;
beginresult = 1;if(max ==0)disable add_up_to_max;//退出任务for(i=1;i<=63;i=i+1)beginresult =result + result;if(i == max)disable add_up_to_max;//退出任务end
end
endtask

另外,也可以使用disable语句来外部禁止一个并发进程或任务的执行,只是这种外部的disable语句是不可综合的。
5、continue语句
使用continue语句不需要在代码中增加begin…end命名块

logic [15:0] array[0:255];
always_comb
beginfor(int i=0;i<=255;i++)begin:loopif(array[i]==0)continue;//跳过空元素transform_function(array[i]);end//循环结束
end

6、break语句
break语句会立即中止循环的执行。除非过程块的执行流再一次到达这个循环语句的开头,否则循环不会再次执行。

//在一定范围的位中找到第一个值为1的位
always_comb
beginfirst_bit =0;for(int i=0;i<=63;i=i+1)beginif(i<start_range) continue;if(i>end_range) break;//跳出循环if(data[i])beginfirst_bit = i;break;//跳出循环endend//整个循环结束....//根据第一个1的位置情况做数据处理
end

不用break跳出case语句(相当于C语言的swict语句)。case语句在分支执行结束后就会自动退出,不需要执行break。
7、return语句
return语句,用来从非空函数返回或从空函数或任务中跳出。return语句可以在任务或函数执行流的任意时间执行,执行后立即从任务或函数中退出,无需到达任务或函数的结尾。

task add_up_to_max(input [5:0] max,output [63:0] result
);
result = 1;
if(max=0) return;//退出任务
for(int i=1;i<=63;i=i+1)
beginresult = result + result;if(i==max) result;//退出任务
end
endtask

return语句可以用来函数或任务中提前退出。
注意:在任务或空函数中,关键字return后面不能有表达式,而在非空函数中return后面一定要有表达式。

底部检测的do...while循环相关推荐

  1. 如何检测链表中的循环?

    假设您在Java中有一个链表结构. 它由节点组成: class Node {Node next;// some user data } 每个节点都指向下一个节点,但最后一个节点除外,后者的下一个为空. ...

  2. Java黑皮书课后题第5章:**5.36(商业应用:检测ISBN)使用循环简化编程练习题3.9

    **5.36(商业应用:检测ISBN)使用循环简化编程练习题3.9 题目 题目概述 编程练习题3.9 破题 代码 题目 题目概述 **5.36(商业应用:检测ISBN)使用循环简化编程练习题3.9 编 ...

  3. 深度学习自学(二十一):连续保存人脸检测、关键点检测后人脸状态-循环队列实现

    整理的人脸系列学习经验:包括人脸检测.人脸关键点检测.人脸优选.人脸对齐.人脸特征提取等过程总结,有需要的可以参考,仅供学习,请勿盗用.https://blog.csdn.net/TheDayIn_C ...

  4. 检测恒温恒湿试验箱制冷循环故障?

    当客户有恒温恒湿试验箱购买需求时,经过一定的市场分析,大部份客户都知道恒温恒湿试验箱的制冷循环系统是整台设备最为重要的组成之一,恒温恒湿试验箱的降温效果.运行速率主要靠它了,所以在这方面的材料制造来不 ...

  5. floyd算法 每一层循环_链接列表循环检测– Floyd的循环查找算法

    floyd算法 每一层循环 In this tutorial, we'll be discussing a very popular algorithm which is used to detect ...

  6. segMatch:基于3D点云分割的回环检测

    该论文的地址是:https://arxiv.org/pdf/1609.07720.pdf segmatch是一个提供车辆的回环检测的技术,使用提取和匹配分割的三维激光点云技术.分割的例子可以在下面的图 ...

  7. 深度学习目标检测指南:如何过滤不感兴趣的分类及添加新分类?

    编译 | 庞佳 责编 | Leo 出品 | AI 科技大本营(公众号ID:rgznai100) AI 科技大本营按:本文编译自 Adrian Rosebrock 发表在 PyImageSearch 上 ...

  8. 深度学习检测小目标常用方法

    作者丨船长@知乎 来源丨https://zhuanlan.zhihu.com/p/83220498 编辑丨极市平台 本文仅用于学术分享,如有侵权,请联系后台作删文处理. 引言 在深度学习目标检测中,特 ...

  9. 干货 | 深度学习检测小目标常用方法

    点击上方"视学算法",选择"星标"公众号 重磅干货,第一时间送达 github地址:https://github.com/Captain1986/Captain ...

最新文章

  1. linux查看服务器负载均衡,Linux服务器负载均衡LB
  2. 一个用Spring Boot做的垃圾分类小程序,你不拿来学习一下?
  3. adminLTE 教程 -4 轮播控件
  4. Android关掉多个activity,Android应用开发之Android Activity栈管理 制定关闭某一个Activity,关闭所有Activit...
  5. qt中实现息屏开平mousepress_QT信号槽分析
  6. yyblog2.0 数据库开发规范
  7. Storyboard使用心得
  8. VC绘制控件如何防止闪烁
  9. 进销存excel_EXCEL进销存系统升级版,自动库存更新,利润毛利分析一键操作
  10. 后台事务自动跳转工作流节点
  11. virtualxposed使用教程_VirtualXposed框架
  12. Linux网络问题排查
  13. 使用js的方式设置点击按钮发送短信倒计时并且防止刷新
  14. 《科研诚信与学术规范》
  15. 一起认识国产又好用的uni-app
  16. 桌面和文件管理器右键卡顿几秒的解决办法
  17. 装饰模式之半透明装饰模式
  18. html 设置卯位置,周易基础知识:十二地支之卯木
  19. 【并行计算】OpenMP编程和MPI编程简单教程
  20. 哈工大数据库系统概论(1)——什么是数据库管理系统(DBMS)

热门文章

  1. 什么是VB.NET的结构化异常处理
  2. xml-rpc 以及 xml-rpc 在asp.net中的实现
  3. python 爬取企业注册信息_python爬取企业名录
  4. java 链表 实现
  5. golang 怎么把指针内容也打印出来_FDM工艺3D打印出来的模型表面粗糙怎么解决?...
  6. marquee文字起始位置_PS修图改字无痕扫描件复印件截图文字英文日期修改:制作漂亮红色丝绸文字图片的PS教程...
  7. mysql的等号是什么意思_整理思维——等于等于等于?{MySQL条件等号的异常}
  8. HFSS怎样在波导中显示多个模式
  9. android 调出键盘表情_Android 软键盘和emoji表情切换方案,和微信几乎一样的体验...
  10. 如何在shell单元建立washer_如何成为一个优秀的工程师