Synthesis of my decoder reports an inferred latch on y. The block is always @* begin if (en) y = d; end. A second block uses a case on a 2-bit sel with items for 2'b00, 2'b01 and 2'b10 and no default, and it produces latches on two more outputs. I intended pure combinational logic in both.
Why does leaving out an else or a case item create storage, why are tools so unhappy about latches in an FPGA design, and what coding habits avoid them reliably?




