Deriving input_ready - when can this stage accept? input_ready = !output_valid || output_ready ACCEPTED 0 BUBBLES 0 CYCLE 0 PRODUCER always has data sending THIS STAGE empty DOWNSTREAM taking input_valid = 1 output_valid = 0 input_ready = 1 output_ready = 1 EMPTY - nothing to destroy, so accept The only two cases where I can accept output_valid output_ready input_ready 0 × 1 empty - nothing to destroy 1 1 1 draining - out and in, same edge 1 0 0 full and blocked - must hold In gates output_valid = 0 1 output_ready = 1 tied 0 OR input_ready 1 !0 || 1 = 1 clk output_ready output_valid input_ready accepted delivered
space = play/pause · → = step · R = reset · M = swap rule