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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 440|回复: 8

[求助] 关于fork join内执行两个不同的线程,这两个线程是不同时钟域

[复制链接]
发表于 2024-7-26 15:59:46 | 显示全部楼层 |阅读模式
10资产
小弟在看完绿皮书后,写了个验证异步FIFO的SV环境。由于需要测试读写同时发起,driver要并行驱动wr_n和rd_n信号,所以用了fork join将读写两个线程并行执行。

但在调试过程中发现仿真有时候会卡死,$time一直hang住没有继续增加,测试代码如下:

                               
登录/注册后可看大图


想问下具体卡死的原因是什么,如何才能避免

最佳答案

查看完整内容

楼上指出来问题的核心点了,其实就是你的两个while(1)的线程写在了fork-join none里面,且你这个task最后也没有disable fork这样的语句来关闭fork-join none里面的线程,这两个线程是无法结束的。 ——注意你写的是driver,不是monitor。driver无法结束的话,你的仿真就会最终hang住,且hang住挂死的时间是会一直往后推进波形时间的,$time函数只是打印出来你调用这个函数的时间而已,事实上你的仿真会因为driver一直没结束发送激 ...
发表于 2024-7-26 15:59:47 | 显示全部楼层
楼上指出来问题的核心点了,其实就是你的两个while(1)的线程写在了fork-join none里面,且你这个task最后也没有disable fork这样的语句来关闭fork-join none里面的线程,这两个线程是无法结束的。

——注意你写的是driver,不是monitor。driver无法结束的话,你的仿真就会最终hang住,且hang住挂死的时间是会一直往后推进波形时间的,$time函数只是打印出来你调用这个函数的时间而已,事实上你的仿真会因为driver一直没结束发送激励而一直往前跑。

发表于 2024-7-26 18:56:56 | 显示全部楼层
你写的fork join_none
发表于 2024-7-29 13:35:32 | 显示全部楼层
while(1)里面给个延时就可以了
发表于 2024-7-29 13:36:33 | 显示全部楼层
3楼正解
发表于 2024-7-29 13:37:39 | 显示全部楼层


qsh123_123 发表于 2024-7-29 11:31
楼上指出来问题的核心点了,其实就是你的两个while(1)的线程写在了fork-join none里面,且你这个task最后也 ...


不影响driver get吧
发表于 2024-7-29 13:38:36 | 显示全部楼层


麻烦解释一下吧,不是很懂
发表于 2024-7-29 13:42:28 | 显示全部楼层


dreamer21 发表于 2024-7-29 13:38
麻烦解释一下吧,不是很懂


fork join_none语句只是跳出了当前的fork,但是里面的两个while并没有停止,类似于一个死循环,在fork join_none外面加上一个disable fork就能终止
 楼主| 发表于 2024-7-31 13:42:00 | 显示全部楼层
感谢大佬们的指点!!问题已解决
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

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

GMT+8, 2024-10-18 10:52 , Processed in 0.035459 second(s), 8 queries , Gzip On, Redis On.

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