锁存器latch的产生有3种情况(均产生在组合逻辑电路中,时序电路中不会产生latch但可用reg当作锁存器锁存数据提供给user) 1、在if-else 条件语句中,判断的情况不完整 eg:always@(*)begin if(cnt == 0 ) begin a = 0 ; end else if (cnt == 1) begin a= 1 ; end else if (cnt == 2) begin a = 2 ; end 此时,如果cnt是个2位宽的计数器,范围从0~3,组合逻辑内没有考虑3的else情况,则会产生latch。 2、在case分支选择语句中,如果case的分支条件不完整时,即没有default情况下,综合器会默认生成latch。 3、在组合逻辑中,我们常用always@(*) ,用*代替敏感列表,如果不用*,而是列举表达式,如always@(clk,rst,d) 如果用户本意是该alwasy有三个事件名(信号名),但设计时always@(clk,rst),没有考虑d,则同样会产生latch。