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中根本没有锁存器这种东西,也就是说,如果你产生了锁存器的话,将耗费更多的资源来构成它。

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

     

    以上总结参考了网上很多人的文章,在此表示感谢,而且对这个问题我还有不明白之处,恳请大家批
  • 相关阅读:
    在日本被禁止的コンプガチャ設計
    Starling常见问题解决办法
    Flixel引擎学习笔记
    SQLSERVER中修复状态为Suspect的数据库
    T4 (Text Template Transformation Toolkit)实现简单实体代码生成
    创建Linking Server in SQL SERVER 2008
    Linq to Sql 与Linq to Entities 生成的SQL Script与分页实现
    Linq to Entity 的T4 模板生成代码
    在VisualStudio2008 SP1中调试.net framework 源代码
    使用HttpModules实现Asp.net离线应用程序
  • 原文地址:https://www.cnblogs.com/paulweihan/p/4660130.html
Copyright © 2011-2022 走看看