锁存器是电平触发的控制器件,这与边沿触发的触发器有着本质的区别。
功能
一个锁存器可以存储1bit信息,通常4位\8位锁存器一起使用。当锁存器为锁定时,输出信号随着输入信号变化,就像信号通过一个缓冲器,一旦锁存信号有效,则数据锁存,输入信号不起作用。
地位
锁存器与触发器是同一级别的器件,都是基本的存储单元,但锁存器是电平触发,而触发器是边沿触发,都可以存储数据。意思是锁存器是组合逻辑的,触发器在时序电路中使用。
什么情况下会生成锁存器?
组合逻辑中,如存在某个信号在某条件下需要保持原值,就会生成锁存器。即组合逻辑回环会产生Latch。
锁存器的代码 锁存器的模型 组合逻辑描述2:加法
但这是不可以的,组合逻辑中是不可能有回路的,要求组合逻辑都是正向的,而不能有feedback。严格来讲,这段代码时可以被编译和实现出电路的,但是编译器会给出警告,因为这段代码的结果是没有实际意义的,根本不知道结果是多少。
此时会产生问题,生成的加法电路在一定时间内执行多少次呢?这样会导致未知结果的产生。
如果此时尝试综合,综合工具会将latch优化掉,会造成前仿真、后仿真结果的不一致。
描述方式3:异步复位时初始值为变量
改为
这段代码表面上是按照触发器的方式写代码,实际上,在异步复位阶段,data的输出依然由外界输入rst_var事实控制,并有可能保持,因此综合后产生latch。按如下修改后,可消除latch。
锁存器的危害
1:对时序的影响:非latch的的组合逻辑适用时序模型分析,对latch时序很难分析,因为电平触发,latch的输出高低时间不定,与clk不同步。
2:对毛刺敏感,不能异步复位,上电后处于不定态
3:FPGA芯片中都是LUT与寄存器,若生成latch反而需要更多的资源
如何避免latch
1:在组合逻辑中插入触发器
2:避免组合逻辑中某信号保持的场景
就是消除组合逻辑回环,确实需要回环的地方交给reg完成。