原创 zz关于锁存器的一点小结

2009-11-10 10:32 3110 13 13 分类: FPGA/CPLD



  • 不要小看锁存器哦,今天看了点原来的资料,又有了点收获!
    趁次机会一起总结了吧!



  • 定义:
    触发器是指由时钟沿触发的存储器单元。
    锁存器是指一个由信号而不是时钟控制的电平敏感的设备!



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



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



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



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



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



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



  • outout q;
    inout d,clk,set,reset;
    assign q=reset?0set?1clk?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)
    begin
     y2=3'b000;//通过使用默认值,可以避免产生锁存器
     case(sel)
     3'b001: y2=a[0];
     3'b010: y2=a[1];
     3'b100: y2=a[2];
    endcase
    end 




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

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
13
关闭 站长推荐上一条 /3 下一条