当前位置:   article > 正文

避免latch的产生

避免latch

什么是latch

Latch 其实就是锁存器,是一种在异步电路系统中,对输入信号电平敏感的单元,用来 存储信息。锁存器在数据未锁存时,输出端的信号随输入信号变化,就像信号通过一个缓 冲器,一旦锁存信号有效,则数据被锁存,输入信号不起作用。因此,锁存器也被称为透 明锁存器,指的是不锁存时输出对于输入是透明的。

为什么要避免latch

在同步时序逻辑电路中latch会给电路结构带来不必要的麻烦,但是在异步时序逻辑电路中锁存却是必要的。

常见的latch产生的情况

  • 组合逻辑电路中if语句没有else;

  • 组合逻辑中case的条件不能够完全列举时且不加default,

  • 组合逻辑电路中输出变量赋值给自己

情况一:组合逻辑电路中if语句没有else产生latch

  1. module decorder
  2. (
  3. input wire in_1,
  4. input wire in_2,
  5. input wire in_3,
  6. output reg [7:0] out
  7. );
  8. always@(*)
  9. if({in_1, in_2, in_3} == 3'b000)
  10. out = 8'b0000_0001;
  11. else if({in_1, in_2, in_3} == 3'b001)
  12. out = 8'b0000_0010;
  13. else if({in_1, in_2, in_3} == 3'b010)
  14. out = 8'b0000_0100;
  15. else if({in_1, in_2, in_3} == 3'b011)
  16. out = 8'b0000_1000;
  17. else if ({in_1, in_2, in_3} == 3'b100)
  18. out = 8'b0001_0000;
  19. else if ({in_1, in_2, in_3} == 3'b101)
  20. out = 8'b0010_0000;
  21. else if ({in_1, in_2, in_3} == 3'b110)
  22. out = 8'b0100_0000;
  23. else if ({in_1, in_2, in_3} == 3'b111)
  24. out = 8'b1000_0000;
  25. else//此处如果去掉else,就会产生latch锁存
  26. out = 8'b0000_0001;
  27. endmodule

上述硬件语言仿真的结果为:

 情况二:组合逻辑中case的条件不能完全列举或不写default

  1. module latch_1
  2. (
  3. input wire in_1,
  4. input wire in_2,
  5. input wire in_3,
  6. output reg [7:0] out
  7. );
  8. always@(*)
  9. case({in_1,in_2,in_3})
  10. 3'b000 : out = 8'b0000_0001;
  11. 3'b001 : out = 8'b0000_0010;
  12. 3'b010 : out = 8'b0000_0100;
  13. 3'b011 : out = 8'b0000_1000;
  14. 3'b100 : out = 8'b0001_0000;
  15. 3'b101 : out = 8'b0010_0000;
  16. 3'b110 : out = 8'b0100_0000;
  17. //注释掉最后一种情况,此时case的情况不能完全列举完会产生latch.
  18. //3'b111 : out = 8'b1000_0000;
  19. //default : out = 8'b0000_0001;
  20. endcase
  21. endmodulea

仿真后的硬件电路

情况三:组合逻辑电路中输出变量赋值给自己

  1. module decorder
  2. (
  3. input wire in_1,
  4. input wire in_2,
  5. input wire in_3,
  6. output reg [7:0] out
  7. );
  8. always@(*)
  9. if({in_1, in_2, in_3} == 3'b000)
  10. out = 8'b0000_0001;
  11. else if({in_1, in_2, in_3} == 3'b001)
  12. out = 8'b0000_0010;
  13. else if({in_1, in_2, in_3} == 3'b010)
  14. out = 8'b0000_0100;
  15. else if({in_1, in_2, in_3} == 3'b011)
  16. out = 8'b0000_1000;
  17. else if ({in_1, in_2, in_3} == 3'b100)
  18. out = 8'b0001_0000;
  19. else if ({in_1, in_2, in_3} == 3'b101)
  20. out = 8'b0010_0000;
  21. else if ({in_1, in_2, in_3} == 3'b110)
  22. out = 8'b0100_0000;
  23. else if ({in_1, in_2, in_3} == 3'b111)
  24. out = out;
  25. endmodule

 

、仿真后的硬件电路为

总结

在组合逻辑中一定要避免输出信号处于不定的状态,一定要 让输出无论在任何条件下都有一个已知的状态,就可以避免 Latch 的产生。Latch 作为一种 基本电路单元,会影响到电路的时序性能,应尽量避免使用。

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/787314
推荐阅读
相关标签
  

闽ICP备14008679号