IC测试啊? 2024-07-27 14:22 采纳率: 100%
浏览 13
已结题

verilog语言串行与并行

" fork join " 和 “ begin end ”的区别?

fork
  regb = rega;
  regc = regb;
join
begin
  regb <= rega;
  regc <= regb;
end
  • 写回答

2条回答 默认 最新

  • 日晨难再 数字IC领域优质创作者 2024-07-27 15:44
    关注

    fork块语句和begin块语句,都是将多个语句组织起来。它们的不同在于,对于fork块,仿真器可以使用任何顺序调度其中的语句,因此执行顺序是不确定的。而对于begin块,仿真器保证了语句是从上到下一条一条执行的。
    用你的例1来说

    fork
      regb = rega;
      regc = regb;
    join
    

    其中哪条语句先执行是不确定的,因此如果regb = rega;先执行,regc = regb;后执行,则regc和regb得到的都是rega;如果regc = regb;先执行,regb = rega;后执行,则regc首先得到regb的值,随后regb得到rega的值。

    对于例2

    begin
      regb <= rega;
      regc <= regb;
    end
    

    首先要知道,非阻塞赋值分为两步,首先是<=右表达式的求值,当这一步完成后(当作已执行),继续执行下一条语句(在你的例2中,begin块的下一条语句就是下一行的语句),等到当前仿真时间的所有语句都执行了,再按照顺序,执行<=的赋值。所以,执行顺序为,rega求值,regb求值,regb赋值,regc赋值。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 8月4日
  • 已采纳回答 7月27日
  • 创建了问题 7月27日

悬赏问题

  • ¥15 本地测试网站127.0.0.1 已拒绝连接,如何解决?(标签-ubuntu)
  • ¥50 Qt在release捕获异常并跟踪堆栈(有Demo,跑一下环境再回答)
  • ¥30 python,LLM 文本提炼
  • ¥15 关于将inet引入的相关问题
  • ¥15 关于一个倒计时的操作和显示设计
  • ¥15 提问STK的问题,哪位航天领域的同学会啊
  • ¥15 苹果系统的mac m1芯片的笔记本使用ce修改器使用不了
  • ¥15 单相逆变的电压电流双闭环中进行低通滤波PID算法改进
  • ¥15 关于#java#的问题,请各位专家解答!
  • ¥15 如何卸载arcgis 10.1 data reviewer for desktop