CFC中ADD累加如果In2和Out直接连接会得不到正确结果? 点击:428 | 回复:4



xiatianyun101

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:6帖 | 25回
  • 年度积分:0
  • 历史总积分:0
  • 注册:1900年1月01日
发表于:2020-03-08 00:20:15
楼主

刚学习CFC,CFC中可以把相关量用连线连接起来,这样减少中间变量,我无意中使用加法器ADD来做累加计数,Out = in1 + in2,其中in2和out是同一个变量,也即:iTemp := 1 + iTemp;
如果左右两边不是用连线直接连接而是分别用iTemp来做则正常,但是如果直接连接,如图所示,则得不到正确结果。
当EN为1时(一个周期),ADD会累加很多个1,不是只加一次。仿佛执行了很多次ADD一样。
请问这是什么原因?

image.png

1分不嫌少!


楼主最近还看过



xiatianyun101

  • 精华:0帖
  • 求助:0帖
  • 帖子:6帖 | 25回
  • 年度积分:0
  • 历史总积分:0
  • 注册:1900年1月01日
发表于:2020-03-08 15:08:25
1楼

单独又调试了下,机然正常了。

???

xiatianyun101

  • 精华:0帖
  • 求助:0帖
  • 帖子:6帖 | 25回
  • 年度积分:0
  • 历史总积分:0
  • 注册:1900年1月01日
发表于:2020-03-10 14:05:32
2楼

我已经知道怎么回事了。

GKstudying

  • [管理员]
  • 精华:4帖
  • 求助:4帖
  • 帖子:1023帖 | 7244回
  • 年度积分:1284
  • 历史总积分:18892
  • 注册:2008年11月11日
发表于:2020-03-12 11:10:45
3楼

具体是什么原因呢,能分享下吗

xiatianyun101

  • 精华:0帖
  • 求助:0帖
  • 帖子:6帖 | 25回
  • 年度积分:0
  • 历史总积分:0
  • 注册:1900年1月01日
发表于:2020-03-12 15:41:38
4楼

我的个人认识。

ADD执行需要知道In2,In2来源于Out,Out输出给iACC,但In2并非来源于iACC,这就是问题所在。

ADD是个函数,并非功能块,执行完毕就释放了,按理说Out下次的值在没有输出之前是未知的,但ADD执行前并不对Out做初始化,所以如果刚好分配到同一块内存,则Out值就是上次执行完毕的Out值。

其实我的截图不完整,还有之后对iACC做修改的部分,我的本意是执行ADD时使用已经修改过的iACC作为In2,但却是使用了上次ADD的Out。这就导致了我的困惑。

解决当然是不要从Out直接来了,使用iACC做输入。


热门招聘
相关主题

官方公众号

智造工程师