锁存器的一点总结(转)

  不要小看锁存器哦,今天看了点原来的资料,又有了点收获!
B*bhdt&l0趁次机会一起总结了吧!
  • 定义:
    触发器是指由时钟沿触发的存储器单元。锁存器是指一个由信号而不是时钟控制的电平敏感的设备!

  • 显然锁存器是出现在组合逻辑中的!(但还要和触发器一起归结到时序的范畴)

  • 因为他和触发器一样都是记忆型元件(双稳态)

  • D触发器是有两个D锁存器加非门构成的!

  • 锁存器工作原理:锁存器不同与触发器,他不在锁存数据时,输出端的信号随输入信号变化,就像信号通过一个缓冲器一样,一旦锁存信号起锁存作用时,则数据被锁住,输入信号不起作用。
    锁存器也被称为透明锁存器,指的是不锁存时输出对与输入是透明的!

  • 我用assign描述一个带置位复位的电平敏感型1位锁存器

  • module latch(q,d,clk,set,reset);

  • outout q;

  • inout d,clk,set,reset;

  • assign q=reset?0:(set?1:(clk?d:q));

  • endmodule

  • 在用always描述一个8位的

  • module latch_8(qout,data,clk);

  • output[7:0] qout;

  • input[7:0] data;

  • input clk;

  • reg[7:0] qout;

  • always @(clk or data)

  • begin

  •  if(clk)

  • qout=data;

  • end
    endmodule

  • 可见锁存器是对电平信号敏感的设备,所以容易产生毛刺,通常在设计时应该避免,再说现在的fpga用他也很奢侈啊,毕竟是触发器的资源多啊!资源多啊,但是有时候还是必须用latch的,比如pci,像点阵的图象闪烁也可以用laych解决啊,用刷屏的方法去鬼影啊,以前用单片机做就也是通过调整延时和外接373解决的,靠,说远了!

  • 突然想到了门控时钟,也应该尽量避免的,虽然能减少功耗(就是减少翻转的次数),但是时钟质量不高,有许多潜在的风险,可以用时钟信号同步,用使能信号替代门控的那部分逻辑,完了,这有是个话提,有时间在写个门控的总结吧!

  • 下面的方法消除latch是经常用到的:

  • 在时序逻辑电路中,可以将锁存器为带使能端的D触发器

  • always @(a or b) always @(posedge clk)

  • begin   

  •   begin

  •   if(a==1'b1)   

  •  if(a==1'b1) 

  •  y=b;         

  •   y=b;

  • end            

  •    end

  • 可见D触发的if..else不是缺少else,而是有使能的D触发所以在时序逻辑中这就是使能不是锁存!

  •  

  • 而在组合电路中,可以通过改变代码覆盖所有的条件分支,或者在组合进程中以赋默认值的方式避免锁存器的产生。

  • always @(sel or a)
    y2=3'b000;//通过使用默认值,可以避免产生锁存器

  •  case(sel)

  • 3'b001: y2=a[0];

  • 3'b010: y2=a[1];

  • 3'b100: y2=a[2];
    end 


  • 就是说在纯组合逻辑电路中,通过覆盖所有条件和使用default完善if else等来避免锁存的产生,这跟在时序中使用D触发使能的做法还是有区别的

  • 版权属原作者

你可能感兴趣的:(职场,休闲,锁存器)