锁存器(Latch)产生的原因:
Latch的危害:
- 输入状态可能多次变化,容易在输入信号产生毛刺,会增加电路的不稳定性;
- 使得静态时序变得更难分析。
1.if结构不完整
例如:
module module_Latch1 (
input in,en,
output reg q );
always @(*) begin
if (en)
q=in;
end
endmodule
由于if语句中缺少else,系统会默认else分支下的输出q会保持不变,即具有寄存器的功能,所以寄存器q会被综合成Latch。
避免方法:
补全if-case结构
module module_Latch1 (
input in,en,
output reg q );
always @(*) begin
if (en)
q=in;
else
q=1'b0;
end
endmodule
赋初值
module tmodule_Latch1 (
input in,en,
output reg q );
always @(*) begin
q=1'b0; //给q赋初值0
if (en)