一、没有automatic的fork-join_none

通常小白会这么写:

代码如下:

 foreach(a[i]) begin
fork
repeat(a[i]) #1ns;
$display("a[%0d] = %0d, @%0t",i,a[i],$time);
join_none
end

结果如图:

由图可知,有两个问题:

  • 打印时间全部为0时刻:因为使用的fork-join_none语句,所以延迟语句不会阻塞$display语句的进行,因此在0时刻foreach遍历后直接进行了打印,时间显示为0时刻。
  • 打印结果全部为a[5] = 0:因为在0时刻通过foreach的遍历,同时开辟了五个延迟线程和五个/$display线程,接下来需要确定i的值进行打印;而此时i在在最后一次遍历(i =4 )后由于加1变成了i = 5;因此五个打印线程“寻找”到的i为5,但a[5]并没有赋值,因此默认为0,进行了打印。

二、 有automatic的fork-join_none

先解决打印结果的问题,通过使用automatic语句:

代码如下:

foreach(a[i]) begin
automatic int j=i;
fork
repeat(a[j]) #1ns;
$display("a[%0d] = %0d, @%0t",j,a[j],$time);
join_none
end

结果如图:

由图可知:

  • 打印时间全部为0时刻:原因与1一致,不再赘述
  • 打印结果为正常遍历输出:通过automatic语句,将每次的i赋值为j,这样相当于把i“暂存”起来,因此可以正确的输出。

三、加上begin-end

再来解决打印时间的问题,通过使用begin-end语句:

代码如下:

 foreach(a[i]) begin
automatic int j=i;
fork
begin
repeat(a[j]) #1ns;
$display("a[%0d] = %0d, @%0t",j,a[j],$time);
end
join_none
end

结果如图:

由图可知,打印结果和打印时间全部正常,这是因为用begin-end语句将延时语句和打印语句从并行执行改成串行执行,因此将会在等待延时后再打印。

四、没有automatic的fork-join

代码如下:

 foreach(a[i]) begin
fork
repeat(a[i]) #1ns;
$display("a[%0d] = %0d, @%0t",i,a[i],$time);
join
end

结果如下:

由图可知,虽然没有automatic语句但是打印结果和打印时间全部正常,这是因为fork-join会一直阻塞直到延时语句和打印全部执行。

fork语句遇见for循环语句的更多相关文章

  1. java基础3 循环语句:While 循环语句、do while 循环语句、 for 循环语句 和 break、continue关键字

    一.While循环语句 1.格式 while(条件表达式){ 执行语句: } 2.要点 1,先判断后执行 2,循环次数不定 3,避免死循环 3.举例 题目1:输出0-100之间的所有数 class D ...

  2. 【2017-2-23】C#switch case分支语句,for循环语句

    switch case分支语句 switch(一个变量值) { case 值:要执行的代码段;break; case 值:要执行的代码段;break; … default:代码段;break;(def ...

  3. Python初体验(一)—【配置环境变量】【变量】【input】【条件语句】【循环语句】

    写在前面的: 作为一个控制专业的女研究生,不知道每天在研究什么,但总归逃脱不了码代码的命运.之前也学习过一些C语言.C++,基础嘛,稍稍微有一些.本不想走上码农的道路,天真烂漫的过此生(白日梦过程中. ...

  4. Python基础 之 变量、用户交互、if条件语句、while循环语句、编码、逻辑运算

    一.Python介绍 Python 崇尚优美.清晰.简单 Python是一门动态解释型的强制性定义的语言. 二.编译型和解释型的区别 编译型:一次性将所有与程序编译成二进制文件. 缺点:开发效率低,不 ...

  5. shell脚本、if语句、for循环语句

    shell在shell脚本中,如果用户不输入东西,系统不自动退出,this is a bug!文件测试语句:-d -f -r -w -x -e逻辑测试语句:“&&”与(同时满足) “| ...

  6. Oracle:控制语句 IF..ELSIF语句、CASE语句、FOR循环语句

    --多重if语句(注意点:BEGIN END ,IF 条件 THEN,ELSIF 条件 THEN,ELSE... END IF)BEGIN IF FALSE THEN DBMS_OUTPUT.put_ ...

  7. Bash语句中的循环语句注意事项

    case #!/bin/bash case $1 in 9) echo "nine" ;; 8) echo "eight" ;; 7) echo "s ...

  8. 条件语句,while循环语句:完整的温度转换程序

    while True: a = int(input('摄氏温度换为华氏温度请按 1\n华氏温度转为摄氏温度请按 2\n退出请按 3\n')) if a==1: c = float(input('请输入 ...

  9. 【java开发】分支语句、循环语句学习

    一.Java分支语句类型 if-else 语句 switch 关于if-esle语句可以拆分为三种 if语句 if(条件){语句块;} if-else语句if(条件语句){语句块;} if-else ...

  10. Python学习(6)循环语句

    目录 Python循环语句 - while循环语句 -- 无线循环 -- 循环使用else语句 -- 简单语句组 - for循环语句 -- 通过序列索引迭代 -- 循环使用else语句 - 循环嵌套 ...

随机推荐

  1. Vue.js + TypeScript 项目构建

    一:全局安装vue/cli  npm install -g @vue/cli安装完成后检查版本vue --version 二:构建项目创建文件 vue create projectName 有的刚开始 ...

  2. window.location.href 下载文件页面出现跳转 (重定向失效的问题)

    页面出现跳转的话,要去检查请求的接口是不是出现了问题. 解决方法:URL前面加 "/" ${process.env.VUE_APP_BASE_API}   /   ${url}

  3. pdfjs-dist 后端返回文件前端实现预览pdf

    pdfjs-dist锁定版本号2.2.228,别的都不太好使,各种各样的报错 不锁定的时候升高版本出现pdf预览不了 引用的时候 import pdfjsLib from 'pdfjs-dist/bu ...

  4. 4组-Alpha冲刺-4/6

    一.基本情况 队名:摸鲨鱼小队 组长博客:https://www.cnblogs.com/smallgrape/p/15553653.html 小组人数:8人 二.冲刺概况汇报 组长:许雅萍 过去两天 ...

  5. matlab函数学习笔记

    数值精度 显示精度由format函数控制,不影响原始数据,只控制显示精度 命令 说明 long   short   rat 分数 digits   vpa   pi的输出 命令 显示结果结果 form ...

  6. Day02 差点水掉 欸呀呀

    Java狂神6.17星期四 知识行 冯诺依曼+图灵 软件+硬件 .......... 快捷键 ctrl+a 全选 ctrl+x 剪切 alt+F4 关闭窗口 win+r 运行 +cmd命令行 win+ ...

  7. Linux系列---【内存占用过高问题排查思路】

    内存占用过高问题排查思路 1.使用top命令查看后台任务 按shift+M使应用按内存使用率排序,定位到第一个使用内存最高的应用,并找到对应的PID. 2.使用ps命令查看对应的pid对应哪个应用 p ...

  8. Unity学习笔记——坐标转换(3)

    通过Transform.Translate移动物体         6个重载:         public void Translate(float x, float y, float z, [De ...

  9. 在gibhub上传本地项目代码(新手入门)

    一.首先注册github账号 地址:https://github.com/ 二.其次下载安装git工具 地址:https://gitforwindows.org/ 直接进入安装,这里就不多做介绍 三. ...

  10. JUC学习!

    JUC 1.what? JUC就是java.util.concurrent下面的类包,专门用于多线程的开发. 2.why? 解决多线程.高并发 3.how?  ||  || ﹀ point1:vola ...