关于combinational loop(组合逻辑环)的一点探究

标题:关于combinational loop(组合逻辑环)的一点探究

最近在写中断轮询round_robin的过程中出现过这个combinational loop的警告信息,当时由于任务要求急,时间紧,就没有仔细研究这块,当时只是简单看了下警告信息,把其中一段组合逻辑改成时序逻辑就解决了问题,现在补一下吧。

废话不多说,先看下警告信息出现的场景吧
loop顾名思义就是说由于设计的需要,designer会把output接回与input一起控制自己的out,其实就是反馈,逻辑上来说这样并没有什么问题,但我们是硬件描述语言,时刻谨记代码是要转换为硬件电路的。在反馈的过程中如果output不经过中间的寄存器直接接回与input进行逻辑控制,那么就会出现comb loop的错误报警,可以看看下面的图示体会一下
在这里插入图片描述
上图中左边是有loop报警的,右边在加入了触发器之后就没有了组合逻辑环。
下面的部分是我用代码实现简单印证了一下,觉得没用的话可以忽略哈….
首先看下出现loop报警的代码以及对应的原理图吧
在这里插入图片描述
在这里插入图片描述
下面是中间使用触发器打断没有comb loop报警的代码及对应的原理图
在这里插入图片描述
在这里插入图片描述
可以看到,添加了触发器的其实仍然是存在反馈的,即也是有loop的,但为什么这次没出现报警呢???
问题出在综合上,上述的组合逻辑综合时被综合成了一个与非门,这就导致当输入端是逻辑1时,输出端是会进入不断振荡的状态,随着器件延迟不断在0和1之间跳变。这并不是代码的本意,这段代码想描述的是输入变化检测,即out只有在输入a变化时才会置高。因此仿真和综合的结果是有出入的。
写完才发现上述的分析是有问题的,即我处理loop的方法(直接加触发器)是有问题的,loop还是loop没变,仿真试一下吧
在这里插入图片描述
在这里插入图片描述
可以看出组合逻辑的代码输出是无法预知的
至于我之前写round_robin模块中解决comb loop的方法正确是正确,结果是好的,但是我过程有点冗余,多写了一个触发器,理解有一定的偏差,在本篇博客的撰写过程中也及时纠正过来,理解的跟能写下来果然还是挺有差距的,慢慢进步吧!!!

  • 5
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值