fork语句遇见for循环语句
一、没有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循环语句的更多相关文章
- java基础3 循环语句:While 循环语句、do while 循环语句、 for 循环语句 和 break、continue关键字
一.While循环语句 1.格式 while(条件表达式){ 执行语句: } 2.要点 1,先判断后执行 2,循环次数不定 3,避免死循环 3.举例 题目1:输出0-100之间的所有数 class D ...
- 【2017-2-23】C#switch case分支语句,for循环语句
switch case分支语句 switch(一个变量值) { case 值:要执行的代码段;break; case 值:要执行的代码段;break; … default:代码段;break;(def ...
- Python初体验(一)—【配置环境变量】【变量】【input】【条件语句】【循环语句】
写在前面的: 作为一个控制专业的女研究生,不知道每天在研究什么,但总归逃脱不了码代码的命运.之前也学习过一些C语言.C++,基础嘛,稍稍微有一些.本不想走上码农的道路,天真烂漫的过此生(白日梦过程中. ...
- Python基础 之 变量、用户交互、if条件语句、while循环语句、编码、逻辑运算
一.Python介绍 Python 崇尚优美.清晰.简单 Python是一门动态解释型的强制性定义的语言. 二.编译型和解释型的区别 编译型:一次性将所有与程序编译成二进制文件. 缺点:开发效率低,不 ...
- shell脚本、if语句、for循环语句
shell在shell脚本中,如果用户不输入东西,系统不自动退出,this is a bug!文件测试语句:-d -f -r -w -x -e逻辑测试语句:“&&”与(同时满足) “| ...
- Oracle:控制语句 IF..ELSIF语句、CASE语句、FOR循环语句
--多重if语句(注意点:BEGIN END ,IF 条件 THEN,ELSIF 条件 THEN,ELSE... END IF)BEGIN IF FALSE THEN DBMS_OUTPUT.put_ ...
- Bash语句中的循环语句注意事项
case #!/bin/bash case $1 in 9) echo "nine" ;; 8) echo "eight" ;; 7) echo "s ...
- 条件语句,while循环语句:完整的温度转换程序
while True: a = int(input('摄氏温度换为华氏温度请按 1\n华氏温度转为摄氏温度请按 2\n退出请按 3\n')) if a==1: c = float(input('请输入 ...
- 【java开发】分支语句、循环语句学习
一.Java分支语句类型 if-else 语句 switch 关于if-esle语句可以拆分为三种 if语句 if(条件){语句块;} if-else语句if(条件语句){语句块;} if-else ...
- Python学习(6)循环语句
目录 Python循环语句 - while循环语句 -- 无线循环 -- 循环使用else语句 -- 简单语句组 - for循环语句 -- 通过序列索引迭代 -- 循环使用else语句 - 循环嵌套 ...
随机推荐
- 25 bootstrap--v3--datetimepicker时间选择器--应用
在模板中引用响应的文件 比如: layout.html <link rel="stylesheet" href="{% static 'stark/plugins/ ...
- DCS-WORLD 数据获取
任务: 获取DCS-World的姿态数据,发送到6自由度平台. 过程: 1.获取dcs-bios https://github.com/DCSFlightpanels/dcs-bios 2.复制DCS ...
- openEuler22.09初始化脚本
#!/bin/bash s=`nmcli d | grep "已断开" | awk '{print $1}'` echo /etc/sysconfig/network-script ...
- SpringBoot(概述、起步依赖原理分析、SpringBoot配置(配置文件分类、YAML))
SpringBoot概述 Spring Boot 是由 Pivotal 团队提供用来简化 Spring 的搭建和开发过程的全新框架.随着近些年来微服务技术的流行,Spring Boot 也成了时下炙手 ...
- link和@import的对比
概念的区别 @import 是css的语法规则: link 是HTML标签 用途的区别 @import 是css语法,只能用来导入样式文件: link 除了引入样式,还可引入其他资源文件 加载顺序 ...
- .net 反射简单介绍
1.什么是反射 反射是.NET中的重要机制,通过反射,可以在运行时获得程序或程序集中每一个类型(包括类.结构.委托.接口和枚举等)的成员和成员的信息.有了反射,即可对每一个类型了如指掌.另外我还可以直 ...
- 【搭建】【转】搭建 yum仓库
https://blog.csdn.net/wuxingge/article/details/100761637 3.2 服务端部署 1)安装软件程序(createrepo) yum install ...
- Blog作业01
目录 前言 设计与分析 踩坑心得 改进建议 总结 前言 这三次作业的知识点覆盖的很全面,从最开始的int赋值变量,循环,到Boolean值,sort等一些函数,到后来的对象,类的创建和声明,gette ...
- 如何像Facebook一样构建数据中心 – BGP在大规模数据中心中的应用(3)
如何像Facebook一样构建数据中心 – BGP在大规模数据中心中的应用(3) superrace• 18-06-12 作者简介:史梦晨,曾就职于国内金牌集成商, 现就职于EANTC( 欧洲高级网络 ...
- 嵌入式linux系统新人学习回顾
(1).开发环境搭建 1.虚拟机ubuntu 2.远程登录/远程传输/串口三合一软件MobaXterm 3.FTP传输工具FileZilla 4.TFTP服务器软件tftpd.exe (2)开发板硬件 ...