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语句 - 循环嵌套 ...
随机推荐
- WEB攻击与防御技术 pikachu——sql注入
如图所示,sql注入 一.数字型注入 既然是post那我们拿burp抓一下包 id=2,我们改一下sql最常用的语句2 or 1=1发现注入成功 二.字符型注入 直接上语句1' or 1=1 # 出来 ...
- oracle相关知识
1. 给表字段添加注释的语法 comment on column 表名.字段名 is '注释信息'; 2. 数据库字段重命名 alter table ORGAN_PARTER_EXT_TWO rena ...
- ubuntu | virtualbox报错:不能为虚拟电脑打开一个新任务
百度了几个办法 都不行. 还得是gxd,说在vmware虚拟机设置勾上这个就行了
- sqlite3 replace函数服务器端替换一个字段中数据的例子 ;拼接字段字符串
1.把字段filePath中所有类似 '/usr/local/Trolltech/%'的字符串都替换成 '/zzzzz/' update EstDlpFileAttribute set ...
- 复习笔记,javadoc生成文档总结
1.处理数字时候的内存溢出问题 //在处理大数字时候注意内存溢出问题 int i=10_0000_0000; //jdk7 中数字之间可以加入下划线不影响输出 ...
- CSS 常用样式-文本属性
文本类样式我们已经学习过颜色 color 属性,严格来说行高 line-height 也是文本类属性,由于其可以合写在 font 属性中个,暂时先归类到字体中学习,接下来还有几个常用的文本属性. 水平 ...
- Spring Boot 中的异步调用
通常我们开发的程序都是同步调用的,即程序按照代码的顺序一行一行的逐步往下执行,每一行代码都必须等待上一行代码执行完毕才能开始执行.而异步编程则没有这个限制,代码的调用不再是阻塞的.所以在一些情景下,通 ...
- Charles4.5.1抓取HTTPS请求
Charles下载以后发现 抓取http请求是成功的: 抓取https请求是失败的: 按照失败提示设置即可: 1.点击 Help -> SSL Proxying -> install ch ...
- MacOS 使用UnblockNeteaseMusic解锁网易云灰色歌曲(主要是想听杰伦)
最近想听杰伦的音乐 但是网易云木有版权 于是在github上找到了UnblockNeteaseMusic这个项目 不多废话 直接上教程! 第一步 找到该项目的地址 并使用git克隆到本地: https ...
- windows-git-tagslist
windows平台使用 Git-bash + vim + Taglist + ctags + cscope 安装Git for win版 安装ctags for win版,目录添加到环境变量 下载 T ...