zoukankan      html  css  js  c++  java
  • 时序电路—之锁存器

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

    一,什么是锁存器?锁存器与触发器的区别。http://www.eefocus.com/liuyuxue/blog/13-11/300280_d7008.html

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

    锁存器和触发器区别

    http://wenku.baidu.com/link?url=co1YvI0Ktb7sItCPzqNXiy7SXyWigv7uAnWaL3EtOT_7T7XsYOXIcfCTlYvlqPgPhy3bBpbeiQAcM2hVAUbK9qiJxRI3F0JctHaLCsWrYiS(写的挺好的)

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

    解:

    老阮 (2014-10-21 19:30:10)
    1、时序电路,生成触发器,触发器是有使能端的,使能端无效时数据不变,这是触发器的特性。
    2、组合逻辑,由于数据要保持不变,只能通过锁存器来保存。
    楼主位的第二个代码就是在enable为低时,数据不变,因此要生成锁存器。 第一个代码,由于是时序逻辑,生成的触发器在enable无效时就可以保存数据。跟锁存器无关。
     
    个人理解: 所谓生成latch其实是针对使用always语句描述一个组合逻辑而言,因为如果描述时序逻辑总是使用时钟或者时钟+复位作为敏感列表条件,所生成的电路总是组合逻辑+DFF;如果是描述组合逻辑,敏感列表中必然没有时钟复位,而是组合逻辑的输入信号。在FPGA设计,避免使用latch,不利于时序分析和仿真。 楼上有提到latch比DFF省资源, 这个在FPGA设计中其实还好, 因为在FPGA中DFF就是一个专用的硬件资源,并且数量也比较多。

    使用always描述组合逻辑时,好的习惯是使用always @(*)作为敏感列表, 并且需要检查每个分支都有明确的赋值,从而避免生成latch.
     
    我是这么理解的,在一份资料看的,
    时序电路=组合逻辑电路+储存电路;
    储存电路有两个:锁存器(latch)和触发器;
    边沿触发产生触发器,
    电平触发产生锁存器,
    多个触发器组成寄存器,

    当描述的是时序电路,寄存器变量对应的寄存器,
    描述的是完整的组合逻辑电路,对应为硬件连线,
    当描述的是不完整组合逻辑,则寄存器对应的是锁存
     
     
     
    总结:
    1,存储单元按照触发的方式分为电平触发和边沿触发,电平触发的为锁存器,边沿触发的触发器。                                                                                                     2,对于if,case的完整性,@老阮已经说的很清楚了,在FPGA建议使用触发器。                                                                                                                                                                                   
    转载自:http://www.cnblogs.com/rrttp/p/5945082.html
  • 相关阅读:
    FZU 2098 刻苦的小芳(卡特兰数,动态规划)
    卡特兰数总结
    FZU 1064 教授的测试(卡特兰数,递归)
    HDU 4745 Two Rabbits(区间DP,最长非连续回文子串)
    Java 第十一届 蓝桥杯 省模拟赛 正整数的摆动序列
    Java 第十一届 蓝桥杯 省模拟赛 反倍数
    Java 第十一届 蓝桥杯 省模拟赛 反倍数
    Java 第十一届 蓝桥杯 省模拟赛 反倍数
    Java 第十一届 蓝桥杯 省模拟赛 凯撒密码加密
    Java 第十一届 蓝桥杯 省模拟赛 凯撒密码加密
  • 原文地址:https://www.cnblogs.com/chengqi521/p/7446999.html
Copyright © 2011-2022 走看看