原创 Latch 和 Register 区别 ?编程时如何避免锁存器 ?

2014-2-20 10:43 3221 10 10 分类: FPGA/CPLD 文集: FPGA

1、锁存器Latch 和 触发器flipflop

 锁存器能根据输入端把结果自行保持;触发器是指由时钟边沿触发的存储器单元;

 由敏感信号(电平,边沿)控制的锁存器就是触发器;

2、写电路时,产生锁存器的原因

 if语句中,没有写else,默认保持原值,产生锁存器,可能不是想要的结果;

 case语句中,没有写完整default项,也容易产生锁存器;

 例子:

 always@(a or b)

begin

if(a) q=b;

end

产生了锁存器,如下

20140220102733982.jpg

没有锁存器的情况

always@(a or b)

begin

if(a) q=b;

else q=0;

end

20140220102839527.jpg

3、避免使用D锁存器,尽量使用D触发器

D锁存器

module test_latch(y, a, b);

output y; input a; input b; reg y;

always @(a or b) begin 

  if(a==1’b1) 

  y=b;

end endmodule

20140220103335148.jpg

D触发器

module test_d(y,clk,a,b);

output y; input clk; input a; input b; reg y;
always @(posedge clk) begin
  if(a==1'b1)   

 y=b;

end endmodule
 20140220104242918.jpg
 
 
从图8可知,例10对应的电路是D触发器。信号a被综合成D触发器的使能端,只有在时钟上沿到来且a为高时,b信号的值才能传递给a;只要在时钟上升沿期间信号b是稳定,即使在其他时候b还有毛刺,经过D触发器后数据是稳定的,毛刺被滤除。



文章评论0条评论)

登录后参与讨论
我要评论
0
10
关闭 站长推荐上一条 /2 下一条