首页 > 其他分享 >fork语句遇见for循环语句

fork语句遇见for循环语句

时间:2023-03-26 18:34:04浏览次数:31  
标签:语句 fork join 0d 打印 遇见 automatic

一、没有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,join,0d,打印,遇见,automatic
From: https://www.cnblogs.com/ChengMobai/p/fork_and_foreach.html

相关文章

  • mybatis批量更新不同参数多条语句带分号update报错的解决方案
    问题在走接口的时候,需要使用mybtatis的批量更新,偷了个懒使用Foreach的形式拼接多个sql语句进行更新。结果在执行到这个sql的时候update一直报错###Errorupdatingdata......
  • linux中条件判断语句 -n、-z的作用
    原文地址:https://www.cnblogs.com/liujiaxin2018/p/16229355.html-n:当字符串不为0是为真;字符串为0是为假。n表示non-zero示例:root@liujiaxinpc1:/home/test#a=100......
  • python中的is语句
    前置知识:python中,boolean,string,tuple,int,float属于不可变类型,set,dictiry,list属于可变类型is()方法用于判定两个数据的值是否相同。对于不可变类型,值相同,说明数据相同......
  • 语句
    1、空语句   ;(仅此一个分号)2、分支语句   if语句     第一种使用:if()     第二种使用:if(){}else{}     第三种使用:if(){}elseif......
  • asp.net core3.1使用EF Core出现:'OFFSET' 附近有语法错误。 在 FETCH 语句中选项 NEXT
    asp.netcore3.1使用EFCore3.1有毒efcore3.1遇到sqlserver2008'OFFSET'附近有语法错误。\r\n在FETCH语句中选项NEXT的用法无效。这就很烦,想加个EntityFrame......
  • Python爬虫基础——04-流程控制语句
    2.8,输出-输入2.8.1输出:#普通输出print('江户川柯南')#格式化输出#爬虫用法---在scrapy框架的时候输出到excel文件mysqlredisage=18name='工藤新......
  • mysql语句
    数据库拼接字符串updatefriendscirclesetreply=CONCAT(reply,"3333")wherename="22";//求和如果为空,默认给0selectIFNULL(sum(amount_incurred),0)from......
  • 流程控制语句
    目录第一章流程控制语句1.1流程控制语句分类1.2顺序结构第二章判断语句:if语句2.1if语句格式1练习1:老丈人选女婿练习2:考试奖励第一种格式的细节:2.2if语句格式2练习1:吃......
  • 什么是Mysql和Mysql原理、Mysql主从复制、SQL语句
    ✍什么是MysqlMysql是关系数据库管理系统,一般中小型网站的开发都选择MySQL作为网站数据库搭配PHP和Apache可组成良好的开发环境.✍关系型数据库和非关系数据库1、关系数......
  • IDEA中sql语句的模糊查询查不到数据库中的信息
    IDEA中使用sql的模糊查询查找数据库中的用户姓名,查找不到相关信息。1、排查sql语句没有问题2、确认数据库的编码使用了gbk 最后去查了jdbc驱动,发现驱动信息中没有配......