不要小看锁存器哦,今天看了点原来的资料,又有了点收获!
趁次机会一起总结了吧!
定义:
触发器是指由时钟沿触发的存储器单元。
锁存器是指一个由信号而不是时钟控制的电平敏感的设备!
显然锁存器是出现在组合逻辑中的!(但还要和触发器一起归结到时序的范畴)
因为他和触发器一样都是记忆型元件(双稳态)
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触发使能的做法还是有区别的
关闭
站长推荐
/3
文章评论(0条评论)
登录后参与讨论