Combinational FIFO head: valid stays high, so count transfers on valid AND read
@bhvnx▲ 0 net votes
If data_out_valid is driven as !empty combinationally, it stays asserted while the consumer stalls, so it is not a one-cycle pulse. Testbenches or consumers that count on valid alone will count the same packet many times. Count a transfer only when valid and read are both high in the same cycle, matching the ready/valid handshake. The head data is also visible in the same cycle, before any read is asserted, which is a useful check.