zoukankan      html  css  js  c++  java
  • 关于verilog中if与case语句不完整产生锁存器的问题 分类: FPGA 2014-11-08 17:39 260人阅读 评论(0) 收藏

    在很多地方都能看到,verilog中if与case语句必须完整,即if要加上else,case后要加上default语句,以防止锁存器的发生,接下来就来说说其中原因。

      一,什么是锁存器?锁存器与触发器的区别。

      锁存器与触发器最大的区别在于,锁存器是电平触发,而触发器是边沿触发。锁存器在不锁存数据时,输出随输入变化;但一旦数据锁存时,输入对输出不产生任何影响。

    二,为什么语句的不完整会导致锁存器的产生?

      语句不完整即有某些情况的输入对输出无任何影响,根据锁存器的特征,反映到硬件电路即会产生锁存器。

      举例说明:

     

                                  图一                                                                             图二

      这是一段简单的组合逻辑代码。图一是缺少default的case语句,图二是完整的case语句。

     图一综合后的的RTL级电路为

      即产生了锁存器,而且ISE也会给出警告:

    而图二完整的case语句综合后的RTL级电路为:

     

    产生的是普通的门电路,且警告消失。

    三,为什么要避免产生锁存器?

    关于这个问题,我在网上看到很多资料说是因为锁存器对毛刺敏感。但其实不是这个原因,因为在组合电路中,即便语句完整了,也会对毛刺敏感。而如果你加一个时钟变为时序电路的话,即便你的语句不完整,产生了锁存器(其实在时序电路中,即便语句不完整,也不会产生锁存器),那么也不会对毛刺敏感。

    真正的原因在于FPGA中根本没有锁存器这种东西,也就是说,如果你产生了锁存器的话,将耗费更多的资源来构成它。

    还有一个原因就是不利于时序路径的分析(关于这点我还不懂,待日后更深入的学习再解释)。

     

    以上总结参考了网上很多人的文章,在此表示感谢,而且对这个问题我还有不明白之处,恳请大家批
  • 相关阅读:
    classpath多个包添加
    不错的博客
    ARCGIS10.1 GeoDatabase深入理解:客户端连接与退出地理数据库时系统表的初始化
    ArcGIS Geodatabase版本控制机制的学习总结
    ARCGIS 10.1 发布服务问题以及注意事项汇总
    关于项目外包的一些总结
    ArcGIS与SuperMap的使用比较(1)
    [译]关于JavaScript 作用域你想知道的一切
    Apache 配置ArcGIS server/portal 反向代理
    arcgis server 无法手动删除切片
  • 原文地址:https://www.cnblogs.com/paulweihan/p/4660130.html
Copyright © 2011-2022 走看看