Verilog代码综合后的电路中生成锁存器的原因,
一般是因为:
if语句中没有写else项,
case语句中没有写default项
例1:
module latch_example(al, d, q);
input al, d;
output q;
wire al, d;
reg q;
always @(al or d)begin
if(al)
q = d;
end
endmodule
综合后的RTL结构
具体的电路结构
其中LDCE是锁存器的意思
异步复位 | LDCE | 复位后输出0 |
LDPE | 复位后输出1 |
例2 :
module mux(al, d, q);
input al, d;
output q;
wire al, d;
reg q;
always @(al or d)begin
if(al)
q = d;
else
q = 0;
end
endmodule
综合后的RTL结构
综合后的电路图
可以看到if语句没有else就会生成锁存器。同样case语句如果没有default,且没有列出所有情况,也会生成锁存器。