tangchongyue的个人空间 https://blog.eetop.cn/?1750576 [收藏] [复制] [分享] [RSS]

日志

Verilog case中default和if中else不加的情况

已有 8508 次阅读| 2019-12-12 16:18 |个人分类:前端设计|系统分类:芯片设计

先给总结:
       1.在组合电路中,if条件不齐全并且没有else情况下,会出现锁存器。
       2.在组合电路中,case 中条件不齐全并且不加default情况下,会出现锁存器。
       在时序电路中,条件不齐全情况下会保持之前条件的值。
注意灭锁要领:全条件全输出。

在数字电路中,产生意外的锁存器的情况一般有以下两种:

1.if……else……结构中缺少else

先看一个实际的例子:
左边的电路:

右边的电路:
由RTL视图可以直观的看出,左边的电路没有生成锁存器,而右边的电路生成了一个我们不想要的锁存器(q1$latch)。左边的电路是时序逻辑,生成触发器,而触发器是有使能端(en)的,使能端无效时就可以保存数据,无需锁存器。右边的电路是组合逻辑,在en为低电平时,输出q1要保持不变,而组合逻辑没有存储元件,只能生成锁存器来保持数据。所以在时序逻辑中,不完整的 if…else… 结构并不会生成锁存器,而组合逻辑中不完整的 if…else… 结构就会生成锁存器。为了避免我们设计的组合逻辑中出现不想要的锁存器,在使用 if…else… 结构时一定要写完整。把刚才例子中右边的电路写完整,并查看其RTL视图如下:
在这里插入图片描述
写完整后,就没有生成锁存器,而是生成了一个二选一的选择器,这正是我们想要设计的。
2. case结构中的分支没有包含所有情况且没有default语句
case结构中一般要加上default语句,以保证出现意外情况也可以作出相应的反应。如果没有加default并且case分支不完整,当出现case分支中没有列出的情况时,电路状态保持原来的状态不变,于是就会生成锁存器来保存状态,如下图的电路所示
图中case分支中只写了(se=0)的情况,而(se=1)的情况未给出,且没有写default,于是当(se=1)时,q1保持原来的值不变,这样就产生了锁存器(q1$latch)。 如果将case分支补全,或者加上default语句,则如下图所示:
补全case分支后,就不会生成锁存器了。 同样,只有在组合逻辑中的case结构才有可能产生锁存器,而在时序逻辑电路中,即使case结构中的分支不完整,也不会产生锁存器,如下图所示
因此,在设计组合逻辑电路时,要注意将 if…else… 结构中的else写完整,case结构中一定要加上default语句,这样可以减少综合出锁存器的可能性。













点赞

全部作者的其他最新日志

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 1

    粉丝
  • 6

    好友
  • 0

    获赞
  • 0

    评论
  • 1871

    访问数
关闭

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


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

GMT+8, 2025-8-11 14:17 , Processed in 0.031429 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部