A hardware-to-software compiler is provided that runs an optimization on a
circuit implemented in programmable logic. The optimization allows
portions of the program implemented by the circuit to be executed via
software. A communication interface between the hardware and software is
provided that allows for efficient data flow. A communication channel is
provided that can be effected as bidirectional using a unidirectional
transport medium (e.g., PCI bus). Communication between devices is done
through pop interface buffers and push interface buffers on either side
of the communication channel.