在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2241|回复: 6

[求助] 关于automatic类型有疑问

[复制链接]
发表于 2017-6-20 14:23:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x




  1. program test;

  2.   initial begin
  3.       for(int i =0;i<16;i++)
  4.         fork
  5.           automatic  int j=i;
  6.           display(j);
  7.         join_none#0;
  8.   end

  9. endprogram


复制代码


这个用vivado自带的仿真器仿真,结果是正常的15到0





  1. program test;

  2. initial begin
  3. for(int i =0;i<16;i++)begin
  4. automatic int j =i;
  5. fork
  6. display(j);
  7. join_none
  8. end#0;
  9. end
  10. endprogram


复制代码



这个用vivado自带的仿真器仿真,结果全是15,为什么呢?
发表于 2017-6-21 09:51:23 | 显示全部楼层
你都已经仿真出来不同了,主要是fork...join_none和变量作用域造成的。
 楼主| 发表于 2017-6-21 16:55:08 | 显示全部楼层
回复 2# qyxu1979


    你好,是不是这样理解:第二个例子里虽然j定义成了automatic类型,但是它没放到fork里面去,本质就和i没什么不同,都只有1份拷贝,所以都是15?
    然后我有这个问题主要是因为最近在学SV,看SystemVerilog for Verification一书,无论第二版还是第3版,它在线程一章都有有写类似于我举例的两个例子,但它说两者是等效的,是不是书写错了,还是仿真工具的问题?
原书中的例子1:




  1. initial begin
  2.   for(int j=0;j<3;j++)
  3.     fork
  4.       automatic int k=j;
  5.       $write(k);
  6.     join_none
  7.   #0$display;
  8. end


复制代码

原书中的例子2,它说这是例1的另一种写法:




  1. program automatic bug_free
  2.   initial begin
  3.     for(int j=0;j<3;j++)begin
  4.       int k=j;
  5.       fork
  6.         $write(k);
  7.       join_none
  8.     end
  9.     #0$display;
  10.   end
  11. endprogram


复制代码
发表于 2017-6-22 08:32:57 | 显示全部楼层
书中的例子应该不会错的,经过了多版反复校验了的吧。
你没有仔细看你写的与书中的不同是在program定义是否为automatic。
 楼主| 发表于 2017-6-22 10:26:09 | 显示全部楼层
回复 4# qyxu1979


    问题是就算我在program一级,就声明automatic,结果还是16个15(用vivado仿真器).而且我前面的例子虽然在program声明中没加automatic,但是声明j时加了,我的理解是program一级加automatic作用就是相当于整个program块内部变量默认类型为automatic,所以这样写了,有什么不对的地方吗?
发表于 2017-6-22 10:48:47 | 显示全部楼层
呵呵,也许吧,仿真器对语法解释是有不同,所以尽量用通用大众化的写法。
我一般采用你的第一种写法。
 楼主| 发表于 2017-6-22 10:53:53 | 显示全部楼层
回复 6# qyxu1979


    刚刚用modelsim试了下,是仿真器的问题。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-9-22 03:45 , Processed in 0.020482 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表